深度学习 目标分类 思路

问题简述:

  • 数据集为几百类、平均每类几百张,图像分辨率小于100x100,长尾分布
  • 有参数量和运算量限制
  • 手工设计模型。

一、轻量级模块

0、basicblock,bottleneck(作为参考)

  • 结构如下,如果输入输出尺度或通道数不一致,支路使用Conv2d(kernel_size=1,stride=stride)下采样并改正通道数。
    深度学习 目标分类 思路_第1张图片
  • 每个BottleNeck卷积设计为:1x1 >> 3x3,stride >> 1x1(最后先SE后PW)
  • 每个BottleNeck通道数设计为:inplanes >> planes >> planes >>outplanes >>outplanes
    深度学习 目标分类 思路_第2张图片

1、mobilenet v2 (逆残差模块)

参考:https://blog.csdn.net/u011974639/article/details/79199588
深度学习 目标分类 思路_第3张图片
参考:https://blog.csdn.net/weixin_44474718/article/details/91045521
深度学习 目标分类 思路_第4张图片

  • 因为通道数先变大后变小,所以称为逆残差。(残差:沙漏形,逆残差:纺锤形)
  • 通道数可以为:inplanes >> inplanes6 >> inplanes6 >>outplanes
  • i n p l a n e s = = o u t p l a n e s inplanes==outplanes inplanes==outplanes s t r i d e = 1 stride=1 stride=1 时,使用残差连接。
2、mobilenet v3(逆残差模块+SE)

参考:https://arxiv.org/pdf/1905.02244.pdf深度学习 目标分类 思路_第5张图片- 卷积为:1x1 >> kxk,stride,DW >> se >> 1x1(最后先SE后PW)

  • 通道数可以为:inplanes >> inplanesn >> inplanesn >>outplanes >>outplanes
参考:https://github.com/xiaolai-sqlai/mobilenetv3/blob/master/mobilenetv3.py(star 1k+ 的简单实现代码)
  • 使用SE的逆残差模块
    深度学习 目标分类 思路_第6张图片
  • SE模块的位置与论文不同,不同的原因参考https://github.com/xiaolai-sqlai/mobilenetv3/issues/8,因为该代码早于Google公开最终论文。
  • 卷积为:1x1 >> kxk,stride,DW >>1x1 >> se (最后先PW后SE,方案与论文中不同)
  • 通道数可以为:inplanes >> inplanesn >> inplanesn >> inplanes*n >>outplanes (最后先PW后SE,方案与论文中不同)
  • 其中激活函数的选择方式、通道数设计、是否使用SE模块如下
    深度学习 目标分类 思路_第7张图片
参考:https://github.com/leaderj1001/MobileNetV3-Pytorch/blob/master/model.py(由Google Research发布的mobilenetv3的pytorch版本)
  • 前向传播
    深度学习 目标分类 思路_第8张图片
  • 前向传播
    深度学习 目标分类 思路_第9张图片
  • 卷积为:1x1 >> kxk,stride,DW >> se >> 1x1(最后先SE后PW)
  • 通道数可以为:inplanes >> exp_size >> exp_size >>outplanes >>outplanes

3、ghostnet(可直接替换resnet的basicblock)

参考:https://zhuanlan.zhihu.com/p/109325275

  • ghost模块
    深度学习 目标分类 思路_第10张图片
  • ghost BottleNeck
    深度学习 目标分类 思路_第11张图片

二、手工网络结构设计思路

1、RegNet(动机:找到每次最佳参数相对于层数的线性函数)

  • 参考:https://zhuanlan.zhihu.com/p/139599240
AnyNet
  • AnyNet = stem + body + head
  • body = stage1 + stage2 + stage3 + stage4
  • stage = block的组合
AnyNetX
  • AnyNet的stages都使用bottleneck
AnyNetXA,B,C,D,E
  • A:初始的AnyNetX
  • B:在A的基础上,找到最佳的bottleneck的比率,且小于2
  • C:在B的基础上,找到最佳的组宽度,且大于1
  • D:在C的基础上,修改网络宽度
  • E:在D的基础上,修改网络深度
RegNet设计空间:
  • 根据AnyNetXE的结果,用线性函数拟合block的宽度随层数j的变化规律(函数超参为: w 0 , w a , w m w_0,w_a,w_m w0,wa,wm),并获得最佳的block的数量、、bottleneck的比率、组宽度。(所以只需6个参数就能确定一个网络)
  • block宽度计算方法:
    u j = w 0 + w a ∗ j u_j=w_0+w_a*j uj=w0+waj
  • 量化的block宽度计算方法(宽度相同的block划分为同一个stage):
    u j = w 0 + w m s j u_j=w_0+w_m^{s_j} uj=w0+wmsj w j = w 0 + w m r o u n d [ s j ] w_j=w_0+w_m^{round[s_j]} wj=w0+wmround[sj]
