Vous pouvez trouver différents types de blocs non locaux dans lib / .
Vous pouvez visualiser la carte d'attention non_locale en suivant les étapes en cours ci-dessous.
Le code est testé sur l'ensemble de données MNIST. Vous pouvez sélectionner le type de bloc non local dans lib / réseau.py .
S'il y a quelque chose qui ne va pas dans mon code, veuillez me contacter, merci!










Sélectionnez le type de bloc non local dans lib / réseau.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
Exécutez Demo_mnist_Train.py avec un GPU ou Multi GPU pour former le réseau. Ensuite, les poids seront économisés en poids / .
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
Exécutez NL_MAP_SAVE.PY pour enregistrer NL_MAP d'un échantillon de test dans NL_MAP_VIS .
CUDA_VISIBLE_DEVICES=0,1 python nl_map_save.py
Venez dans nl_map_vis / et exécutez nl_map_vis.py pour visualiser le nl_map. (Conseils: Si le type non local que vous sélectionnez est non_local_concatenation ou non_local_dot_product (sans opération softmax), vous devrez peut-être normaliser NL_MAP dans le code de visualisation)
python nl_map_save.py
Déterminez comment implémenter le type de concaténation et ajouter le code à lib / .
Correction du bug dans lib / non_local.py (ancienne version) lors de l'utilisation du multi-GPU. Quelqu'un partage la raison avec moi, et vous pouvez le trouver ici.
Corrigez l'erreur de la mise en commun 3D dans lib / non_local.py (ancienne version). Appréciez la protéine27 pour l'avoir signalé.
Pour plus de commodité, j'ai divisé la lib / non_local.py en quatre fichiers Python et déplace les anciennes versions ( lib / non_loca.py et lib / non_local_simple_version.py ) dans lib / backup / .
Modifiez le code pour prendre en charge Pytorch 0.4.1 et déplacez le code prenant en charge Pytorch 0.3.1
à non local_pytorch_0.3.1 / .
Testez le code avec Pytorch 1.1.0 et il fonctionne.
Déplacez le code prenant en charge Pytorch 0.4.1 et 1.1.0 vers non-Local_pytorch_0.4.1_to_1.1.0 / (en fait, je pense qu'il peut également prendre en charge Pytorch 1.2.0).
Afin de visualiser NL_MAP, certains code ont été légèrement modifiés. Le code NL_MAP_SAVE.py est ajouté pour enregistrer NL_MAP (deux calques non locales) d'un échantillon de test. Le code non-local_pytorch / nl_map_vis.py est ajouté pour visualiser nl_map. Besieds, le code prend en charge Pytorch 1.2.0.
Le code fonctionne également bien dans Pytorch 1.4.0 .
Le code fonctionne également bien dans Pytorch 1.6.0 . Ajoutez Demo_Mnist_Amp_Train_With_Single_Gpu.py avec une formation automatique de précision mixte (FP16), pris en charge par Pytorch 1.6.0 . Il peut réduire la mémoire du GPU pendant la formation. De plus, si vous utilisez le GPU 2080TI (noyaux du tenseur), la vitesse d'entraînement peut être augmentée. Plus de détails (comme comment s'entraîner avec plusieurs GPU) peuvent être trouvés ici
Vérifiez que le code fonctionne bien dans Pytorch 1.7.0 .
Vérifiez que le code fonctionne bien dans Pytorch 1.8.1 .
Vérifiez que le code fonctionne bien dans Pytorch 1.9.0 .
Vérifiez que le code fonctionne bien dans Pytorch 1.10.1 .
Vérifiez que le code fonctionne bien dans Pytorch 1.11.0 .
Vérifiez que le code fonctionne bien dans Pytorch 1.12.0 .
Supprimer redondant le code net.train() dans les fichiers de code de formation.
Vérifiez que le code fonctionne bien dans Pytorch 1.13.0 et 2.0.0 .