语义分割知识点:UNet、FCN、SegNet、PSPNet、DeepLab系列
- 前言
- 语义分割网络剖析
- UNet系列
- UNet
- UNet网络有几个主要的特点:
- 从UNet结构图可以知道,收敛路径主要的过程为
- 简要总结:
- UNet++
- 为什么UNet++可以被剪枝?
- 如何剪枝? 根据子网络在验证集的结果来决定剪多少。
- UNET 3+
- FCN
- FPN
- FCN,FPN,UNet对比总结:
- SegNet
- PSPNet
- DeepLab 系列
- DeepLab v1
- DeepLab v2
- DeepLab v3
- DeepLab v3+
前言
- 本文是个人收集、整理、总结的一些人工智能知识点,由于本人水平有限,难免出现错漏,敬请批评改正。
- 由于本文是对知识点的收集和整理,图片基本来源于网络,图片若侵权,可联系删除。
- 更多精彩内容,可点击进入人工智能知识点
专栏、Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看- 基于DETR的人脸伪装检测
- YOLOv7训练自己的数据集(口罩检测)
- YOLOv8训练自己的数据集(足球检测)
- YOLOv5:TensorRT加速YOLOv5模型推理
- YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
- 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
- YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
- YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
- Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
- YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
- 使用Kaggle GPU资源免费体验Stable Diffusion开源项目
语义分割网络剖析
语义分割是图像分割中的基本任务,是指对于图像将每个像素都标注上对应的类别,不区分个体。
UNet系列
UNet
UNet(U-Net)论文的地址是:
https://arxiv.org/abs/1505.04597
论文全称:U-Net: Convolutional Networks for Biomedical Image Segmentation
作者:Olaf Ronneberger, Philipp Fischer, Thomas Brox
UNet是一种经典的用于生物医学图像分割的卷积神经网络结构,因其U形的网络设计而得名,具有编码-解码结构,能够在有限的数据集上实现高精度的图像分割任务。
- 编码器-解码器架构,四次下采样(maxpooling),四次上采样(转置卷积),形成了U型结构。
- 网络首先对输入图片进行了4组卷积和下采样操作来获取图像的高阶特征,之后同样通过4组反卷积将图像放大回接近输入图像的大小。
- Unet最核心的一个思想: 特征图的拼接
- Unet一个重要的创新是在相同深度的block之间加入了跳转连接。
UNet网络有几个主要的特点:
① 网络可以从中间分为左右两部分,左边是收缩路径,利用降采样和卷积模块提取不同尺度的特征;右边是扩展路径,利用上采样和卷积模块恢复尺度并融合先前特征,逐渐恢复图像;
② 卷积模块由两层连续的卷积层组成,它可以实现更大尺寸和更高深度的特征提取;降采样实现图像尺度的缩小;上采样(或反卷积层)实现图像尺度的变大;
③ 图中灰色的箭头线表示跳连,作用是在同一尺度下,将收缩路径上的特征合并到扩展路径上的特征,这样可以在扩展路径上提供更好的约束,网络也更容易输出我们期望的结果。
从UNet结构图可以知道,收敛路径主要的过程为
(1) 首先定义重复使用的卷积模块(函数)
重复两次“卷积层 -> 标准化层 -> 激活函数”,即创建了两个串联的卷积层,这是一种常用的特征提取器,最后输出X。
(2) 收敛路径
输入图片 -> ①(卷积模块 -> 下采样 -> dropout层) -> ②(卷积模块 ->下采样 -> dropout层) -> ③(卷积模块 ->下采样 -> dropout层) -> ④(卷积模块 ->下采样 -> dropout层)
img = Input(shape=self.shape) # self.shape是图片维度大小
c1 = conv2d_block(img, n_filters=n_filters * 1, kernel_size=3, batchnorm=batchnorm, padding=padding)
p1 = MaxPooling2D((2, 2))(c1)
p1 = Dropout(dropout * 0.5)(p1)
......
(3) 扩展路径
输入上一层的输出 -> ⑥(上采样 -> 特征合并 -> dropout层 -> 卷积模块) -> ⑦(上采样 -> 特征合并 -> dropout层 -> 卷积模块) -> ⑧(上采样 -> 特征合并 -> dropout层 -> 卷积模块) -> ⑨(上采样 -> 特征合并 -> dropout层 -> 卷积模块)。
u6 = Conv2DTranspose(n_filters * 8, (3, 3), strides=(2, 2), padding='same')(c5)
u6 = concatenate([u6, c4])
u6 = Dropout(dropout)(u6)
c6 = conv2d_block(u6, n_filters=n_filters * 8, kernel_size=3, batchnorm=batchnorm, padding=padding)
......
(4) 输出层
根据输出图片的数据格式,可以定义我们的输出层:
output = Conv2D(1, (1, 1), activation='sigmoid')(c9)
return Model(img, output)
简要总结:
- 首先进行Conv+Pooling下采样; 然后反卷积进行上采样,crop之前的低层feature map,进行融合;
- 再次上采样。
- 重复这个过程,直到获得输出388x388x2的feature map,
- 最后经过softmax获得output segment map。
UNet++
UNet++的论文地址是:
https://arxiv.org/abs/1807.10165
论文标题:UNet++: A Nested U-Net Architecture for Medical Image Segmentation
UNet++是对原始UNet模型的一种扩展和改进,通过引入多层次的跳跃连接以及更深层次的特征融合机制,旨在增强对图像细节的捕捉能力和分割准确性,特别是在处理医学图像分割任务时表现出了优越性。
UNet++是在UNet的基础上添加嵌套和密集跳过连接的CNN.
借鉴了DenceNet的密集连接,对Unet改进的点主要是skip connection,下图所示,其中黑色部分代表的就是原始Unet结构,绿色代表添加的卷积层,蓝色代表改进的skip connection,每一个水平层就是非常标准的DenseNet的结构。
引入了深度监督的思路。网络的loss函数是由不同层得到的分割图的loss的平均,每层的loss函数为 Dice loss 和 Binary cross-entropy loss 之和,
引入DSN(deep supervision net)后,通过model pruning(模型剪枝)能够实现模型的两种模式:高精度模式和高速模式。
UNet++性能的提升和参数量无直接关系,和网络结构有关。
为什么UNet++可以被剪枝?
测试时,剪掉部分对剩余结构不做影响;训练时,剪掉的分支对剩余部分有影响。
如何剪枝? 根据子网络在验证集的结果来决定剪多少。
剪枝好处在哪里? 模型的内存可以节省18倍 (移动端使用)。
UNET 3+
UNet 3+的论文地址没有直接提供,但根据之前的记录提及,该论文题目为“UNet 3+: A Full-Scale Connected UNet for Medical Image Segmentation”,并且它在2020年5月的ICASSP 2020(IEEE International Conference on Acoustics, Speech and Signal Processing)上有过展示。
由于未直接给出链接,您可以尝试通过搜索引擎或学术数据库(如IEEE Xplore)查找该论文全文。若需要具体链接,请进一步核实或访问相关学术资源网站进行检索。
使用全尺度的跳跃连接把不同尺度的特征图相融合,并且通过深度监督从多尺度聚合的特征图中学习特征表达,还提出了一种混合损失函数,将分类任务和分割任务相结合可以增强器官边界和减少非器官图像的过度分割,从而获得更准确的分割结果。
FCN
FCN(Fully Convolutional Networks)论文的地址是:
https://arxiv.org/abs/1411.4038
论文全称:Fully Convolutional Networks for Semantic Segmentation
作者:Jonathan Long, Evan Shelhamer, Trevor Darrell
发表时间:2014年11月
这是深度学习领域中关于语义分割的经典论文之一,首次提出了全卷积网络的概念,将卷积神经网络应用于像素级别的图像分割任务。
思路:通过将全连接层变成上采样层来恢复特征图的尺寸,进行端到端训练。采用VGG作为效果最好,但是推理最慢;
核心的思想是特征图的融合;
backbone是分类网络,下采样都是maxpooling,上采样使用的是双线性插值初始化的转置卷积。
做语义分割,核心思想:
- 不含全连接层(fc)的全卷积(fully conv)网络。可适应任意尺寸输入。
- 增大数据尺寸的反卷积(deconv)层。能够输出精细的结果。
- 结合不同深度层结果的跳级(skip)结构。同时确保鲁棒性和精确性。
FPN
FPN(Feature Pyramid Network)论文的地址是:
https://arxiv.org/abs/1612.03144
论文全名:Feature Pyramid Networks for Object Detection
作者:Tsung-Yi Lin, Piotr Dollar, Ross Girshick, Kaiming He, Bharath Hariharan, Serge Belongie
FPN通过构建特征金字塔结构,有效地解决了目标检测中多尺度物体检测的问题,并且在保持计算效率的同时提高了对小目标的检测性能,尤其在与两阶段检测框架(如 Faster R-CNN)结合时表现出色。
单一维度的图片作为输入,然后它会选取所有层的特征来处理然后再联合起来做为最终的特征输出组合。
1.普通CNN特征自底至上逐层浓缩表达特征的一个过程;
2.自上至下的:在将上层feature map等比例放大后再与本层的feature maps做逐个元素地(element wise)相加。
3.CNN层特征与每一级别输出之间的表达关联。用1x1的Conv即可生成较好的输出特征,它可有效地降低中间层次的channels 数目。
FCN,FPN,UNet对比总结:
三者都是对称的下采样再上采样的全卷积网络。
- 在上采样方式上:
- FCN和U-Net都是使用以双线性插值为初始值的反卷积;
- FPN最近邻上采样。
- 在特征融合:
- FCN将不同尺度的特征简单相加 ;(tf.add)
- U-Net将浅层特征截取后和高层特征拼接;(tf.concat)
- FPN是用1*1卷积处理浅层特征图再和高级特征相加。
SegNet
SegNet论文的地址是:
https://arxiv.org/abs/1511.00561
这篇论文的全名是 “A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation”,由 Badrinarayanan, K., Kendall, A., and Cipolla, R. 撰写。SegNet是一种用于图像语义分割的深度卷积编码-解码架构。
使用编码器-解码器结构,backbone是2个VGG16,去掉全连接层;
核心的想法是提出了maxpool索引来解码的方法,节省了内存;
PSPNet
PSPNet(Pyramid Scene Parsing Network)论文的地址是:
https://arxiv.org/abs/1612.01105
此外,您也可以在以下网址找到PDF版本的论文:
http://jiaya.me/papers/PSPNet_cvpr17.pdf
PSPNet是由何恺明等人在CVPR 2017会议上发表的研究成果,该网络结构利用了金字塔池化模块(Pyramid Pooling Module)有效捕捉并整合多尺度全局上下文信息,以提升图像语义分割性能。
核心思想是提出了金字塔池化模块,模型带有空洞卷积;
金字塔池化(Pyramid pooling)融合了四个比例的特征,结合多尺寸信息:SPP
其backbone为修改Resnet-101 为 ResNet-103,而且有辅助 loss,上采样是双线性插值 。
DeepLab 系列
DeepLab v1
DeepLab v1的论文地址如下:
https://arxiv.org/pdf/1412.7062v3.pdf
论文标题:Semantic Image Segmentation with Deep Convolutional Nets and Fully Connected CRFs
作者:Liang-Chieh Chen, George Papandreou, Iasonas Kokkinos, Kevin Murphy, and Alan L. Yuille
发表会议:ICLR 2015 (International Conference on Learning Representations)
核心思想是使用空洞卷积扩大感受野,条件随机场(CRF)细化边界
backbone是VGG16,下采样8倍
DeepLab v2
DeepLab v2的论文地址如下:
https://arxiv.org/abs/1606.00915
论文全称:DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs
作者:Liang-Chieh Chen, George Papandreou, Kelvin Xu, Tao Xu, Jonathan Huang, Andrew L. Ng
发表时间:2016年,并在2017年的IEEE TPAMI(IEEE Transactions on Pattern Analysis and Machine Intelligence)上被收录。
和v1比多了ASPP(空洞空间卷积池化金字塔)
流程上是DCNN + Atrous convlution + CRF
backbone是VGG16和ResNet-101,下采样8倍
ASPP是多尺度下融合特征,CRF是进行边界的精确化
DeepLab v3
DeepLab v3的论文地址是:
https://arxiv.org/abs/1706.05587
论文标题:Rethinking Atrous Convolution for Semantic Image Segmentation
作者:Chen, Liang-Chieh, et al.
该论文提出了一种重新思考和改进 atrous 卷积(空洞卷积)在语义图像分割中的应用方法,并介绍了DeepLab v3模型的关键改进之处,包括改进型的ASPP模块(空间金字塔池化模块)以及Multi-grid策略等。
和v2的区别在于ASPP多了image-level feature,没有使用CRF
提出了mutil-grid,改进了级联网络的性能
流程上是端到端训练,backbone是ResNet-101
下采样有8倍和16倍两种,8倍性能更好
计算损失时,将输出的上采样
DeepLab v3+
DeepLab v3+的论文地址如下:
https://arxiv.org/abs/1802.02611
论文标题:Encoder-Decoder with Atrous Separable Convolution for Semantic Image Segmentation
DeepLab v3+是在DeepLab系列中的一个进化版本,它结合了编码器-解码器结构与空洞可分离卷积,旨在提高对图像中精细细节和多尺度上下文信息的捕捉能力,从而获得更精确的语义分割效果。
和v3的区别是多了一个解码器模块,backbone用了Aligned Xception(其中有深度可分解卷积)
PASCAL VOC 2012达到了87.8%的mIOU,在JFT预训练的DeepLab v3+在PASCAL VOC 2012上至今领先,达到了80%,但是JFT-300M是谷歌的内部数据集,不开源。
- 由于本人水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入人工智能知识点
专栏、Python日常小操作专栏、OpenCV-Python小应用专栏、YOLO系列专栏、自然语言处理专栏或我的个人主页查看- 基于DETR的人脸伪装检测
- YOLOv7训练自己的数据集(口罩检测)
- YOLOv8训练自己的数据集(足球检测)
- YOLOv5:TensorRT加速YOLOv5模型推理
- YOLOv5:IoU、GIoU、DIoU、CIoU、EIoU
- 玩转Jetson Nano(五):TensorRT加速YOLOv5目标检测
- YOLOv5:添加SE、CBAM、CoordAtt、ECA注意力机制
- YOLOv5:yolov5s.yaml配置文件解读、增加小目标检测层
- Python将COCO格式实例分割数据集转换为YOLO格式实例分割数据集
- YOLOv5:使用7.0版本训练自己的实例分割模型(车辆、行人、路标、车道线等实例分割)
- 使用Kaggle GPU资源免费体验Stable Diffusion开源项目