算法图像岗-图像分类与图像分割

1 神经网络

各种技巧第一次使用

  1. relu Alexnet
  2. dropout Alexnet
  3. 重叠的池化 Alexnet
  4. 卷积堆叠(5 * 5 = 3 * 3) VGG
  5. 第一次使用1 * 1卷积 VGG16(中使用了1 * 1卷积,通道数不变)
  6. 加深网络结构可以提升性能 VGG
  7. 1 * 1降维 inceptionV1
  8. 模型融合 inceptionV1
  9. 辅助分类节点:inceptionV1
  10. 不在存在5 * 5以上的卷积:inceptionV2
  11. 深度可分离卷积:inceptionV2
  12. BN的使用:inceptionV2
  13. 不对称卷积:IncentionV3 7 * 1 + 1 * 7
  14. 分支后在分支结构:IncentionV3
  15. inception+resnet:inceptionV4
  16. resnet中没有使用dropout
  17. 通道注意力:SENet
  18. 密集连接:DenseNet
  19. 全深度分离网络:MobileNet
  20. 通道混乱:ShuttleNet
  21. 跳级结构:FCN,3 4 5分别上采样然后融合
  22. 输入任意:FCN
  23. 空洞卷积:deeplabv1
  24. CRF的引入:deeplabV1
  25. ASPP:deeplabv2

1.1 卷积类型/块

参考来源:https://baijiahao.baidu.com/s?id=1625255860317955368&wfr=spider&for=pc

  1. 常规多通道卷积
  2. 深度分离卷积(’减少运算量‘)
  3. 分组卷积(VGG中使用的分通道的卷积)
  4. Inception Block(特征融合)
  5. 膨胀卷积/空洞卷积(deeplab)
  6. 空间金字塔特征卷积(deeplabv2)
  7. 反卷积:点对应的加到对应的点上

1.2 分类神经网络

1.1.1 Lenet
  • LeNet5 –没啥特点-不过是第一个CNN应该要知道
1.1.2 AlexNet

relu,dropout,重叠的最大池化(步长少于卷积核),LRN

  1. 使用ReLU作为CNN的激活函数,并验证其效果在较深的网络超过了Sigmoid,成功解决了Sigmoid在网络较深时的梯度弥散问题。但是直到AlexNet的出现才将其发扬光大。
  2. 训练时使用Dropout随机忽略一部分神经元,以避免模型过拟合。Dropout虽有单独的论文论述,但是AlexNet将其实用化,通过实践证实了它的效果。在AlexNet中主要是最后几个全连接层使用了Dropout。
  3. 在CNN中使用重叠的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。并且AlexNet中提出让步长比池化核的尺寸小,这样池化层的输出之间会有重叠和覆盖。
  4. 提出了LRN层,对局部神经元的活动创建竞争机制,使得其中响应比较大的值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。
1.1.3 VGGNet

一个主要结论(网络越深越好)

  1. 数据层堆叠,通过2至3个 3 ∗ 3 3 * 3 33卷积层堆叠来形成 5 ∗ 5 5 * 5 55 7 ∗ 7 7 * 7 77大小的感受野,比1个 7 ∗ 7 7 * 7 77的卷积层拥有更少的参数量,只有后者的 3 ∗ 3 ∗ 3 7 ∗ 7 = 55 \frac{3 * 3 * 3}{7 * 7} = 55% 77333=55的参数量,拥有更多的非线性变化,3个卷积层可以进行3次非线性变化,而1个卷积层只能1次.
  2. 训练和预测时的技巧,训练时先训练级别A的简单网络,再复用A网络的权重来初始化后面的几个复杂模型,这样训练收敛的速度更快。模型分为五级
  3. 训练时VGGNet也使用了多尺度的方法做数据增强.
    • 固定尺寸,即缩放图像最小边S到256或者384,然后裁剪得到输入数据是224 * 224,进行训练。
    • 多尺度,即缩放图像最小边到[256,512]之间,然后裁剪训练,该方法有效的考虑了图像中目标大小的不一致,有利于训练。并且考虑到速度原因,本文在单尺度(S=384)的基础上,进行微调得到多尺度模型。
  4. 得出LRN层作用不大,网络结构还是越深越好
  5. 使用1 * 1来做线性变换
