计算机视觉的任务很多,有图像分类、目标检测、语义分割、实例分割和全景分割等,那它们的区别是什么呢?
object recognition(目标识别)
- 给定一幅图像
- 检测到图像中所有的目标(类别受限于训练集中的物体类别)
- 得到检测到的目标的矩形框,并对所有检测到的矩形框进行分类
Image Classification(图像分类)
图像分类(下图左)就是对图像判断出所属的分类,比如在学习分类中数据集有人(person)、羊(sheep)、狗(dog)和猫(cat)四种,图像分类要求给定一个图片输出图片里含有哪些分类,比如下图的例子是含有person、sheep和dog三种。
左下角图片
object detection(目标检测)
- 与object recognition目标类似
- 但只有两个类别,只需要找到目标所在的矩形框和非目标矩形框
- 例如,人脸检测(人脸为目标、背景为非目标)、汽车检测(汽车为目标、背景为非目标)
- 右下角为目标检测
Object Segmentation(目标分割)
- 与object recognition相似,检测到图像中的所有目标
- 但是像素级的,需要给出属于每一类的所有像素点,而不是矩形框
Image Segmentation(图像分割)
- 将给定的图像分割为多个区域
- 每个区域为一类,但不需要给出label
emantic segmentation(语义分割)
- 需要对图像的每一个像素点进行分类
- 语义分割(下图左)就是需要区分到图中每一点像素点,而不仅仅是矩形框框住了。但是同一物体的不同实例不需要单独分割出来。对下图左,标注为人,羊,狗,草地。而不需要羊1,羊2,羊3,羊4,羊5等。
- 图片左下角
Instance segmentation(实例分割)
实例分割(上图右)其实就是目标检测和语义分割的结合。相对目标检测的边界框,实例分割可精确到物体的边缘;相对语义分割,实例分割需要标注出图上同一物体的不同个体(羊1,羊2,羊3…)
目前常用的实例分割算法是Mask R-CNN。
Mask R-CNN 通过向 Faster R-CNN 添加一个分支来进行像素级分割,该分支输出一个二进制掩码,该掩码表示给定像素是否为目标对象的一部分:该分支是基于卷积神经网络特征映射的全卷积网络。将给定的卷积神经网络特征映射作为输入,输出为一个矩阵,其中像素属于该对象的所有位置用 1 表示,其他位置则用 0 表示,这就是二进制掩码。
一旦生成这些掩码, Mask R-CNN 将 RoIAlign 与来自 Faster R-CNN 的分类和边界框相结合,以便进行精确的分割: