开源地址:
GitHub - shoutOutYangJie/MobileOne: An Improved One millisecond Mobile Backbone
1060显卡上,224*224,cpu上10ms,gpu上3ms。
测试代码:
if __name__ == '__main__':
model = make_mobileone_s0().cuda(0)
model.eval()
data = torch.rand(1, 3, 224, 224).cuda(0)
for i in range(10):
start = time.time()
out = model(data)
print('time', time.time() - start, out.size())
MobileOne(≈MobileNetV1+RepVGG+训练Trick)是由Apple公司提出的一种基于iPhone12优化的超轻量型架构,在ImageNet数据集上以<1ms的速度取得了75.9%的Top1精度。
为更好的分析高效率网络的瓶颈所在,作者以iPhone12平台为基准,从不同维度进行了"瓶颈"分析,见上图。从中可以看到:
上表从SRCC角度进行了分析,可以看到:
基于上述洞察,作者从先两个主要效率"瓶颈"维度上进行了对比,然后对性能"瓶颈"进行了分析并提出相应方案。
基于上述分析,MobileOne的核心模块基于MobileNetV1而设计,同时吸收了重参数思想,得到上图所示的结构。注:这里的重参数机制还存在一个超参k用于控制重参数分支的数量(实验表明:对于小模型来说,该变种收益更大)。
在Model Scaling方面类似MobileNetV2,上表给出了MobileOne不同配置的参数信息。
在训练优化方面,小模型需要更少的正则,因此作者提出了Annealing的正则调整机制(可带来0.5%指标提升);此外,作者还引入渐进式学习机制(可带来0.4%指标提升);最后,作者还采用EMA机制,最终MobileOne-S2模型达到了77.4%的指标。
上表给出了ImageNet数据集上不同轻量型方案的性能与效率对比,可以看到:
上表为MS-COCO检测、VOC分割以及ADE20K分割任务上的性能对比,很明显:
在文章最后,作者俏皮的提了一句:"Although, our models are state-of-the art within the regime of efficient architectures, the accuracy lags large models ConvNeXt and Swin Transformer"。笔者想说的是:看上图。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/jacke121/article/details/125512124
内容来源于网络,如有侵权,请联系作者删除!