- - **NOTE** This repo is not being maintained -- 대신 timm 사용하십시오. 여기에는 이러한 모델 정의 (호환 가능한 가중치)가 모두 포함됩니다.
자동화 된 신경 아키텍처 검색을 통해 발견 된 Mobilenet V1/V2 블록 시퀀스에서 파생 된 대부분의 컴퓨팅/매개 변수 효율적인 아키텍처를 다루는 효율적인 넷, Mixnet, Mobilenetv3 등의 '일반'구현.
모든 모델은 genefficeletn 또는 mobilenetv3 클래스에 의해 구현되며, 블록 레이아웃을 구성하기 위해 문자열 기반 아키텍처 정의 (여기에서 아이디어)
timm (82.1 Top-1)과 함께 직접 훈련 된 업데이트 된 Pytorch 훈련 효율적 B3 웨이트 추가timm 등가와 동기화되었습니다fix_group_fanout=False Old Behavior의 initialize_weight_goog 에서 false를 설정하십시오.ap 모델 세트를 만들었습니다.구현 된 모델에는 다음이 포함됩니다.
원래 코드로 이러한 모델을 구현하고 교육했습니다.이 리포지토리에는 Genefficientnet 모델, 검증 및 관련 ONNX/CAFFE2 내보내기 코드 만 포함되어 있습니다.
나는 여러 모델을 원래 논문과 공식 명시 적으로 가까운 정확도로 훈련시킬 수있었습니다. 내 교육 코드는 여기에 있습니다 : https://github.com/rwightman/pytorch-image-models
| 모델 | pre@1 (err) | pre@5 (err) | Param#(m) | Madds (M) | 이미지 스케일링 | 해결 | 수확고 |
|---|---|---|---|---|---|---|---|
| 효율적인 NET_B3 | 82.240 (17.760) | 96.116 (3.884) | 12.23 | TBD | Bicubic | 320 | 1.0 |
| 효율적인 NET_B3 | 82.076 (17.924) | 96.020 (3.980) | 12.23 | TBD | Bicubic | 300 | 0.904 |
| mixnet_xl | 81.074 (18.926) | 95.282 (4.718) | 11.90 | TBD | Bicubic | 256 | 1.0 |
| 효율적인 NET_B2 | 80.612 (19.388) | 95.318 (4.682) | 9.1 | TBD | Bicubic | 288 | 1.0 |
| mixnet_xl | 80.476 (19.524) | 94.936 (5.064) | 11.90 | TBD | Bicubic | 224 | 0.875 |
| 효율적인 NET_B2 | 80.288 (19.712) | 95.166 (4.834) | 9.1 | 1003 | Bicubic | 260 | 0.890 |
| mixnet_l | 78.976 (21.024 | 94.184 (5.816) | 7.33 | TBD | Bicubic | 224 | 0.875 |
| 효율적인 NET_B1 | 78.692 (21.308) | 94.086 (5.914) | 7.8 | 694 | Bicubic | 240 | 0.882 |
| 효율적인 NET_ES | 78.066 (21.934) | 93.926 (6.074) | 5.44 | TBD | Bicubic | 224 | 0.875 |
| 효율적인 NET_B0 | 77.698 (22.302) | 93.532 (6.468) | 5.3 | 390 | Bicubic | 224 | 0.875 |
| Mobilenetv2_120D | 77.294 (22.706 | 93.502 (6.498) | 5.8 | TBD | Bicubic | 224 | 0.875 |
| mixnet_m | 77.256 (22.744) | 93.418 (6.582) | 5.01 | 353 | Bicubic | 224 | 0.875 |
| Mobilenetv2_140 | 76.524 (23.476) | 92.990 (7.010) | 6.1 | TBD | Bicubic | 224 | 0.875 |
| mixnet_s | 75.988 (24.012) | 92.794 (7.206) | 4.13 | TBD | Bicubic | 224 | 0.875 |
| mobilenetv3_large_100 | 75.766 (24.234) | 92.542 (7.458) | 5.5 | TBD | Bicubic | 224 | 0.875 |
| Mobilenetv3_rw | 75.634 (24.366) | 92.708 (7.292) | 5.5 | 219 | Bicubic | 224 | 0.875 |
| 효율적인 NET_LITE0 | 75.472 (24.528) | 92.520 (7.480) | 4.65 | TBD | Bicubic | 224 | 0.875 |
| mnasnet_a1 | 75.448 (24.552) | 92.604 (7.396) | 3.9 | 312 | Bicubic | 224 | 0.875 |
| FBNETC_100 | 75.124 (24.876) | 92.386 (7.614) | 5.6 | 385 | 덩어리 | 224 | 0.875 |
| Mobilenetv2_110D | 75.052 (24.948) | 92.180 (7.820) | 4.5 | TBD | Bicubic | 224 | 0.875 |
| mnasnet_b1 | 74.658 (25.342) | 92.114 (7.886) | 4.4 | 315 | Bicubic | 224 | 0.875 |
| SPNASNET_100 | 74.084 (25.916) | 91.818 (8.182) | 4.4 | TBD | 덩어리 | 224 | 0.875 |
| Mobilenetv2_100 | 72.978 (27.022) | 91.016 (8.984) | 3.5 | TBD | Bicubic | 224 | 0.875 |
앞으로 더 사기꾼 모델 ...
효율적인 넷 모델의 텐서 플로우 체크 포인트에서 포팅 된 가중치는 동일한 컨볼 루션 패딩이 추가되면 텐서 플로에서 정확도를 거의 일치시키고 동일한 작물 계수, 이미지 스케일링 등 (테이블 참조)이 CMD 라인 Args를 통해 사용됩니다.
중요한:
--tf-preprocessing 통해 텐서 플로우 전처리 파이프 라인을 활성화하면 원래 TF Impl에 매우 가깝습니다. tf_efficeletnet_b5에 대한 유효성 검사를 실행하려면 : python validate.py /path/to/imagenet/validation/ --model tf_efficientnet_b5 -b 64 --img-size 456 --crop-pct 0.934 --interpolation bicubic
tf_efficientnet_b5에 대한 tf preprocessing으로 유효성 검사를 실행하려면 : python validate.py /path/to/imagenet/validation/ --model tf_efficientnet_b5 -b 64 --img-size 456 --tf-preprocessing
시작 전처리가있는 모델에 대한 유효성 검사를 실행하려면 효율적인 Net-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
| 모델 | pre@1 (err) | pre@5 (err) | 파라 # | 이미지 스케일링 | 이미지 크기 | 수확고 |
|---|---|---|---|---|---|---|
| tf_efficientnet_l2_ns *tfp | 88.352 (11.648) | 98.652 (1.348) | 480 | Bicubic | 800 | N/A |
| tf_efficientnet_l2_ns | TBD | TBD | 480 | Bicubic | 800 | 0.961 |
| tf_efficientnet_l2_ns_475 | 88.234 (11.766) | 98.546 (1.454) | 480 | Bicubic | 475 | 0.936 |
| tf_efficientnet_l2_ns_475 *tfp | 88.172 (11.828) | 98.566 (1.434) | 480 | Bicubic | 475 | N/A |
| tf_efficientnet_b7_ns *tfp | 86.844 (13.156) | 98.084 (1.916) | 66.35 | Bicubic | 600 | N/A |
| tf_efficientnet_b7_ns | 86.840 (13.160) | 98.094 (1.906) | 66.35 | Bicubic | 600 | N/A |
| tf_efficientnet_b6_ns | 86.452 (13.548) | 97.882 (2.118) | 43.04 | Bicubic | 528 | N/A |
| tf_efficientnet_b6_ns *tfp | 86.444 (13.556) | 97.880 (2.120) | 43.04 | Bicubic | 528 | N/A |
| tf_efficientnet_b5_ns *tfp | 86.064 (13.936) | 97.746 (2.254) | 30.39 | Bicubic | 456 | N/A |
| tf_efficientnet_b5_ns | 86.088 (13.912) | 97.752 (2.248) | 30.39 | Bicubic | 456 | N/A |
| tf_efficientnet_b8_ap *tfp | 85.436 (14.564) | 97.272 (2.728) | 87.4 | Bicubic | 672 | N/A |
| tf_efficientnet_b8 *tfp | 85.384 (14.616) | 97.394 (2.606) | 87.4 | Bicubic | 672 | N/A |
| tf_efficientnet_b8 | 85.370 (14.630) | 97.390 (2.610) | 87.4 | Bicubic | 672 | 0.954 |
| tf_efficientnet_b8_ap | 85.368 (14.632) | 97.294 (2.706) | 87.4 | Bicubic | 672 | 0.954 |
| tf_efficientnet_b4_ns *tfp | 85.298 (14.702) | 97.504 (2.496) | 19.34 | Bicubic | 380 | N/A |
| tf_efficientnet_b4_ns | 85.162 (14.838) | 97.470 (2.530) | 19.34 | Bicubic | 380 | 0.922 |
| tf_efficientnet_b7_ap *tfp | 85.154 (14.846) | 97.244 (2.756) | 66.35 | Bicubic | 600 | N/A |
| tf_efficientnet_b7_ap | 85.118 (14.882) | 97.252 (2.748) | 66.35 | Bicubic | 600 | 0.949 |
| tf_efficientnet_b7 *tfp | 84.940 (15.060) | 97.214 (2.786) | 66.35 | Bicubic | 600 | N/A |
| tf_efficientnet_b7 | 84.932 (15.068) | 97.208 (2.792) | 66.35 | Bicubic | 600 | 0.949 |
| tf_efficientnet_b6_ap | 84.786 (15.214) | 97.138 (2.862) | 43.04 | Bicubic | 528 | 0.942 |
| tf_efficientnet_b6_ap *tfp | 84.760 (15.240) | 97.124 (2.876) | 43.04 | Bicubic | 528 | N/A |
| tf_efficientnet_b5_ap *tfp | 84.276 (15.724) | 96.932 (3.068) | 30.39 | Bicubic | 456 | N/A |
| tf_efficientnet_b5_ap | 84.254 (15.746) | 96.976 (3.024) | 30.39 | Bicubic | 456 | 0.934 |
| tf_efficientnet_b6 *tfp | 84.140 (15.860) | 96.852 (3.148) | 43.04 | Bicubic | 528 | N/A |
| tf_efficientnet_b6 | 84.110 (15.890) | 96.886 (3.114) | 43.04 | Bicubic | 528 | 0.942 |
| tf_efficientnet_b3_ns *tfp | 84.054 (15.946) | 96.918 (3.082) | 12.23 | Bicubic | 300 | N/A |
| tf_efficientnet_b3_ns | 84.048 (15.952) | 96.910 (3.090) | 12.23 | Bicubic | 300 | .904 |
| tf_efficientnet_b5 *tfp | 83.822 (16.178) | 96.756 (3.244) | 30.39 | Bicubic | 456 | N/A |
| tf_efficientnet_b5 | 83.812 (16.188) | 96.748 (3.252) | 30.39 | Bicubic | 456 | 0.934 |
| tf_efficientnet_b4_ap *tfp | 83.278 (16.722) | 96.376 (3.624) | 19.34 | Bicubic | 380 | N/A |
| tf_efficientnet_b4_ap | 83.248 (16.752) | 96.388 (3.612) | 19.34 | Bicubic | 380 | 0.922 |
| tf_efficientnet_b4 | 83.022 (16.978) | 96.300 (3.700) | 19.34 | Bicubic | 380 | 0.922 |
| tf_efficientnet_b4 *tfp | 82.948 (17.052) | 96.308 (3.692) | 19.34 | Bicubic | 380 | N/A |
| tf_efficientnet_b2_ns *tfp | 82.436 (17.564) | 96.268 (3.732) | 9.11 | Bicubic | 260 | N/A |
| tf_efficientnet_b2_ns | 82.380 (17.620) | 96.248 (3.752) | 9.11 | Bicubic | 260 | 0.89 |
| tf_efficientnet_b3_ap *tfp | 81.882 (18.118) | 95.662 (4.338) | 12.23 | Bicubic | 300 | N/A |
| tf_efficientnet_b3_ap | 81.828 (18.172) | 95.624 (4.376) | 12.23 | Bicubic | 300 | 0.904 |
| tf_efficientnet_b3 | 81.636 (18.364) | 95.718 (4.282) | 12.23 | Bicubic | 300 | 0.904 |
| tf_efficientnet_b3 *tfp | 81.576 (18.424) | 95.662 (4.338) | 12.23 | Bicubic | 300 | N/A |
| tf_efficientnet_lite4 | 81.528 (18.472) | 95.668 (4.332) | 13.00 | 덩어리 | 380 | 0.92 |
| tf_efficientnet_b1_ns *tfp | 81.514 (18.486) | 95.776 (4.224) | 7.79 | Bicubic | 240 | N/A |
| tf_efficientnet_lite4 *tfp | 81.502 (18.498) | 95.676 (4.324) | 13.00 | 덩어리 | 380 | N/A |
| tf_efficientnet_b1_ns | 81.388 (18.612) | 95.738 (4.262) | 7.79 | Bicubic | 240 | 0.88 |
| tf_efficientnet_el | 80.534 (19.466) | 95.190 (4.810) | 10.59 | Bicubic | 300 | 0.904 |
| tf_efficientnet_el *tfp | 80.476 (19.524) | 95.200 (4.800) | 10.59 | Bicubic | 300 | N/A |
| tf_efficientnet_b2_ap *tfp | 80.420 (19.580) | 95.040 (4.960) | 9.11 | Bicubic | 260 | N/A |
| tf_efficientnet_b2_ap | 80.306 (19.694) | 95.028 (4.972) | 9.11 | Bicubic | 260 | 0.890 |
| tf_efficientnet_b2 *tfp | 80.188 (19.812) | 94.974 (5.026) | 9.11 | Bicubic | 260 | N/A |
| tf_efficientnet_b2 | 80.086 (19.914) | 94.908 (5.092) | 9.11 | Bicubic | 260 | 0.890 |
| tf_efficientnet_lite3 | 79.812 (20.188) | 94.914 (5.086) | 8.20 | 덩어리 | 300 | 0.904 |
| tf_efficientnet_lite3 *tfp | 79.734 (20.266) | 94.838 (5.162) | 8.20 | 덩어리 | 300 | N/A |
| tf_efficientnet_b1_ap *tfp | 79.532 (20.468) | 94.378 (5.622) | 7.79 | Bicubic | 240 | N/A |
| tf_efficientnet_cc_b1_8e *tfp | 79.464 (20.536) | 94.492 (5.508) | 39.7 | Bicubic | 240 | 0.88 |
| tf_efficientnet_cc_b1_8e | 79.298 (20.702) | 94.364 (5.636) | 39.7 | Bicubic | 240 | 0.88 |
| tf_efficientn_b1_ap | 79.278 (20.722) | 94.308 (5.692) | 7.79 | Bicubic | 240 | 0.88 |
| tf_efficientnet_b1 *tfp | 79.172 (20.828) | 94.450 (5.550) | 7.79 | Bicubic | 240 | N/A |
| tf_efficientnet_em *tfp | 78.958 (21.042) | 94.458 (5.542) | 6.90 | Bicubic | 240 | N/A |
| tf_efficientnet_b0_ns *tfp | 78.806 (21.194) | 94.496 (5.504) | 5.29 | Bicubic | 224 | N/A |
| TF_MIXNET_L *TFP | 78.846 (21.154) | 94.212 (5.788) | 7.33 | 덩어리 | 224 | N/A |
| tf_efficientnet_b1 | 78.826 (21.174) | 94.198 (5.802) | 7.79 | Bicubic | 240 | 0.88 |
| TF_MIXNET_L | 78.770 (21.230) | 94.004 (5.996) | 7.33 | Bicubic | 224 | 0.875 |
| tf_efficientnet_em | 78.742 (21.258) | 94.332 (5.668) | 6.90 | Bicubic | 240 | 0.875 |
| tf_efficientnet_b0_ns | 78.658 (21.342) | 94.376 (5.624) | 5.29 | Bicubic | 224 | 0.875 |
| tf_efficientnet_cc_b0_8e *tfp | 78.314 (21.686) | 93.790 (6.210) | 24.0 | Bicubic | 224 | 0.875 |
| tf_efficientnet_cc_b0_8e | 77.908 (22.092) | 93.656 (6.344) | 24.0 | Bicubic | 224 | 0.875 |
| tf_efficientnet_cc_b0_4e *tfp | 77.746 (22.254) | 93.552 (6.448) | 13.3 | Bicubic | 224 | 0.875 |
| tf_efficientnet_cc_b0_4e | 77.304 (22.696) | 93.332 (6.668) | 13.3 | Bicubic | 224 | 0.875 |
| tf_efficientnet_es *tfp | 77.616 (22.384) | 93.750 (6.250) | 5.44 | Bicubic | 224 | N/A |
| tf_efficientnet_lite2 *tfp | 77.544 (22.456) | 93.800 (6.200) | 6.09 | 덩어리 | 260 | N/A |
| tf_efficientnet_lite2 | 77.460 (22.540) | 93.746 (6.254) | 6.09 | Bicubic | 260 | 0.89 |
| tf_efficientnet_b0_ap *tfp | 77.514 (22.486) | 93.576 (6.424) | 5.29 | Bicubic | 224 | N/A |
| tf_efficientnet_es | 77.264 (22.736) | 93.600 (6.400) | 5.44 | Bicubic | 224 | N/A |
| tf_efficientnet_b0 *tfp | 77.258 (22.742) | 93.478 (6.522) | 5.29 | Bicubic | 224 | N/A |
| tf_efficientnet_b0_ap | 77.084 (22.916) | 93.254 (6.746) | 5.29 | Bicubic | 224 | 0.875 |
| tf_mixnet_m *tfp | 77.072 (22.928) | 93.368 (6.632) | 5.01 | 덩어리 | 224 | N/A |
| tf_mixnet_m | 76.950 (23.050) | 93.156 (6.844) | 5.01 | Bicubic | 224 | 0.875 |
| tf_efficientnet_b0 | 76.848 (23.152) | 93.228 (6.772) | 5.29 | Bicubic | 224 | 0.875 |
| tf_efficientnet_lite1 *tfp | 76.764 (23.236) | 93.326 (6.674) | 5.42 | 덩어리 | 240 | N/A |
| tf_efficientnet_lite1 | 76.638 (23.362) | 93.232 (6.768) | 5.42 | Bicubic | 240 | 0.882 |
| tf_mixnet_s *tfp | 75.800 (24.200) | 92.788 (7.212) | 4.13 | 덩어리 | 224 | N/A |
| TF_MOBILENETV3_LARGE_100 *TFP | 75.768 (24.232) | 92.710 (7.290) | 5.48 | 덩어리 | 224 | N/A |
| TF_MIXNET_S | 75.648 (24.352) | 92.636 (7.364) | 4.13 | Bicubic | 224 | 0.875 |
| TF_MOBILENETV3_LARGE_100 | 75.516 (24.484) | 92.600 (7.400) | 5.48 | 덩어리 | 224 | 0.875 |
| tf_efficientnet_lite0 *tfp | 75.074 (24.926) | 92.314 (7.686) | 4.65 | 덩어리 | 224 | N/A |
| tf_efficientnet_lite0 | 74.842 (25.158) | 92.170 (7.830) | 4.65 | Bicubic | 224 | 0.875 |
| TF_MOBILENETV3_LARGE_075 *TFP | 73.730 (26.270) | 91.616 (8.384) | 3.99 | 덩어리 | 224 | N/A |
| TF_MOBILENETV3_LARGE_075 | 73.442 (26.558) | 91.352 (8.648) | 3.99 | 덩어리 | 224 | 0.875 |
| TF_MOBILENETV3_LARGE_MINIMAL_100 *TFP | 72.678 (27.322) | 90.860 (9.140) | 3.92 | 덩어리 | 224 | N/A |
| TF_MOBILENETV3_LARGE_MINIMAL_100 | 72.244 (27.756) | 90.636 (9.364) | 3.92 | 덩어리 | 224 | 0.875 |
| TF_MOBILENETV3_SMALL_100 *TFP | 67.918 (32.082) | 87.958 (12.042 | 2.54 | 덩어리 | 224 | N/A |
| TF_MOBILENETV3_SMALL_100 | 67.918 (32.082) | 87.662 (12.338) | 2.54 | 덩어리 | 224 | 0.875 |
| TF_MOBILENETV3_SMALL_075 *TFP | 66.142 (33.858) | 86.498 (13.502) | 2.04 | 덩어리 | 224 | N/A |
| TF_MOBILENETV3_SMALL_075 | 65.718 (34.282) | 86.136 (13.864) | 2.04 | 덩어리 | 224 | 0.875 |
| TF_MOBILENETV3_SMALL_MINIMAL_100 *TFP | 63.378 (36.622) | 84.802 (15.198) | 2.04 | 덩어리 | 224 | N/A |
| TF_MOBILENETV3_SMALL_MINIMAL_100 | 62.898 (37.102) | 84.230 (15.770) | 2.04 | 덩어리 | 224 | 0.875 |
* tf-preprocessing 파이프 라인으로 검증 된 TFP 모델
공식 Tensorflow 저장소에서 포팅 된 Google TF 및 Tflite 가중치
모든 개발 및 테스트는 Linux X86-64 시스템의 Conda Python 3 환경, 특히 Python 3.6.x, 3.7.x, 3.8.x에서 수행되었습니다.
사용자는 Windows에 Python 3 Anaconda 설치가 작동한다고보고했습니다. 나는 이것을 직접 확인하지 않았다.
Pytorch 버전 1.4, 1.5, 1.6 은이 코드로 테스트되었습니다.
의존성을 최소화하려고 노력했는데, 설정은 Conda의 Pytorch 기본 설치 지침에 따라 다음과 같습니다.
conda create -n torch-env
conda activate torch-env
conda install -c pytorch pytorch torchvision cudatoolkit=10.2
Pytorch Hub API를 통해 모델에 액세스 할 수 있습니다
>>> 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))
이 패키지는 PIP를 통해 설치할 수 있습니다.
설치 (Conda Env/설치 후) :
pip install geffnet
평가 사용 :
>>> import geffnet
>>> m = geffnet.create_model('mobilenetv3_large_100', pretrained=True)
>>> m.eval()
기차 사용 :
>>> 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()
NN. Sequentient Container, Fast.ai 등을 위해 작성하십시오.
>>> import geffnet
>>> m = geffnet.mixnet_l(pretrained=True, drop_rate=0.25, drop_connect_rate=0.2, as_sequential=True)
스크립트가 포함되어 있습니다
onnx_export.py )onnx_optimize.py 또는 onnx_validate.py w/ --onnx-output-opt arg)onnx_validate.py )onnx_to_caffe.py )로 변환합니다.caffe2_validate.py )에서 검증caffe2_benchmark.py )의 caffe2 벤치 마크예를 들어, Mobilenet-v3 사기 모델을 내보내고 Imagenet 검증을 실행합니다.
python onnx_export.py --model mobilenetv3_large_100 ./mobilenetv3_100.onnx
python onnx_validate.py /imagenet/validation/ --onnx-input ./mobilenetv3_100.onnx
이 스크립트는 Pytorch 1.6 및 Onnx 1.7 w/ onnx 런타임 1.4로 작동하는 것으로 테스트되었습니다. CAFFE2 호환 내보내기에는 이제 내보내기 스크립트에 언급 된 추가 ARG가 필요합니다 (이전 버전에서는 필요하지 않음).
config.py 의 _EXPORTABLE 플래그가 true로 설정되지 않는 한 '동일한'CONV 패드를 활성화 한 TF 포트 가중치를 ONNX로 내보낼 수 없습니다. onnx_export.py 스크립트에서와 같이 config.set_exportable(True) 을 사용하십시오.