- - **NOTE** This repo is not being maintained -- Utilice timm en su lugar. Incluye todas estas definiciones de modelo (pesos compatibles) y mucho más.
Una implementación 'genérica' de eficiente NET, mixnet, mobileNetv3, etc. que cubre la mayoría de las arquitecturas eficientes de cómputo/parámetro derivadas de la secuencia de bloque MobileNet V1/V2, incluidas las que se encuentran a través de la búsqueda de arquitectura neuronal automatizada.
Todos los modelos se implementan mediante clases de GeneFFIEMNET o MobileNetV3, con definiciones de arquitectura basadas en cadenas para configurar los diseños de bloques (idea desde aquí)
timm .timmfix_group_fanout=False en initialize_weight_goog para un comportamiento antiguoap ya que usan un preprocesamiento diferente (media de inicio/ETS) a partir de los pesos originales de Base de red eficiente/AA/RA.Los modelos implementados incluyen:
Originalmente implementé y capacité a algunos modelos con código aquí, este repositorio contiene solo los modelos GeneFeficeMetnet, la validación y el código de exportación ONNX/CAFFE2 asociado.
He logrado capacitar a varios de los modelos a las precisiones cercanas o superiores a los documentos de origen y la implicación oficial. Mi código de entrenamiento está aquí: https://github.com/rwightman/pytorch-image-models
| Modelo | Prec@1 (err) | Prec@5 (err) | Param#(m) | Madds (M) | Escala de imágenes | Resolución | Cultivo |
|---|---|---|---|---|---|---|---|
| eficientenet_b3 | 82.240 (17.760) | 96.116 (3.884) | 12.23 | TBD | bicúbico | 320 | 1.0 |
| eficientenet_b3 | 82.076 (17.924) | 96.020 (3.980) | 12.23 | TBD | bicúbico | 300 | 0.904 |
| mixnet_xl | 81.074 (18.926) | 95.282 (4.718) | 11.90 | TBD | bicúbico | 256 | 1.0 |
| eficientenet_b2 | 80.612 (19.388) | 95.318 (4.682) | 9.1 | TBD | bicúbico | 288 | 1.0 |
| mixnet_xl | 80.476 (19.524) | 94.936 (5.064) | 11.90 | TBD | bicúbico | 224 | 0.875 |
| eficientenet_b2 | 80.288 (19.712) | 95.166 (4.834) | 9.1 | 1003 | bicúbico | 260 | 0.890 |
| mixnet_l | 78.976 (21.024 | 94.184 (5.816) | 7.33 | TBD | bicúbico | 224 | 0.875 |
| eficientenet_b1 | 78.692 (21.308) | 94.086 (5.914) | 7.8 | 694 | bicúbico | 240 | 0.882 |
| eficientenet_es | 78.066 (21.934) | 93.926 (6.074) | 5.44 | TBD | bicúbico | 224 | 0.875 |
| eficientenet_b0 | 77.698 (22.302) | 93.532 (6.468) | 5.3 | 390 | bicúbico | 224 | 0.875 |
| mobilenetv2_120d | 77.294 (22.706 | 93.502 (6.498) | 5.8 | TBD | bicúbico | 224 | 0.875 |
| mixnet_m | 77.256 (22.744) | 93.418 (6.582) | 5.01 | 353 | bicúbico | 224 | 0.875 |
| MobileNetv2_140 | 76.524 (23.476) | 92.990 (7.010) | 6.1 | TBD | bicúbico | 224 | 0.875 |
| mixnet_s | 75.988 (24.012) | 92.794 (7.206) | 4.13 | TBD | bicúbico | 224 | 0.875 |
| MobileNetv3_large_100 | 75.766 (24.234) | 92.542 (7.458) | 5.5 | TBD | bicúbico | 224 | 0.875 |
| mobilenetv3_rw | 75.634 (24.366) | 92.708 (7.292) | 5.5 | 219 | bicúbico | 224 | 0.875 |
| eficientenet_lite0 | 75.472 (24.528) | 92.520 (7.480) | 4.65 | TBD | bicúbico | 224 | 0.875 |
| MNASNET_A1 | 75.448 (24.552) | 92.604 (7.396) | 3.9 | 312 | bicúbico | 224 | 0.875 |
| FBNETC_100 | 75.124 (24.876) | 92.386 (7.614) | 5.6 | 385 | bilíneo | 224 | 0.875 |
| mobilenetv2_110d | 75.052 (24.948) | 92.180 (7.820) | 4.5 | TBD | bicúbico | 224 | 0.875 |
| MNASNET_B1 | 74.658 (25.342) | 92.114 (7.886) | 4.4 | 315 | bicúbico | 224 | 0.875 |
| spnasnet_100 | 74.084 (25.916) | 91.818 (8.182) | 4.4 | TBD | bilíneo | 224 | 0.875 |
| mobilenetv2_100 | 72.978 (27.022) | 91.016 (8.984) | 3.5 | TBD | bicúbico | 224 | 0.875 |
Más modelos previos al vínculo por venir ...
Los pesos portados por los puntos de control de flujo de tensor para los modelos de EficeTetNet hacen que coincida con la precisión en el flujo tensorial una vez que se agrega un mismo equivalente de acolchado de convolución, y los mismos factores de cultivo, la escala de imágenes, etc. (ver tabla) se usan a través de args de línea CMD.
IMPORTANTE:
--tf-preprocessing en el momento de la validación mejorará los puntajes en 0.1-0.5%, muy cerca del TF original original. Para ejecutar la validación para TF_EFFIENTNET_B5: python validate.py /path/to/imagenet/validation/ --model tf_efficientnet_b5 -b 64 --img-size 456 --crop-pct 0.934 --interpolation bicubic
Para ejecutar la validación con preprocesamiento de TF para TF_EFFIENTNET_B5: python validate.py /path/to/imagenet/validation/ --model tf_efficientnet_b5 -b 64 --img-size 456 --tf-preprocessing
Para ejecutar la validación para un modelo con preprocesamiento de inicio, es decir, eficiente-b8 advprop: python validate.py /path/to/imagenet/validation/ --model tf_efficientnet_b8_ap -b 48 --num-gpu 2 --img-size 672 --crop-pct 0.954 --mean 0.5 --std 0.5
| Modelo | Prec@1 (err) | Prec@5 (err) | Parámetro # | Escala de imágenes | Tamaño de imagen | Cultivo |
|---|---|---|---|---|---|---|
| TF_EFFIENTNET_L2_NS *TFP | 88.352 (11.648) | 98.652 (1.348) | 480 | bicúbico | 800 | N / A |
| TF_EFFIENTNET_L2_NS | TBD | TBD | 480 | bicúbico | 800 | 0.961 |
| TF_EFFIENTNET_L2_NS_475 | 88.234 (11.766) | 98.546 (1.454) | 480 | bicúbico | 475 | 0.936 |
| TF_EFFIENTNET_L2_NS_475 *TFP | 88.172 (11.828) | 98.566 (1.434) | 480 | bicúbico | 475 | N / A |
| TF_EFFIENTNET_B7_NS *TFP | 86.844 (13.156) | 98.084 (1.916) | 66.35 | bicúbico | 600 | N / A |
| TF_EFFIENTNET_B7_NS | 86.840 (13.160) | 98.094 (1.906) | 66.35 | bicúbico | 600 | N / A |
| TF_EFFIENTNET_B6_NS | 86.452 (13.548) | 97.882 (2.118) | 43.04 | bicúbico | 528 | N / A |
| TF_EFFIENTNET_B6_NS *TFP | 86.444 (13.556) | 97.880 (2.120) | 43.04 | bicúbico | 528 | N / A |
| TF_EFFIENTNET_B5_NS *TFP | 86.064 (13.936) | 97.746 (2.254) | 30.39 | bicúbico | 456 | N / A |
| TF_EFFIENTNET_B5_NS | 86.088 (13.912) | 97.752 (2.248) | 30.39 | bicúbico | 456 | N / A |
| TF_EFFIENTNET_B8_AP *TFP | 85.436 (14.564) | 97.272 (2.728) | 87.4 | bicúbico | 672 | N / A |
| TF_EFFIENTNET_B8 *TFP | 85.384 (14.616) | 97.394 (2.606) | 87.4 | bicúbico | 672 | N / A |
| TF_EFFIENTNET_B8 | 85.370 (14.630) | 97.390 (2.610) | 87.4 | bicúbico | 672 | 0.954 |
| TF_EFFIENTNET_B8_AP | 85.368 (14.632) | 97.294 (2.706) | 87.4 | bicúbico | 672 | 0.954 |
| TF_EFFIENTNET_B4_NS *TFP | 85.298 (14.702) | 97.504 (2.496) | 19.34 | bicúbico | 380 | N / A |
| TF_EFFIENTNET_B4_NS | 85.162 (14.838) | 97.470 (2.530) | 19.34 | bicúbico | 380 | 0.922 |
| TF_EFFIENTNET_B7_AP *TFP | 85.154 (14.846) | 97.244 (2.756) | 66.35 | bicúbico | 600 | N / A |
| TF_EFFIENTNET_B7_AP | 85.118 (14.882) | 97.252 (2.748) | 66.35 | bicúbico | 600 | 0.949 |
| TF_EFFIENTNET_B7 *TFP | 84.940 (15.060) | 97.214 (2.786) | 66.35 | bicúbico | 600 | N / A |
| TF_EFFIENTNET_B7 | 84.932 (15.068) | 97.208 (2.792) | 66.35 | bicúbico | 600 | 0.949 |
| TF_EFFIENTNET_B6_AP | 84.786 (15.214) | 97.138 (2.862) | 43.04 | bicúbico | 528 | 0.942 |
| TF_EFFIENTNET_B6_AP *TFP | 84.760 (15.240) | 97.124 (2.876) | 43.04 | bicúbico | 528 | N / A |
| TF_EFFIENTNET_B5_AP *TFP | 84.276 (15.724) | 96.932 (3.068) | 30.39 | bicúbico | 456 | N / A |
| TF_EFFIENTNET_B5_AP | 84.254 (15.746) | 96.976 (3.024) | 30.39 | bicúbico | 456 | 0.934 |
| TF_EFFIENTNET_B6 *TFP | 84.140 (15.860) | 96.852 (3.148) | 43.04 | bicúbico | 528 | N / A |
| TF_EFFIENTNET_B6 | 84.110 (15.890) | 96.886 (3.114) | 43.04 | bicúbico | 528 | 0.942 |
| TF_EFFIENTNET_B3_NS *TFP | 84.054 (15.946) | 96.918 (3.082) | 12.23 | bicúbico | 300 | N / A |
| TF_EFFIENTNET_B3_NS | 84.048 (15.952) | 96.910 (3.090) | 12.23 | bicúbico | 300 | .904 |
| TF_EFFIENTNET_B5 *TFP | 83.822 (16.178) | 96.756 (3.244) | 30.39 | bicúbico | 456 | N / A |
| TF_EFFIENTNET_B5 | 83.812 (16.188) | 96.748 (3.252) | 30.39 | bicúbico | 456 | 0.934 |
| TF_EFFIENTNET_B4_AP *TFP | 83.278 (16.722) | 96.376 (3.624) | 19.34 | bicúbico | 380 | N / A |
| TF_EFFIENTNET_B4_AP | 83.248 (16.752) | 96.388 (3.612) | 19.34 | bicúbico | 380 | 0.922 |
| TF_EFFIENTNET_B4 | 83.022 (16.978) | 96.300 (3.700) | 19.34 | bicúbico | 380 | 0.922 |
| TF_EFFIENTNET_B4 *TFP | 82.948 (17.052) | 96.308 (3.692) | 19.34 | bicúbico | 380 | N / A |
| TF_EFFIENTNET_B2_NS *TFP | 82.436 (17.564) | 96.268 (3.732) | 9.11 | bicúbico | 260 | N / A |
| TF_EFFIENTNET_B2_NS | 82.380 (17.620) | 96.248 (3.752) | 9.11 | bicúbico | 260 | 0.89 |
| TF_EFFIENTNET_B3_AP *TFP | 81.882 (18.118) | 95.662 (4.338) | 12.23 | bicúbico | 300 | N / A |
| TF_EFFIENTNET_B3_AP | 81.828 (18.172) | 95.624 (4.376) | 12.23 | bicúbico | 300 | 0.904 |
| TF_EFFIENTNET_B3 | 81.636 (18.364) | 95.718 (4.282) | 12.23 | bicúbico | 300 | 0.904 |
| TF_EFFIENTNET_B3 *TFP | 81.576 (18.424) | 95.662 (4.338) | 12.23 | bicúbico | 300 | N / A |
| TF_EFFIENTNET_LITE4 | 81.528 (18.472) | 95.668 (4.332) | 13.00 | bilíneo | 380 | 0.92 |
| TF_EFFIENTNET_B1_NS *TFP | 81.514 (18.486) | 95.776 (4.224) | 7.79 | bicúbico | 240 | N / A |
| TF_EFFIENTNET_LITE4 *TFP | 81.502 (18.498) | 95.676 (4.324) | 13.00 | bilíneo | 380 | N / A |
| TF_EFFIENTNET_B1_NS | 81.388 (18.612) | 95.738 (4.262) | 7.79 | bicúbico | 240 | 0.88 |
| TF_EFFIENTNET_EL | 80.534 (19.466) | 95.190 (4.810) | 10.59 | bicúbico | 300 | 0.904 |
| TF_EFFIENTNET_EL *TFP | 80.476 (19.524) | 95.200 (4.800) | 10.59 | bicúbico | 300 | N / A |
| TF_EFFIENTNET_B2_AP *TFP | 80.420 (19.580) | 95.040 (4.960) | 9.11 | bicúbico | 260 | N / A |
| TF_EFFIENTNET_B2_AP | 80.306 (19.694) | 95.028 (4.972) | 9.11 | bicúbico | 260 | 0.890 |
| TF_EFFIENTNET_B2 *TFP | 80.188 (19.812) | 94.974 (5.026) | 9.11 | bicúbico | 260 | N / A |
| TF_EFFIENTNET_B2 | 80.086 (19.914) | 94.908 (5.092) | 9.11 | bicúbico | 260 | 0.890 |
| TF_EFFIENTNET_LITE3 | 79.812 (20.188) | 94.914 (5.086) | 8.20 | bilíneo | 300 | 0.904 |
| TF_EFFIENTNET_LITE3 *TFP | 79.734 (20.266) | 94.838 (5.162) | 8.20 | bilíneo | 300 | N / A |
| TF_EFFIENTNET_B1_AP *TFP | 79.532 (20.468) | 94.378 (5.622) | 7.79 | bicúbico | 240 | N / A |
| TF_EFFIENTNET_CC_B1_8E *TFP | 79.464 (20.536) | 94.492 (5.508) | 39.7 | bicúbico | 240 | 0.88 |
| TF_EFFIENTNET_CC_B1_8E | 79.298 (20.702) | 94.364 (5.636) | 39.7 | bicúbico | 240 | 0.88 |
| TF_EFFIENTNET_B1_AP | 79.278 (20.722) | 94.308 (5.692) | 7.79 | bicúbico | 240 | 0.88 |
| TF_EFFIENTNET_B1 *TFP | 79.172 (20.828) | 94.450 (5.550) | 7.79 | bicúbico | 240 | N / A |
| TF_EFFIENTNET_EM *TFP | 78.958 (21.042) | 94.458 (5.542) | 6.90 | bicúbico | 240 | N / A |
| TF_EFFIENTNET_B0_NS *TFP | 78.806 (21.194) | 94.496 (5.504) | 5.29 | bicúbico | 224 | N / A |
| tf_mixnet_l *tfp | 78.846 (21.154) | 94.212 (5.788) | 7.33 | bilíneo | 224 | N / A |
| TF_EFFIENTNET_B1 | 78.826 (21.174) | 94.198 (5.802) | 7.79 | bicúbico | 240 | 0.88 |
| tf_mixnet_l | 78.770 (21.230) | 94.004 (5.996) | 7.33 | bicúbico | 224 | 0.875 |
| TF_EFFIENTNET_EM | 78.742 (21.258) | 94.332 (5.668) | 6.90 | bicúbico | 240 | 0.875 |
| TF_EFFIENTNET_B0_NS | 78.658 (21.342) | 94.376 (5.624) | 5.29 | bicúbico | 224 | 0.875 |
| TF_EFFIENTNET_CC_B0_8E *TFP | 78.314 (21.686) | 93.790 (6.210) | 24.0 | bicúbico | 224 | 0.875 |
| TF_EFFIENTNET_CC_B0_8E | 77.908 (22.092) | 93.656 (6.344) | 24.0 | bicúbico | 224 | 0.875 |
| TF_EFFIENTNET_CC_B0_4E *TFP | 77.746 (22.254) | 93.552 (6.448) | 13.3 | bicúbico | 224 | 0.875 |
| TF_EFFIENTNET_CC_B0_4E | 77.304 (22.696) | 93.332 (6.668) | 13.3 | bicúbico | 224 | 0.875 |
| TF_EFFIENTNET_ES *TFP | 77.616 (22.384) | 93.750 (6.250) | 5.44 | bicúbico | 224 | N / A |
| TF_EFFIENTNET_LITE2 *TFP | 77.544 (22.456) | 93.800 (6.200) | 6.09 | bilíneo | 260 | N / A |
| TF_EFFIENTNET_LITE2 | 77.460 (22.540) | 93.746 (6.254) | 6.09 | bicúbico | 260 | 0.89 |
| TF_EFFIENTNET_B0_AP *TFP | 77.514 (22.486) | 93.576 (6.424) | 5.29 | bicúbico | 224 | N / A |
| TF_EFFIENTNET_ES | 77.264 (22.736) | 93.600 (6.400) | 5.44 | bicúbico | 224 | N / A |
| TF_EFFIENTNET_B0 *TFP | 77.258 (22.742) | 93.478 (6.522) | 5.29 | bicúbico | 224 | N / A |
| TF_EFFIENTNET_B0_AP | 77.084 (22.916) | 93.254 (6.746) | 5.29 | bicúbico | 224 | 0.875 |
| tf_mixnet_m *tfp | 77.072 (22.928) | 93.368 (6.632) | 5.01 | bilíneo | 224 | N / A |
| tf_mixnet_m | 76.950 (23.050) | 93.156 (6.844) | 5.01 | bicúbico | 224 | 0.875 |
| TF_EFFIENTNET_B0 | 76.848 (23.152) | 93.228 (6.772) | 5.29 | bicúbico | 224 | 0.875 |
| TF_EFFIENTNET_LITE1 *TFP | 76.764 (23.236) | 93.326 (6.674) | 5.42 | bilíneo | 240 | N / A |
| TF_EFFIENTNET_LITE1 | 76.638 (23.362) | 93.232 (6.768) | 5.42 | bicúbico | 240 | 0.882 |
| tf_mixnet_s *tfp | 75.800 (24.200) | 92.788 (7.212) | 4.13 | bilíneo | 224 | N / A |
| tf_mobilenetv3_large_100 *tfp | 75.768 (24.232) | 92.710 (7.290) | 5.48 | bilíneo | 224 | N / A |
| tf_mixnet_s | 75.648 (24.352) | 92.636 (7.364) | 4.13 | bicúbico | 224 | 0.875 |
| tf_mobilenetv3_large_100 | 75.516 (24.484) | 92.600 (7.400) | 5.48 | bilíneo | 224 | 0.875 |
| TF_EFFIENTNET_LITE0 *TFP | 75.074 (24.926) | 92.314 (7.686) | 4.65 | bilíneo | 224 | N / A |
| TF_EFFIENTNET_LITE0 | 74.842 (25.158) | 92.170 (7.830) | 4.65 | bicúbico | 224 | 0.875 |
| tf_mobilenetv3_large_075 *tfp | 73.730 (26.270) | 91.616 (8.384) | 3.99 | bilíneo | 224 | N / A |
| tf_mobilenetv3_large_075 | 73.442 (26.558) | 91.352 (8.648) | 3.99 | bilíneo | 224 | 0.875 |
| tf_mobilenetv3_large_minimal_100 *tfp | 72.678 (27.322) | 90.860 (9.140) | 3.92 | bilíneo | 224 | N / A |
| tf_mobilenetv3_large_minimal_100 | 72.244 (27.756) | 90.636 (9.364) | 3.92 | bilíneo | 224 | 0.875 |
| tf_mobilenetv3_small_100 *tfp | 67.918 (32.082) | 87.958 (12.042 | 2.54 | bilíneo | 224 | N / A |
| tf_mobilenetv3_small_100 | 67.918 (32.082) | 87.662 (12.338) | 2.54 | bilíneo | 224 | 0.875 |
| tf_mobilenetv3_small_075 *tfp | 66.142 (33.858) | 86.498 (13.502) | 2.04 | bilíneo | 224 | N / A |
| tf_mobilenetv3_small_075 | 65.718 (34.282) | 86.136 (13.864) | 2.04 | bilíneo | 224 | 0.875 |
| tf_mobilenetv3_small_minimal_100 *tfp | 63.378 (36.622) | 84.802 (15.198) | 2.04 | bilíneo | 224 | N / A |
| tf_mobilenetv3_small_minimal_100 | 62.898 (37.102) | 84.230 (15.770) | 2.04 | bilíneo | 224 | 0.875 |
*Modelos TFP validados con tuberías tf-preprocessing
Pesos de Google TF y TFLite portados por repositorios oficiales de TensorFlow
Todo el desarrollo y las pruebas se han realizado en los entornos Conda Python 3 en los sistemas Linux X86-64, específicamente Python 3.6.x, 3.7.x, 3.8.x.
Los usuarios han informado que una instalación de Anaconda Python 3 en Windows funciona. No he verificado esto yo mismo.
Las versiones de Pytorch 1.4, 1.5, 1.6 se han probado con este código.
He intentado mantener mínimas las dependencias, la configuración es según las instrucciones de instalación predeterminadas de Pytorch para conda:
conda create -n torch-env
conda activate torch-env
conda install -c pytorch pytorch torchvision cudatoolkit=10.2
Se puede acceder a los modelos a través de la API de Pytorch Hub
>>> torch.hub.list('rwightman/gen-efficientnet-pytorch')
['efficientnet_b0', ...]
>>> model = torch.hub.load('rwightman/gen-efficientnet-pytorch', 'efficientnet_b0', pretrained=True)
>>> model.eval()
>>> output = model(torch.randn(1,3,224,224))
Este paquete se puede instalar a través de PIP.
Instalar (después de Conda Env/Instalar):
pip install geffnet
Uso de evaluación:
>>> import geffnet
>>> m = geffnet.create_model('mobilenetv3_large_100', pretrained=True)
>>> m.eval()
Uso del tren:
>>> import geffnet
>>> # models can also be created by using the entrypoint directly
>>> m = geffnet.efficientnet_b2(pretrained=True, drop_rate=0.25, drop_connect_rate=0.2)
>>> m.train()
Crear en un contenedor NN.SeShidial, para Fast.ai, etc:
>>> import geffnet
>>> m = geffnet.mixnet_l(pretrained=True, drop_rate=0.25, drop_connect_rate=0.2, as_sequential=True)
Los guiones se incluyen para
onnx_export.py )onnx_optimize.py o onnx_validate.py w/ --onnx-output-opt arg)onnx_validate.py )onnx_to_caffe.py )caffe2_validate.py )caffe2_benchmark.py )Como ejemplo, para exportar el modelo Pretraled MobileNet-V3 y luego ejecutar una validación de ImageNet:
python onnx_export.py --model mobilenetv3_large_100 ./mobilenetv3_100.onnx
python onnx_validate.py /imagenet/validation/ --onnx-input ./mobilenetv3_100.onnx
Se probó que estos scripts funcionen a partir de Pytorch 1.6 y ONNX 1.7 W/ ONNX Runtime 1.4. La exportación compatible con CAFFE2 ahora requiere ARG adicionales mencionados en el script de exportación (no se necesita en versiones anteriores).
_EXPORTABLE Flag en config.py esté configurado en verdadero. Use config.set_exportable(True) como en el script onnx_export.py .