公众号关注 “视学算法”

设为 “星标”,消息即可送达!

作者:akkaze-郑安坤

https://zhuanlan.zhihu.com/p/100609339

本文已由作者授权,未经允许,不得二次转载

一、总纲

cnn中各个参数的辩证矛盾。

深度决定了网络的表达能力,网络越深学习能力越强。

宽度决定了网络在某一层学到的信息量。

感受野决定了网络在某一层看到多大范围,一般说来最后一层一定至少要能看到最大的有意义的物体,更大的感受野通常是无害的。

在达到相同感受野的情况下,多层小卷积核的性能一定比大卷积核更好。

分辨率很重要,尽量不要损失分辨率,为了保住分辨率,在使用下采样之前要保证在这一层上有足够的感受野,这个感受野是相对感受野,是指这一个下采样层相对于上一个下采样层的感受野,把两个下采样之间看成一个子网络的话,这个子网络必须得有一定的感受野才能将空间信息编码到下面的网络去,而具体需要多大的相对感受野,只能实验,一般说来,靠近输入层的层空间信息冗余度最高,所以越靠近输入层相对感受野应该越小。同时在靠近输入层的层,这里可以合成一个大卷积核来降低计算量。

这种矛盾决定了下面的做法:

前面几层下采样频率高一点,中间层下采样频率降低,并使用不下采样的方法提高深度。

网络能深则深,在保持比较小宽度的时候,要想办法加深网络,变深的过程中网络慢慢变胖。

使用小卷积核,小卷积核有利于网络走向更深,并且有更好的识别鲁棒性,尤其是在分辨率更小的特征图上,因为卷积核的尺寸是相当于特征图的分辨率来说的,大特征图上偏大的卷积核其实也并不大。

下采样在网络前几层的密度大一些,(这样能尽可能用微弱精度损失换取速度提升) 越往后下采样的密度应该更小,最终能够下采样的最大深度,以该层的感受野以及数据集中最大的有意义物体尺寸决定(自然不可能让最大有意义的物体在某一层被下采样到分辨率小于1,但是网络依然可以work,只不过最后几层可能废弃了(要相信cnn的学习能力,因为最大不了它也能学出单位卷积,也就是只有中心元素不为0的卷积核),更准确的说这是最大感受野的极限,最大感受野应该覆盖数据集中最大有意义的物体)。

第一层下采样的时候大卷积核能尽可能保住分辨率(其实相当于合成了两三层小卷积核,另外,这和插值是类似的,类比于最近邻插值,双线性插值,双三次插值,这其实和感受野理论一致,更远的插值意味着更大的感受野)。

越靠前分辨率降低越快,中间一定要加深

shortcut connection里,找不到concat,用add凑合吧,在需要量化的场合,add会更好,反之亦然。

先训一个大模型然后裁剪,也许比直接训一个小模型性能好。

能用可分离卷积替代的卷积一定要替代,一般除了第一个卷积,都能替代,替代完后考虑给替代可分离的通道数乘以2,因为可分离卷积的参数和计算量都是线性增长的,这样做依然有速度增益。同样的道理适用于2+1分离卷积。

计算量线性增长,可以控制通道数和depth multiplier,代价小

inception或者shortcut connection或者dense connection其实都相当于ensemble模型,考虑结合使用,shortcut connection的使用几乎是无痛的。

各种inception结构,尤其是后面两种,使用空间分离卷积,计算量小且性能好

二、分割篇(上采样篇,深度估计,光流估计结构设计是类似的)

网络最后面完全可以使用不采样的空洞卷积来做,对于分割尤其如此。

最后面不要再下采样了,会损失很多分辨率,考虑使用aspp来融合不同尺度的感受野

转置卷积完全可以使用上采样+卷积来替代。

几种不同的上采样:(a)先用upsamling或者unpooling然后接两个conv,并使用跳转连接,(b)使用upsampling或者unpooling然后接普通的conv,(c)接转置卷积(d)卷积后使用upsampling或者unpooling

这四种上采样方法里面,a的性能最好,但是计算量最大,b的计算量也很大,c和d的计算量相当,但是c很容易产生棋盘格现象。

a和b还有更加快速的版本,可见

