PyTorch 的(通用)EfficientNets
项目描述
PyTorch 的(通用)EfficientNets
EfficientNet、MixNet、MobileNetV3 等的“通用”实现,涵盖了从 MobileNet V1/V2 块序列派生的大多数计算/参数高效架构,包括通过自动神经架构搜索找到的架构。
所有模型均由 GenEfficientNet 或 MobileNetV3 类实现,具有基于字符串的体系结构定义来配置块布局(来自此处的想法)
什么是新的
2020 年 8 月 19 日
- 添加更新的 PyTorch 训练的 EfficientNet-B3 权重,由我自己训练
timm(82.1 top-1) - 添加由@hal-314贡献的 PyTorch 训练的 EfficientNet-Lite0 (75.5 top-1)
- 更新 ONNX 和 Caffe2 导出/实用程序脚本以使用最新的 PyTorch/ONNX
- 添加了基于 ONNX 运行时的验证脚本
timm激活(大部分)与等效项同步
2020 年 4 月 5 日
- 添加一些新训练的 MobileNet-V2 模型,这些模型使用最新的 h 参数、rand augment 进行训练。它们与 EfficientNet-Lite 相比相当有利
- 3.5M 参数 MobileNet-V2 100 @ 73%
- 4.5M 参数 MobileNet-V2 110d @ 75%
- 6.1M 参数 MobileNet-V2 140 @ 76.5%
- 5.8M 参数 MobileNet-V2 120d @ 77.3%
2020 年 3 月 23 日
- 添加具有从Tensorflow TPU移植的权重的 EfficientNet-Lite 模型
- 添加 PyTorch 训练的 MobileNet-V3 具有 75.77% top-1 的大权重
- 重要更改(如果从头开始训练)- 更改权重 init 以更好地匹配 Tensorflow impl,设置
fix_group_fanout=False为initialize_weight_goog旧行为
2020 年 2 月 12 日
- 添加从Tensorflow TPU移植的 EfficientNet-L2 和 B0-B7 NoisyStudent 权重
- 从 TF TPU 移植新的 EfficientNet-B8 (RandAugment) 权重,这些不同于 B8 AdvProp,不同的输入归一化。
- 添加 RandAugment PyTorch 训练的 EfficientNet-ES (EdgeTPU-Small) 权重,权重为 78.1 top-1。由安德鲁·拉文训练
2020 年 1 月 22 日
- 使用最新的 RandAugment 训练权重更新 EfficientNet B0、B2、B3 和 MixNet-XL 的权重。受过训练(https://github.com/rwightman/pytorch-image-models)
- 修复 PyTorch 1.4 的 torchscript 兼容性,使用 ModuleDict 添加对 MixedConv2d 的 torchscript 支持
- 使用 PyTorch 1.4 测试模型、torchscript、onnx 导出——没问题
2019 年 11 月 22 日
- 新的前1高!移植官方 TF EfficientNet AdvProp ( https://arxiv.org/abs/1911.09665 ) 权重和 B8 模型规范。创建了一组新
ap模型,因为它们使用与原始 EfficientNet 基础/AA/RA 权重不同的预处理(初始均值/标准差)。
2019 年 11 月 15 日
- 移植官方 TF MobileNet-V3 float32 large/small/minimalistic weights
- 修改 MobileNet-V3 模型和组件以支持 TF MobileNet-V3 和我的差异所需的一些额外配置
2019 年 10 月 30 日
- 许多模型现在可以使用 torch.jit.script,MixNet 是最大的例外
- 改进了启用 torchscript 或 ONNX 导出兼容模式的界面(通过配置)
- 除了内存高效的 autgrad.fn 之外,还添加了 JIT 优化的内存高效 Swish/Mish autograd.fn
- 激活工厂按名称选择最佳激活版本或全局覆盖一个
- 添加处理输入转换和分类器更改的预训练检查点加载助手
2019 年 10 月 27 日
- 添加从https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/condconv移植的 CondConv EfficientNet 变体
- 从https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet为 TF EfficientNet B5 和 B7 添加 RandAug 权重
- 从我的 pytorch-image-models 代码库中引入 MixNet-XL 模型和深度缩放算法
- 将激活和全局池切换到模块
- 添加节省内存的 Swish/Mish impl
- 将 as_sequential() 方法添加到所有模型并允许作为入口点 fns 中的参数
- 将 MobileNetV3 移动到自己的文件中,因为它有不同的头部
- 删除 ChamNet、MobileNet V2/V1,因为它们可能永远不会在这里使用
楷模
实施的模型包括:
- EfficientNet NoisyStudent (B0-B7, L2) ( https://arxiv.org/abs/1911.04252 )
- EfficientNet AdvProp (B0-B8) ( https://arxiv.org/abs/1911.09665 )
- EfficientNet (B0-B8) ( https://arxiv.org/abs/1905.11946 )
- EfficientNet-EdgeTPU (S, M, L) ( https://ai.googleblog.com/2019/08/efficientnet-edgetpu-creating.html )
- EfficientNet-CondConv ( https://arxiv.org/abs/1904.04971 )
- EfficientNet-Lite ( https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet/lite )
- MixNet ( https://arxiv.org/abs/1907.09595 )
- MNASNet B1、A1(Squeeze-Excite)和 Small ( https://arxiv.org/abs/1807.11626 )
- MobileNet-V3 ( https://arxiv.org/abs/1905.02244 )
- FBNet-C ( https://arxiv.org/abs/1812.03443 )
- 单路径 NAS ( https://arxiv.org/abs/1904.02877 )
我最初在这里用代码实现和训练了一些模型,这个存储库只包含 GenEfficientNet 模型、验证和相关的 ONNX/Caffe2 导出代码。
预训练
我已经设法训练了几个模型,使其精度接近或高于原始论文和官方 impl。我的训练代码在这里:https ://github.com/rwightman/pytorch-image-models
| 模型 | Prec@1 (错误) | Prec@5 (错误) | 参数#(M) | MAdds(M) | 图像缩放 | 解析度 | 庄稼 |
|---|---|---|---|---|---|---|---|
| 高效网络_b3 | 82.240 (17.760) | 96.116 (3.884) | 12.23 | 待定 | 双三次 | 320 | 1.0 |
| 高效网络_b3 | 82.076 (17.924) | 96.020 (3.980) | 12.23 | 待定 | 双三次 | 300 | 0.904 |
| mixnet_xl | 81.074 (18.926) | 95.282 (4.718) | 11.90 | 待定 | 双三次 | 256 | 1.0 |
| 高效网络_b2 | 80.612 (19.388) | 95.318 (4.682) | 9.1 | 待定 | 双三次 | 288 | 1.0 |
| mixnet_xl | 80.476 (19.524) | 94.936 (5.064) | 11.90 | 待定 | 双三次 | 224 | 0.875 |
| 高效网络_b2 | 80.288 (19.712) | 95.166 (4.834) | 9.1 | 1003 | 双三次 | 260 | 0.890 |
| mixnet_l | 78.976 (21.024 | 94.184 (5.816) | 7.33 | 待定 | 双三次 | 224 | 0.875 |
| 高效网络_b1 | 78.692 (21.308) | 94.086 (5.914) | 7.8 | 694 | 双三次 | 240 | 0.882 |
| 高效网络 | 78.066 (21.934) | 93.926 (6.074) | 5.44 | 待定 | 双三次 | 224 | 0.875 |
| 高效网络_b0 | 77.698 (22.302) | 93.532 (6.468) | 5.3 | 390 | 双三次 | 224 | 0.875 |
| mobilenetv2_120d | 77.294 (22.706 | 93.502 (6.498) | 5.8 | 待定 | 双三次 | 224 | 0.875 |
| mixnet_m | 77.256 (22.744) | 93.418 (6.582) | 5.01 | 353 | 双三次 | 224 | 0.875 |
| mobilenetv2_140 | 76.524 (23.476) | 92.990 (7.010) | 6.1 | 待定 | 双三次 | 224 | 0.875 |
| mixnet_s | 75.988 (24.012) | 92.794 (7.206) | 4.13 | 待定 | 双三次 | 224 | 0.875 |
| mobilenetv3_large_100 | 75.766 (24.234) | 92.542 (7.458) | 5.5 | 待定 | 双三次 | 224 | 0.875 |
| mobilenetv3_rw | 75.634 (24.366) | 92.708 (7.292) | 5.5 | 219 | 双三次 | 224 | 0.875 |
| 高效网络精简版0 | 75.472 (24.528) | 92.520 (7.480) | 4.65 | 待定 | 双三次 | 224 | 0.875 |
| mnasnet_a1 | 75.448 (24.552) | 92.604 (7.396) | 3.9 | 312 | 双三次 | 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 | 待定 | 双三次 | 224 | 0.875 |
| mnasnet_b1 | 74.658 (25.342) | 92.114 (7.886) | 4.4 | 315 | 双三次 | 224 | 0.875 |
| spnasnet_100 | 74.084 (25.916) | 91.818 (8.182) | 4.4 | 待定 | 双线性 | 224 | 0.875 |
| mobilenetv2_100 | 72.978 (27.022) | 91.016 (8.984) | 3.5 | 待定 | 双三次 | 224 | 0.875 |
更多预训练模型即将推出...
移植重量
一旦添加了相同的卷积填充等效项,并且通过 cmd 行 args 使用相同的裁剪因子、图像缩放等(见表),从 EfficientNet 模型的 Tensorflow 检查点移植的权重在 Tensorflow 中的准确度几乎匹配。
重要的:
- 用于 EfficientNet AdvProp (AP)、EfficientNet EdgeTPU、EfficientNet-CondConv、EfficientNet-Lite 和 MobileNet-V3 模型的 Tensorflow 移植权重使用 Inception 样式 (0.5, 0.5, 0.5) 表示均值和标准差。
- 在验证时启用 Tensorflow 预处理管道
--tf-preprocessing将提高 0.1-0.5% 的分数,非常接近原始 TF impl。
要对 tf_efficientnet_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 预处理的验证:
python validate.py /path/to/imagenet/validation/ --model tf_efficientnet_b5 -b 64 --img-size 456 --tf-preprocessing
使用 Inception 预处理对模型运行验证,即 EfficientNet-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
| 模型 | Prec@1 (错误) | Prec@5 (错误) | 参数# | 图像缩放 | 图片尺寸 | 庄稼 |
|---|---|---|---|---|---|---|
| tf_efficientnet_l2_ns *tfp | 88.352 (11.648) | 98.652 (1.348) | 480 | 双三次 | 800 | 不适用 |
| tf_efficientnet_l2_ns | 待定 | 待定 | 480 | 双三次 | 800 | 0.961 |
| tf_efficientnet_l2_ns_475 | 88.234 (11.766) | 98.546 (1.454) | 480 | 双三次 | 475 | 0.936 |
| tf_efficientnet_l2_ns_475 *tfp | 88.172 (11.828) | 98.566 (1.434) | 480 | 双三次 | 475 | 不适用 |
| tf_efficientnet_b7_ns *tfp | 86.844 (13.156) | 98.084 (1.916) | 66.35 | 双三次 | 600 | 不适用 |
| tf_efficientnet_b7_ns | 86.840 (13.160) | 98.094 (1.906) | 66.35 | 双三次 | 600 | 不适用 |
| tf_efficientnet_b6_ns | 86.452 (13.548) | 97.882 (2.118) | 43.04 | 双三次 | 528 | 不适用 |
| tf_efficientnet_b6_ns *tfp | 86.444 (13.556) | 97.880 (2.120) | 43.04 | 双三次 | 528 | 不适用 |
| tf_efficientnet_b5_ns *tfp | 86.064 (13.936) | 97.746 (2.254) | 30.39 | 双三次 | 456 | 不适用 |
| tf_efficientnet_b5_ns | 86.088 (13.912) | 97.752 (2.248) | 30.39 | 双三次 | 456 | 不适用 |
| tf_efficientnet_b8_ap *tfp | 85.436 (14.564) | 97.272 (2.728) | 87.4 | 双三次 | 672 | 不适用 |
| tf_efficientnet_b8 *tfp | 85.384 (14.616) | 97.394 (2.606) | 87.4 | 双三次 | 672 | 不适用 |
| tf_efficientnet_b8 | 85.370 (14.630) | 97.390 (2.610) | 87.4 | 双三次 | 672 | 0.954 |
| tf_efficientnet_b8_ap | 85.368 (14.632) | 97.294 (2.706) | 87.4 | 双三次 | 672 | 0.954 |
| tf_efficientnet_b4_ns *tfp | 85.298 (14.702) | 97.504 (2.496) | 19.34 | 双三次 | 380 | 不适用 |
| tf_efficientnet_b4_ns | 85.162 (14.838) | 97.470 (2.530) | 19.34 | 双三次 | 380 | 0.922 |
| tf_efficientnet_b7_ap *tfp | 85.154 (14.846) | 97.244 (2.756) | 66.35 | 双三次 | 600 | 不适用 |
| tf_efficientnet_b7_ap | 85.118 (14.882) | 97.252 (2.748) | 66.35 | 双三次 | 600 | 0.949 |
| tf_efficientnet_b7 *tfp | 84.940 (15.060) | 97.214 (2.786) | 66.35 | 双三次 | 600 | 不适用 |
| tf_efficientnet_b7 | 84.932 (15.068) | 97.208 (2.792) | 66.35 | 双三次 | 600 | 0.949 |
| tf_efficientnet_b6_ap | 84.786 (15.214) | 97.138 (2.862) | 43.04 | 双三次 | 528 | 0.942 |
| tf_efficientnet_b6_ap *tfp | 84.760 (15.240) | 97.124 (2.876) | 43.04 | 双三次 | 528 | 不适用 |
| tf_efficientnet_b5_ap *tfp | 84.276 (15.724) | 96.932 (3.068) | 30.39 | 双三次 | 456 | 不适用 |
| tf_efficientnet_b5_ap | 84.254 (15.746) | 96.976 (3.024) | 30.39 | 双三次 | 456 | 0.934 |
| tf_efficientnet_b6 *tfp | 84.140 (15.860) | 96.852 (3.148) | 43.04 | 双三次 | 528 | 不适用 |
| tf_efficientnet_b6 | 84.110 (15.890) | 96.886 (3.114) | 43.04 | 双三次 | 528 | 0.942 |
| tf_efficientnet_b3_ns *tfp | 84.054 (15.946) | 96.918 (3.082) | 12.23 | 双三次 | 300 | 不适用 |
| tf_efficientnet_b3_ns | 84.048 (15.952) | 96.910 (3.090) | 12.23 | 双三次 | 300 | .904 |
| tf_efficientnet_b5 *tfp | 83.822 (16.178) | 96.756 (3.244) | 30.39 | 双三次 | 456 | 不适用 |
| tf_efficientnet_b5 | 83.812 (16.188) | 96.748 (3.252) | 30.39 | 双三次 | 456 | 0.934 |
| tf_efficientnet_b4_ap *tfp | 83.278 (16.722) | 96.376 (3.624) | 19.34 | 双三次 | 380 | 不适用 |
| tf_efficientnet_b4_ap | 83.248 (16.752) | 96.388 (3.612) | 19.34 | 双三次 | 380 | 0.922 |
| tf_efficientnet_b4 | 83.022 (16.978) | 96.300 (3.700) | 19.34 | 双三次 | 380 | 0.922 |
| tf_efficientnet_b4 *tfp | 82.948 (17.052) | 96.308 (3.692) | 19.34 | 双三次 | 380 | 不适用 |
| tf_efficientnet_b2_ns *tfp | 82.436 (17.564) | 96.268 (3.732) | 9.11 | 双三次 | 260 | 不适用 |
| tf_efficientnet_b2_ns | 82.380 (17.620) | 96.248 (3.752) | 9.11 | 双三次 | 260 | 0.89 |
| tf_efficientnet_b3_ap *tfp | 81.882 (18.118) | 95.662 (4.338) | 12.23 | 双三次 | 300 | 不适用 |
| tf_efficientnet_b3_ap | 81.828 (18.172) | 95.624 (4.376) | 12.23 | 双三次 | 300 | 0.904 |
| tf_efficientnet_b3 | 81.636 (18.364) | 95.718 (4.282) | 12.23 | 双三次 | 300 | 0.904 |
| tf_efficientnet_b3 *tfp | 81.576 (18.424) | 95.662 (4.338) | 12.23 | 双三次 | 300 | 不适用 |
| 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 | 双三次 | 240 | 不适用 |
| tf_efficientnet_lite4 *tfp | 81.502 (18.498) | 95.676 (4.324) | 13.00 | 双线性 | 380 | 不适用 |
| tf_efficientnet_b1_ns | 81.388 (18.612) | 95.738 (4.262) | 7.79 | 双三次 | 240 | 0.88 |
| tf_efficientnet_el | 80.534 (19.466) | 95.190 (4.810) | 10.59 | 双三次 | 300 | 0.904 |
| tf_efficientnet_el *tfp | 80.476 (19.524) | 95.200 (4.800) | 10.59 | 双三次 | 300 | 不适用 |
| tf_efficientnet_b2_ap *tfp | 80.420 (19.580) | 95.040 (4.960) | 9.11 | 双三次 | 260 | 不适用 |
| tf_efficientnet_b2_ap | 80.306 (19.694) | 95.028 (4.972) | 9.11 | 双三次 | 260 | 0.890 |
| tf_efficientnet_b2 *tfp | 80.188 (19.812) | 94.974 (5.026) | 9.11 | 双三次 | 260 | 不适用 |
| tf_efficientnet_b2 | 80.086 (19.914) | 94.908 (5.092) | 9.11 | 双三次 | 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 | 不适用 |
| tf_efficientnet_b1_ap *tfp | 79.532 (20.468) | 94.378 (5.622) | 7.79 | 双三次 | 240 | 不适用 |
| tf_efficientnet_cc_b1_8e *tfp | 79.464 (20.536) | 94.492 (5.508) | 39.7 | 双三次 | 240 | 0.88 |
| tf_efficientnet_cc_b1_8e | 79.298 (20.702) | 94.364 (5.636) | 39.7 | 双三次 | 240 | 0.88 |
| tf_efficientnet_b1_ap | 79.278 (20.722) | 94.308 (5.692) | 7.79 | 双三次 | 240 | 0.88 |
| tf_efficientnet_b1 *tfp | 79.172 (20.828) | 94.450 (5.550) | 7.79 | 双三次 | 240 | 不适用 |
| tf_efficientnet_em *tfp | 78.958 (21.042) | 94.458 (5.542) | 6.90 | 双三次 | 240 | 不适用 |
| tf_efficientnet_b0_ns *tfp | 78.806 (21.194) | 94.496 (5.504) | 5.29 | 双三次 | 224 | 不适用 |
| tf_mixnet_l *tfp | 78.846 (21.154) | 94.212 (5.788) | 7.33 | 双线性 | 224 | 不适用 |
| tf_efficientnet_b1 | 78.826 (21.174) | 94.198 (5.802) | 7.79 | 双三次 | 240 | 0.88 |
| tf_mixnet_l | 78.770 (21.230) | 94.004 (5.996) | 7.33 | 双三次 | 224 | 0.875 |
| tf_efficientnet_em | 78.742 (21.258) | 94.332 (5.668) | 6.90 | 双三次 | 240 | 0.875 |
| tf_efficientnet_b0_ns | 78.658 (21.342) | 94.376 (5.624) | 5.29 | 双三次 | 224 | 0.875 |
| tf_efficientnet_cc_b0_8e *tfp | 78.314 (21.686) | 93.790 (6.210) | 24.0 | 双三次 | 224 | 0.875 |
| tf_efficientnet_cc_b0_8e | 77.908 (22.092) | 93.656 (6.344) | 24.0 | 双三次 | 224 | 0.875 |
| tf_efficientnet_cc_b0_4e *tfp | 77.746 (22.254) | 93.552 (6.448) | 13.3 | 双三次 | 224 | 0.875 |
| tf_efficientnet_cc_b0_4e | 77.304 (22.696) | 93.332 (6.668) | 13.3 | 双三次 | 224 | 0.875 |
| tf_efficientnet_es *tfp | 77.616 (22.384) | 93.750 (6.250) | 5.44 | 双三次 | 224 | 不适用 |
| tf_efficientnet_lite2 *tfp | 77.544 (22.456) | 93.800 (6.200) | 6.09 | 双线性 | 260 | 不适用 |
| tf_efficientnet_lite2 | 77.460 (22.540) | 93.746 (6.254) | 6.09 | 双三次 | 260 | 0.89 |
| tf_efficientnet_b0_ap *tfp | 77.514 (22.486) | 93.576 (6.424) | 5.29 | 双三次 | 224 | 不适用 |
| tf_efficientnet_es | 77.264 (22.736) | 93.600 (6.400) | 5.44 | 双三次 | 224 | 不适用 |
| tf_efficientnet_b0 *tfp | 77.258 (22.742) | 93.478 (6.522) | 5.29 | 双三次 | 224 | 不适用 |
| tf_efficientnet_b0_ap | 77.084 (22.916) | 93.254 (6.746) | 5.29 | 双三次 | 224 | 0.875 |
| tf_mixnet_m *tfp | 77.072 (22.928) | 93.368 (6.632) | 5.01 | 双线性 | 224 | 不适用 |
| tf_mixnet_m | 76.950 (23.050) | 93.156 (6.844) | 5.01 | 双三次 | 224 | 0.875 |
| tf_efficientnet_b0 | 76.848 (23.152) | 93.228 (6.772) | 5.29 | 双三次 | 224 | 0.875 |
| tf_efficientnet_lite1 *tfp | 76.764 (23.236) | 93.326 (6.674) | 5.42 | 双线性 | 240 | 不适用 |
| tf_efficientnet_lite1 | 76.638 (23.362) | 93.232 (6.768) | 5.42 | 双三次 | 240 | 0.882 |
| tf_mixnet_s *tfp | 75.800 (24.200) | 92.788 (7.212) | 4.13 | 双线性 | 224 | 不适用 |
| tf_mobilenetv3_large_100 *tfp | 75.768 (24.232) | 92.710 (7.290) | 5.48 | 双线性 | 224 | 不适用 |
| tf_mixnet_s | 75.648 (24.352) | 92.636 (7.364) | 4.13 | 双三次 | 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 | 不适用 |
| tf_efficientnet_lite0 | 74.842 (25.158) | 92.170 (7.830) | 4.65 | 双三次 | 224 | 0.875 |
| tf_mobilenetv3_large_075 *tfp | 73.730 (26.270) | 91.616 (8.384) | 3.99 | 双线性 | 224 | 不适用 |
| 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 | 不适用 |
| 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 | 不适用 |
| 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 | 不适用 |
| 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 | 不适用 |
| 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 权重
- https://github.com/tensorflow/tpu/tree/master/models/official/mnasnet
- https://github.com/tensorflow/tpu/tree/master/models/official/efficientnet
- https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet
用法
环境
所有开发和测试都在 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 集线器
可以通过 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/install 之后):
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.Sequential 容器中创建,用于 fast.ai 等:
>>> import geffnet
>>> m = geffnet.mixnet_l(pretrained=True, drop_rate=0.25, drop_connect_rate=0.2, as_sequential=True)
出口
脚本包含在
- 将模型导出到 ONNX (
onnx_export.py) - 优化的 ONNX 图(
onnx_optimize.py或onnx_validate.pyw/--onnx-output-optarg) - 使用 ONNX 运行时验证 (
onnx_validate.py) - 将 ONNX 模型转换为 Caffe2 (
onnx_to_caffe.py) - 在 Caffe2 (
caffe2_validate.py)中验证 - Caffe2 中带 FLOP 的基准,参数输出 (
caffe2_benchmark.py)
例如,要导出 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 兼容导出现在需要导出脚本中提到的附加参数(早期版本不需要)。
导出备注
_EXPORTABLE除非标志 inconfig.py设置为 True ,否则激活了“SAME”conv 填充的 TF 移植权重无法导出到 ONNX 。config.set_exportable(True)在onnx_export.py脚本中使用。- 具有“相同”填充的 TF 移植模型将在导出时将填充固定为用于导出的分辨率。即使 opset >= 11 支持动态填充,我也无法让它工作。
- ONNX 优化工具在 PyTorch 1.6 / ONNX 1.7 中无法可靠运行。幸运的是,基于 onnxruntime 的推理现在运行良好,包括动态优化。
- ONNX / Caffe2 导出/导入经常因不同的 PyTorch 和 ONNX 版本版本而中断。请在此处提交问题之前检查他们各自的问题跟踪器。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。