
1. 视觉识别任务概述视觉识别是计算机视觉领域的核心任务旨在让计算机理解图像内容。根据输出粒度的不同视觉识别任务可以分为四大类图像分类、语义分割、目标检测和实例分割。这四类任务对图像的理解程度逐层加深从「整张图是什么」到「每个像素属于什么」再到「每个目标在哪里、是什么」最终到「每个目标的像素级轮廓」。下面通过一个包含猫、狗、草、树、天空的示例图像来说明四类任务的差异。任务类型输出内容空间位置典型输出示例图像分类整张图像的类别标签不考虑空间位置猫语义分割每个像素的类别标签像素级但不区分实例草、猫、树、天空目标检测多个目标的边界框和类别目标级边界框狗、狗、猫实例分割每个目标的像素级掩码和类别像素级且区分实例狗、狗、猫从表中可以看出图像分类只回答「图像里有什么」语义分割回答「每个像素是什么」目标检测回答「目标在哪里、是什么」而实例分割则进一步回答「每个目标的具体轮廓是什么」。四者之间是逐步细化的关系。2. 语义分割2.1 任务定义语义分割的任务是给图像中的每个像素分配一个类别标签。它只考虑像素的类别不区分同一类别中的不同实例。例如图像中有两只狗语义分割会把两只狗的像素都标记为「狗」但不会区分「狗1」和「狗2」。语义分割的典型应用场景包括自动驾驶中的道路、车辆、行人区域划分以及医学影像中的器官或病灶区域提取。2.2 语义分割思路一滑动窗口最早的语义分割思路是滑动窗口法。具体做法是从完整图像中提取一个区域窗口利用 CNN 对该区域中心点的像素进行分类然后滑动窗口逐像素重复这一过程。例如对于一个包含牛和草的图像滑动窗口会依次提取包含牛的区域和包含草的区域分别用 CNN 判断中心像素是「牛」还是「草」。这种方法的优点是思路简单、易于实现但存在一个致命问题效率太低。因为相邻窗口之间存在大量重叠区域这些重叠区域的特征会被反复计算造成巨大的计算浪费。例如一个窗口向右滑动一个像素新窗口与原窗口有 99% 的重叠这些重叠部分的卷积特征全部需要重新计算。2.3 语义分割思路二全卷积网络为了解决滑动窗口效率低的问题研究者提出了全卷积网络Fully Convolutional NetworkFCN的思路。核心思想是让整个网络只包含卷积层一次性输出所有像素的类别预测而不是逐像素滑动窗口。具体来说输入是 3×H×W 的图像3 个通道高 H宽 W经过一系列卷积层后得到 D×H×W 的特征图再经过若干卷积层得到 C×H×W 的分数图C 为类别数最后对每个像素取 argmax得到 H×W 的预测结果。然而这种保持原始分辨率的做法有一个问题处理过程中一直保持原始分辨率对显存的需求非常庞大。例如一张 512×512 的图像若特征图通道数为 512仅一层特征图就需要 512×512×512×4 字节约 512MB 显存多层叠加后显存开销难以承受。为此FCN 的改进方案是在网络中嵌入下采样与上采样过程先用池化或步长卷积进行下采样降低分辨率以节省计算量再用上采样操作恢复分辨率。具体流程为输入 3×H×W经过下采样得到高分辨率特征 D1×H/2×W/2、中分辨率特征 D2×H/4×W/4、低分辨率特征 D3×H/4×W/4最后通过上采样恢复到 H×W 的预测结果。下采样通常使用池化Pooling或步长卷积strided convolution上采样则使用反池化Unpooling或转置卷积transpose convolution。2.4 上采样方法一反池化反池化Unpooling是上采样的一种简单方法主要有两种形式最近邻反池化和「钉子床」反池化。最近邻反池化Nearest Neighbor将输入中的每个值直接复制到输出中对应的 2×2 区域。例如【输入 2×2 矩阵 [[1,2],[3,4]]通过上采用输出 4×4 矩阵】具体过程为每个值在 2×2 块内重复 4 次得到 [[1,1,2,2],[1,1,2,2],[3,3,4,4],[3,3,4,4]]。这种方法简单但会产生块状效应边界不够平滑。反池化Bed of Nails将输入中的每个值放到输出对应 2×2 区域的左上角其余位置补零。例如输入 [[1,2],[3,4]]输出为 [[1,0,2,0],[0,0,0,0],[3,0,4,0],[0,0,0,0]]。这种方法保留了位置信息但输出中大量为零信息密度低。最大反池化Max Unpooling这是更精细的反池化方法。在最大池化时除了记录池化结果还要记住每个最大值在原图中的位置。上采样时将池化结果放回原来的位置其余位置补零。例如输入 4×4 矩阵经过 2×2 最大池化得到 2×2 结果同时记录每个最大值的位置上采样时把池化结果放回对应位置其余补零。这种方法能较好地保留边缘信息但需要额外的位置记录开销。2.5 上采样方法二转置卷积可学习的上采样转置卷积Transpose Convolution是一种可学习的上采样方法为了理解转置卷积先回顾普通卷积。以 3×3 卷积、步长 1、零填充 1 为例输入 4×4输出仍为 4×4。卷积核在输入上滑动每个输出位置是卷积核与输入对应区域的点积。而转置卷积可以理解为「输入给出卷积核的权重卷积核按输入值加权后放到输出位置」。具体来说输入 2×2使用 3×3 转置卷积、步长 2、填充 1输出为 4×4。输入中的每个值作为权重与卷积核相乘后放到输出的对应位置当多个输入值的贡献在输出中重叠时重叠区域的值需要求和。转置卷积与普通卷积的关系可以用矩阵乘法来理解。普通卷积可以写成矩阵乘法将卷积操作表示为矩阵 C 与输入向量 x 相乘得到输出 y Cx。转置卷积则是乘以同一个矩阵的转置y C^T x。当步长为 1 时转置卷积等价于一个普通卷积只是填充规则不同当步长大于 1 时转置卷积不再是普通卷积而是真正意义上的上采样操作。下面通过一个一维例子说明转置卷积的计算过程。设输入为 [a, b]卷积核为 [x, y, z]步长 2填充 1。普通卷积的矩阵形式为输出中的每个位置是卷积核与输入对应窗口的点积。转置卷积则反过来输入 a 和 b 分别作为权重把卷积核 [x, y, z] 放到输出对应位置重叠处求和。例如输出第一个位置为 ax第二个位置为 ay第三个位置为 az bx第四个位置为 by第五个位置为 bz。如果需要输出恰好是输入的 2 倍长度还需要从输出中裁剪一个像素。转置卷积的优点是参数可学习网络可以自动学习最优的上采样核因此被广泛应用于 FCN 等语义分割网络中。2.6 全卷积神经网络小结综合以上内容全卷积神经网络FCN的完整流程为输入 3×H×W 图像经过下采样池化或步长卷积得到多分辨率特征图再经过上采样反池化或转置卷积恢复到原始分辨率最后输出 H×W 的像素级预测。FCN 的代表性工作包括 Long 等人的「Fully Convolutional Networks for Semantic Segmentation」CVPR 2015和 Noh 等人的「Learning Deconvolution Network for Semantic Segmentation」ICCV 2015。3. 目标检测3.1 任务定义与单目标检测目标检测的任务是在图像中找出所有目标并给出每个目标的类别和边界框。与语义分割不同目标检测不关心像素级轮廓只关心目标的位置边界框和类别。先看最简单的单目标情况图像中只有一个目标——猫需要同时完成分类和定位。做法是将定位任务建模为回归问题CNN 提取特征后接两个分支一个全连接层输出 1000 类分类分数用 Softmax 损失另一个全连接层输出 4 个边界框坐标 (x, y, w, h)用 L2 损失【以x,y为某个端点常用中心的w,h为宽度和高度的目标检测框】。总损失为多任务损失分类损失加定位损失。例如输入一张猫的图片CNN 输出 4096 维特征向量分类分支输出「猫0.9狗0.05车0.01……」的分数定位分支输出边界框坐标 (x, y, w, h)。训练时分类分支与真实标签「猫」计算 Softmax 损失定位分支与真实边界框 (x, y, w, h) 计算 L2 损失两者相加作为总损失。3.2 多目标检测的困境实际场景中图像往往包含多个目标例如一张图里有两只狗、一只猫、两只鸭子。每个目标都需要输出 (x, y, w, h) 四个实数那么一张图需要输出多少个实数答案是不确定。因为每张图像中目标的数量不同期望输出的维度也不一样。这是多目标检测的核心困境输出维度不固定无法直接用固定维度的全连接层输出。解决思路是利用 CNN 对图像中的区域进行多分类以确定当前区域是背景还是哪个类别的目标。具体做法是对图像中所有可能的位置、尺寸、长宽比的区域逐一用 CNN 分类。例如先判断某个区域「狗不是猫不是背景是」再判断另一个区域「狗是猫不是背景不是」如此反复。但这样做的问题是CNN 需要对图像中所有可能的区域进行分类计算量巨大几乎不可行。3.3 区域建议Selective Search为了减少需要分类的区域数量研究者提出了区域建议Region Proposal方法。其目标是找出所有潜在可能包含目标的区域并且运行速度要相对较快。代表性方法包括Selective Search在 CPU 上仅需几秒即可产生约 2000 个候选区域。Objectness 度量Alexe 等人的「Measuring the objectness of image windows」TPAMI 2012。Selective Search for Object RecognitionUijlings 等人的工作IJCV 2013。BINGCheng 等人的「Binarized normed gradients for objectness estimation at 300fps」CVPR 2014。Edge BoxesZitnick 和 Dollar 的「Locating object proposals from edges」ECCV 2014。区域建议方法大幅减少了需要分类的区域数量为目标检测提供了可行的基础。