1.1.4 Googlenet–inceptionV1

模型融合(3卷积一池化) ,1 * 1降维(减少运算量,新训练了一层,添加了非线性变换,增加泛化能力),辅助分类器
原网络模型中224 * 224的输入
inceptionV1

- 创新点

  1. 将1x1,3x3,5x5的conv和3x3的pooling,堆叠在一起,一方面增加了网络的width,另一方面增加了网络对尺度的适应性。
  2. 在Inception v1中 1 ∗ 1 1 * 1 11卷积用于降维,减少模型参数量和feature map维度, 1 ∗ 1 1*1 11卷积特有的功能,由于 1 ∗ 1 1 * 1 11卷积只有一个参数,相当于对原始feature map做了一个scale,并且这个scale还是训练学出来的,无疑会对识别精度有提升
  3. 增加了网络的深度
  4. 增加了网络的宽度
  5. 在Google Inception V1中,采用了辅助分类节点,即将中间某一层的输出用作分类,并按一个较小的权重加到最终的分类结果中,这样相当于做了模型的融合,同时给网络增加了反向传播的梯度信号,提供了额外的正则化的思想.
1.1.5 InceptionV2

BN,深度可分离卷积的第一次使用

  1. 5x5 卷积层被替换为两个连续的 3x3 卷积层. 网络的最大深度增加 9 个权重层. 参数量增加了大约 25%,计算量增加了大约 30%,不在拥有 5 * 5大卷积核,多使用了一个激活函数,增加了非线性能力。
  2. 28x28(35 * 35) 的 Inception 模块的数量由 2 增加到了 3,整体模块数目由2-5-2——>3-5-2
  3. 加入了BN层,减少了Internal Covariate Shift(内部协变量转变), 上一层网络的输出数据经过这一层网络计算后,数据的分布会发生变化,为下一层网络的学习带来困难(神经网络本来就是要学习数据的分布,要是分布一直在变,学习就很难了)
  4. 在模块内部,有时使用平均池,有时使用最大池。这在对应于表的池化层的条目中显示
  5. inceptionV2的第一层使用了深度可分离卷积
1.1.6 IncentionV3

输入大小变为 299 * 299

  1. 空间卷积分解为不对称卷积 7 ∗ 7 7 * 7 77 ----- 1 ∗ 7 1 * 7 17 7 ∗ 1 7 * 1 71
  2. inceptionV3的inception模块共有三种,网络先下降八倍, 35 ∗ 35 35 * 35 3535中采用Inceptionv2中模块, 17 ∗ 17 17 * 17 1717中采用不对称卷积模块(四个组合)
    在这里插入图片描述
    在这里插入图片描述
  3. 8 ∗ 8 8 * 8 88 中分支之后分支
  4. 网络深度进一步增加,增加了网络的非线性
1.1.7 InceptionV4
  1. 将最先进的Inception和Residual结构结合起来同时也提出了我们不含残差结构的inception v4,以求达到性能上的进一步提升
  2. 整个结构所使用模块和V3基本一致,不同的是Stem和Reduction-B
    • stem 299 - 35大小
      在这里插入图片描述
      模块结构
      在这里插入图片描述
1.1.8 ResNet

参考来源 https://blog.csdn.net/liuxiao214/article/details/79588844

  1. 引入了跳跃连接,这可以使上一个残差块的信息流入到下一个残差块,提高了信息流通,并且也避免了由与网络过深所引起的梯度消失问题(解决了连乘的影响)和退化问题
  2. 没有使用dropout,利用BN和全局平均池化进行正则化,加快训练速度。
  3. 层数较高时减少了3x3卷积核的个数,用1x1卷积核控制3x3卷积的输入输出特征map的数量
    • 两个 3 ∗ 3 3 * 3 33—> 1 ∗ 1 1 * 1 11 + 3 ∗ 3 3 * 3 33 + 1 ∗ 1 1 * 1 11(resnet50及以上)
  4. 如果残差映射(F(x))的结果的维度与跳跃连接(x)的维度不同,那是没有办法对它们进行相加操作的,必须对x进行升维操作,维度相同时才能计算。
    升维的方法有两种:
    • 全0填充;
    • 采用1 * 1卷积
