社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

笔记 | 深入理解深度学习语义分割

小白学视觉 • 3 年前 • 240 次点击  

点击上方小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本文转自:计算机视觉联盟

本文内容概述王博Kings最近的语义分割学习笔记总结
AI博士笔记系列推荐
周志华《机器学习》手推笔记正式开源!可打印版本附pdf下载链接
引言:最近自动驾驶项目需要学习一些语义分割的内容,所以看了看论文和视频做了一个简单的总结。笔记思路是:机器学习-->>深度学习-->>语义分割



目录:


  • 机器学习回顾

  • 深度学习回顾

  • 语义分割简介

  • 语义分割代表算法


一、回顾机器学习



二、深度学习回顾




激活函数



这些卷积是语义分割的一个核心内容!

三、语义分割简介


什么是语义分割?

ü语义分割(semantic segmentation):按照“语义”给图像上目标类别的每一个点打一个标签,使得不同种类的东西在图像上区分开,可以理解为像素级别的分类任务。


语义分割有哪些评价指标?

ü1.像素精度(pixel accuracy ):每一类像素正确分类的个数/ 每一类像素的实际个数。

ü2.均像素精度(mean pixel accuracy ):每一类像素的精度的平均值。

ü3.平均交并比(Mean Intersection over Union):求出每一类的IOU取平均值。IOU指的是两块区域相交的部分/两个部分的并集,如figure2中 绿色部分/总面积。

ü4.权频交并比(Frequency Weight Intersectionover Union):每一类出现的频率作为权重


四、语义分割代表算法


全卷积网络 FullyConvolutional Networks

2015年《Fully Convolutional Networks for SemanticSegmentation》


通常CNN网络在卷积层之后会接上若干个全连接层, 将卷积层产生的特征图(feature map)映射成一个固定长度的特征向量。


输入AlexNet, 得到一个长为1000的输出向量, 表示输入图像属于每一类的概率, 其中在“tabby cat”这一类统计概率最高。


与经典的CNN在卷积层之后使用全连接层得到固定长度的特征向量进行分类(全联接层+softmax输出)不同,FCN可以接受任意尺寸的输入图像,采用反卷积层对最后一个卷积层的feature map进行上采样, 使它恢复到输入图像相同的尺寸,从而可以对每个像素都产生了一个预测, 同时保留了原始输入图像中的空间信息, 最后在上采样的特征图上进行逐像素分类。


简单的来说,FCN与CNN的区域在把于CNN最后的全连接层换成卷积层,输出的是一张已经Label好的图片。



有没有缺点?

是得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。

是对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatialregularization)步骤,缺乏空间一致性。

对于任何的分类神经网络我们都可以用卷积层替换FC层,只是换了一种信息的分布式表示。如果我们直接把Heatmap上采样,就得到FCN-32s。


三种模型FCN-32S,FCN-16S, FCN-8S

主要贡献:

ü不含全连接层(fc)的全卷积(fully conv)网络。可适应任意尺寸输入。

ü增大数据尺寸的反卷积(deconv)层。能够输出精细的结果。 

ü结合不同深度层结果的跳级(skip)结构。同时确保鲁棒性和精确性。


缺点:

Ø得到的结果还是不够精细。进行8倍上采样虽然比32倍的效果好了很多,但是上采样的结果还是比较模糊和平滑,对图像中的细节不敏感。

Ø是对各个像素进行分类,没有充分考虑像素与像素之间的关系。忽略了在通常的基于像素分类的分割方法中使用的空间规整(spatial regularization)步骤,缺乏空间一致性。


SegNet

2015年《SegNet: A DeepConvolutionalEncoder-Decoder Architecture for Image Segmentation》

最大池化:反卷积

与FCN对比,SegNet的差别就在于上采样反卷积


U-Net

2015年《U-Net:Convolutional Networks for Biomedical ImageSegmentation


网络的左侧(红色虚线)是由卷积和Max Pooling构成的一系列降采样操作,论文中将这一部分叫做压缩路径(contracting path)。压缩路径由4个block组成,每个block使用了3个有效卷积和1个Max Pooling降采样,每次降采样之后Feature Map的个数乘2,因此有了图中所示的Feature Map尺寸变化。最终得到了尺寸为  的Feature Map。

网络的右侧部分(绿色虚线)在论文中叫做扩展路径(expansive path)。同样由4个block组成,每个block开始之前通过反卷积将Feature Map的尺寸乘2,同时将其个数减半(最后一层略有不同),然后和左侧对称的压缩路径的Feature Map合并,由于左侧压缩路径和右侧扩展路径的Feature Map的尺寸不一样,U-Net是通过将压缩路径的Feature Map裁剪到和扩展路径相同尺寸的Feature Map进行归一化的(即图1中左侧虚线部分)。扩展路径的卷积操作依旧使用的是有效卷积操作,最终得到的Feature Map的尺寸是  。由于该任务是一个二分类任务,所以网络有两个输出Feature Map。

U-Net没有利用池化位置索引信息,而是将编码阶段的整个特征图传输到相应的解码器(以牺牲更多内存为代价),并将其连接,再进行上采样(通过反卷积),从而得到解码器特征图。


DeepLabV1

2015年《Semantic image segmentation withdeep convolutional nets and fully connected CRFs

感受野变大


DeepLabV2

2015年《DeepLab-v2: Semantic ImageSegmentation 

ASPP,空洞卷积池化金字塔;VGG改为ResNet


DeepLabv2是采用全连接的CRF来增强模型捕捉细节的能力

DeepLabv2在最后几个最大池化层中去除了下采样的层,取而代之的是使用空洞卷积


DeepLabV3

2017年《Rethinking Atrous Convolution for Semantic ImageSegmentation


DeepLabV3+


2018年《Encoder-Decoder with Atrous Separable Convolution for SemanticImage Segmentation》

使用了两种类型的神经网络,使用空间金字塔模块和encoder-decoder结构做语义分割。

ü空间金字塔:通过在不同分辨率上以池化操作捕获丰富的上下文信息

üencoder-decoder架构:逐渐的获得清晰的物体边界


Encoder
Encoder就是原来的DeepLabv3,注意点有2点:

输入尺寸与输出尺寸比(outputstride = 16),最后一个stage的膨胀率rate为2

AtrousSpatial Pyramid Pooling module(ASPP有四个不同的rate,额外一个全局平均池化

Decoder
明显看到先把encoder的结果上采样4倍,然后与resnet中下采样前的Conv2特征concat一起,再进行3x3的卷积,最后上采样4倍得到最终结果
需要注意点:

融合低层次信息前,先进行1x1的卷积,目的是降通道(例如有512个通道,而encoder结果只有256个通道)


红色部分为修改

(1)更多层:重复8次改为16次(基于MSRA目标检测的工作)。

(2)将原来简单的pool层改成了stride为2的deepwishseperable convolution。 

(3)额外的RELU层和归一化操作添加在每个 3 × 3 depthwise convolution之后(原来只在1*1卷积之后)

DeepLabv1:https://arxiv.org/pdf/1412.7062v3.pdf
DeepLabv2:https://arxiv.org/pdf/1606.00915.pdf
DeepLabv3:https://arxiv.org/pdf/1706.05587.pdf
DeepLabv3+:https://arxiv.org/pdf/1802.02611.pdf
代码:https://github.com/tensorflow/models/tree/master/research/deeplab


下载1:OpenCV-Contrib扩展模块中文版教程
在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲
小白学视觉公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲
小白学视觉公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群


欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/111584
 
240 次点击