- - **NOTE** This repo is not being maintained -- Por favor, use timm . Inclui todas essas definições de modelo (pesos compatíveis) e muito mais.
Uma implementação 'genérica' da eficácia, mixnet, mobileNetv3, etc. que abrange a maioria das arquiteturas de computação/parâmetro eficientes derivadas da sequência de blocos MobileNet V1/V2, incluindo aqueles encontrados através da pesquisa de arquitetura neural automatizada.
Todos os modelos são implementados pelas classes GenefabilityNet ou MobileNetv3, com definições de arquitetura baseadas em strings para configurar os layouts de bloco (idéia daqui)
timm (82.1 Top-1)timmfix_group_fanout=False em initialize_weight_goog para comportamento antigoap , pois eles usam um pré -processamento diferente (média de início/std) a partir da base eficiente da base eficiente/pesos AA/RA.Os modelos implementados incluem:
Originalmente, implementei e treinei alguns modelos com código aqui, este repositório contém apenas os modelos GenefientNet, validação e código de exportação de ONNX/CAFFE2 associado.
Consegui treinar vários dos modelos para precisar de precisões próximas ou acima dos documentos de origem e do Impl. Meu código de treinamento está aqui: https://github.com/rwightman/pytorch-image-models
| Modelo | Prec@1 (err) | Prec@5 (err) | Param#(M) | Madds (M) | Escala de imagem | Resolução | Cortar |
|---|---|---|---|---|---|---|---|
| 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 | bilinear | 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 | bilinear | 224 | 0,875 |
| mobileNetv2_100 | 72.978 (27.022) | 91.016 (8.984) | 3.5 | TBD | Bicúbico | 224 | 0,875 |
Modelos mais pré -terem vindo ...
Os pesos portados a partir de pontos de verificação do tensorflow para os modelos eficientes da Net praticamente correspondem à precisão do tensorflow, uma vez que um equivalente a picapes de convolução é adicionado e os mesmos fatores de cultivo, escala de imagem etc. (consulte a tabela) são usados via args da linha CMD.
IMPORTANTE:
--tf-preprocessing no tempo de validação melhorará as pontuações em 0,1-0,5%, muito próximo ao TF Impl original. Para executar a validação para TF_EFFAITENTNET_B5: python validate.py /path/to/imagenet/validation/ --model tf_efficientnet_b5 -b 64 --img-size 456 --crop-pct 0.934 --interpolation bicubic
Para executar a validação com pré-processamento de TF para TF_EFFABIFFAITICENET_B5: python validate.py /path/to/imagenet/validation/ --model tf_efficientnet_b5 -b 64 --img-size 456 --tf-preprocessing
Para executar a validação para um modelo com pré-processamento Inception, ou seja, eficientesnet-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) | Param # | Escala de imagem | Tamanho da imagem | Cortar |
|---|---|---|---|---|---|---|
| TF_EFFABIFFAITCENET_L2_NS *TFP | 88.352 (11.648) | 98.652 (1.348) | 480 | Bicúbico | 800 | N / D |
| TF_EFFABIFFAITCENET_L2_NS | TBD | TBD | 480 | Bicúbico | 800 | 0,961 |
| TF_EFFABIFFAITCENET_L2_NS_475 | 88.234 (11.766) | 98.546 (1.454) | 480 | Bicúbico | 475 | 0,936 |
| TF_EFFABIFFAITCENET_L2_NS_475 *TFP | 88.172 (11.828) | 98.566 (1,434) | 480 | Bicúbico | 475 | N / D |
| TF_EFFABIFFAITCENET_B7_NS *TFP | 86.844 (13.156) | 98.084 (1,916) | 66.35 | Bicúbico | 600 | N / D |
| TF_EFFABIFFAITCENET_B7_NS | 86.840 (13.160) | 98.094 (1.906) | 66.35 | Bicúbico | 600 | N / D |
| TF_EFFABIFFAITCENET_B6_NS | 86.452 (13.548) | 97.882 (2.118) | 43.04 | Bicúbico | 528 | N / D |
| TF_EFFABIFFAITCENET_B6_NS *TFP | 86.444 (13.556) | 97.880 (2.120) | 43.04 | Bicúbico | 528 | N / D |
| TF_EFFABIFFAITCENET_B5_NS *TFP | 86.064 (13.936) | 97.746 (2.254) | 30.39 | Bicúbico | 456 | N / D |
| TF_EFFABIFFAITCENET_B5_NS | 86.088 (13.912) | 97.752 (2.248) | 30.39 | Bicúbico | 456 | N / D |
| TF_EFFABIFFAITCENET_B8_AP *TFP | 85.436 (14.564) | 97.272 (2.728) | 87.4 | Bicúbico | 672 | N / D |
| TF_EFFABIFFAITCENET_B8 *TFP | 85.384 (14.616) | 97.394 (2.606) | 87.4 | Bicúbico | 672 | N / D |
| TF_EFFICIFFAITYNET_B8 | 85.370 (14.630) | 97.390 (2.610) | 87.4 | Bicúbico | 672 | 0,954 |
| TF_EFFAITENTNET_B8_AP | 85.368 (14.632) | 97.294 (2.706) | 87.4 | Bicúbico | 672 | 0,954 |
| TF_EFFABIFFAITCENET_B4_NS *TFP | 85.298 (14.702) | 97.504 (2.496) | 19.34 | Bicúbico | 380 | N / D |
| TF_EFFABIFFAITCENET_B4_NS | 85.162 (14.838) | 97.470 (2.530) | 19.34 | Bicúbico | 380 | 0,922 |
| TF_EFFABIFFAITCENET_B7_AP *TFP | 85.154 (14.846) | 97.244 (2.756) | 66.35 | Bicúbico | 600 | N / D |
| TF_EFFABIFFAITCENET_B7_AP | 85.118 (14.882) | 97.252 (2.748) | 66.35 | Bicúbico | 600 | 0,949 |
| TF_EFFABIFFAITCENET_B7 *TFP | 84.940 (15.060) | 97.214 (2.786) | 66.35 | Bicúbico | 600 | N / D |
| TF_EFFABIFFAITCENET_B7 | 84.932 (15.068) | 97.208 (2.792) | 66.35 | Bicúbico | 600 | 0,949 |
| TF_EFFABIFFAITCENET_B6_AP | 84.786 (15.214) | 97.138 (2.862) | 43.04 | Bicúbico | 528 | 0,942 |
| TF_EFFABIFFAITCENET_B6_AP *TFP | 84.760 (15.240) | 97.124 (2.876) | 43.04 | Bicúbico | 528 | N / D |
| TF_EFFABIFFAITCENET_B5_AP *TFP | 84.276 (15.724) | 96.932 (3.068) | 30.39 | Bicúbico | 456 | N / D |
| TF_EFFABIFFAITCENET_B5_AP | 84.254 (15.746) | 96.976 (3.024) | 30.39 | Bicúbico | 456 | 0,934 |
| TF_EFFABIFFAITCENET_B6 *TFP | 84.140 (15.860) | 96.852 (3.148) | 43.04 | Bicúbico | 528 | N / D |
| TF_EFFABIFFAITCENET_B6 | 84.110 (15.890) | 96.886 (3.114) | 43.04 | Bicúbico | 528 | 0,942 |
| TF_EFFABIFFAITCENET_B3_NS *TFP | 84.054 (15.946) | 96.918 (3.082) | 12.23 | Bicúbico | 300 | N / D |
| TF_EFFABIFITFAITYNET_B3_NS | 84.048 (15.952) | 96.910 (3.090) | 12.23 | Bicúbico | 300 | .904 |
| TF_EFFABIFFAITCENET_B5 *TFP | 83.822 (16.178) | 96.756 (3.244) | 30.39 | Bicúbico | 456 | N / D |
| TF_EFFABIFFAITCENET_B5 | 83.812 (16.188) | 96.748 (3.252) | 30.39 | Bicúbico | 456 | 0,934 |
| TF_EFFABIFFAITCENET_B4_AP *TFP | 83.278 (16.722) | 96.376 (3.624) | 19.34 | Bicúbico | 380 | N / D |
| TF_EFFABIFFAITCENET_B4_AP | 83.248 (16.752) | 96.388 (3.612) | 19.34 | Bicúbico | 380 | 0,922 |
| TF_EFFABIFFAITCENET_B4 | 83.022 (16.978) | 96.300 (3.700) | 19.34 | Bicúbico | 380 | 0,922 |
| TF_EFFABIFFAITCENET_B4 *TFP | 82.948 (17.052) | 96.308 (3.692) | 19.34 | Bicúbico | 380 | N / D |
| TF_EFFABIFFAITCENET_B2_NS *TFP | 82.436 (17.564) | 96.268 (3.732) | 9.11 | Bicúbico | 260 | N / D |
| TF_EFFABIFFAITCENET_B2_NS | 82.380 (17.620) | 96.248 (3.752) | 9.11 | Bicúbico | 260 | 0,89 |
| TF_EFFABIFFAITCENET_B3_AP *TFP | 81.882 (18.118) | 95.662 (4.338) | 12.23 | Bicúbico | 300 | N / D |
| TF_EFFABIFFAITCENET_B3_AP | 81.828 (18.172) | 95.624 (4.376) | 12.23 | Bicúbico | 300 | 0,904 |
| TF_EFFABIFFAITCYNET_B3 | 81.636 (18.364) | 95.718 (4.282) | 12.23 | Bicúbico | 300 | 0,904 |
| TF_EFFABIFFAITCENET_B3 *TFP | 81.576 (18.424) | 95.662 (4.338) | 12.23 | Bicúbico | 300 | N / D |
| TF_EFFABIFITFAITYNET_LITE4 | 81.528 (18.472) | 95.668 (4.332) | 13.00 | bilinear | 380 | 0,92 |
| TF_EFFABIFFAITCENET_B1_NS *TFP | 81.514 (18.486) | 95.776 (4.224) | 7.79 | Bicúbico | 240 | N / D |
| TF_EFFAFFAITCENET_LITE4 *TFP | 81.502 (18.498) | 95.676 (4.324) | 13.00 | bilinear | 380 | N / D |
| TF_EFFABIFFAITCENET_B1_NS | 81.388 (18.612) | 95.738 (4.262) | 7.79 | Bicúbico | 240 | 0,88 |
| TF_EFFICIFFAITYNET_EL | 80.534 (19.466) | 95.190 (4.810) | 10.59 | Bicúbico | 300 | 0,904 |
| TF_EFFABIFITFAITYNET_EL *TFP | 80.476 (19.524) | 95.200 (4.800) | 10.59 | Bicúbico | 300 | N / D |
| TF_EFFABIFFAITCENET_B2_AP *TFP | 80.420 (19.580) | 95.040 (4.960) | 9.11 | Bicúbico | 260 | N / D |
| TF_EFFABIFFAITCENET_B2_AP | 80.306 (19.694) | 95.028 (4.972) | 9.11 | Bicúbico | 260 | 0,890 |
| TF_EFFABIFFAITCENET_B2 *TFP | 80.188 (19.812) | 94.974 (5.026) | 9.11 | Bicúbico | 260 | N / D |
| TF_EFFICIFFAITYNET_B2 | 80.086 (19.914) | 94.908 (5.092) | 9.11 | Bicúbico | 260 | 0,890 |
| TF_EFFABIFITFAITYNET_LITE3 | 79.812 (20.188) | 94.914 (5.086) | 8.20 | bilinear | 300 | 0,904 |
| TF_EFFAFFAITCENET_LITE3 *TFP | 79.734 (20.266) | 94.838 (5.162) | 8.20 | bilinear | 300 | N / D |
| TF_EFFABIFFAITCENET_B1_AP *TFP | 79.532 (20.468) | 94.378 (5.622) | 7.79 | Bicúbico | 240 | N / D |
| TF_EFFABIFFAITCENET_CC_B1_8E *TFP | 79.464 (20.536) | 94.492 (5.508) | 39.7 | Bicúbico | 240 | 0,88 |
| TF_EFFABIFFAITCENET_CC_B1_8E | 79.298 (20.702) | 94.364 (5.636) | 39.7 | Bicúbico | 240 | 0,88 |
| TF_EFFABIFFAITCENET_B1_AP | 79.278 (20.722) | 94.308 (5.692) | 7.79 | Bicúbico | 240 | 0,88 |
| TF_EFFABIFFAITCENET_B1 *TFP | 79.172 (20.828) | 94.450 (5.550) | 7.79 | Bicúbico | 240 | N / D |
| TF_EFFAITENTNET_EM *TFP | 78.958 (21.042) | 94.458 (5.542) | 6.90 | Bicúbico | 240 | N / D |
| TF_EFFABIFFAITCENET_B0_NS *TFP | 78.806 (21.194) | 94.496 (5.504) | 5.29 | Bicúbico | 224 | N / D |
| tf_mixnet_l *tfp | 78.846 (21.154) | 94.212 (5.788) | 7.33 | bilinear | 224 | N / D |
| TF_EFFICIFFAITYNET_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_EFFICIFFAITYNET_EM | 78.742 (21.258) | 94.332 (5.668) | 6.90 | Bicúbico | 240 | 0,875 |
| TF_EFFABIFFAITCENET_B0_NS | 78.658 (21.342) | 94.376 (5.624) | 5.29 | Bicúbico | 224 | 0,875 |
| TF_EFFABIFFAITCENET_CC_B0_8E *TFP | 78.314 (21.686) | 93.790 (6.210) | 24.0 | Bicúbico | 224 | 0,875 |
| TF_EFFABIFFAITCENET_CC_B0_8E | 77.908 (22.092) | 93.656 (6.344) | 24.0 | Bicúbico | 224 | 0,875 |
| TF_EFFABIFFAITCENET_CC_B0_4E *TFP | 77.746 (22.254) | 93.552 (6.448) | 13.3 | Bicúbico | 224 | 0,875 |
| TF_EFFABIFFAITCENET_CC_B0_4E | 77.304 (22.696) | 93.332 (6.668) | 13.3 | Bicúbico | 224 | 0,875 |
| TF_EFFICIFITENTNET_ES *TFP | 77.616 (22.384) | 93.750 (6.250) | 5.44 | Bicúbico | 224 | N / D |
| TF_EFFABIFFAITCENET_LITE2 *TFP | 77.544 (22.456) | 93.800 (6.200) | 6.09 | bilinear | 260 | N / D |
| TF_EFFAITENTNET_LITE2 | 77.460 (22.540) | 93.746 (6.254) | 6.09 | Bicúbico | 260 | 0,89 |
| TF_EFFAITENTNET_B0_AP *TFP | 77.514 (22.486) | 93.576 (6.424) | 5.29 | Bicúbico | 224 | N / D |
| TF_EFFICIFFAITYNET_ES | 77.264 (22.736) | 93.600 (6.400) | 5.44 | Bicúbico | 224 | N / D |
| TF_EFFABIFFAITCENET_B0 *TFP | 77.258 (22.742) | 93.478 (6.522) | 5.29 | Bicúbico | 224 | N / D |
| TF_EFFABIFFAITCENET_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 | bilinear | 224 | N / D |
| TF_MIXNET_M | 76.950 (23.050) | 93.156 (6.844) | 5.01 | Bicúbico | 224 | 0,875 |
| TF_EFFICIFITENTNET_B0 | 76.848 (23.152) | 93.228 (6.772) | 5.29 | Bicúbico | 224 | 0,875 |
| TF_EFFAFFAITCENET_LITE1 *TFP | 76.764 (23.236) | 93.326 (6.674) | 5.42 | bilinear | 240 | N / D |
| TF_EFFAITENTNET_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 | bilinear | 224 | N / D |
| TF_MOBILENETV3_LARGE_100 *TFP | 75.768 (24.232) | 92.710 (7.290) | 5.48 | bilinear | 224 | N / D |
| 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 | bilinear | 224 | 0,875 |
| TF_EFFAFFAITICENET_LITE0 *TFP | 75.074 (24.926) | 92.314 (7.686) | 4.65 | bilinear | 224 | N / D |
| TF_EFFAFFAITCENET_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 | bilinear | 224 | N / D |
| TF_MOBILENETV3_LARGE_075 | 73.442 (26.558) | 91.352 (8.648) | 3.99 | bilinear | 224 | 0,875 |
| TF_MOBILENETV3_LARGE_MINIMAL_100 *TFP | 72.678 (27.322) | 90.860 (9.140) | 3.92 | bilinear | 224 | N / D |
| TF_MOBILENETV3_LARGE_MINIMAL_100 | 72.244 (27.756) | 90.636 (9.364) | 3.92 | bilinear | 224 | 0,875 |
| TF_MOBILENETV3_SMALL_100 *TFP | 67.918 (32.082) | 87.958 (12.042 | 2.54 | bilinear | 224 | N / D |
| TF_MOBILENETV3_SMALL_100 | 67.918 (32.082) | 87.662 (12.338) | 2.54 | bilinear | 224 | 0,875 |
| TF_MOBILENETV3_SMALL_075 *TFP | 66.142 (33.858) | 86.498 (13.502) | 2.04 | bilinear | 224 | N / D |
| TF_MOBILENETV3_SMALL_075 | 65.718 (34.282) | 86.136 (13.864) | 2.04 | bilinear | 224 | 0,875 |
| TF_MOBILENETV3_SMALL_MINIMAL_100 *TFP | 63.378 (36.622) | 84.802 (15.198) | 2.04 | bilinear | 224 | N / D |
| TF_MOBILENETV3_SMALL_MINIMAL_100 | 62.898 (37.102) | 84.230 (15.770) | 2.04 | bilinear | 224 | 0,875 |
*Modelos TFP validados com o pipeline tf-preprocessing
Pesos do Google TF e Tflite portados de repositórios oficiais do TensorFlow
Todo o desenvolvimento e teste foram feitos nos ambientes Conda Python 3 nos sistemas Linux X86-64, especificamente Python 3.6.x, 3.7.x, 3.8.x.
Os usuários relataram que uma instalação do Python 3 Anaconda no Windows Works. Eu não veri isso sozinho.
As versões pytorch 1.4, 1.5, 1.6 foram testadas com este código.
Eu tentei manter as dependências mínimas, a configuração é de acordo com as instruções de instalação padrão do Pytorch para o CONDA:
conda create -n torch-env
conda activate torch-env
conda install -c pytorch pytorch torchvision cudatoolkit=10.2
Os modelos podem ser acessados através da API do 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 pacote pode ser instalado via PIP.
Instale (após o CONDA ENV/instalação):
pip install geffnet
Uso de avaliação:
>>> import geffnet
>>> m = geffnet.create_model('mobilenetv3_large_100', pretrained=True)
>>> m.eval()
Uso do trem:
>>> 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()
Crie em um contêiner sequencial, para Fast.ai, etc:
>>> import geffnet
>>> m = geffnet.mixnet_l(pretrained=True, drop_rate=0.25, drop_connect_rate=0.2, as_sequential=True)
Scripts estão incluídos para
onnx_export.py )onnx_optimize.py ou onnx_validate.py w/ --onnx-output-opt arg)onnx_validate.py )onnx_to_caffe.py )caffe2_validate.py )caffe2_benchmark.py )Como exemplo, exportar o modelo MOBILENET-V3 Preencidido e, em seguida, execute uma validação do ImageNet:
python onnx_export.py --model mobilenetv3_large_100 ./mobilenetv3_100.onnx
python onnx_validate.py /imagenet/validation/ --onnx-input ./mobilenetv3_100.onnx
Esses scripts foram testados para estar funcionando a partir de Pytorch 1.6 e ONNX 1,7 com tempo de execução ONNX 1.4. A exportação compatível com Caffe2 agora requer args adicionais mencionados no script de exportação (não é necessário nas versões anteriores).
_EXPORTABLE no config.py esteja definido como true. Use config.set_exportable(True) como no script onnx_export.py .