Una implementación de ShuffleNet
en PyTorch. ShuffleNet
es una arquitectura de red neuronal convolucional eficiente para dispositivos móviles. Según el periódico, supera en un pequeño porcentaje a MobileNet de Google.
En una frase, ShuffleNet
es un modelo similar a ResNet que utiliza bloques residuales (llamados ShuffleUnits
), siendo la principal innovación el uso de convoluciones de grupo puntuales, o 1x1, en lugar de convoluciones puntuales normales.
Clona el repositorio:
git clone https://github.com/jaxony/ShuffleNet.git
Utilice el modelo definido en model.py
:
from model import ShuffleNet
# running on MNIST
net = ShuffleNet ( num_classes = 10 , in_channels = 1 )
Entrenado en ImageNet (usando el ejemplo de PyTorch ImageNet) con groups=3
y sin multiplicador de canales. En el conjunto de prueba, obtuvo un 62,2 % entre los primeros 1 y un 84,2 % entre los primeros 5. Desafortunadamente, esto no es comparable con la Tabla 5 del documento, porque no ejecutan una red con estas configuraciones, pero está en algún punto entre la red con groups=3
y la mitad del número de canales (42,8% top 1) y la red con el mismo número de canales pero groups=8
(32,4% top 1). El diccionario de estado previamente entrenado se puede encontrar aquí, en el siguiente formato:
{
'epoch': epoch + 1,
'arch': args.arch,
'state_dict': model.state_dict(),
'best_prec1': best_prec1,
'optimizer' : optimizer.state_dict()
}
Nota: entrenado con la configuración predeterminada de ImageNet, que en realidad es diferente del régimen de entrenamiento descrito en el documento. Pendiente de volver a ejecutar con esas configuraciones (y groups=8
).