Une mise en œuvre de Senet, proposée dans les réseaux de compression et d'excitation par Jie Hu, Li Shen et Gang Sun, qui sont les gagnants du concours de classification ILSVRC 2017.
Maintenant, SE-Resnet (18, 34, 50, 101, 152/20, 32) et SE-inception-V3 sont mis en œuvre.
python cifar.py exécute SE-RESNET20 avec un ensemble de données CIFAR10.
python imagenet.py et python -m torch.distributed.launch --nproc_per_node=${NUM_GPUS} imagenet.py Exécuter le setnet50 avec Imagenet (2012)
~/.torch/data ou définir une variable Enviroment IMAGENET_ROOT=${PATH_TO_YOUR_IMAGENET}CUDA_VISIBLE_DEVICES . (par exemple CUDA_VISIBLE_DEVICES=1,2 pour utiliser GPU 1 et 2)Pour SE-inception-V3, la taille de l'entrée doit être 299x299 comme création d'origine.
La base de code est testée sur le paramètre suivant.
Pour exécuter cifar.py ou imagenet.py , vous avez besoin
pip install git+https://github.com/moskomule/[email protected] Vous pouvez utiliser SE-RESNET ( se_resnet{20, 56, 50, 101} ) via torch.hub .
import torch . hub
hub_model = torch . hub . load (
'moskomule/senet.pytorch' ,
'se_resnet20' ,
num_classes = 10 )De plus, un modèle SE-Resnet50 pré-entraîné est disponible.
import torch . hub
hub_model = torch . hub . load (
'moskomule/senet.pytorch' ,
'se_resnet50' ,
pretrained = True ,) python cifar.py [--baseline]
Notez que l'ensemble de données CIFAR-10 devrait être sous ~/.torch/data .
| Resnet20 | SE-RESNET20 (réduction 4 ou 8) | |
|---|---|---|
| Max. précision de test | 92% | 93% |
python [-m torch.distributed.launch --nproc_per_node=${NUM_GPUS}] imagenet.py
L'option [-m ...] est destinée à une formation distribuée. Notez que l'ensemble de données ImageNet devrait être sous ~/.torch/data ou spécifié sous le nom IMAGENET_ROOT=${PATH_TO_IMAGENET} .
Le taux d'apprentissage initial et la taille du mini-lots sont différents de la version d'origine en raison de ma ressource de calcul .
| Resnet | SE-RESNET | |
|---|---|---|
| Max. Précision du test (TOP1) | 76,15% (*) | 77,06% (**) |
(*): Resnet-50 dans TorchVision
(**): Lorsque vous utilisez imagenet.py avec le réglage --distributed sur 8 GPU. Le poids est disponible.
# !wget https://github.com/moskomule/senet.pytorch/releases/download/archive/seresnet50-60a8950a85b2b.pkl
senet = se_resnet50 ( num_classes = 1000 )
senet . load_state_dict ( torch . load ( "seresnet50-60a8950a85b2b.pkl" ))Je ne peux pas maintenir ce référentiel activement, mais toutes les contributions sont les bienvenues. N'hésitez pas à envoyer des PR et des problèmes.
papier
Implémentation de la CAFE des auteurs