RepVGG 对比 Mobilenet、shufflenet等网络的优势有哪些?

链接:https://www.zhihu.com/question/463072759

编辑:深度学习与计算机视觉

声明:仅做学术分享,侵删

作者:金天
https://www.zhihu.com/question/463072759/answer/2549774228

最近一篇苹果的论文放出,手机端1毫秒级延迟的骨干网络模型:

<img src="https://pic1.zhimg.com/50/v2-28716cf138bd1c34146ab5ecfff51f39_720w.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="1762" data-rawheight="1172" class="origin_image zh-lightbox-thumb" width="1762" data-original="https://pic3.zhimg.com/v2-28716cf138bd1c34146ab5ecfff51f39_r.jpg?source=1940ef5c"/><mpchecktext contenteditable="false" id="1660636218067_0.3169825360635774"></mpchecktext> 5f063f2ca41d2ae8172cce12385b013f.jpeg

请注意,为什么叫 MobileOne? 因为只要一毫秒延迟,毫秒级延迟的模型有很多,但是能做到一毫秒的的确不多。这里面有着几倍的差距。苹果不仅仅做到了一毫秒延迟,而且还在Imagenet精度上超越了 Mobilenetv2,Shufflenetv2,Efficient,以及自家的MobileVit系列。

可以说很强,但是,官方并没有Release源代码,好在Facebook已经抢先实现了一波,并且有UP主也训练了一个S0的版本。我们今天要研究的,其实是 MobileOne里面用到的核心技术:重参数化

重参数化可能是未来训练网络必备技能点

前几日刷屏的yolov6,就大量使用了这一技术。当然重参数化并不是什么新东西,去年的RepVGG这篇论文就是引入的这个概念,但是时至今日,我们越来越发现,这玩意儿很好使啊!

为什么好使呢,原因有两个:

  • 可以保证训练的时候学到足够多的信息;

  • 部署的时候融合权重,缩小模型体积。

当然最主要的原因还是,它能做到一个其他任何网络都做不到的技能,那就是 变身,它可以在你准备Deploy这个模型的时候,摇身一变,变成一个极其简单的东西。

看两张图你就明白了:

<img src="https://picx.zhimg.com/50/v2-3b7ed9975511cb7f0c3d8241229ebbd5_720w.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="1092" data-rawheight="1948" class="origin_image zh-lightbox-thumb" width="1092" data-original="https://pic4.zhimg.com/v2-3b7ed9975511cb7f0c3d8241229ebbd5_r.jpg?source=1940ef5c"/><mpchecktext contenteditable="false" id="1660636218082_0.2650375936506064"></mpchecktext> d245cdb986458227c5c9d2bd044023fa.jpeg

这是MobileOne的 默认网络结构图,这玩意你如果要拿去部署,估计你的手机会哭,这不是强人所难么?

但是使用了重参数化之后,你会发现,所以的一切都变得那么顺眼了:

<img src="https://picx.zhimg.com/50/v2-1464aee68d2ee20ea335ca8973c46461_720w.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="310" data-rawheight="1760" class="content_image" width="310"/><mpchecktext contenteditable="false" id="1660636218085_0.08608656316234797"></mpchecktext> 4c90b80c336221369f15211c643e04c9.jpeg

你猜这是啥?这还是 MobileOne,而且这玩意我可以轻而易举的转到WNNX。 就这么简单你就拥有一个 苹果宣称 1ms延迟的骨干网络,而且还是在手机上。

3行代码带你实现上述效果

虽然官方没有开源MobileOne的代码,但是如你所见,我都已经倒出到WNNX了,那必然是可以整的。

git clone https://github.com/jinfagang/nb

或者进入对应git页面,可以从release下载到对应的 权重。

<img src="https://pic4.zhimg.com/50/v2-61a4b3641b2b065b41610a305b5a043c_720w.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="2076" data-rawheight="1258" class="origin_image zh-lightbox-thumb" width="2076" data-original="https://pic2.zhimg.com/v2-61a4b3641b2b065b41610a305b5a043c_r.jpg?source=1940ef5c"/><mpchecktext contenteditable="false" id="1660636218093_0.7408371686414001"></mpchecktext> d688440b56f0ef21d6abe4694838d167.jpeg

运行 test.py 然后我们就可以看到这个结果了:

<img src="https://pic3.zhimg.com/50/v2-93921dab3e70e99e29c180aee3073998_720w.jpg?source=1940ef5c" data-caption="" data-size="normal" data-rawwidth="1194" data-rawheight="190" class="origin_image zh-lightbox-thumb" width="1194" data-original="https://picx.zhimg.com/v2-93921dab3e70e99e29c180aee3073998_r.jpg?source=1940ef5c"/><mpchecktext contenteditable="false" id="1660636218095_0.13535516180288631"></mpchecktext> c214443a7a58957c71031c3b0b04d744.jpeg

简单来说,就是一个 22M 正常大小的模型,在精度不变的情况下,瞬间变成了 8M。

期待有时间的朋友可以试一下 MobileOne 加在目标检测里面的效果,可能 3ms 手机端目标检测可行。或者是实例分割呢?这玩意部署起来不要太容易。

作者:Eyesonme
https://www.zhihu.com/question/463072759/answer/2536477799

RepVGG的优势是训练时候带残差。inference阶段把残差结构折叠了,整个网络就是一个没有分叉的大树干,输入一层过一层,上层特层经过下层后这些特征就直接丢弃不占用存储空间。但是带走残差结构的inference就不一样,残差输入的特征即便进入了下一个卷积也不能立马丢弃,需要在内存中等到后续操作完成后,两者相加才能丢弃。随着残差距离➕长,硬件需要的line buffer越大,这对于很多边缘设备是极其不友好的。


作者:qsc

https://www.zhihu.com/question/463072759/answer/2550039680

一路直筒卷积下来,非常的清爽,用trt之后就是一溜conv+relu,对于嵌入式gpu来说,这样的网络往往即使有更大的参数量也比别的有“复杂”结构的网络要快。

☆ END ☆

如果看到这里,说明你喜欢这篇文章,请转发、点赞。微信搜索「uncle_pn」,欢迎添加小编微信「 woshicver」,每日朋友圈更新一篇高质量博文。

扫描二维码添加小编↓

ffc95718ff8be752f496de700fa21958.jpeg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值