更快版本的upconv和upproj,具体来说就是用四个小卷积核,分别是3x3,2x3,3x2和2x2来代替大卷积核,然后用interleaving来代替unpooling

interleaving的实现如下,可以参见tensorflow的depth_tospace或者pytorch的pixel_shuffle,这就是子像素卷积

interleaving也就是子像素卷积,它也是一种上采样方法

对于分割模型而言,在encoder和decoder之间使用长跳转连接,在encoder和decoder内部使用短跳转连接,尤其是encoder比较深的情况下。

需要短跳转连接,否则中间层无法被有效更新

三、low-level篇

感受野也不是越大越好(大感受野意味着更多的语义信息),对于某些low-level的任务而言,比如图像降噪,感受野可能也就局部patch大小,对于low-level而言,下采样的意义更小,尽可能少使用下采样。

对于low-level而言,感受野不用太大,具体指去噪,去马赛克,图像增强,和关键点等任务

四、检测篇

对于检测,anchor层不一定要有三层,同一层按照需求可以设定的aspect ratio和size都是可选的,比如blazeface使用两层anchor,这个要按照需求设计,事实上不同的层其实代表着不用的scale,三层就是三个scale,两层就是两个scale,一般说来scale分为大中小三种,但是依具体情况而变,主要取决于数据集中的scale分布。

更密集的anchor设置对于密集检测更有利

blazeface使用两层anchor

bifpn真的有用,性能有提升且计算量小。

检测中各种融合不同scale的方法,bifpn取得了性能和速度的最好平衡

batchnorm一定要用,如果你是多机多卡,也可以考虑同步的batchnorm。

如果你的一阶段检测模型得不到好的分类结果,考虑两阶段,先检测再分类。

检测模型里的预训练模型是有用的,至少能提升前景背景的检测区分度。

五、metric learning篇

metric learning(图像比对)一般说来是batchsize更大会性能更好,因为这样能采样到的正负样本对的范围更大。

实际使用中,负样本的空间是非常大的,比正样本大很多,所以需要比较大的采样空间

六、分类篇

如果你的分类精度不够是因为有两类或者多类太相近造成的,考虑使用其他softmax,比如amsoftmax。

各种魔改的softmax能更好的增大类间差距,能够更好的分开softmax分不开的类别

如果你的分类精度不够是样本不均衡造成的,考虑使用focal loss。

不要只看精度,考虑其他metrics,并始终以上线后的可视化效果为最终评判标准。

尽可能使用全卷积网络来做landmark,不要直接用fc回归,回归真的不太稳定。另外,数学意义上的cnn是平移不变的,位置信息是通过padding泄露出来,所以fc直接回归landmark相当于用padding去拟合位置信息。

七、landmark篇

全卷积回归landmark如有必要一定要考虑part affinity fields的做法。

全卷积计算landmark,中间两幅图是heatmap高斯分布,以landmark为中心,下面是part affinity map

part affinity fields是替代picturiol model最好的选择,并且它也是全卷积的,它能极大的提高关节点检测的鲁棒性

两个全卷积分支,上面预测heatmap,小面预测paf,最后过一个parsing把两支结合起来

一定要做图像亮度变换增强,亮度鲁棒性会更好,但是要结合你的数据的亮度分布自适应的调整。

最后,在不改动网络backbone的基础上,多尝试一些新的loss,工程上的代价并不大。