1.1.9 SENet

关注channel之间的关系,希望模型可以自动学习到不同channel特征的重要程度
Squeeze-and-Excitation (挤压和激励)模块
在这里插入图片描述

  1. 全局平均池化完成挤压 C ∗ H ∗ W C * H * W CHW ~~~~ C ∗ 1 ∗ 1 C * 1 * 1 C11
    • 之后sigmoid函数对值处理,然后乘到原来的特征图中
  2. 可以有效的运用到resnet 和 inception中
1.1.10 DenseNet

它建立的是前面所有层与后面层的密集连接(dense connection)

  1. 每个层都会接受其前面所有层作为其额外的输入,每个块之间的输入共通
    主体结构为Denseblock + transition
    • 在DenseBlock(每个块)中,各个层的特征图大小一致,可以在channel维度上连接
    • 对于Transition层,它主要是连接两个相邻的DenseBlock,并且降低特征图大小。Transition层包括一个1x1的卷积和2x2的AvgPooling(步长2),结构为BN+ReLU+1x1 Conv+2x2 AvgPooling。
  2. 减轻了梯度消失,创建从早期层到后期层的短路径
  3. 加强了feature的传递
  4. 一定程度上较少了参数数量,网络更窄,在dense block中每个卷积层的输出feature map的数量都很小,而不是像其他网络一样动不动就几百上千的厚度,每一层都直接得到了损失函数和原始输入信号的梯度,这样更深网络不是问题,即只学习非常少的特征图(最极端情况就是每一层只学习一个特征图),DenseNet 的每一层只需学习很少的特征,使得参数量和计算量显著减少
  5. DenseNet泛化性能更强。神经网络每一层提取的特征都相当于对输入数据的一个非线性变换,而随着深度的增加,变换的复杂度也逐渐增加(更多非线性函数的复合)

1.2 轻量化网络

1.2.0 MobileNet

MobileNets不是模型压缩技术!! 只是一种网络设计思想,利用这种方法设计出来的网络存在1)参数少 2) 运算速度快。

  1. 采用深度可分离卷积
    • 逐通道卷积----Depthwise Convolution的一个卷积核负责一个通道,一个通道只被一个卷积核卷积(常规卷积中是一个卷积核卷积所有通道)
    • 逐点卷积----(1 * 1 卷积)Pointwise Convolution的运算与常规卷积运算非常相似,它的卷积核的尺寸为 1×1×M,M为上一层的通道数。所以这里的卷积运算会将上一步(逐通道卷积)的map在深度方向上进行加权组合,生成新的Feature map。有几个卷积核就有几个输出Feature map
  2. MobileNetV1 中引入的两个超参数
    • Width Multiplier( α \alpha α): 更薄的模型,所有层的 通道数(channel)乘以 α \alpha α 参数(四舍五入),模型大小近似下降到原来的 α 2 \alpha^2 α2倍,计算量下降到原来的 α 2 \alpha^2 α2
    • Resolution Multiplier( ρ \rho ρ): 分辨率下降,输入层的 分辨率(resolution) 乘以 ρ \rho ρ参数 (四舍五入),等价于所有层的分辨率乘 ρ \rho ρ,模型大小不变,计算量下降到原来的 ρ 2 \rho^2 ρ2.
1.2.1 ShuttleNet
  1. Channel Shuffle for Group Convolutions
    • 分组卷积的改进版本
      在这里插入图片描述

1.3 分割神经网络

主流分割网络
https://blog.csdn.net/helloworld_fly/article/details/80306117
总体来说,分割的逻辑如下:

  • 必须经历从大到小,再从小到大的两个过程
  • 在升采样过程中,分阶段增大比一步到位效果更好
  • 在升采样的每个阶段,使用降采样对应层的特征进行辅助
1.3.1 FCN------所有的层都是卷积层,故称为全卷积网络

