目录
迁移学习与物体定位监测
能否将目标检测当成回归问题?对于不同的图片输出的多个对象的边界框,可能输出4个边界框也可能输出8个边界框,输出的数量不固定,所以无法当成是回归问题。
迁移学习
在实践中,由于很少有足够大的数据集,所以很少有人会选择从头开始训练网络。常见的方法是:在一个非常大的数据集上预训练一个CNN,再使用这个预训练的网络作为初始化网络后进行微调、或者作为特征提取器。
- 卷积神经网络作为一个特征提取器。使用在ImageNet上预训练的CNN,去除最后的全连接层(即:最后用来分类的层),然后将剩余的部分作为一个特征提取器。
- Fine-tuning CNN。替换掉网络的输入层(数据),使用新的数据继续训练。
迁移学习场景:
- 新数据集比较小,并且和原始数据集相似程度较高。不建议对CNN进行Fine-tune,建议使用预训练的CNN作为特征提取器,再以此训练一个线性分类器。
- 新数据集比较大,并且和原始数据集相似程度较高。由于新数据集足够大,可以fine-tune整个网络
- 新数据集较小,并且和原始数据集差异很大。由于数据集很小,所以最好是训练一个线性分类器。又因为数据集与原始数据集不相似,最好的方式是从预训练网络的浅层输出作为特征训练一个线性分类器。
- 新数据集比较大,并且和原始数据集差异很大。因为新数据集足够大,可以重新训练网络。
物体定位&检测
给图片打标签之后,还要框出物体在什么地方-在分类定位中,输出的框的个数是事先已知的,而物体检测中则是不确定的,与分类+定位任务不同的是,物体检测中需要检测的物体数量是不确定的,因此无法直接使用回归框架。
滑动窗口-overfeat
随机选取若干个不同大小不同位置的窗口
RCNN
- 预训练一个CNN
- 构造训练集:首先应用Selective Search算法从每张带标定框的图像中选取2000~3000个候选框。
- 每个候选区域经过预处理,送到CNN中提取出图像特征,然后把图像特征送到SVM分类器中,计算出标签分类的损失。同时图像特征还要送到回归器中,计算偏移距离的L2损失。
- 反向传播训练
fast R-CNN
解决R-CNN训练预测慢的问题,对整个图像进行CNN特征提取,然后在选定候选区域
- 与R-CNN一样用Selective Search方法生成2000多个候选框
- 将整张图片直接输入CNN中,进行特征提取
- 把之前生成的2000个框映射到刚刚CNN提取的最后一层feature map 上
faster R-CNN:
SSD
SSD的思想是将图像划分为很多个格子,以每个格子的中心可以衍生出若干个base boxes。使用神经网络一次性的对这些格子进行分类,对这些baseboxes进行回归。
物体分割 & 语义分割
语义分割是对图像中每个像素作分类,不区分物体,只关心像素,往往代价大,可先欠采样再过采样的框架
欠采样可以使用卷积层和池化,过采样采用去池化,转置卷积
还有一种被称为Max Unpooling 的方法,该方法记录下之前使用max pooling前各个最大值在数组中的索引,去池化的时候把值放到索引处,其他位置补0:
物体分割-Mask RCNN
要做的是在物体检测上更进一步,从像素层面把各个物体分割出来。
将图像使用CNN处理为特征,然后经过一个RPN网络生成候选区域,投射到之前的feature map。到这里与faster RCNN一样。之后有两个分支,一个分支与faster RCNN相同,预测候选框的分类和边界值,另一个分支则与语义分割相似,为每个像素做分类。