CNN结构设计技巧:兼顾速度精度与工程实现相关推荐

  1. CNN结构设计技巧-兼顾速度精度与工程实现

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨akkaze-郑安坤 来源丨https://zhuanlan.zhihu.com/p/10060 ...

  2. 一些改进模型速度/精度的工程方法

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者:Captain Jack https://zhuanlan.z ...

  3. 阿里达摩院开源DAMO-YOLO:兼顾速度与精度的新目标检测框架

    作者丨陈威华 阿里达摩院智能计算实验室 编辑丨极市平台 1.简介 DAMO-YOLO是一个兼顾速度与精度的目标检测框架,其效果超越了目前的一众YOLO系列方法,在实现SOTA的同时,保持了很高的推理速 ...

  4. 极市直播预告丨阿里达摩院:兼顾速度与精度的高效目标检测框架DAMO-YOLO

    |极市线上分享第106期 | 一直以来,为让大家更好地了解学界业界优秀的论文和工作,极市已邀请了超过100位技术大咖嘉宾,并完成了105期极市线上直播分享.往期分享请前往http://bbs.cvma ...

  5. 达摩院 | DAMO-YOLO:兼顾速度与精度的新目标检测框架

    作者 | 陈威华  编辑 | 极市平台 点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[目标检测]技术交流群 后台回复[2D检测综述] ...

  6. Talk预告 | 阿里巴巴达摩院算法工程师许贤哲:DAMO-YOLO:兼顾速度与精度的高效目标检测框架

    本期为TechBeat人工智能社区第463期线上Talk! 北京时间12月15日(周四)20:00,阿里巴巴达摩院算法工程师--许贤哲的Talk将准时在TechBeat人工智能社区开播! 他与大家分享 ...

  7. 首发 | 驭势科技推出“东风网络”:如何找到速度-精度的最优解?| 技术头条...

    点击上方↑↑↑蓝字关注我们~ 「2019 Python开发者日」全日程揭晓,请扫码咨询 ↑↑↑ 作者 | 驭势科技 给定目标硬件,如何确定最优的速度-精度折衷边界?换言之:给定推断延时的限制,模型能达 ...

  8. Oracle结构设计技巧(访问数据库象访问内存一样 快)

    尽管Oracle系统本身已经提供了若干种对系统性能进行调节的技术,但是,假如数据库设计本身就有问题特别是在结构上设计得尤其糟糕,那你纵有天大的本事又能奈何?因此,Oracle数据库的设计者完全有必要弄 ...

  9. 【CNN结构设计】无痛的涨点技巧:ACNet

    ❝ 论文链接:https://arxiv.org/pdf/1908.03930.pdf ❞ 1. 前言 不知道你是否发现了,CNN的结构创新在这两年已经变得相对很少了,同时要做出有影响力并且Solid ...

最新文章

  1. jpadao层继承什么_ABP框架领域层
  2. 在Ubuntu中永久添加DNS
  3. 语音信号之特性分析图(二)
  4. DCMTK:创建大型(> 4 GB)增强型CT对象的测试
  5. python根据月份获取月初月末_用python获取月末数据
  6. CNI (Container Network Interface)
  7. 互联网晚报 | 3月13日 星期日 |​ ​​上海加强疫情防控:非必要不离沪;MasterGo宣布上线Figma文件导入功能...
  8. android汉字转url,Android将文本中的URL转换为超链接工具类(原文本有超链接标签也适用)...
  9. 年轻人,你的发展上限,取决于这3种能力
  10. 我对hibernate的对象的3种状态的理解
  11. Atitit 高性能架构之道 attilax著 艾龙 著 1. 应用服务与数据隔离 2 2. 负载均衡你问题 2 2.1. 用户的请求由谁来转发到到具体的应用服务器 2 2.2. 有什么转发的算法
  12. 数组操作 from《FORTRAN95 程序设计》
  13. 快速上手python websockets
  14. 数据分析 一文搞懂什么是RFM模型
  15. 出身平凡的郭盛华,究竟是如何逆袭成为传奇人物的?
  16. driver nvidia web_NVIDIA WebDriver
  17. Python——turtle(海龟绘图)
  18. CSS中100%和inherit(继承)的区别,以及inherit的简单应用
  19. 【论文笔记】Achieving URLC: Challenges and Envisioned System Enhancements
  20. 大话设计模式之爱你一万年:第十三章 行为型模式:策略模式:女友在手,说走就走:3.策略模式之三国刘备江东娶夫人

热门文章

  1. 【Codeforces】 2A - Winner (map)
  2. 【ACM】杭电OJ 2034
  3. 穿山甲发布聚合产品GroMore,为开发者变现赋能
  4. 驭势科技引入国家队战略注资,完成超10亿元人民币融资
  5. 深度学习渐趋冷静,为何图形计算却逆势反涨?
  6. 100%的程序员都想挑战的算法趣题!| 码书
  7. 荣耀总裁赵明:AI 是核心战略,全球前五的目标不会变
  8. AI一分钟|美团确认收购摩拜;特斯拉今年第一季度产量创历史新高
  9. CS本科毕业生能拿到45万年薪?
  10. 理解 Linux 的虚拟内存