视觉任务基本包括以下四类,难度基本是递增,且本质上都可以归类为分类任务。
图像分类 (Image Classification)
- Image-level Classification
- 代表:AlexNet (2012)、ZFNet (2013)、VGG (2014)、GoogLeNet (2014)、ResNet (2015)、DenseNet (2016)
根据类别数是否固定,可以将图像分类分成下面两种:
- 对于类别数固定的分类任务,一般是用 CNN 提取图像特征,然后用一个全连接层 + softmax 进行分类;
- 对于类别数不固定的分类任务(如支持补录人脸的人脸识别系统),一般是用 CNN 提取图像特征并将图片映射到一个隐空间 embeddding,然后把分类任务转化为隐空间的 k-近邻任务。
目标检测 (Object Localization)
- Bounding-box-level
- 代表:R-CNN、Fast R-CNN、Faster R-CNN、Yolo、SSD
- 核心任务是
定位+检测/分类
,包含One-Stage
和Two-Stage
的目标检测算法。
语义分割 (Semantic Segmentation)
- Pixel-level Classification
- end-to-end、pixels-to-pixels
- 代表:FCN (2015)、U-Net (2015)、Mask R-CNN (2017)、SegNet
语义分割发展时间线
Fully Convolutional Network (FCN)
论文: Fully Convolutional Networks for Semantic Segmentation
FCN 引入了跳级结构 (skip architecture),核心思想就是将深层的 feature map 和浅层的 feature map 进行上采样和 concat 操作。
跳级结构 (skip architecture): 语义分割需要考虑语义和位置的内在联系,全局信息考虑的是what,局部信息考虑的是where。深层表达了粗糙的语义信息,浅层保留了较好的外观信息。
FCN 网络结构 (CVPR 2015')
U-Net
论文:U-Net: Convolutional Networks for Biomedical Image Segmentation
U-Net 同样采用了跳级结构,但是整个网络比 FCN 更加规整,且为了跳级结构的对齐相连,还加入了 crop 操作(因为逐层卷积损失了导致边界像素值的丢失),最后一层通过 $\mathbf {1\times 1}$ 的卷积层对 feature map 进行降维。
上采样可以用反卷积,也可以用双线性插值。双线性插值使得图像比较平滑,而反卷积的好处就是参数可学习。数据集规模较大的时候,反卷积应该会更好。
U-Net 网络结构 (MICCAI 2015')
实例分割 (Instance Segmentation)
- Pixel-level Classification
- 代表:Mask R-CNN (2017)
未完待续!