lib/で異なる種類の非ローカルブロックを見つけることができます。
以下に示すランニングステップに従って、non_localの注意マップを視覚化できます。
コードは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
ネットワークをトレーニングするために、1つの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で1つのテストサンプルのnl_mapを保存します。
CUDA_VISIBLE_DEVICES=0,1 python nl_map_save.py
nl_map_vis/ and nl_map_vis.pyを実行してnl_mapを視覚化します。 (ヒント:選択した非ローカルタイプがnon_local_concatenationまたはnon_local_dot_product (softmax操作なし)である場合、視覚化コードのnl_mapを正規化する必要があるかもしれません)
python nl_map_save.py
連結タイプを実装する方法を把握し、 lib/にコードを追加します。
Multi-GPUを使用する場合、 lib/non_local.py (古いバージョン)のバグを修正します。誰かが私と理由を共有しています、そしてあなたはここでそれを見つけることができます。
lib/non_local.py (古いバージョン)の3Dプーリングのエラーを修正します。それを指摘してくれてProtein27に感謝します。
便利なため、 lib/non_local.pyを4つの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.1_TO_1.1.0/に移動します(実際、Pytorch 1.2.0もサポートできると思います)。
NL_MAPを視覚化するために、一部のコードがわずかに変更されています。コードnl_map_save.pyは、1つのテストサンプルのnl_map(2つの非ローカル層)を保存するために追加されます。コードnon-local_pytorch/nl_map_vis.pyがNL_MAPを視覚化するために追加されます。 BESIDS、このコードはPytorch 1.2.0をサポートしています。
このコードは、Pytorch 1.4.0でもうまく機能します。
このコードは、Pytorch 1.6.0でもうまく機能します。 Pytorch 1.6.0でサポートされている自動混合精密トレーニング(FP16)を使用して、 demo_mnist_amp_train_with_single_gpu.pyを追加します。トレーニング中に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でコードがうまく機能することを確認します。