Uma implementação do ShuffleNet
no PyTorch. ShuffleNet
é uma arquitetura de rede neural convolucional eficiente para dispositivos móveis. Segundo o jornal, ele supera o MobileNet do Google em uma pequena porcentagem.
Em uma frase, ShuffleNet
é um modelo semelhante ao ResNet que usa blocos residuais (chamados ShuffleUnits
), com a principal inovação sendo o uso de convoluções de grupo pontuais, ou 1x1, em oposição às convoluções pontuais normais.
Clone o repositório:
git clone https://github.com/jaxony/ShuffleNet.git
Use o modelo definido em model.py
:
from model import ShuffleNet
# running on MNIST
net = ShuffleNet ( num_classes = 10 , in_channels = 1 )
Treinado em ImageNet (usando o exemplo PyTorch ImageNet) com groups=3
e sem multiplicador de canal. No conjunto de teste, obteve 62,2% do top 1 e 84,2% do top 5. Infelizmente, isso não é comparável à Tabela 5 do artigo, porque eles não executam uma rede com essas configurações, mas está em algum lugar entre a rede com groups=3
e metade do número de canais (42,8% top 1) e a rede com o mesmo número de canais mas groups=8
(32,4% top 1). O dicionário de estado pré-treinado pode ser encontrado aqui, no seguinte formato:
{
'epoch': epoch + 1,
'arch': args.arch,
'state_dict': model.state_dict(),
'best_prec1': best_prec1,
'optimizer' : optimizer.state_dict()
}
Nota: treinado com as configurações padrão do ImageNet, que na verdade são diferentes do regime de treinamento descrito no artigo. Pendente em execução novamente com essas configurações (e groups=8
).