Une implémentation de ShuffleNet
dans PyTorch. ShuffleNet
est une architecture de réseau neuronal convolutif efficace pour les appareils mobiles. Selon le journal, il surpasse MobileNet de Google d'un petit pourcentage.
En une phrase, ShuffleNet
est un modèle de type ResNet qui utilise des blocs résiduels (appelés ShuffleUnits
), la principale innovation étant l'utilisation de convolutions de groupe ponctuelles, ou 1x1, par opposition aux convolutions ponctuelles normales.
Clonez le dépôt :
git clone https://github.com/jaxony/ShuffleNet.git
Utilisez le modèle défini dans model.py
:
from model import ShuffleNet
# running on MNIST
net = ShuffleNet ( num_classes = 10 , in_channels = 1 )
Formé sur ImageNet (en utilisant l'exemple PyTorch ImageNet) avec groups=3
et aucun multiplicateur de canal. Sur l'ensemble de tests, j'ai obtenu 62,2 % de top 1 et 84,2 % de top 5. Malheureusement, ce n'est pas comparable au tableau 5 de l'article, car ils ne gèrent pas de réseau avec ces paramètres, mais il se situe quelque part entre le réseau avec groups=3
et la moitié du nombre de chaînes (42,8% top 1) et le réseau avec le même nombre de chaînes mais groups=8
(32,4% top 1). Le dictionnaire d'états pré-entraînés peut être trouvé ici, au format suivant :
{
'epoch': epoch + 1,
'arch': args.arch,
'state_dict': model.state_dict(),
'best_prec1': best_prec1,
'optimizer' : optimizer.state_dict()
}
Remarque : formé avec les paramètres ImageNet par défaut, qui sont en fait différents du régime de formation décrit dans l'article. En attendant de fonctionner à nouveau avec ces paramètres (et groups=8
).