您可以在lib/中找到不同种类的非本地块。
您可以按照下面显示的运行步骤可视化非局部注意图。
该代码在MNIST数据集上进行了测试。您可以在lib/network.py中选择非本地块的类型。
如果我的代码有问题,请与我联系,谢谢!










在lib/network.py中选择非本地块的类型。
from lib.non_local_concatenation import NONLocalBlock2D
from lib.non_local_gaussian import NONLocalBlock2D
from lib.non_local_embedded_gaussian import NONLocalBlock2D
from lib.non_local_dot_product import NONLocalBlock2D
使用一个GPU或多GPU运行demo_mnist_train.py来训练网络。然后,重量将节省重量/ 。
CUDA_VISIBLE_DEVICES=0,1 python demo_MNIST_train.py
# Or train with Automatic Mixed Precision based on pytorch 1.6.0
CUDA_VISIBLE_DEVICES=0 python demo_MNIST_AMP_train_with_single_gpu.py
运行nl_map_save.py以在nl_map_vis中保存一个测试样本的nl_map。
CUDA_VISIBLE_DEVICES=0,1 python nl_map_save.py
进入nl_map_vis/并运行nl_map_vis.py以可视化nl_map。 (提示:如果您选择的非本地类型是non_local_concatenation或non_local_dot_product (无softmax操作),则可能需要在可视化代码中标准化nl_map)
python nl_map_save.py
找出如何实现串联类型,然后将代码添加到lib/ 。
使用多GPU时,将错误/non_local.py (旧版本)中的错误修复。有人与我分享原因,您可以在这里找到它。
修复lib/non_local.py (旧版本)中3D池的错误。感谢蛋白27指出它。
为了方便起见,我将lib/non_local.py分为四个python文件,然后将旧版本( lib/non_loca.py和lib/non_local_simple_version.py )移动到lib/backup/ 。
修改代码以支持Pytorch 0.4.1,然后移动支持Pytorch 0.3.1的代码
到non-local_pytorch_0.3.1/ 。
用Pytorch 1.1.0测试代码,并且可以使用。
将支持Pytorch 0.4.1和1.1.0的代码移动到non-local_pytorch_0.4.4.1_to_1.1.1.0/ (实际上,我认为它也可以支持Pytorch 1.2.0)。
为了可视化nl_map,一些代码已被稍作修改。添加代码nl_map_save.py以保存一个测试样本的NL_MAP(两个非本地层)。添加代码non-local_pytorch/nl_map_vis.py以可视化nl_map。 besieds,代码是支持Pytorch 1.2.0。
该代码在Pytorch 1.4.0中也很好地工作。
该代码在Pytorch 1.6.0中也很好地工作。添加demo_mnist_amp_train_with_single_gpu.py使用自动混合精度训练(FP16),由Pytorch 1.6.0支持。它可以减少训练期间的GPU记忆。更重要的是,如果您使用GPU 2080TI(张量芯),则可以提高训练速度。可以在此处找到更多细节(例如如何使用多个GPU培训)
验证该代码在Pytorch 1.7.0中效果很好。
验证代码在Pytorch 1.8.1中效果很好。
验证代码在Pytorch 1.9.0中效果很好。
验证代码在Pytorch 1.10.1中效果很好。
验证代码在Pytorch 1.11.0中效果很好。
验证代码在Pytorch 1.12.0中效果很好。
删除培训代码文件中的冗余net.train() 。
验证该代码在Pytorch 1.13.0和2.0.0中效果很好。