用于语义分割的全卷积网络

  1. FCN与CNN的区别在于FCN把CNN最后的全连接层换成卷积层,输出一张已经label好的图
  2. 增大数据尺寸的反卷积(deconv)层。能够输出精细的结果。
  3. 结合不同深度层结果的跳级(skip)结构。同时确保鲁棒性和精确性
    • 跳级(strip)结构:对第5层的输出执行32倍的反卷积得到原图,得到的结果不是很精确,论文中同时执行了第4层和第3层输出的反卷积操作(分别需要16倍和8倍的上采样),再把这3个反卷积的结果图像融合,提升了结果的精确度:
  4. 是可以接受任意大小的输入图像,而不用要求所有的训练图像和测试图像具有同样的尺寸。
  5. 使用了反卷积.
1.3.2 UNet
  1. 特征提取部分,每经过一个池化层就一个尺度,包括原图尺度一共有5个尺度。
  2. 上采样部分,每上采样一次,就和特征提取部分对应的通道数相同尺度融合,但是融合之前要将其crop。这里的融合也是拼接。
    个人认为改进FCN之处有:
    • 多尺度;
    • 适合超大图像分割,适合医学图像分割,医学图像结构比较单一(所以理论上不需要太多的参数)。比如说细胞,肿瘤这些,都是比较固定的结构,所以很好区分;
  3. concat有助于还原降采样所带来的信息损失。
CRF

https://blog.csdn.net/qq_43258953/article/details/103190412

全连接条件随机场使用二元势函数解释了一个像素与另一个像素之间的关系,给像素关系紧密的两个像素赋予相同的类别标签,而关系相差很大的两个像素会赋予不同的类别标签,这个“关系”的判断与像素的颜色值、像素间的相对距离都有关系。一元势能为概率分布图,即由模型输出的特征图经过softmax函数运算得到的结果;二元势能中的位置信息和颜色信息由原始影像提供。当能量E(x)越小时,预测的类别标签X就越准确,我们通过迭代最小化能量函数,得到最终的后处理结果。

1.3.3 DeepLabv1

参考来源https://www.jianshu.com/p/295dcc4008b4
CRF参考来源https://blog.csdn.net/cicibabe/article/details/71173965
Semantic image segmentation with deep convolutional nets and fully connected CRFs

  1. 空洞卷积-----膨胀卷积,用于稠密特征提取和视野增大
  2. 加入了CRF,CNN是一个逐步提取特征的部分,原始位置信息会随着网络深度的增加而减少或消失。CRF在传统图像处理上的应用是做一个平滑。CRF简单说,是在决定一个位置的像素值时(paper里是label),会考虑周围像素点的值(label),有利于将相同标记分配给空间上接近的像素。定性的说,这些短程条件随机场主函数会清除构建在局部手动特征上层弱分类器的错误预测。但是通过CNN得到的概率图在一定程度上已经足够平滑,所以短程的CRF没有太大的意义。于是考虑使用Fully connected CRF,综合考虑全局信息,恢复详细的局部结构,如精确图形的轮廓。CRF几乎可以用于所有的分割任务中图像精度的提高。
    CRF是后处理,是不参与训练的,在测试时对特征提取后得到的得分图进行双线性插值,恢复到原图尺寸,然后再进行CRF处理,因为缩小8倍的,所以直接放大到原图是可以接受的。如果是32倍,则需要上采样(反卷积)
  3. 结构为VGG + 微调

问题
全连接条件随机场-----将每一个像素点,对其他所有像素点都构成一个边缘,达到稠密的全连接模型,此时面临的一个问题就是图像像素数目非常大,会有上万个点和数十亿的边,其计算复杂度导致模型几乎无法实施。

1.3.4 DeepLabv2

参考来源 https://blog.csdn.net/XZZPPP/article/details/51377731

