基于深度学习的语义分割技术总览
Contents
本文写的比较简单,属于入门入门入门级别,仅当作个人学习笔记和回忆时使用,更多细节和内容请参考论文和网络资料。
在计算机视觉领域,有一个方向是语义分割,一般是针对图像进行像素级分类,具体而言,就是语义图像分割会将每个像素都标注上其对应的类别。与实例分割(mask rcnn)不同,实例分割常常与目标检测系统相结合,用于检测和分割场景中同一对象的多个实例。
基于深度学习的语义分割方法介绍
用卷积神经网络分类(全卷积网络FCN),与普通CNN网络不通的是,FCN的分类层是卷积层,普通网络为全连接层。方法介绍如下: 最近的语义分割架构一般都用卷积神经网络(CNN)为每个像素分配一个初始类别标签。卷积层可以有效地捕捉图像中的局部特征,并以层级的方式将许多这样的模块嵌套在一起,这样 CNN 就可以试着提取更大的结构了。通过一系列卷积捕捉图像的复杂特征,CNN 可以将一张图的内容编码为紧凑表征。 但为了将单独的像素映射给标签,我们需要将标准 CNN 编码器扩展为编码器-解码器架构。在这个架构中,编码器使用卷积层和池化层将特征图尺寸缩小,使其成为更低维的表征。解码器接收到这一表征,用通过转置卷积执行上采样而「恢复」空间维度,这样每一个转置卷积都能扩展特征图尺寸。在某些情况下,编码器的中间步骤可用于调优解码器。最终,解码器生成一个表示原始图像标签的数组。
Encoder
encoder
本质其实就是一连串的卷积网络。该网络主要由卷基层,池化层和BatchNormalization层组成。卷基层负责获取图像局域特征,池化层对图像进行下采样并且将尺度不变特征传送到下一层,而BN主要对训练图像的分布归一化,加速学习。
概括地说,encoder对图像的低级局域像素值进行归类与分析,从而获得高阶语义信息(“汽车”, “马路”,“行人”),Decoder收集这些语义信息,并将同一物体对应到相应的像素点上,每个物体都用不同的颜色表示。
Decoder
Encoder已经获取了所有的物体信息与大致的位置信息,那么下一步就需要将这些物体对应到具体的像素点上了。这一系列工作是由Decoder完成。Decoder对缩小后的特征图像进行上采样,然后对上采样后的图像进行卷积处理,目的是完善物体的几何形状,弥补Encoder当中池化层将物体缩小造成的细节损失。
Convolution Layer in Encoder and Decoder
Encoder和Decoder中都存在卷积层。他们在算法上一模一样,但是在作用上有一点不同。
- Encoder阶段,卷基层的主要作用就是获取图像的局部信息,并传送给池化层,然后由2×2最大池化处理,把最大值特征再次传递到下一层。所以在这部分当中,Convolution+Pooling的主要作用从图像中获取信息。
- Decoder阶段的处理是将特征层进行上采样,然后交给卷基层进行处理。上采样后的2×2区域只有一个前一层传来的1×1特征点,其余区域都是空值,因此这些空值需要被填补成适当的特征值,来让这个区域变得完整并且平滑。这个工作就是由卷基层担任的。所以位于Decoder当中的卷积层的作用是对图像进行“填补”。
总结
- Encoder对图像进行分析,弄清某一区域是什么物体,然后Decoder来寻找这个物体对应的是原图像当中的哪些像素点。
- 两个阶段的卷积层在计算方式上完全一样,但是表现结果有差异,因此根据此差异,Enocder阶段的卷积层命名为“卷积”,Decoder阶段的卷积命名为“反卷积”。
常见模型
FCN系列
三种模型FCN-32S, FCN-16S,FCN-8S
全卷积神经网络(FCN
)的主要贡献在于,因为没有全连接层(fc
),网络可适应任意尺寸输入,增大数据尺寸的反卷积(deconv
)层,能够输出精细的结果,结合不同深度层结果的跳级(skip
)结构,可确保鲁棒性和精确性。
SegNet
SegNet和FCN思路十分相似,只是Encoder,Decoder(Upsampling)使用的技术不一致。SegNet的上采样Upsampling(反向池化),通过Pooling Indices
方式来保存池化点的来源信息,在Encoder的池化层处理中,会记录每一个池化后的1×1特征点来源于之前的2×2的哪个区域,在这个信息在论文中被称为Pooling Indices。Pooling Indices在Decoder中使用,SegNet是一个对称网络,那么在Decoder中需要对特征图进行上采样的时候,我们就可以利用它对应的池化层的Pooling Indices来确定某个1×1特征点应该放到上采样后的2×2区域中的哪个位置,这样解决了特征点随机分配任意位置(或者固定)带来的层层误差。过程如下图所示:
此外SegNet的编码器部分使用的是VGG16的前13层卷积网络,每个编码器层都对应一个解码器层,最终解码器的输出被送入soft-max分类器以独立的为每个像素产生类概率。
SegNet网络结构
Unet及各种变体
Unet
在生物医学图像处理中是非常著名的解决方案,它在全卷积层上构建模型,对其做了修改使得它能够在少量的训练图像数据上运行,得到了更加精确的分割。网络结构如下图所示:
U-Net网络结构
U-net架构(最低分辨率为32×32像素的示例)。
每个蓝色框对应一个多通道feature map
。通道数量在框的顶部。框的左下角是x-y大小。白色框表示复制过来的feature map。箭头表示不同的操作。
Deeplab系列
- 主要有模型Deeplabv1,Deeplabv2,Deeplabv3,Deeplabv3+。
- DeepLab系列是针对Semantic Segmentation任务提出的一系列模型,主要使用了DCNN、CRF、空洞卷积做密集预测。重点讨论了空洞卷积的使用,并提出的获取多尺度信息的ASPP模块,在多个数据集上获得了state-of-the-art 表现.
- V3+使用深度分离卷积替代了pooling,并且使用了Xception,Xception的核心是使用了Depthwise separable convolution。Depthwise separable convolution的思想来自inception结构,是inception结构的一种极限情况。Inception 首先给出了一种假设:卷积层通道间的相关性和空间相关性是可以退耦合的,将它们分开映射,能达到更好的效果。在inception结构中,先对输入进行11的卷积,之后将通道分组,分别使用不同的33卷积提取特征,最后将各组结果串联在一起作为输出。更多内容可以参考这篇文章
参考资料
2019年最新基于深度学习的语义分割技术讲解(含论文+指标+应用+经验) U-net 论文笔记 语义分割论文-DeepLab系列
相关文章
- 技术分享 | dbslower 工具学习之探针使用
- 人工智能 deepface 换脸技术 学习
- 智驾车技术栈 | 综述:自动驾驶中基于深度学习的LiDAR点云综述研究
- 虚拟生产、交付、体验,元宇宙技术对供应链的深远影响#低碳生活
- 优思学院|技术岗角色能锻炼成为管理人才吗?
- 每天都扫的二维码,你知道它的技术原理吗?每天都扫的二维码,你知道它的技术原理吗?
- 霸占着400亿美元市场的Oracle,技术上已经赶不上PostgreSQL了 | 对话 EDB
- 2022 阿里云飞天技术峰会即将召开,三大看点抢先剧透!| Q推荐
- 赠书:亿级流量峰值没在怕,“缓存”技术来减压!
- Linux下实现PWM技术的应用(linuxpwm)
- Linux技术拯救者:拥抱革新的专家(linux技术专家)
- 学习执行Linux命令行,拥抱技术新生活(c执行linux命令行)
- 合肥 Linux 技术系统培训学习全面升级(合肥linux培训)
- Oracle RAC技术日记:知行合一(oraclerac日记)
- Linux C编程:学习掌握这门技术(linuxc是什么)
- Linux网络端口汇聚:新的技术体验(linux端口汇聚)
- Oracle官方在线文档:构建技术知识库(oracle官方在线文档)
- 学习Linux下C语言编译技术(linux的c语言编译)
- 深入浅出:学习 Redis 技术(redis技术)
- 北京:Oracle培训——学习前沿知识及技术(oracle培训北京)
- 李强强:一位热爱Linux的技术人才(李强强linux)
- 把 Linux 融入日常,让技术更容易学习(linux该这样学)
- 精通linux Qt程序打包技术(linuxqt打包程序)
- 服务器搭建Linux二级代理服务器的技术实现(linux二级代理)
- 如何学习和使用MySQL数据库:全面掌握MySQL技术吧(mysql吧)
- 如何正确学习MSSQL数据库技术?(怎么读mssql)
- 缓解数据库负载Redis缓存技术(缓存 数据库 redis)
- 红色乳腺技术突破领域的里程碑(乳腺redis2类)
- Oracle人员排序技术指南(oracle 人员排序)
- 使用Redis技术实现数据排重的好处(利用redis 数据排重)
- Oracle两张表内连接技术指导(Oracle两张表内连接)
- Oracle表之间求差集技术总结(oracle两个表做差)
- oracle数据库进程监控lsfof技术探索(oracle lsof)
- Redis语言中文网学习最新的Redis技术(redis语言中文网)