尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

第292篇 语义分割FCN/DeepLab——给每个像素一个标签

第292篇 语义分割FCN/DeepLab——给每个像素一个标签 目标检测部署聊完了这篇进入语义分割。语义分割的任务是给图像中每个像素分配一个类别标签——这个像素是地面、那个像素是墙壁、那个像素是人。机器人需要理解场景的几何结构语义分割是最直接的感知手段。语义分割和目标检测的区别检测只给你框和类别分割给你每个像素的类别。分割的信息更丰富但任务也更难——不仅要识别是什么还要精确描绘在哪里。从FCN到DeepLab语义分割经历了多次重要演进。面试中语义分割的追问通常围绕上采样方法、空洞卷积的作用、多尺度特征融合。把这些概念搞清楚分割相关的模型都能看懂。一、FCN全卷积网络的开创FCNFully Convolutional Network是2015年的工作第一次把CNN用于语义分割。核心思想很简单把分类网络VGG/ResNet后面的全连接层换成卷积层让网络能接受任意尺寸的输入输出一个和输入尺寸对应的特征图。但CNN的下采样stride2的卷积和池化让特征图分辨率越来越小。最终的特征图可能只有输入的1/32。怎么恢复到原始尺寸FCN用转置卷积也叫反卷积做上采样。# FCN的核心结构 # Backbone: VGG16 (去掉全连接层) # 在conv7后面加上1x1卷积(调整通道数到类别数) # 然后用转置卷积上采样到原始尺寸 self.score_fr nn.Conv2d(4096, num_classes, 1) self.upsample nn.ConvTranspose2d(num_classes, num_classes, kernel_size64, stride32)FCN还引入了跳跃连接skip connection——把浅层的高分辨率特征和深层的强语义特征融合。浅层特征有空间细节边缘、纹理深层特征有语义信息是什么物体。两者融合才能得到既准确又精细的分割结果。FCN的局限转置卷积的上采样效果不够好输出有棋盘效应。没有显式地处理多尺度信息。精度在现在看不高但开创了全卷积分割的先河。后续的分割模型DeepLab、PSPNet、U-Net本质上都是在FCN的基础上改进上采样和多尺度特征融合的策略。FCN有三个变体FCN-32s直接32倍上采样、FCN-16s融合conv4的跳跃连接后16倍上采样、FCN-8s再融合conv3的跳跃连接后8倍上采样。越浅的跳跃连接保留的空间细节越多分割边界越精细。FCN-8s是效果最好的版本。二、DeepLab系列DeepLab是Google推出的语义分割系列从v1到v4不断演进。DeepLabv1首次把空洞卷积Atrous/Dilated Convolution引入语义分割。空洞卷积在不增加参数、不降低分辨率的情况下扩大感受野。传统3x3卷积看3x3区域dilation2的3x3空洞卷积看5x5区域dilation3看7x7区域。DeepLabv2提出ASPPAtrous Spatial Pyramid Pooling——用多个不同dilation rate的空洞卷积并行处理捕获多尺度信息。dilation rate分别取6、12、18、24每个分支看不同大小的区域。# ASPP模块 class ASPP(nn.Module): def __init__(self, in_ch, out_ch): super().__init__() # 1x1卷积 self.conv1 nn.Conv2d(in_ch, out_ch, 1) # 空洞卷积不同dilation rate self.conv6 nn.Conv2d(in_ch, out_ch, 3, padding6, dilation6) self.conv12 nn.Conv2d(in_ch, out_ch, 3, padding12, dilation12) self.conv18 nn.Conv2d(in_ch, out_ch, 3, padding18, dilation18) # 全局平均池化 self.global_pool nn.Sequential( nn.AdaptiveAvgPool2d(1), nn.Conv2d(in_ch, out_ch, 1) )DeepLabv3目前使用最广泛的版本。Encoder-Decoder结构。Encoder用修改过的Xception或ResNet做backbone加上ASPP模块提取多尺度语义特征。Decoder把编码器的低分辨率输出上采样和浅层特征融合恢复空间细节。DeepLabv3的一个关键设计backbone的最后两个阶段用空洞卷积替代stride2的下采样。这样特征图分辨率保持在输入的1/8而不是1/32分割精度大幅提升。代价是计算量增加了——特征图大了4倍。三、其他重要分割模型U-Net对称的U形结构encoder提取特征decoder逐步恢复分辨率。每个decoder层都和对应的encoder层做skip connection通道拼接。U-Net最初用于医学图像分割因为结构简洁效果好被广泛应用到各种分割任务。在机器人领域也常用于可行驶区域检测等场景。PSPNet在backbone后面加一个金字塔池化模块——用不同大小的adaptive average pooling1x1、2x2、3x3、6x6捕获不同尺度的上下文信息然后上采样拼接。让网络能理解全局场景结构。SegFormer用Transformer做backbone的分割模型。轻量级的MLP-Decoder做分割头。在ADE20K等数据集上精度超过CNN方法。但推理速度比DeepLab慢。四、机器人场景的语义分割语义分割在机器人里有很多应用场景可行驶区域检测哪些区域可以走、障碍物分割区分不同类型的障碍物、室内场景理解地面、墙壁、家具。机器人场景的特殊挑战需要实时处理帧率要求高、需要处理鱼眼图像畸变大、边缘部署算力有限。实际项目中通常用DeepLabv3搭配轻量backboneMobileNet/EfficientNet-B0或者直接用U-Net的轻量化变体。部署方面语义分割模型也可以用TensorRT加速。但分割模型的输出尺寸大和输入一样大后处理的内存带宽是瓶颈。用FP16推理、减少中间特征图的通道数是常用的优化手段。五、面试高频追问Q空洞卷积有什么问题Agridding effect网格效应。dilation rate大的时候卷积核的元素之间间隔很大中间的位置完全没有被采样到。这导致特征不连续丢失了细粒度的信息。解决办法是用HDCHybrid Dilated Convolution——多个空洞卷积层用不同的dilation rate保证采样点不重叠。Q语义分割的评估指标有哪些AmIoUmean Intersection over Union是最常用的。对每个类别计算预测和GT的IoU然后取平均。还有pixel accuracy像素准确率但类别不均衡时不可靠、frequency weighted IoU。实际项目中mIoU是标准指标。Q分割标注成本太高怎么办A半监督学习——用少量标注数据大量无标注数据训练。弱监督学习——用图像级标签而不是像素级标注训练。仿真数据——在仿真环境里自动生成带标注的分割数据。还有交互式标注工具如SAM来加速标注过程。语义分割是机器人场景理解的核心技术。FCN的开创性设计、DeepLab系列的空洞卷积与ASPP、其他重要模型对比、机器人场景应用这四个方面理解了语义分割的知识框架就搭好了。掌握这些基础后面的实例分割就更好理解了。下一篇我们聊实例分割Mask R-CNN。语义分割是机器人场景理解的关键技术。FCN全卷积开创、DeepLab系列空洞卷积与ASPP、其他重要分割模型对比、机器人场景应用实践这四个维度覆盖了语义分割的核心知识。上一篇第291篇 目标检测部署TensorRT下一篇聊实例分割Mask R-CNN。如果这篇文章对你有帮助欢迎点赞支持一下你的鼓励是我持续更新的动力
返回列表