社区所有版块导航
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学习  »  机器学习算法

基于深度学习方法的图像分割

FightingCV • 2 年前 • 313 次点击  

关注“FightingCV”公众号

回复“AI”即可获得超100G人工智能的教程

点击进入→ FightingCV交流群

作者:AiguoFu

来源:CSDN

编辑:深蓝AI

CNN图像语义分割基本上是这个套路:

1. 下采样+上采样:Convlution + Deconvlution/Resize
2. 多尺度特征融合:特征逐点相加/特征channel维度拼接
3. 获得像素级别的segement map:对每一个像素点进行判断类别
即使是更复杂的DeepLab v3+依然也是这个基本套路。
图13 DeepLab v3+

Image Segmentation

(图像分割)网络结构比较

FCNImage Segmentation

(图像分割)族谱

  • DeepLab
  • DeconvNet
  • SegNet
  • PSPNet
  • Mask-RCNN

按分割目的划分

普通分割

语义分割

实例分割

图像的语义分割(Semantic Segmentation)是计算机视觉中非常重要的任务。它的目标是为图像中的每个像素分类。如果能够快速准去地做图像分割,很多问题将会迎刃而解。因此,它的应用领域就包括但不限于:自动驾驶、图像美化、三维重建等等。
语义分割是一个非常困难的问题,尤其是在深度学习之前。深度学习使得图像分割的准确率提高了很多,下面我们就总结一下近年来最具有代表性的方法和论文。

Fully Convolutional Networks (FCN)

我们介绍的第一篇论文是Fully Convolutional Networks for Semantic Segmentation,简称FCN。
这篇论文是第一篇成功使用深度学习做图像语义分割的论文。论文的主要贡献有两点:
提出了全卷积网络。将全连接网络替换成了卷积网络,使得网络可以接受任意大小的图片,并输出和原图一样大小的分割图。只有这样,才能为每个像素做分类。
使用了反卷积层(Deconvolution)。分类神经网络的特征图一般只有原图的几分之一大小。想要映射回原图大小必须对特征图进行上采样,这就是反卷积层的作用。
虽然名字叫反卷积层,但其实它并不是卷积的逆操作,更合适的名字叫做转置卷积(Transposed Convolution),作用是从小的特征图卷出大的特征图。
这是神经网络做语义分割的开山之作,需彻底理解。

DeepLab

DeepLab有v1 v2 v3,第一篇名字叫做DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs。
这一系列论文引入了以下几点比较重要的方法:
第一个是带洞卷积,英文名叫做Dilated Convolution,或者Atrous Convolution。带洞卷积实际上就是普通的卷积核中间插入了几个洞,如下图。

它的运算量跟普通卷积保持一样,好处是它的“视野更大了”,比如普通3x3卷积的结果的视野是3x3,插入一个洞之后的视野是5x5。视野变大的作用是,在特征图缩小到同样倍数的情况下可以掌握更多图像的全局信息,这在语义分割中很重要。

Pyramid Scene Parsing Network

Pyramid Scene Parsing Network的核心贡献是Global Pyramid Pooling,翻译成中文叫做全局金字塔池化。它将特征图缩放到几个不同的尺寸,使得特征具有更好地全局和多尺度信息,这一点在准确率提升上上非常有用。
其实不光是语义分割,金字塔多尺度特征对于各类视觉问题都是挺有用的。

Mask R-CNN

Mask R-CNN是大神何凯明的力作,将Object Detection与Semantic Segmentation合在了一起做。它的贡献主要是以下几点。
第一,神经网络有了多个分支输出。Mask R-CNN使用类似Faster R-CNN的框架,Faster R-CNN的输出是物体的bounding box和类别,而Mask R-CNN则多了一个分支,用来预测物体的语义分割图。
也就是说神经网络同时学习两项任务,可以互相促进。
第二,在语义分割中使用Binary Mask。原来的语义分割预测类别需要使用0 1 2 3 4等数字代表各个类别。在Mask R-CNN中,检测分支会预测类别。这时候分割只需要用0 1预测这个物体的形状面具就行了。
第三,Mask R-CNN提出了RoiAlign用来替换Faster R-CNN中的RoiPooling。RoiPooling的思想是将输入图像中任意一块区域对应到神经网络特征图中的对应区域。
RoiPooling使用了化整的近似来寻找对应区域,导致对应关系与实际情况有偏移。这个偏移在分类任务中可以容忍,但对于精细度更高的分割则影响较大。
为了解决这个问题,RoiAlign不再使用化整操作,而是使用线性插值来寻找更精准的对应区域。效果就是可以得到更好地对应。
实验也证明了效果不错。下面展示了与之前方法的对比,下面的图是Mask R-CNN,可以看出精细了很多。
U-Net
图9 U-Net网络结构图
图10 U-Net concat特征融合方式

