Ce référentiel contient une implémentation officielle de Pytorch pour le document suivant
Apprendre des réseaux convolutionnels efficaces via le minet de réseau (ICCV 2017).
Zhuang Liu, Jianguo Li, Zhiqiang Shen, Gao Huang, Shoumeng Yan, Changshi Zhang.
Implémentation originale: minceur dans la torche.
Le code est basé sur le rotation du pytorch. Nous ajoutons la prise en charge de Resnet et densenet.
Citation:
@InProceedings{Liu_2017_ICCV,
author = {Liu, Zhuang and Li, Jianguo and Shen, Zhiqiang and Huang, Gao and Yan, Shoumeng and Zhang, Changshui},
title = {Learning Efficient Convolutional Networks Through Network Slimming},
booktitle = {The IEEE International Conference on Computer Vision (ICCV)},
month = {Oct},
year = {2017}
}
Torch V0.3.1, TorchVision V0.2.0
Nous introduisons la couche channel selection pour aider l'élagage de Resnet et densenet. Cette couche est facile à mettre en œuvre. Il stocke un indexes paramètre qui est initialisé sur un vecteur tout-1. Pendant l'élagage, il définira quelques places sur 0 qui correspondent aux canaux élagués.
L'argument dataset spécifie quel ensemble de données à utiliser: cifar10 ou cifar100 . L'argument arch spécifie l'architecture à utiliser: vgg , resnet ou densenet . La profondeur est choisie pour être la même que les réseaux utilisés dans le papier.
python main.py --dataset cifar10 --arch vgg --depth 19
python main.py --dataset cifar10 --arch resnet --depth 164
python main.py --dataset cifar10 --arch densenet --depth 40python main.py -sr --s 0.0001 --dataset cifar10 --arch vgg --depth 19
python main.py -sr --s 0.00001 --dataset cifar10 --arch resnet --depth 164
python main.py -sr --s 0.00001 --dataset cifar10 --arch densenet --depth 40python vggprune.py --dataset cifar10 --depth 19 --percent 0.7 --model [PATH TO THE MODEL] --save [DIRECTORY TO STORE RESULT]
python resprune.py --dataset cifar10 --depth 164 --percent 0.4 --model [PATH TO THE MODEL] --save [DIRECTORY TO STORE RESULT]
python denseprune.py --dataset cifar10 --depth 40 --percent 0.4 --model [PATH TO THE MODEL] --save [DIRECTORY TO STORE RESULT] Le modèle taillé sera nommé pruned.pth.tar .
python main.py --refine [PATH TO THE PRUNED MODEL] --dataset cifar10 --arch vgg --depth 19 --epochs 160Les résultats sont assez proches de l'article d'origine, dont les résultats sont produits par Torch. Notez qu'en raison de différentes graines aléatoires, il peut y avoir jusqu'à ~ 0,5% / 1,5% de fluctation sur les ensembles de données CIFAR-10/100 dans différentes séries, selon nos expériences.
| CIFAR10-VGG | Base de base | Sparsity (1E-4) | Pruneau (70%) | Affinement-160 (70%) |
|---|---|---|---|---|
| TOP1 EXACTION (%) | 93.77 | 93.30 | 32,54 | 93.78 |
| Paramètres | 20.04m | 20.04m | 2,25 m | 2,25 m |
| CIFAR10-RESNET-164 | Base de base | Sparsity (1E-5) | Pruneau (40%) | Affinement-160 (40%) | Pruneau (60%) | Affinement-160 (60%) |
|---|---|---|---|---|---|---|
| TOP1 EXACTION (%) | 94.75 | 94.76 | 94.58 | 95.05 | 47.73 | 93.81 |
| Paramètres | 1,71 m | 1,73 m | 1,45 m | 1,45 m | 1,12 m | 1,12 m |
| Cifar10-densenet-40 | Base de base | Sparsity (1E-5) | Pruneau (40%) | Affinement-160 (40%) | Pruneau (60%) | Affinement-160 (60%) |
|---|---|---|---|---|---|---|
| TOP1 EXACTION (%) | 94.11 | 94.17 | 94.16 | 94.32 | 89.46 | 94.22 |
| Paramètres | 1,07m | 1,07m | 0,69 m | 0,69 m | 0,49 m | 0,49 m |
| CIFAR100-VGG | Base de base | Sparsity (1E-4) | Taille (50%) | Affinement-160 (50%) |
|---|---|---|---|---|
| TOP1 EXACTION (%) | 72.12 | 72.05 | 5.31 | 73.32 |
| Paramètres | 20.04m | 20.04m | 4,93 m | 4,93 m |
| CIFAR100-RESNET-164 | Base de base | Sparsity (1E-5) | Pruneau (40%) | Affinement-160 (40%) | Pruneau (60%) | Affinement-160 (60%) |
|---|---|---|---|---|---|---|
| TOP1 EXACTION (%) | 76.79 | 76.87 | 48.0 | 77.36 | --- | --- |
| Paramètres | 1,73 m | 1,73 m | 1,49m | 1,49m | --- | --- |
Remarque: Pour les résultats de l'élagage de 60% des canaux pour RESNET164-CIFAR100, dans cette implémentation, parfois certaines couches sont toutes élaguées et il y aurait une erreur. Cependant, nous fournissons également une implémentation de masque où nous appliquons un masque au facteur de mise à l'échelle dans la couche BN. Pour Mask Implementaion, lors de l'élagage de 60% des canaux dans RESNET164-CIFAR100, nous pouvons également former le réseau élagué.
| CIFAR100-DENSENET-40 | Base de base | Sparsity (1E-5) | Pruneau (40%) | Affinement-160 (40%) | Pruneau (60%) | Affinement-160 (60%) |
|---|---|---|---|---|---|---|
| TOP1 EXACTION (%) | 73.27 | 73.29 | 67.67 | 73.76 | 19.18 | 73.19 |
| Paramètres | 1.10m | 1.10m | 0,71 m | 0,71 m | 0,50 m | 0,50 m |
SunMJ15 sur gmail.com Liuzhuangthu sur gmail.com