点击上方“CVer”,选择加"星标"或“置顶”
重磅干货,第一时间送达
本文授权转载自:GiantPandaCV
我之前回答了一个深度学习调参的问题,整理了从2019年月1到12月的一些经验,没想到这几天竟然火起来了,2天之内涨了快300赞同,看来大家还是比较关注这方面的。然后昨天晚上,旷视的akkaze-郑安坤
也发表了他的调参技巧,也是非常的实用和精炼,因此在取得了他的授权后,我在这篇推文转载他的回答同时附上我自己这一年所总结的技巧。我觉得这些方法应该让更多人看看,给大家一些帮助,一些启发,所以就有了这篇文章。文章一共分为两部分,一部分为akkaze
的调参技巧,另一部分为BBuf
的调参技巧,均总结在2020年元旦前。
知乎原网址:https://www.zhihu.com/question/25097993/answer/951697614
网络能深则深,在保持比较小宽度的时候,要想办法加深网络,变深的过程中网络慢慢变胖。
使用小卷积核,小卷积核有利于网络走向更深,并且有更好的识别鲁棒性。
下采样在网络前几层的密度大一些,(这样能尽可能用微弱精度损失换取速度提升) 越往后下采样的密度应该更小,最终能够下采样的最大深度,以该层的感受野以及数据集中最大的有意义物体尺寸决定(自然不可能让最大有意义的物体在某一层被下采样到分辨率小于1,但是网络依然可以work,只不过最后几层可能废弃了(相信cnn的学习能力,因为最大不了它也能学出单位卷积,只有中心元素不为0的卷积核),更准确的说这是最大感受野的极限,最大感受野覆盖最大有意义的物体)。
所以一般做法是前面几层下采样频率高一点,中间层下采样频率降低,并使用不下采样的方法提高深度。 越靠前分辨率降低越快,中间一定要加深
shortcut connection里,找不到concat,用add凑合吧,反之亦然。
先训一个大模型然后裁剪,也许比直接训一个小模型性能好。
网络最后面完全可以使用不采样的空洞卷积来做,对于分割尤其如此。
最后面不要再下采样了,考虑使用aspp来融合不同尺度的感受野
转置卷积完全可以使用上采样+卷积来替代。
能用可分离卷积替代的卷积一定要替代,一般除了第一个卷积,都能替代,替代完后考虑给替代可分离的通道数乘以2,因为可分离卷积的参数和计算量都是线性增长的,这样做依然有速度增益。同样的道理适用于2+1分离卷积。 计算量线性增长,可以控制通道数和depth multiplier,代价小
inception或者shortcut connection或者dense connection其实都相当于ensemble模型,考虑结合使用,shortcut connection的使用几乎是无痛的。
感受野也不是越大越好(大感受野意味着更多的语义信息),对于某些low-level的任务而言,比如图像降噪,感受野可能也就局部patch大小,对于low-level而言,下采样的意义更小,尽可能少使用下采样。 对于low-level而言,感受野不用太大,具体指去噪,去马赛克,图像增强,和关键点等任务。
对于检测,anchor层不一定要有三层,同一层按照需求可以设定的aspect ratio和size都是可选的,比如blazeface把所有anchor集中在一层,这个要按照需求设计。bifpn真的有用。
batchnorm一定要用,如果你是多机多卡,也可以考虑同步的batchnorm。
metric learning(图像比对)一般说来是batchsize更大会性能更好,因为这样能采样到的正负样本对的范围更大。
如果你的一阶段检测模型得不到好的分类结果,考虑两阶段,先检测再分类。
检测模型里的预训练模型是有用的,至少能提升前景背景的检测区分度。
如果你的分类精度不够是因为有两类或者多类太相近造成的,考虑使用其他softmax,比如amsoftmax。 各种魔改的softmax能更好的增大类间差距。
如果你的分类精度不够是样本不均衡造成的,考虑使用focal loss。
不要只看精度,考虑其他metrics,并始终以上线后的可视化效果为最终评判标准。
尽可能使用全卷积网络来做landmark,不要直接用fc回归,回归真的不太稳定。
一定要做图像亮度变换增强,亮度鲁棒性会更好,但是要结合你的数据的亮度分布自适应的调整。
最后,在不改动网络backbone的基础上,多尝试一些新的loss,工程上的代价并不大。
先声明,我只是一个入行刚一年的民工,深度自然和广度自然没有akkaze
那么强,所以不免有错误或者没有描述清楚之处,有任何问题请联系我。
VGG16
吧。两个
的卷积核堆叠能获得
卷积核的感受野并且参数比
卷积核少,所以是大量推荐使用的。
fusion
到
卷积核上,在许多经典CV任务上都可以获得大概1个点的提升。大家可以看看这篇文章解读,来自公众号AI科技评论。
3*3
卷积+1*3
卷积+3*1
卷积=白给的精度提升
weight
的初始化我一般都是使用
xavier
初始化。当然也可以可以尝试何凯明大神的He初始化。对于bias的初始化全置于0。
Batch Normalization
。这是我一直在使用的技巧,可以很大程度的加快收敛速度。建议搭建自己网络的时候尽量加上
BN
,如果有
BN
了全连接层就没必要加
Dropout
了。
fpn
结构。在针对自己的数据调检测任务如
yolov3
的时候不能盲目砍掉
fpn
结构,尽管你分析出某个分支的Anchor基本不可能会对你预测的目标起作用,但如果你直接去掉分支很可能会带来漏检。
SGD
。如果优化不动可以试试
Adam
。
ReLU
做一版,如果想再提升精度可以将
ReLU
改成
PReLU
试试。我更倾向于直接使用
ReLU
。
batch_size
:在不同类型的任务中,
batch_size
的影响也不同,大家可以看看这篇
batch_size
对模型性能影响的文章,来自公众号AI开发者。
Batch_size是怎么影响模型性能的
0.01
开始设置,我个人认为这个学习率和学习率衰减策略是相关的,但不宜设置的过大过小,
0.01
和
0.1
应该是比较常用的。学习率衰减策略我一般使用
multistep
方式,
step_size
的设置要看视你的的
max_iter
而定。
zero-center
。第一次见到这个词是在看cs231n的视频上。主要有2个步骤,第一个是减均值,第二个是除以方差。这样做下来最后的输入值域为
[-1,1]
,一般减均值是最常用的,后面的除以方差用不用可能需要自己动手试验一下看看效果。
resnet
的残差结构和
dense net
密集连接结构,做工程的时候考虑到速度近乎不可能说完全使用完整版本的
resnet
和
densenet
的完整结构,但我们可以自己动手将我们网络的某些模块替换为残差结构和密集连接,替换的时候可以适当降低这俩结构的复杂度,类似于通道数减半,密集连接中只保留一半连接等等。这里需要做一些消融实验来验证改进后的精度。
loss
一般是对模型的泛化性能有所改善的,但在用
loss
的时候往往并不是直接替换
loss
那么简单,需要仔细思考
loss
背后的数学原理,要用对地方才可有提升。例如,如何将Focal Loss用到YOLOv3中提升
map
,大家可以看看这个帖子。https://www.zhihu.com/question/293369755。
map
值,
miou
值等。并且在调参时建议将调整的参数和在测试集上的精度组合成一个字符串给模型重命令,方便之后快速
review
。
backbone
的网络,如训练
VGG16-SSD
建议选择
finetune
的方式,从头训练不仅费时费力,甚至难以收敛。
upsamling
加
3*3
卷积代替反卷积做上采样得到的结果更平滑,并且
miou
差距不大,所以我认为这两者都是都可以使用的。
Anchor-based
目标检测算法为了提高精度,都是疯狂给框,ap值确实上去了,但也导致了
fp
会很多,并且这部分
fp
没有回归,在
nms
阶段也可能滤不掉。相比于
ap
提升而言,工程上减少
fp
也很重要。
Gaussian yolov3
的
fp
相比于
yolov3
会减少
40%
,
Anchor-free
算法暂时接触得不多,就不太了解了。
VGG16
提取出的特征向量维度是
[N,c1]
,
ResNet50
提取的特征向量维度是
[N,c2]
,
Xception
提取的特征向量维度是
[N, c3]
,那么我们可以使用三个系数
a、b、c
将其组合为形状为
[N, a*c1+b*c2+c*c3]
,其中
a、b、c
三个参数的取值代表我们使用哪个模型的特征多一些,如果是分类回归比赛,我们在后面接特征处理网络就可以了。可以取不同的
a、b、c
得到不同的特征,然后对结果做
voting
,
soft-voting
等多种处理,一般结果不会太差啦。
batch_size
,优化器)训练出不同模型,然后做ensemble。
希望上面的调参技巧可以帮助你在2020模型涨点,BUG减减,在这里先祝大家新年快乐QAQ。
CVer 推荐阅读
一文看尽9篇目标检测最新论文(MFPN/CR-NAS/Scale Match/Dense RepPoints等)
重磅!CVer-学术交流群已成立
扫码可添加CVer助手,可申请加入CVer大群和细分方向群,细分方向已涵盖:目标检测、图像分割、目标跟踪、人脸检测&识别、OCR、姿态估计、超分辨率、SLAM、医疗影像、Re-ID、GAN、NAS、深度估计、自动驾驶、强化学习、车道线检测、模型剪枝&压缩、去噪、去雾、去雨、风格迁移、遥感图像、行为识别、视频理解、图像融合、图像检索等群。
一定要备注:研究方向+地点+学校/公司+昵称(如目标检测+上海+上交+卡卡),根据格式备注,可更快被通过且邀请进群
▲长按加群
▲长按关注我们
麻烦给我一个在看!