您可以在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中效果很好。