Eine Implementierung von ShuffleNet
in PyTorch. ShuffleNet
ist eine effiziente Faltungs-Neuronale Netzwerkarchitektur für mobile Geräte. Dem Papier zufolge übertrifft es Googles MobileNet um einen kleinen Prozentsatz.
In einem Satz ist ShuffleNet
ein ResNet-ähnliches Modell, das Restblöcke ( ShuffleUnits
genannt) verwendet, wobei die Hauptinnovation die Verwendung von punktweisen oder 1x1- Gruppenfaltungen im Gegensatz zu normalen punktweisen Faltungen ist.
Klonen Sie das Repo:
git clone https://github.com/jaxony/ShuffleNet.git
Verwenden Sie das in model.py
definierte Modell:
from model import ShuffleNet
# running on MNIST
net = ShuffleNet ( num_classes = 10 , in_channels = 1 )
Trainiert auf ImageNet (unter Verwendung des PyTorch ImageNet-Beispiels) mit groups=3
und ohne Kanalmultiplikator. Auf dem Testset wurden 62,2 % Top 1 und 84,2 % Top 5 erreicht. Leider ist dies nicht mit Tabelle 5 des Papiers vergleichbar, da sie kein Netzwerk mit diesen Einstellungen betreiben, aber es liegt irgendwo zwischen dem Netzwerk mit groups=3
und die halbe Anzahl an Kanälen (42,8 % Top 1) und das Netzwerk mit der gleichen Anzahl an Kanälen, aber groups=8
(32,4 % Top 1). Das vorab trainierte Zustandswörterbuch finden Sie hier im folgenden Format:
{
'epoch': epoch + 1,
'arch': args.arch,
'state_dict': model.state_dict(),
'best_prec1': best_prec1,
'optimizer' : optimizer.state_dict()
}
Hinweis: Trainiert mit den Standard-ImageNet-Einstellungen, die sich tatsächlich von dem im Dokument beschriebenen Trainingsprogramm unterscheiden. Wird noch einmal mit diesen Einstellungen (und groups=8
) ausgeführt.