Il s'agit d'un terrain de jeu pour les débutants de Pytorch, qui contient des modèles prédéfinis sur l'ensemble de données populaire. Actuellement, nous soutenons
Voici un exemple pour l'ensemble de données MNIST. Cela téléchargera automatiquement l'ensemble de données et le modèle pré-formé.
import torch
from torch.autograd import Variable
from utee import selector
model_raw, ds_fetcher, is_imagenet = selector.select('mnist')
ds_val = ds_fetcher(batch_size=10, train=False, val=True)
for idx, (data, target) in enumerate(ds_val):
data = Variable(torch.FloatTensor(data)).cuda()
output = model_raw(data)
De plus, si vous souhaitez former le modèle MLP sur MNIST, exécutez simplement python mnist/train.py
python3 setup.py develop --user
Nous fournissons un ensemble de données de validation ImageNet précomputé avec une taille 224x224x3. Nous redimensions d'abord la taille de l'image plus courte à 256, puis nous avons recadrement l'image 224x224 au centre. Ensuite, nous codant pour les images recadrées en chaîne JPG et le vidage sur cornichon.
cd scriptval224_compressed.pkl (Tsinghua / Google Drive)python convert.py (a besoin de 48g de mémoire, merci @jnorwood)Nous fournissons également une démonstration simple pour quantifier ces modèles à la largeur de bits spécifiée avec plusieurs méthodes, notamment la méthode linéaire, la méthode Minmax et la méthode non linéaire.
quantize --type cifar10 --quant_method linear --param_bits 8 --fwd_bits 8 --bn_bits 8 --ngpu 1
Nous évaluons les performances de l'ensemble de données populaire et des modèles avec une méthode quantifiée linéaire. La largeur de bits de la variance moyenne et de fonctionnement en BN est de 10 bits pour tous les résultats. (sauf pour 32 pieds)
| Modèle | 32 étages | 12 bits | 10 bits | 8 bits | 6 bits |
|---|---|---|---|---|---|
| MNIST | 98.42 | 98.43 | 98.44 | 98.44 | 98.32 |
| SVHN | 96.03 | 96.03 | 96.04 | 96.02 | 95.46 |
| Cifar10 | 93.78 | 93.79 | 93.80 | 93.58 | 90.86 |
| CIFAR100 | 74.27 | 74.21 | 74.19 | 73.70 | 66.32 |
| STL10 | 77,59 | 77,65 | 77.70 | 77,59 | 73.40 |
| Alexnet | 55.70 / 78.42 | 55.66 / 78.41 | 55,54 / 78,39 | 54.17 / 77.29 | 18.19 / 36.25 |
| VGG16 | 70.44 / 89.43 | 70,45 / 89.43 | 70.44 / 89.33 | 69.99 / 89.17 | 53.33 / 76.32 |
| VGG19 | 71.36 / 89.94 | 71.35 / 89.93 | 71.34 / 89.88 | 70.88 / 89.62 | 56,00 / 78,62 |
| Resnet18 | 68.63 / 88.31 | 68.62 / 88.33 | 68.49 / 88.25 | 66.80 / 87.20 | 19.14 / 36.49 |
| Resnet34 | 72.50 / 90,86 | 72.46 / 90.82 | 72.45 / 90,85 | 71.47 / 90.00 | 32.25 / 55.71 |
| Resnet50 | 74.98 / 92.17 | 74.94 / 92.12 | 74.91 / 92.09 | 72.54 / 90.44 | 2.43 / 5.36 |
| Resnet101 | 76.69 / 93.30 | 76.66 / 93.25 | 76.22 / 92.90 | 65.69 / 79.54 | 1.41 / 1.18 |
| Resnet152 | 77,55 / 93.59 | 77.51 / 93.62 | 77.40 / 93.54 | 74.95 / 92.46 | 9.29 / 16.75 |
| Squeezenetv0 | 56.73 / 79.39 | 56.75 / 79.40 | 56.70 / 79.27 | 53.93 / 77.04 | 14.21 / 29.74 |
| Squeezenetv1 | 56.52 / 79.13 | 56.52 / 79.15 | 56.24 / 79.03 | 54,56 / 77,33 | 17.10 / 32.46 |
| Inceptionv3 | 76.41 / 92.78 | 76.43 / 92.71 | 76.44 / 92.73 | 73.67 / 91.34 | 1,50 / 4.82 |
Remarque: les modèles ImageNet à 32 étages proviennent directement de TorchVision
Ici, nous donnons un aperçu des arguments sélectionnés de quantize.py
| Drapeau | Valeur par défaut | Description et options |
|---|---|---|
| taper | cifar10 | MNIST, SVHN, CIFAR10, CIFAR100, STL10, ALEXNET, VGG16, VGG16_BN, VGG19, VGG19_BN, RESENT18, RESENT34, RESNET50, RESNET101, RESNET152, SQUEEEEZENET_V0, SQUEEESENET_V1, INIGNEMENT_V3 |
| quant_method | linéaire | Méthode de quantification: linéaire, minmax, log, tanh |
| param_bits | 8 | largeur de poids et biais |
| fwd_bits | 8 | largeur d'activation |
| bn_bits | 32 | La largeur de la bit de courir et de courir vairance |
| débordement | 0.0 | Seuil de débit de débordement pour la méthode de quantification linéaire |
| n_s échantillons | 20 | Nombre d'échantillons pour faire des statistiques pour l'activation |