实例分割是什么意思,实体分割与实例分割区别
实例分割是什么意思,实体分割与实例分割区别详细介绍
本文目录一览: 图像识别中的识别、检测、分割、跟踪之间的区别和联系
参考资料: 干货 | 目标检测入门,看这篇就够了(已更完)
目标识别 :对整张图片中的多个目标进行分类,将图片信息结构化为类别信息。例如在动物识别中,如果一张图片中有多只猫和多只鸟,则会被分类为猫和鸟的多类别。
目标检测 :在目标识别的基础上,不但要知道每个目标是属于哪一类,还要知道在图像中的位置,即边框的坐标。而且图中的目标通常也比目标识别中的多
目标分割 :目标分割是对目标进行像素级的目标检测,即不是用边框将目标框起来,而是需要知道哪个像素是不是属于目标的一部分。目标分割又分为语义分割和实例分割。
语义分割 是指只需要知道分割出来的目标属于哪一类。例如在动物目标分割中,如果一张图片中有多只猫,则在进行目标分割后,只需要将它们分类为鸟即可。
实例分割 是指需要知道分割出来的目标属于哪一个实例。例如在动物目标分割中,如果一张图片中有多只猫,则在进行目标分割后,需要将它们分别识别为猫1,猫2,猫3等等
目标跟踪:在视频流中,通过利用时序信息,不但要检测出目标,还要在后续的视频帧里连续检测出目标,而且还要适应目标的尺度变化
2、 目标识别、目标检测、目标分割、目标跟踪 之间的联系
① 目标识别是目标检测的基础
② 目标分割是像素级的目标检测
③ 目标检测是目标跟踪的基础
3、 目标识别、目标检测、目标分割、目标跟踪 之间的区别
① 目标识别关注的是整张图片的整体信息,而目标检测则是只关注图片中特定的目标。例如行人检测中,只关注行人,不关注其他的物体
② 目标分割是像素级的,而目标检测则不是
③ 目标跟踪应用的场景是视频流,而其他的不是
实体分割与实例分割区别
精确度不同,侧重不同。1、精确度不同。实例分割可精确到物体的边缘,精准度高;实体分割精准度较低。2、侧重不同。实例分割侧重物体分割的比例;实体分割侧重物体分割的形态。
计算机视觉基本任务研究目标
计算机视觉(Computer Vision)是研究如何使机器“看”的科学,即用摄像机和计算机代替人眼对目标进行识别、跟踪、测量等任务。其与机器视觉的区别在于:计算机视觉侧重对质的分析,如分类识别,这是猫还是狗;或进行身份确认,如车牌识别、人脸识别;或进行行为分析,如人群聚集等;而机器视觉侧重对量的分析,如通过视觉去测量零件的直径。计算机视觉的基本任务包括:图像分类、目标定位、目标检测、图像分割等。
图像分类(Image Classification):图像分类任务的目标是输出给定的图像是什么类别的问题,如回答这是一张猫的图像的问题;
目标定位(Object Localization):目标定位任务的目标是找到图像中某一类别的物体在图像中的位置,输出bounding box;即不仅要识别出是什么类别的物体(类标签),还要给出物体的位置,位置用bounding box标记。 目标定位通常是针对单个物体的。
目标检测(Object Detection):目标检测任务包含分类和目标定位,目标是用多个bounding box分别把多个物体的位置标记出来,并分别给出物体对应的类别。目标检测通常是多个物体的定位任务。即不仅要识别图像中的阿猫阿狗,还要给出阿猫阿狗的位置。
图像分割(Image Segmentation):图像分割任务的目标是将图像细分为多个具有相似性质且不相交的区域,是对图像中的每一个像素加标签的过程,即像素级的分割。图像分割任务主要有语义分割(Semantic Segmentation)和实例分割(Instance Segmentation)两种。语义分割的目标是将输入图像分为不同语义可解释的类别(语义的可解释性即分类类别在真是世界中是有意义的),每一个像素点都要判断其类别,是像素级别的分割。注意语义分割值判断类别不区分个体,例如语义分割将图像中属于汽车的所有像素标记为蓝色,对于图像中有两个蓝色的像素,无法区分他们是属于同一个还是不同的汽车。实例分割的目的是确定图像中存在的兴趣目标位置和类别,机器自动从图像中用目标检测方法框出不同实例,再用语义分割方法在不同实例区域内进行逐像素标记。实例分割是目标检测和语义分割的结合,但又不同于目标检测和语义分割。相对物体检测的边界框,实例分割可精确到物体的边缘;相对语义分割,实例分割可以标注出图上同一物体的不同个体,即哪些像素属于第一辆汽车,哪些像素属于第二辆汽车。最后,还有一个全景分割,它是语义分割和实例分割的结合。即每个像素都被分为一类,如果一种类别里有多个实例,会用不同的颜色进行区分,就知道哪个像素属于哪个类中的哪个实例。
注:上述任务中,最基本的是分类任务,其他任务都可在分类任务的基础上,通过一些技术手段解决,例如在图片中加入很多窗口,提取每一个窗口的特征,然后预测分类,并将分类一样并相邻的窗口合并,就成了目标定位和目标检测。
本文内容参考资料:
https://www.jianshu.com/p/45acc16c6a94
https://blog.csdn.net/qq_39295044/article/details/79796663
https://zhuanlan.zhihu.com/p/50996404
https://blog.csdn.net/niaolianjiulin/article/details/52948274
https://zhuanlan.zhihu.com/p/39272659
计算机视觉可分为哪五大类
计算机视觉实际上是一个跨领域的交叉学科,包括计算机科学(图形、算法、理论、系统、体系结构),数学(信息检索、机器学习),工程学(机器人、语音、自然语言处理、图像处理),物理学(光学 ),生物学(神经科学)和心理学(认知科学)等等。许多科学家认为,计算机视觉为人工智能的发展开拓了道路。
1、图像分类
2、对象检测
3、目标跟踪
4、语义分割
5、实例分割
计算机视觉是一个涵盖众多技术和应用的研究领域。以下是五大类常见的计算机视觉任务:
图像分类(Image Classification):图像分类是指根据图像内容将其归入不同的类别。这是计算机视觉中最基本的任务之一,涉及到特征提取和模式识别。深度学习技术,尤其是卷积神经网络(CNNs),在这一领域取得了显著的成果。
物体检测(Object Detection):物体检测不仅需要识别图像中的物体类别,还需要确定物体的位置和边界框。这类任务通常涉及到物体定位和分类的同时处理。常见的物体检测方法包括R-CNN、YOLO、SSD等。
语义分割(Semantic Segmentation):语义分割是将图像中的每个像素分配给相应的类别,从而实现对图像中不同物体的精确划分。这种任务在自动驾驶、医疗图像分析等领域有广泛应用。常见的语义分割方法包括FCN、U-Net、DeepLab等。
实例分割(Instance Segmentation):实例分割在语义分割的基础上,进一步区分同一类别的不同实例。这对于理解场景中的物体数量和相互关系非常重要。常见的实例分割方法包括Mask R-CNN、SOLO等。
姿态估计(Pose Estimation):姿态估计是指从图像中估计物体的空间姿态,如人体关键点检测、物体位姿估计等。这类任务在动作识别、增强现实、机器人导航等领域有广泛应用。常见的姿态估计方法包括OpenPose、AlphaPose、POSEC3D等。
这五大类计算机视觉任务涵盖了许多具体的应用场景,它们共同推动了计算机视觉领域的发展和创新。
目标检测和图像分类有何区别?
图像分类:根据图像的主要内容进行分类。
数据集:MNIST, CIFAR, ImageNet
##目标检测(object detection)
给定一幅图像,只需要找到一类目标所在的矩形框
人脸检测:人脸为目标,框出一幅图片中所有人脸所在的位置,背景为非目标
汽车检测:汽车为目标、框出一幅图片中所有汽车所在的位置,背景为非目标
数据集:PASCAL, COCO
##目标识别(object recognition)
将需要识别的目标,和数据库中的某个样例对应起来,完成识别功能
人脸识别:人脸检测,得到的人脸,再和数据库中的某个样例对应起来,进行识别,得到人脸的具体信息
数据集:PASCAL, COCO
##语义分割(semantic segmentation)
对图像中的每个像素都划分出对应的类别,即对一幅图像实现像素级别的分类
数据集:PASCAL, COCO
##实例分割(instance segmentation)
对图像中的每个像素都划分出对应的类别,即实现像素级别的分类,类的具体对象,即为实例,那么实例分割不但要进行像素级别的分类,还需在具体的类别基础上区别开不同的实例。
比如说图像有多个人甲、乙、丙,那边他们的语义分割结果都是人,而实例分割结果却是不同的对象,具体如下图(依次为:原图 ,语义分割 ,实例分割):
数据集:PASCAL, COCO
眼底血管分割dice参数
Dice系数是一种集合相似度度量函数,通常用于计算两个样本的相似度,取值为[0,1]。
首先将预测的图片转换为二值图如下:to_binary.py。
求Dice系数:dice=2*(A∩B)/(A+B)。
在预测脑肿瘤或者皮肤病变的mask模型中,我们一般将mask图像中的像素分类成1或0,即如果像素中有mask,我们声明为1,如果像素中没有mask,我们声明为0,这种对图像进行逐像素二进制分类称为“语义分割”。
如果我们试图去识别图像中的许多对象,则称为“实例分割”,实例分割是一种多分类分割。例如,在自动驾驶汽车视野中,物体被分类为汽车、道路、树木、房屋、天空、行人等。
在语义(二进制)分割和实例(多类)分割中,我们需要一个损失函数来计算梯度。
拓展知识。
研究表明,各类眼科疾病以及心脑血管疾病会对视网膜血管造成形变、出血等不同程度的影响。随着生活水平的提高,这类疾病的发病率呈现逐年增长的趋势。
临床上,医疗人员能够从检眼镜采集的彩色眼底图像中提取视网膜血管,然后通过对血管形态状况的分析达到诊断这类疾病的目的。但是,由于受眼底图像采集技术的限制,图像中往往存在大量噪声,再加之视网膜血管自身结构复杂多变,使得视网膜血管的分割变得困难重重。
传统方法中依靠人工手动分割视网膜血管,不仅工作量巨大极为耗时,而且受主观因素影响严重。因此,利用计算机技术,找到一种能够快速、准确分割视网膜血管的算法,实现对眼底图像血管特征的实时提取,对辅助医疗人员诊断眼科疾病、心脑血管疾病等具有重要作用。
Swin Transformer实战实例分割:训练自己的数据集
刚好用了swin,做分类和目标检测,也来试试分割的,而且很多场景分割更有效果,比如积水识别,安全带,土坑裂缝等等
案例来自比赛
https://www.dcic-china.com/competitions/10021
这回真是小试牛刀了,因为是智慧农业赛题——牛只图像分割竞赛
以牛只实例分割图像数据作为训练样本,参赛选手需基于训练样本构建模型,对提供的测试集中的牛只图像进行实例分割检测。方法不限于实例分割,
目标检测是识别图像中存在的内容和检测其位置,
语义分割是对图像中的每个像素打上类别标签,实例分割其实是目标检测和语义分割的结合,在图像中将目标检测出来(目标检测),然后对每个像素打上标签(语义分割)。 语义分割不区分属于相同类别的不同实例(所有人都标为红色),实例分割区分同类的不同实例(使用不同颜色区分不同的人)。所以题目严格意义是语义分割,但是要标出每只牛。
看下数据就是牛棚里的,标签是多边形 polygon,标的还是一般,数据有点模糊,而且角度是俯视,用coco的cow恐怕差太多,图片比较少训练200张,牛2千多,测试100张;
可以通过标注软件查看和修改标注,比如cvat,不过这个是网页版
这里就先用swin-transformer-object-detection跑个baseline吧
https://github.com/SwinTransformer/Swin-Transformer-Object-Detection
部署swin环境同目标检测,这里用paddlex来处理数据集,所以部署环境
conda create -n paddlex python=3.7
conda activate paddlex
pip install cython
git clone https://github.com/philferriere/cocoapi.git
cd .\cocoapi\PythonAPI
python3 setup.py build_ext install
pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
pip install paddlex -i https://mirror.baidu.com/pypi/simpleor
git clone https://github.com/PaddlePaddle/PaddleX.git
cd PaddleX
git checkout develop
python setup.py install
环境搭建好了,
现在将数据集格式为
划分数据集,也可以省略测试集
paddlex --split_dataset --format COCO --dataset_dir 200 --val_value 0.2 --test_value 0.1
将图片转移到训练和验证文件夹
处理好图片就开始配置swinT了,
两个地方 改为具体类别数 设为1
主要修改类别为自己的类别数 cat changeclass.py
相应修改configs/ base /datasets/coco_instance.py中数据集路径
修改模型权重参数等
修改configs\swin\mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x_coco.py中的max_epochs、lr
参数文件改为coco_instance的
_base_ = [
]
注意一个类也要逗号,还要进行编译 python setup.py install
训练
python tools/train.py configs/swin/mask_rcnn_swin_tiny_patch4_window7_mstrain_480-800_adamw_3x_coco.py
这里提交后只有0.6多,后面还需要调优参数,增强数据,或者试试swin 分割 ,swin-Unet之类。
用于图像分割的CNN
姓名:闫伟? 学号:13800
【嵌牛导读】:在计算机视觉领域,图像分割指的是为图像中的每个像素分配一个标签的任务,它也可以被看作是dense prediction task,对图像中每个像素进行分类。和使用矩形候选框的目标检测不同,图像分割需要精确到像素级位置,因此它在医学分析、卫星图像物体检测、虹膜识别和自动驾驶汽车等任务中起着非常重要的作用。
【嵌牛鼻子】:图像分割 CNN 语义分割
【嵌牛提问】:如何利用CNN对图像进行分割?
【嵌牛正文】:
随着深度学习的不断发展,近年来图像分割技术也在速度和准确率上迎来了一次次突破。现在,我们能在几分之一秒内完成分割,同时保证极高的准确性。在这篇文章中,我们将介绍一些用于图像分割的主要技术及其背后的简单思路。我们将从最基础的语义分割(semantic segmentation)开始,慢慢进阶到更复杂的实例分割(instance segmentation)。
目标检测、语义分割和实例分割
语义分割
语义图像分割是为图像中的每个像素分配语义类别标签的任务,它不分割对象实例。现在,处理这类任务的主流方法是FCN及其衍生,所以我们先从FCN看起。
全卷积网络(FCN)
FCN架构
创建FCN的方法很简单,我们只需把CNN里的所有全连接层替换成宽高1×1的卷积层,这时卷积层的filter数量等于全连接层的神经元(输出)数量,所有层都是卷积层,故称全卷积网络。之所以要这么做,是因为每个像素的空间位置对于分割来说都很重要,而卷积层能分类全连接层无法处理的单个像素。作为处理结果,神经网络较高层中的位置会对应于它们路径连接的图像中的位置,即它们的感受野。
如上图所示,FCN的架构非常简单,主要由编码器CNN(以VGG为例)构成,只不过其中和分类网络对应的最后三层被改成了(4096,1,1)(4096,1,1)(N+1,1,1)的卷积层(N表示类别数量)。编码器后是一个解码器网络,它只包含一个反向的卷积层(也称为转置卷积transposed convolution或反卷积deconvolution)。它的输出与输入图像具有相同的空间维度,并具有N+1个通道,每个通道预测一个类别。
反向的卷积操作
仍以VGG为例,由于前面采样部分过大,有时候会导致后面进行反向卷积操作得到的结果分辨率较低,会出现细节丢失等问题。为此,FCN的解决方法是叠加第三、四、五层池化层的特征,以生成更精准的边界分割。如下图所示:
需要注意的一点是,在进行上采样之前,所有池化特征都会先通过(N+1,1,1)这个卷积层。
FCN分割效果
U-NET
U-NET架构
U-NET常被用于生物医学图像分割,它遵循了FCN的编码器-解码器结构,不使用任何全连接层。如上图所示,常规情况下,U-NET的编码器是一个包含10个卷积层的CNN,中间包含最大池化层(红色箭头)。它的解码器会对feature map进行多次上采样和卷积,目的是为了提取更高效、更抽象的特征。得到heatmap后,U-NET最后再用1×1的卷积层做分类,也就是说解码器一共有13层,整个架构总共由23层可学习的卷积层组成。
为什么要做上采样?
答:池化层会丢失图像信息和降低图像分辨率且是不可逆的操作,对图像分割任务有一些影响。上采样可以补足一些图片的信息,但是信息补充的肯定不完全,所以还需要与左边的分辨率比较高的图片相连接起来(直接复制过来再裁剪到与上采样图片一样大小),这就相当于在高分辨率和更抽象特征当中做一个折衷,因为随着卷积次数增多,提取的特征也更加有效,更加抽象。—— jianyuchen23
SEGNET
SegNet架构
SegNet的全称是“用于图像分割的深度卷积编码器-解码器架构”,事实上,大多数语义分割方法都遵循这种基本架构,它们的编码器都是用VGG16,解码器都仿照U-NET——多次上采样后再卷积。但是,SegNet有自己独到的特点:
上采样是不可学习的
解码器使用和编码器相同的卷积(filter大小和相应层的通道数量)
SegNet中的上采样是一种反向最大池化操作。为了补足图像信息,U-NET会对编码阶段的特征做通道降维,再把它和特征反向卷积后得到上采样进行相加,这一过程需要学习。而SegNet采用的方法是记录下编码阶段的最大池化index,比如在某层移动2×2的最大池化窗口时最高值像素的位置,然后把这个index用于解码阶段的上采样。空白的值用0填充:
SegNet上采样
在这个稀疏feature map进行正常卷积后,我们就能得到密集feature map。因此相比较FCN,SegNet的内存利用率更高,计算效率也更高。
需要注意的是,一般来说,解码器每一层的输入通道数和feature map大小都与其对应的编码器相同,但第一层不是。编码器的第一层都3个输入通道(RGB),但解码器第一层有更多通道,这是为了给每个类别生成分割掩膜。
用SegNet进行道路场景分割
实例分割
所谓实例分割,指的就是结合了语义分割和分类的任务。它在本质上更复杂,因为为了区分同一类的不同实例,我们往往需要为每个独立对象创建单独的、缩小的掩膜,然后再把它的大小调整为输入图像中对象的大小。
下面是实例分割的一些常用方法。
DEEPMASK
DeepMask架构
DeepMask是FAIR于2015年提出的一种实例分割方法,输入一张图片后,它能为子图像块(image patch)中的对象生成56×56的分割掩膜,并以掩膜为中心进行分类。对于图像的子图像块,它有两个约束:
子图像块中必须包含一个大致居中的对象
这个对象必须被完整包含在子图像块中,且在给定的比例范围内
由于DeepMask一次只能为子图像块分割一个对象,当它处理包含复杂、重复对象的图像时,它会在多个位置以多个比例密集应用。鉴于以上两个约束条件,这是可以理解的,也是必要的。
整个模型由VGG-A构成,它保留了两个全连接层,但删去了最后一个最大池化层,共有8个卷积层和4个池化层。模型输出的下采样因子为16,共有2个输出,一是子图像块对应物体的一个掩膜,二是这个子图像块包含一个物体的得分。
DeepMask分割效果
Multi-task Network Cascades(MNC)
MNC架构,右上为简化原理图
MNC不直接进行实例分割,它把这个任务分成了三个更小、更简单的子任务:
区分实例。这个子任务的目标是为每个实例预测候选框和候选框是否包含对象的概率;
估计掩膜。这个子任务的目标是预测对象的像素级掩膜;
对对象进行分类。这个子任务的目标是为每个掩膜级实例预测类别标签。
这三个子任务不是并行执行的,它们要按照顺序一个个完成,这也是MNC的全称“多任务网络级联”的原因。模型用移除了所有全连接层的VGG-16处理输入图像,生成feature map,作为三个子任务的共用数据。
子任务1:预测实例候选框
首先,神经网络以窗口的形式提取对象实例,这些候选框不包含分类预测信息,但有一个包含/不包含对象的概率。这是个全卷积的子网络,结构类似RPN。
子任务2:估计实例掩膜
基于子任务1返回的候选框预测,模型再用ROI pooling从共享卷积特征中提取该候选框的特征,之后是两个全连接层(fc),第一个fc负责把维度降到256, 第二个fc负责回归像素级的掩膜。掩膜的预定义分辨率是M×M,这和DeepMask中使用的预测方法有些类似,但不同的是MNC只从几个候选框中回归掩膜,计算成本大大降低。
子任务3:对实例进行分类
现在模型有了子任务1给出的候选框预测,也有了子任务2用ROI pooling提取的feature map,之后就是基于掩膜和候选框预测实例类别。
这是两条并行路径。在基于掩膜的路径中,ROI提取的feature map被子任务2预测的掩膜“覆盖”,使模型更关注预测掩膜的前景特征,计算乘积后,将特征输入两路4096维的fc层。在基于候选框的路径中,用ROI pooling提取的特征被直接传递到4096维的fc层(图中未画出),目的是为了解决特征大幅被掩模级通道“覆盖”的情况(如目标对象很大)。之后,基于掩膜和基于候选框的路径被连接起来,紧接着是N+1类的Softmax分类器,其中N类是物体,1类是背景。
MNC分割效果
即便是这么复杂的架构,整个网络也是可以端到端训练的。
INSTANCEFCN
InstanceFCN是FCN的改进版,它不仅在语义分割任务上表现出色,在实例分割上也有不错的结果。之前我们提到过,FCN的每个输出像素是一个类别的分类器,那么InstanceFCN的每个输出像素就是实例相对位置的分类器。例如,下图被分为9块区域,在其中的第6个得分图中,每个像素就是对象是否在实例右侧的分类器。
试想一下,如果图像中只有一个实例,分割过程会很简单;如果有多个重叠实例,那么我们就得先区分实例,然后再进行分割。相比FCN,InstanceFCN的最大改进是引入相对位置,它在输入图像上生成k2实例敏感分数图,每个分数图对应于特定的相对位置,这就实现了相同位置不同语义的预测。
为了从这些分数图上生成图像实例,InstanceFCN在这组分数图上用了一个m×m的滑动窗口。在这个滑动窗中,每一个m/k×m/k的子窗口直接从相应的分数图中同样的子窗口复制那一部分数值。之后这组子窗口按照相对位置拼起来就得到了m×m的结果。 这一部分被称为实例组合模块(instance assembling module) 。
模型的架构包括在输入图像上用VGG-16做特征提取。在输出的feature map顶部,有两个全卷积分支:一个用来估计分割实例(如上所述),另一个用来对实例进行评分。
InstanceFCN架构
如上图所示,对于第一个分支,模型先采用一个512维的1×1卷积层转换特征,然后用3x3的卷积层生成一组k2实例敏感分数图。这个实例组合模块负责在分辨率为m×m(m=21)的滑动窗中预测分割掩膜。
对于第二个分支,模型先采用一个512维的3×3卷积层,后面跟随一个1x1的卷积层。这个1x1的卷积层是逐像素的逻辑回归,用于分类以像素为中心的m×m滑动窗口中的对象是/不是实例。因此,这个分支的输出是对象分数图,其中一个分数对应于生成一个实例的一个滑动窗口,所以它对不同的对象类别会“视而不见”。
InstanceFCN分割效果
FCIS
正如InstanceFCN是对FCN的改进,完全卷积实例感知语义分割(FCIS)也是在InstanceFCN基础上做出的进一步优化。上节我们说道,InstanceFCN预测分割掩膜的分辨率都是m×m,而且没法将对象分类为不同类别。FCIS解决了这两个问题,它既能预测不同分辨率的掩膜,也能预测不同的对象类别。
FCIS实例敏感分数图
给定ROI,首先用InstanceFCN的实例组合模块生成上述分数图。对于ROI中的每个像素,有两个任务(所以要生成两个分数图):
检测:它是否在某相对位置的对象检测候选框内,是(detection+),否(detection-)
分割:它是否在对象实例的边界内,是(segmentation+),否(segmentation-)
基于上述任务,这时出现了三种情况:
内部得分高,外部得分低:detection+,segmentation+(像素点位于ROI中的目标部分)
内部得分低,外部得分高:detection+,segmentation-(像素点位于ROI中的背景部分)
两个得分都很低:detection-,segmentation-(像素点不在ROI中)
对于检测,我们可以用取最大值把前两种情况(detection+)和情况3(detection-)区分开。整个ROI的得分是求取最大值得到分数图的所有值的平均数,之后再通过一个softmax分类器。对于分割,softmax可以区分情况1(segmentation+)和其他情况(segmentation-)。ROI的前景掩膜是每个类别每个像素分割分数的合并。
FCIS架构
FCIS分割效果
MASK R-CNN
MASK R-CNN是目标检测模型Faster R-CNN的进阶版,它在后者候选框提取的基础上添加了一个并行的分支网络,用预测分割掩膜。这个分支网络是个共享feature map的FCN,它为每个ROI提供Km2 维的输出,其中K对应类别个数,即输出K个掩膜,m对应池化分辨率。这样的设计允许网络为每个类别生成掩膜,避免了不同类实例之间因重叠产生混淆。此外,分类分支是直接在掩膜上分类,所以分割和分类是分离的。
Mask R-CNN架构中用于预测掩膜的分支
关注输入图像的空间结构是准确预测掩膜的前提,而这种像素到像素的操作需要ROI特征的完全对齐。在目标检测任务中,一些模型会用RoIPool提取这些特征,但它们不总是严格对齐的,因为ROI的维度不仅可以是积分,也可以是浮点数。RoIPool通过将它们四舍五入到最接近的整数来量化这些维度,不仅如此,量化的RoI还被进一步细分为量化的空间区间,在该区间上执行合并。虽然这些量化对分类问题没什么影响,但如果把它们用于像素级对齐,分割掩膜预测会出现巨大偏差。
RoIAlign: 虚线网格表示feature map,实线表示RoI(有2×2个bin,每个bin中4个采样点)
考虑到实例分割要求像素级别的精准,MASK R-CNN引入了一种新的方法来提取特征,称为RoIAlign。它背后的想法是很简单:既然错位是由量化引起的,那就避免所有量化。RoIAlign不会对维度做任何约减,它引入了一个插值过程,先通过双线性插值到14×14,再池化到7×7,很大程度上解决了由直接池化采样造成的Misalignment对齐问题。需要注意的是,使用RoIAlign提取的RoI特征具有固定的空间维度,这点和RoIPool一样。
小结
以上就是现在常用的语义分割、实例分割模型,它们基本上都是FCN的变体,把编码器作为简单的特征提取器,重点放在解码器创新上。此外,一些研究人员也尝试过用其他方法来解决实例分割问题,比如上面提到的MASK R-CNN就是改造目标检测模型的成果,总而言之,FCN还是解决这类任务的重要基石。
译者的话:以上只是简短的关键提炼,如果读者希望了解这些模型的具体细节,可以参考文末推荐的几篇中文论文解读,点击阅读原文获取超链接。
参考文献
[1] J. Long, E. Shelhamer, and T. D ar rell. Fully convolutional networks for semantic segmentation. In CVPR, 2015. (paper)
[2] O. Ronneberger, P. Fischer, and T. Brox, “U-net: Convolutional networks for biomedical image segmentation,” in MICCAI, pp. 234–241, Springer, 2015. (paper)
[3] Badrinarayanan, V., Kendall, A., & Cipolla, R. (2017). SegNet: A Deep Convolutional Encoder-Decoder Architecture for Image Segmentation. IEEE Transactions on Pattern Analysis and Machine Intelligence, 39, 2481-2495. (paper)
[4] P. O. Pinheiro, R. Collobert, and P. Dollar. Learning to segment object candidates. In NIPS, 2015. (paper)
[5] Dai, J., He, K., Sun, J. Instance-aware semantic segmentation via multi-task network cascades. In CVPR., 2016. (paper)
[6] J. Dai, K. He, Y. Li, S. Ren, and J. Sun. Instance-sensitive fully convolutional networks. In ECCV, 2016. (paper)
[7] Y. Li, H. Qi, J. Dai, X. Ji, and Y. Wei. Fully convolutional instance-aware semantic segmentation. In CVPR, 2017. (paper)
[8] K He, G Gkioxari, P Dollár, R Girshick. Mask R-CNN. In ICCV, 2017. (paper)
编译参考
[1] jianyuchen23—— U-Net论文详解
[2] DelphiFan’s Blog—— 语义分割论文-SegNet
[3] Elaine_Bao—— 物体检测与分割系列 DeepMask
[4] AHU-WangXiao—— Instance-aware Semantic Segmentation via Multi-task Network Cascades
[5] Tina’s Blog—— InstanceFCN:Instance-sensitive Fully Convolutional Networks
[6] 技术挖掘者—— Mask R-CNN详解
计算机视觉的研究方向
计算机视觉(Computer Vision)是一门研究如何使计算机能够理解和分析数字图像或视频的学科。计算机视觉的目标是让计算机能够像人类一样对视觉信息进行处理和理解。计算机视觉包括许多不同的子领域和方向,以下是一些主要的方向:
图像识别与分类:这个方向关注如何识别图像中的物体、场景或概念,将图像分为不同的类别。
物体检测:物体检测的任务是在图像中定位特定物体的位置,并用边界框标识出来。
人脸识别:人脸识别专注于检测和识别图像中的人脸,应用于安防监控、社交媒体等领域。
语义分割:语义分割任务是将图像中的每个像素分配给一个类别,从而实现对图像中的各个区域的语义理解。
实例分割:实例分割任务不仅要对图像中的物体进行分类,还需要区分同一类别的不同实例。
姿态估计:姿态估计关注于从图像中检测和识别人体关键点,用于动作识别、运动分析等。
三维重建:三维重建的目标是从二维图像或视频中重建三维场景或物体的几何结构。
光流估计:光流估计是研究如何从图像序列中估计物体运动的方向和速度。
视觉跟踪:视觉跟踪任务是在视频序列中跟踪指定物体的运动轨迹。
图像合成与风格迁移:这个方向关注如何将一种风格应用到另一幅图像上,或者根据给定的条件生成新的图像。
图像修复与增强:图像修复与增强研究如何去除图像中的噪声、模糊等缺陷,以提高图像质量。
目标跟踪与识别:目标跟踪与识别关注在复杂动态场景中实时跟踪和识别感兴趣的物体,例如在运动视频中跟踪运动员、车辆等。
视觉问答(Visual Question Answering, VQA):视觉问答是一种结合计算机视觉和自然语言处理技术的任务,要求系统根据输入的图像回答与图像相关的问题。
视觉搜索:视觉搜索任务是根据用户提供的图像查询相关的信息,例如找到相似的图像、查询图像中物体的价格等。
图像和视频检索:图像和视频检索是在大规模多媒体数据库中找到与查询条件相似或相关的图像和视频的过程。
图像生成:图像生成关注于如何利用深度学习模型生成新的、逼真的图像。
这些方向在很多领域都有广泛的应用,如自动驾驶、医疗影像分析、无人机、智能监控、虚拟现实(VR)和增强现实(AR)等。计算机视觉技术随着深度学习和神经网络的发展不断取得突破性进展,对于许多实际应用场景具有重要价值。
计算机视觉研究的方向如下:
1、图像分类:
图像分类,顾名思义,就是一个模式分类问题,它的目标是将不同的图像,划分到不同的类别,实现最小的分类误差。
2、目标检测:
分类任务给出的是整张图片的内容描述,而目标检测任务则关注图片中特定的目标。检测任务包含两个子任务,其一是这一目标的类别信息和概率,它是一个分类任务。其二是目标的具体位置信息,这是一个定位任务。
3、 图像分割:
图像分割属于图像处理领域最高层次的图像理解范畴。所谓图像分割就是把图像分割成具有相似的颜色或纹理特性的若干子区域,并使它们对应不同的物体或物体的不同部分的技术。这些子区域,组成图像的完备子集,又相互之间不重叠。
4、目标跟踪:
目标跟踪,指的其实就是视频中运动目标的跟踪,跟踪的结果通常就是一个框。目标跟踪是视频监控系统中不可缺少的环节。 根据目标跟踪方法建模方式的不同,可以分为生成式模型方法与判别式模型方法。
5、 图像滤波与降噪:
现实中的数字图像在数字化和传输过程中常受到成像设备与外部环境噪声干扰等影响,称为含噪图像或噪声图像。减少数字图像中噪声的过程称为图像降噪,有时候又称为图像去噪。 降噪可以应用于图像增强和美颜等领域。