Реализация ShuffleNet
в PyTorch. ShuffleNet
— это эффективная архитектура сверточной нейронной сети для мобильных устройств. По данным газеты, он на небольшой процент превосходит Google MobileNet.
В одном предложении ShuffleNet
— это модель, подобная ResNet, которая использует остаточные блоки (называемые ShuffleUnits
), при этом основным нововведением является использование поточечных групповых сверток, или 1x1, в отличие от обычных поточечных сверток.
Клонировать репо:
git clone https://github.com/jaxony/ShuffleNet.git
Используйте модель, определенную в model.py
:
from model import ShuffleNet
# running on MNIST
net = ShuffleNet ( num_classes = 10 , in_channels = 1 )
Обучена на ImageNet (на примере PyTorch ImageNet) с groups=3
и без множителя канала. На тестовом наборе 62,2% получили топ-1 и 84,2% топ-5. К сожалению, это не сопоставимо с таблицей 5 статьи, поскольку они не запускают сеть с такими настройками, но она находится где-то между сетью с groups=3
и половина количества каналов (42,8% топ-1) и сеть с таким же количеством каналов, но groups=8
(32,4% топ-1). Предварительно обученный государственный словарь можно найти здесь в следующем формате:
{
'epoch': epoch + 1,
'arch': args.arch,
'state_dict': model.state_dict(),
'best_prec1': best_prec1,
'optimizer' : optimizer.state_dict()
}
Примечание: обучение проводилось с настройками ImageNet по умолчанию, которые на самом деле отличаются от режима обучения, описанного в статье. Ожидается повторный запуск с этими настройками (и groups=8
).