转:图像分类、物体检测、物体分割、实例分割、语义分割
0001,常识1
计算机视觉的任务很多,有图像分类、目标检测、语义分割、实例分割和全景分割等,那它们的区别是什么呢?
1、Image Classification(图像分类)
图像分类(下图左)就是对图像判断出所属的分类,比如在学习分类中数据集有人(person)、羊(sheep)、狗(dog)和猫(cat)四种,图像分类要求给定一个图片输出图片里含有哪些分类,比如下图的例子是含有person、sheep和dog三种。
2、Object detection(目标检测)
目标检测(上图右)简单来说就是图片里面有什么?分别在哪里?(把它们用矩形框框住)
目前常用的目标检测算法有Faster R-CNN和基于YOLO的目标检测的算法
3、semantic segmentation(语义分割)
通常意义上的目标分割指的就是语义分割
语义分割(下图左)就是需要区分到图中每一点像素点,而不仅仅是矩形框框住了。但是同一物体的不同实例不需要单独分割出来。对下图左,标注为人,羊,狗,草地。而不需要羊1,羊2,羊3,羊4,羊5等。
4、Instance segmentation(实例分割)
实例分割(上图右)其实就是目标检测和语义分割的结合。相对目标检测的边界框,实例分割可精确到物体的边缘;相对语义分割,实例分割需要标注出图上同一物体的不同个体(羊1,羊2,羊3...)
目前常用的实例分割算法是Mask R-CNN。
Mask R-CNN 通过向 Faster R-CNN 添加一个分支来进行像素级分割,该分支输出一个二进制掩码,该掩码表示给定像素是否为目标对象的一部分:该分支是基于卷积神经网络特征映射的全卷积网络。将给定的卷积神经网络特征映射作为输入,输出为一个矩阵,其中像素属于该对象的所有位置用 1 表示,其他位置则用 0 表示,这就是二进制掩码。
一旦生成这些掩码, Mask R-CNN 将 RoIAlign 与来自 Faster R-CNN 的分类和边界框相结合,以便进行精确的分割:
5、Panoramic segmentation(全景分割)
全景分割是语义分割和实例分割的结合。跟实例分割不同的是:实例分割只对图像中的object进行检测,并对检测到的object进行分割,而全景分割是对图中的所有物体包括背景都要进行检测和分割。
0002,常识2
转自:https://blog.csdn.net/Gerwels_JI/article/details/82990189
Directions in the CV
- 物体分割(Object segment)属于图像理解范畴。那什么是图像理解?Image Understanding (IU) 领域包含众多sub-domains,如图像分类、物体检测、物体分割、实例分割等若干问题。每个问题研究的范畴是什么?每个问题中,各个approach对应的the result of processing是什么?
- Image Understanding (IU) is an interdisciplinary approach which fuse computer science, mathematics, engineering science, physics, neurosciences, and cognitive science etc. together.
- 一般我们将CV分为三个大方向:图像处理、图像分析、图像理解。其中图像理解分为以下三个部分
- Image Classification:
即是将图像结构化为某一类别的信息,用事先确定好的类别(string)或实例ID来描述图片。其中ImageNet是最权威的测评集,每年的ILSVRC催生大量优秀的深度网络结构,为其他任务提供基础,在应用领域,人脸、场景识别都可以视为分类任务。 - Detection
分类任务关心整体,给出的是整张图片的内容描述,而检测则关注特定的物体目标,要求获得这一目标的类别信息和位置信息。相比分类,检测给出的是对图片前景和背景的理解,我们需要从背景中分离出感兴趣的目标,并确定这一目标的描述(类别和位置),因而检测模型的输出是一个列表,列表的每一项使用一个数据组给出检出目标的类别和位置,常用矩形检测框的坐标表示。 - Segmentation
分割包括语义分割(semantic segmentation)和实例分割(instance segmentation),前者是对背景分离的拓展,要求分离开具有不同语义的图像部分,而后者是检测任务的拓展,要求描述出目标的轮廓(相比检测框更为精细)。分割是对图像的像素级描述,它赋予每个像素类别意义,适用于理解要求较高的场景,如无人驾驶中对道路和非道路的分割。
后期我会写CV综述,此处留坑占位!
也会对object segmentation的方法进行总结,占坑!
Image Classification
- The task of object classification requires binary labels indicating whether objects are present in an image.
- Definition:Image Classification根据image中不同图像信息中不同的feature,把不同类别的object region进行分类。
- 该任务需要我们对出现在某幅图像中的物体做标注。
- 例如:一共有1000个物体类的image中,某个物体要么有,要么没有。可实现:输入一幅测试图片,输出该图片中物体类别的候选集。如下图所示,不同形状的图形,通过分类分成了8类
Object localization (目标定位)
- 在图像分类的基础上,我们还想知道图像中的目标具体在图像的什么位置,通常是以边界框的(bounding box)形式。
- 基本思路
- 多任务学习,网络带有两个输出分支。一个分支用于做图像分类,即全连接+softmax判断目标类别,和单纯图像分类区别在于这里还另外需要一个“背景”类。另一个分支用于判断目标位置,即完成回归任务输出四个数字标记bounding box位置(例如中心点横纵坐标和包围盒长宽),该分支输出结果只有在分类分支判断不为“背景”时才使用。
- 人体位姿定位/人脸定位
目标定位的思路也可以用于人体位姿定位或人脸定位。这两者都需要我们对一系列的人体关节或人脸关键点进行回归。 - 弱监督定位
由于目标定位是相对比较简单的任务,近期的研究热点是在只有标记信息的条件下进行目标定位。其基本思路是从卷积结果中找到一些较高响应的显著性区域,认为这个区域对应图像中的目标。
Object detection(目标检测)
- Detecting an object entails both stating that an object belonging to a specified class is present, and localizing it in the image. The location of an object is typically represented by a bounding box.
- 理解:object detection=classification+localization
- 定义:物体探测包含两个问题,一是判断属于某个特定类的物体是否出现在图中;二是对该物体定位,定位常用表征就是物体的边界框(bounding box)。
- 可实现:输入测试图片,输出检测到的物体类别和位置。如下图,移动的皮卡丘和恐龙
语义分割(Semantic Segmentation)
- The task of labeling semantic objects in a scene requires that each pixel of an image be labeled as belonging to a category, such as sky, chair, floor, street, etc. In contrast to the detection task, individual instances of objects do not need to be segmented.
- 语义标注(Semantic scene labeling)/分割(segmentation):该任务需要将图中每一点像素标注为某个物体类别。同一物体的不同实例不需要单独分割出来。
Instance segmentation
- instance segment = object detect +semantic segment
- 相对物体检测的边界框,实例分割可精确到物体的边缘;相对语义分割,实例分割可以标注出图上同一物体的不同个体
- 分类任务通常来说就是识别出包含单个对象的图像是什么,但在分割实例时,我们需要执行更复杂的任务。我们会看到多个重叠物体和不同背景的复杂景象,我们不仅需要将这些不同的对象进行分类,而且还要确定对象的边界、差异和彼此之间的关系!
- 如下图所示,把不同的实例对象进行了分割,并用不同的颜色进行边缘标注(而不是边框标注
Some examples
综述
图像理解领域中的object segmentation方向包括了:image classification、object localization、object detection、semantic segmentation、instance-level segmentation。分类复杂度依次递增,分类详细程度依次递增。
0003,常识
计算机视觉(CV)一直是目前深度学习领域最热的研究领域,其是一种交叉学科包括计算机科学(computer science / (Graphics, Algorithms, Theory, Systems, Architecture)、数学 (Information Retrieval, Machine Learning)、工程学(Robotics, Speech, NLP, Image Processing)、物理(Optics)、生物学 (Neuroscience), and 神经科学 (Cognitive Science),由于计算机视觉表示了对视觉环境的理解,加上其学科交叉性,众多科学家认为计算机视觉的发展可以为实现理想的人工智能铺路。
对于问题:什么才是计算机视觉?以下有三个不同的教科书式计算机视觉定义:
“the construction of explicit, meaningful descriptions of physical objects from images” (Ballard & Brown, 1982)
“computing properties of the 3D world from one or more digital images” (Trucco & Verri, 1998)
“to make useful decisions about real physical objects and scenes based on sensed images” (Sockman & Shapiro, 2001)
那么为什么要研究计算机视觉呢?最简单的答案就是其可以将研究快速有效的应用到现实场景中,下面列举了几个CV应用的场景:
- 人脸识别
- 图像检索
- 游戏和控制
- 监控
- 生物统计(指纹,虹膜,人脸匹配)
- 智能驾驶
笔者最近完成了斯坦福的CS231课程【1】,课程中将卷积神经网络用在视觉识别任务中,包括图像分类,定位和检测,尤其是深度学习技术的发展极大的提高了这些任务的精度,完成这个课程后,笔者想和大家分享5个最具影响力的计算机视觉技术。
1. 图像分类 image classification
图像分类任务描述如下:给定一系列标记为单标签的图像,希望成功预测出未经标记的新的数据的标签。与这个任务相联系的是更多的挑战:包括:角度多样性, scale多样性, 额外新类的变化, 图像的损坏, 先验条件, 和背景的变化。
so,如何才能设计一个算法分类出不同的类,计算机视觉研究者提出以数据为驱动的解决方法,令计算机从一些已经有类别标记的图像中学习到图像的视觉表示。
而在这个算法中最常用的就是卷积神经网络了,Convolutional Neural Networks
(CNNs)。输入图像到CNN网络中后,CNN并不是直接对整个图像做计算,而是创建一个滑动机制,假设先输入图像中10*10的pixel,以相乘的计算方式计算,乘数部分成为卷积核,然后从左到右进行滑动,计算接下来的10*10pixel,这就是CNN中的滑动窗口计算机制。
输入数据输入卷积层后,卷积层中卷积核仅关注当前部分和它附近的部分。整体的卷积网络趋向于更窄以便于在相同参数量的情况下搭建更深的网络。除了卷积层之外,在分类中常使用的还有池化层pooling
layer,最常见的是最大池化 Max pooling,假设maxpooling的pooling核是2,maxpooling
的工作机制是取2x2大小的像素块中的最大值代替这个像素块。
图像分类最典型的数据集是imagenet,一个包含120万张,1000类的大型图像数据集。以此数据集为基础,衍生了许多典型的深度学习经典网络:
- AlexNet(2012)
- ZFNet(2013)
- VGG(2014)
- GoogleNet(2014)
- InceptionNet(2015)
- ResNet(2016)
- DenseNet(2016)
图像分类任务虽然简单,应用范围也有限,但是其是计算视觉的基础,图像分类上的成功表明深度学习网络具有学习并理解图像的能力。目前计算机视觉的其他任务使用的basemodel都是在image
classification上取得成功的网络结构。因此,可以把图像分类视为深度学习实现人工智能的第一步。
注:貌似16年往后,基本没有革新性质的网络结构出现了,/手动笑哭/。
2. 目标检测 object detection
object detection的任务是检测到图像中的目标并分类出目标种类,如上图所示,检测出车并框住,并给出框中目标的置信度,当然上图并不是目前深度学习最好的结构,图中有两个漏检测的目标。
目标检测与图像分类,目标定位不同的地方在于目标检测是同时应用分类和定位技术到图像中的多个目标,此类任务的label也更复杂,不仅要知道目标的位置(bounding
box)还要知道目标的类别,而且为了检测到比较小的目标,提高检测精度,此类任务的batch size往往很小。
目标检测的技术实现相对复杂,但是应用场景非常多,比如统计:统计人、车、花朵或者微生物的数量是现实生活中各种不同类型的使用图形信息的系统最广泛的需求;图像检索,根据图像检测图像;卫星图像分析;安防场景等等。
目前深度学习在这方面的工作有很多:
- RCNN
- Fast RCNN https://arxiv.org/pdf/1504.08083.pdf
- Faster RCNN https://arxiv.org/pdf/1506.01497.pdf
- YOLO系列 http://lanl.arxiv.org/pdf/1612.08242v1
- SSD http://lanl.arxiv.org/pdf/1512.02325v5
以上这些都是近几年来最典型的目标检测成果,这些工作提供了深度学习技术在目标检测上的应用形式以及研究方向,目前的大部分较好的结果都是基于这些工作改进而来。
3. 目标追踪 object tracking
目标追踪即是在一个给定的场景中,follow一个或者多个目标。传统上,目标追踪都是应用在视频或者实时场景交互,比如观测者追踪一个初始的目标。目前来讲,使用最典型的场景就是自动驾驶了。
目标追踪可以分为两类:一类是生成式方法,另一类是判别式方法。生成方法使用生成模型来描述表观特征并最小化重建误差以搜索目标,如PCA。而判别式方法可以用来区分物体和背景,其性能更稳健,并逐渐成为跟踪的主要方法。判别法也被称为跟踪检测,深度学习属于这一类别。为了通过检测实现跟踪,我们检测所有帧的候选对象,并使用深度学习从候选对象中识别想要的对象。有两种可以使用的基本网络模型:堆叠自动编码器(SAE)和卷积神经网络(CNN)。
使用SAE跟踪任务的最受欢迎的深度网络是Deep Learning Tracker,它提出线下预训练和在线微调网络,工作流程如下:
- 离线无监督预先训练使用大规模自然图像数据集的堆叠去噪自动编码器,以获得一般对象的表示。叠加去噪自动编码器通过在输入图像中添加噪声并重构原始图像可以获得更强大的特征表达能力。
- 将预先训练好的网络的编码部分与分类器合并得到分类网络,然后使用从初始帧中获得的正负样本对网络进行微调,从而可以区分当前的对象和背景。 DLT使用粒子滤波器作为运动模型来生成当前帧的候选patches。分类网络输出这些patches的概率分数,即分类的置信度,然后选择这些patches中最高的patches作为目标。
- DLT使用有限阈值的方式更新模型。
由于其在图像分类和目标检测方面的优势,CNN已成为计算机视觉和视觉跟踪的主流深度模型。一般来说,大规模的CNN既可以作为分类器也可以作为跟踪器来训练。 2种有代表性的基于CNN的跟踪算法是全卷积网络跟踪器(FCNT)和多域CNN(MD Net)。
FCNT成功地分析和利用了VGG模型的特征图,这是一个预先训练好的ImageNet,并得出以下结论:
- CNN feature maps可用于定位和跟踪。
- 许多CNN feature maps对于区分背景中的特定对象的任务而言是嘈杂或不相关的。
- 较高层捕获对象类别的语义概念,而较低层编码更多区分性特征以捕获类内变体。
因此,FCNT设计了特征选择网络以在VGG网络的conv4-3和conv5-3层上选择最相关的特征图。然后为了避免嘈杂的过拟合,它还为两层单独选择的特征映射设计了额外的两个通道(称为SNet和GNet)。
GNet捕获对象的类别信息,而SNet将该对象从具有相似外观的背景中区分出来。两个网络都使用第一帧中给定的边界框进行初始化,以获取对象的热图,而对于新帧,将裁剪并传播最后一帧中以对象位置为中心的感兴趣区域(ROI)。最后,通过SNet和GNet,分类器获取两个预测的热图,跟踪器根据是否存在干扰,决定使用哪个热图来生成最终的跟踪结果。
FCNT的pipline如下所示。
与FCNT的想法不同,MD Net使用视频的所有序列来跟踪它们的移动。上述网络使用不相关的图像数据来减少跟踪数据的训练需求,并且这种想法与跟踪有一些偏差。该视频中的一个类的对象可以是另一个视频中的背景,因此MD Net提出了多域的思想来独立地区分每个域中的对象和背景。而一个域表示一组包含相同类型对象的视频。
如下图所示,MD Net分为两部分:域特定层的共享层和K分支。每个分支包含一个softmax损失的二进制分类层,用于区分每个域中的对象和背景,共享层与所有域共享以确保一般表示。
近年来,深度学习研究人员尝试了不同的方法来适应视觉追踪任务的特征。有许多方向已经被探索:应用其他网络模型,如Recurrent Neural Net和Deep Belief Net,设计网络结构以适应视频处理和端到端学习,优化流程,结构和参数,或者甚至将深度学习与计算机视觉的传统方法或其他领域的方法(如语言处理和语音识别)相结合。
4. 语义分割 Semantic Segmentation
计算机视觉的核心是分割过程,它将整个图像分成像素分组,然后可以对其进行标记和分类。特别地,语义分割试图在语义上理解图像中每个像素的角色(例如,它是汽车,摩托车还是其他类型的类)。例如,在上图中,除了识别人,道路,汽车,树木等之外,我们还必须划定每个物体的边界。因此,与分类不同,我们需要从我们的模型进行像素级的预测。
与其他计算机视觉任务一样,CNN在分割问题上取得了巨大成功。最流行的初始方法之一是通过滑动窗口进行patches分类,其中每个像素使用其周围的图像pathes分别分类。但是,这在计算上效率非常低,因为我们不重用重叠patches之间的共享功能。
加州大学伯克利分校的研究员提出了全卷积网络(FCN),它在没有任何完全连接层的情况下推广端到端CNN体系结构进行密集预测。这允许针对任何尺寸的图像生成分割图,并且与patches分类方法相比也快得多。几乎所有后续的语义分割方法都采用了这种范式。
然而,仍然存在一个问题:原始图像分辨率的卷积将非常昂贵。为了解决这个问题,FCN在网络内部使用下采样和上采样。下采样层被称为条带卷积,而上采样层被称为转置卷积。
尽管有上采样/下采样层,但由于池中的信息丢失,FCN会生成粗分割图。 SegNet是一种比使用最大池和编码器 - 解码器框架的FCN更高效的内存架构。在SegNet中,从更高分辨率的特征映射中引入了快捷/跳过连接,以改善上采样/下采样的粗糙度。
最近的语义分割研究都严重依赖完全卷积网络,如
空洞卷积 https://arxiv.org/pdf/1511.07122.pdf,
DeepLab https://arxiv.org/pdf/1412.7062.pdf
RefineNet https://arxiv.org/pdf/1611.06612.pdf。
5. 实例分割 Instance Segmentation
除了语义分段之外,实例分段还将不同的实例分类,例如用5种不同颜色标记5辆汽车。在分类中,通常有一个图像包含单个对象作为焦点,任务是说出该图像是什么。但为了分割实例,我们需要执行更复杂的任务。我们看到多个重叠物体和不同背景的复杂景点,我们不仅分类这些不同的物体,而且还确定它们的边界,差异和彼此之间的关系!
到目前为止,我们已经看到了如何以许多有趣的方式使用CNN特征,以便用bounding
box框住图像中的不同对象。我们可以扩展这种技术来定位每个对象的精确像素,而不仅仅是边界框吗?当然可以, Facebook AI使用称为Mask
R-CNN的体系结构研究了此实例分割问题。
就像Fast R-CNN和更快的R-CNN一样,Mask R-CNN的底层直觉很直观鉴于更快的R-CNN在物体检测方面的工作如此出色,我们是否可以将其扩展到进行像素级分割?
Mask R-CNN通过向Faster R-CNN添加分支来完成此操作,该分支输出一个二进制掩码,该掩码表示给定像素是否为对象的一部分。该分支是基于CNN特征映射的完全卷积网络。给定CNN特征映射作为输入,网络输出一个矩阵,其中像素属于该对象的所有位置均为1,而其他位置为0(这称为二进制掩码)。
另外,当在原始Faster R-CNN架构上运行时没有修改时,由RoIPool(感兴趣区域)选择的特征映射区域与原始图像的区域略微错开。由于图像分割需要像素级别的特异性,与边界框不同,这自然会导致不准确。 Mask R-CNN通过调整RoIPool使用称为Roialign(感兴趣区域对齐)的方法更精确地对齐来解决此问题。本质上,RoIAlign使用双线性插值来避免舍入错误,这会导致检测和分割不准确。
一旦生成这些蒙版,Mask R-CNN将它们与来自Faster R-CNN的分类和边界框相结合,以生成如此精确的精确分割:
结论
这5种主要的计算机视觉技术可以帮助计算机从单个或一系列图像中提取,分析和理解有用的信息。还有许多其他我尚未涉及的高级技术,包括样式转换,着色,动作识别,3D对象,人体姿势估计等等。事实上,计算机视觉领域的成本太高,无法深入报道,我鼓励您进一步探索,无论是通过在线课程,博客教程还是正式文档。我强烈推荐CS231n作为初学者,因为您将学习实施,训练和调试自己的神经网络。作为奖励,您可以从我的GitHub存储库中获取所有演讲幻灯片和分配指南。我希望它会引导你改变如何看待这个世界!