1. FCN式的逐点相加,对应caffe的EltwiseLayer层,对应tensorflow的tf.add()

2. U-Net式的channel维度拼接融合,对应caffe的ConcatLayer层,对应tensorflow的tf.concat()

综述介绍

 图像语义分割,简单而言就是给定一张图片,对图片上的每一个像素点分类

从图像上来看,就是我们需要将实际的场景图分割成下面的分割图:
不同颜色代表不同类别。经过阅读“大量”论文和查看 PASCAL VOC Challenge performance evaluation server,发现图像语义分割从深度学习引入这个任务(FCN)到现在而言,一个通用的框架已经大概确定了。即:
  • FCN-全卷积网络

  • CRF-条件随机场

  • MRF-马尔科夫随机场

前端使用FCN进行特征粗提取,后端使用CRF/MRF优化前端的输出,最后得到分割图。

为什么需要FCN?

前端结构

FCN

  • 卷积化(Convolutional)

  • 上采样(Upsample)

  • 跳跃结构(Skip Layer)

上采样
 
layer { name: "upscore" type: "Deconvolution" bottom: "score_fr" top: "upscore" param { lr_mult: 0 } convolution_param { num_output: 21 bias_term: false kernel_size: 64 stride: 32 }}


可以看到lr_mult被设置为了0.

而不同上采样结构得到的结果对比如下:


SegNet/DeconvNet

 DeconvNet
 
  
反卷积如上。而上池化的实现主要在于池化时记住输出值的位置,在上池化时再将这个值填回原来的位置,其他位置填0即OK。
DeepLab

 而具体的感受野变化如下:

a为普通的池化的结果,b为“优雅”池化的结果。我们设想在a上进行卷积核尺寸为3的普通卷积,则对应的感受野大小为7.而在b上进行同样的操作,对应的感受野变为了5.感受野减小了。

但是如果使用hole为1的Atrous Convolution则感受野依然为7.


后端
 


 这个结构的优点在于:

  • 将平均场构造成了CNN

  • 联合训练并且可以one-pass inference,而不用迭代

  • 二次能量有明确全局

  • 解线性简便很多 

感悟
FCN更像一种技巧。随着基本网络(如VGG, ResNet)性能的提升而不断进步。
深度学习+概率图模型(PGM)是一种趋势。其实DL说白了就是进行特征提取,而PGM能够从数学理论很好的解释事物本质间的联系。
概率图模型的网络化。因为PGM通常不太方便加入DL的模型中,将PGM网络化后能够是PGM参数自学习,同时构成end-to-end的系统。
引用

原文:


本文仅做学术分享,如有侵权,请联系删文。


往期回顾


基础知识

【CV知识点汇总与解析】|损失函数篇

【CV知识点汇总与解析】|激活函数篇

【CV知识点汇总与解析】| optimizer和学习率篇

【CV知识点汇总与解析】| 正则化篇

【CV知识点汇总与解析】| 参数初始化篇

【CV知识点汇总与解析】| 卷积和池化篇 (超多图警告)


最新论文解析

ECCV2022 Oral | 微软提出UNICORN,统一文本生成与边框预测任务

NeurIPS 2022 | VideoMAE:南大&腾讯联合提出第一个视频版MAE框架,遮盖率达到90%

NeurIPS 2022 | 清华大学提出OrdinalCLIP,基于序数提示学习的语言引导有序回归

SlowFast Network:用于计算机视觉视频理解的双模CNN

WACV2022 | 一张图片只值五句话吗?UAB提出图像-文本匹配语义的新视角!

CVPR2022 | Attention机制是为了找最相关的item?中科大团队反其道而行之!

ECCV2022 Oral | SeqTR:一个简单而通用的 Visual Grounding网络

如何训练用于图像检索的Vision Transformer?Facebook研究员解决了这个问题!

ICLR22 Workshop | 用两个模型解决一个任务,意大利学者提出维基百科上的高效检索模型

See Finer, See More!腾讯&上交提出IVT,越看越精细,进行精细全面的跨模态对比!

MM2022|兼具低级和高级表征,百度提出利用显式高级语义增强视频文本检索

MM2022 | 用StyleGAN进行数据增强,真的太好用了

MM2022 | 在特征空间中的多模态数据增强方法

ECCV2022|港中文MM Lab证明Frozen的CLIP 模型是高效视频学习者

ECCV2022|只能11%的参数就能优于Swin,微软提出快速预训练蒸馏方法TinyViT

CVPR2022|比VinVL快一万倍!人大提出交互协同的双流视觉语言预训练模型COTS,又快又好!

CVPR2022 Oral|通过多尺度token聚合分流自注意力,代码已开源

CVPR Oral | 谷歌&斯坦福(李飞飞组)提出TIRG,用组合的文本和图像来进行图像检索


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