RegNetX设计空间的讨论:
  • 最好模型的参数:

block的数量:20
bottleneck的比率:1
组宽度:随复杂度增加而增加
w m w_m wm :2.5
w 0 w_0 w0: 随着复杂度增加而增加
w a w_a wa: 随着复杂度增加而增加

RegNetY设计空间的讨论:
  • 精炼RegNetX设计空间,再做出限制:

block的数量:[12,28]
bottleneck的比率:1
组宽度:无限制
w m w_m wm :[2, + ∞ +\infty +)
w 0 w_0 w0: 无限制
w a w_a wa: 无限制
限制参数量和激活函数

  • 于是RegNetY = SE+RegNetX+以上限制

2、dropout

三、数据增广策略

1、数据增广实现:

  • PIL.ImageEnhance
    参考:https://blog.csdn.net/cgy233/article/details/110161411
  • torch自带:
    参考:https://zhuanlan.zhihu.com/p/53367135

2、mixup

  • 参考:https://blog.csdn.net/sinat_36618660/article/details/101633504
  • 原理:将图片1和图片2加权平均,得到一个数据增广。
    b a t c h = λ × b a t c h 1 + ( 1 − λ ) × b a t c h 2 batch = \lambda \times batch_1 + (1-\lambda)\times batch_2 batch=λ×batch1+(1λ)×batch2 l o s s i = C E ( o u t p u t , l a b e l i ) ,   i = 1 , 2 loss_i=CE(output,label_i) , \ i=1,2 lossi=CE(output,labeli), i=1,2 l o s s = λ × l o s s 1 + ( 1 − λ ) × l o s s 2 loss= \lambda \times loss_1+ (1-\lambda)\times loss_2 loss=λ×loss1+(1λ)×loss2其中, λ \lambda λ B e t a Beta Beta分布计算出来的系数 λ = B e t a ( α , β ) \lambda=Beta(\alpha,\beta) λ=Beta(α,β)
  • 实现:给定 b a t c h 1 batch_1 batch1,打乱顺序得到 b a t c h 2 batch_2 batch2,将二者加权平均。
  • 经验参数: α , β = 0.5 , 0.5 \alpha,\beta=0.5,0.5 α,β=0.5,0.5

3、cutout

参考:https://blog.csdn.net/weixin_35627928/article/details/111932093

  • Mixup:两个图片加权平均,loss也加权平均(抑制过拟合)
  • Cutout:随机将图片一部分区域覆盖掉,用黑色覆盖。
  • CutMix:随机将图片一部分区域覆盖掉,用训练集中的其他数据的区域像素值覆盖,loss也加权平均

四、长尾分布

1、数据重采样

2、损失函数 Focal Loss

五、图像分类网络比赛思路

1、图像分类比赛tricks:“观云识天”人机对抗大赛:机器图像算法赛道-天气识别—百万奖金

  • https://zhuanlan.zhihu.com/p/95881337
  • https://zhuanlan.zhihu.com/p/98750452

2、 ImageNet 2017冠军方案:超参设置

  • https://arxiv.org/pdf/1709.01507.pdf
    深度学习 目标分类 思路_第12张图片
    在这里插入图片描述
  • random croping (短边resize256再crop224,或resize299再crop256)
  • random horizontal flipping
  • norm RGB
  • lr:0.6(0-30) => 0.06(30-60) => 0.006(60-90) => 0.0006(90-100)
  • 凯明初始化

3、Imagenet 2014冠军方案:超参设置

  • https://arxiv.org/pdf/1409.4842.pdf
    深度学习 目标分类 思路_第13张图片
  • lr:每8epoch乘0.96
  • 变尺度crop,面积8%-100%,长宽比0.75到1.33
  • 用了一大堆,不能明确说明哪些是有效方案

4、分类首次超越人类水平

  • https://arxiv.org/abs/1502.01852
    深度学习 目标分类 思路_第14张图片
    在这里插入图片描述
  • resize为(256,512)再随机crop 224,相当于面积从0.19到0.76
  • random horizontal flipping
  • Random color altering
  • dropout
  • lr:0.01 => 0.001 => 0.0001,error不变时修改学习率,80epoch

你可能感兴趣的:(深度学习基础)