相关SPP简介:空间金字塔池化,在一般的CNN结构中,在卷积层后面通常连接着全连接。而全连接层的特征数是固定的,所以在网络输入的时候,会固定输入的大小(fixed-size)。但在现实中,我们的输入的图像尺寸总是不能满足输入时要求的大小。然而通常的手法就是裁剪(crop)和拉伸(warp)。不管输入尺寸是怎样,SPP 可以产生相同大小长度的表示特征的输出,多尺度特征提取出固定大小的特征向量,图像特征提取为向量特征,使用多个窗口,当我们输入一张图片的时候,我们利用不同大小的刻度,对一张图片进行了划分。上面示意图中,利用了三种不同大小的刻度( 4 ∗ 4 4 * 4 44 2 ∗ 2 2 * 2 22 1 ∗ 1 1 * 1 11),对一张输入的图片进行了划分,最后总共可以得到16+4+1=21个块,我们即将从这21个块中,每个块提取出一个特征,这样刚好就是我们要提取的21维特征向量。第一张图片, 我们把一张完整的图片,分成了16个块,也就是每个块的大小就是(w/4,h/4); 第二张图片,划分了4个块,每个块的大小就是(w/2,h/2);第三张图片,把一整张图片作为了一个块,也就是块的大小为(w,h)。空间金字塔最大池化的过程,其实就是从这21个图片块中,分别计算每个块的最大值,从而得到一个输出神经元 ( 21 ∗ 1 21 * 1 211)。最后把一张任意大小的图片转换成了一个固定大小的21维特征(当然你可以设计其它维数的输出,增加金字塔的层数,或者改变划分网格的大小)。上面的三种不同刻度的划分,每一种刻度我们称之为:金字塔的一层,每一个图片块大小我们称之为:窗口大小了。如果你希望,金字塔的某一层输出n * n个特征,那么你就要用windows size大小为:(w/n,h/n)进行池化了。
- SPP 可以使用同一图像不同尺寸(scale)作为输入, 得到同样长度的池化特征。

DeeplabV2的特点
在这里插入图片描述

  1. 实际使用的是带孔空间金字塔池化 ,并行的采用多个采样率的空洞卷积提取特征,再将特征融合,类似于空间金字塔结构
  2. 空洞卷积
  3. DeepLabV2使用ResNet和VGGNet进行实验
  4. CRF来进行精细化处理
1.3.5 DeeplabV3在这里插入图片描述

在这里插入图片描述

  • 设计了串行和并行的带孔卷积模块
  1. ASPP的改进:在最后多了个1 ∗ 1卷积和全局平均池化,concat后1 * 1卷积到输出
  2. 网络变得更深,对原来的resnet进行改进,又堆叠了三个block在block4后面,分别为block5,6,7,同时调整采样率,原始的有五次下采样,修改后只进行四次下采样,block4后就不会进行下采样了。
  3. 1是串行的空洞卷积,2是并行的空洞卷积,1和2两种方法的结构合并并不会带来提升,相比较来说,ASPP的纵式结构要好一点。所以deeplab v3一般也是指aspp的结构,也就是2这种结构
1.3.6 deeplabv3+

在这里插入图片描述

原DeepLabv3当作encoder,添加decoder得到新的模型(DeepLabv3+)

  1. 金字塔池化(SPP)能编码多尺度上下文信息,编码解码结构能够通过逐渐恢复空间信息来捕获清晰的边缘细节信息。作者提出一种模型,能够结合这两种结构的优势。作者提出的DeepLabV3+模型,通过在DeepLabV3基础上扩展一个解码模块来优化目标边缘细节信息。即原DeepLabv3当作encoder,添加decoder得到新的模型(DeepLabv3+)。
  2. 引入深度可分离网络,因为它能够保持性能的同时大大减少计算量,所有的max pooling结构被stride = 2的深度可分离卷积代替。
  3. Encoder就是原来的DeepLabv3,注意点有2点:
    • 输入尺寸与输出尺寸比,最后一个stage的膨胀率rate为2
    • ASPP有四个不同的rate,额外一个全局平均池化
  4. Decoder
    • 明显看到先把encoder的结果上采样4倍,然后与resnet中下采样前的Conv2特征concat一起,再进行3x3的卷积,最后上采样4倍得到最终结果
    • 需要注意点:融合低层次信息前,先进行1x1的卷积,目的是降通道(例如有512个通道,而encoder结果只有256个通道)
  5. 每个3x3的depthwise convolution都跟BN和Relu

如有错误欢迎联系,文中内容均在参考原文以及他人分享后所作

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值