目录
前言
在至少约十年的时间里,用于解决计算机视觉领域问题的技术已经有了很大的改进。那对于计算机视觉领域存在的问题有哪些呢?一些显著的问题是:图像分类、目标检测、图像分割、图像说明等。并且分析各种任务的解决方法以及原理。
1.语义分割
语义分割不仅是对图片中的某一位置分类,它是对图像中的每一个像素都进行分类。
1.1滑动窗口
对于这类问题,可以用滑动窗口进行实现,每次提取图片中的一块,通过同样的网络模型,对每个小块就行分类识别
但是这种办法需要很大的计算量以及内存,因为每张图片的每一小块都需要用内存进行保存。
1.2全连接网络
这种办法是一次性对图片的每个像素进行分类识别的,网络层里面有很多个卷积层堆叠起来的,并且池化层的padding参数需要补零操作,不能有池化层等降维操作,是为了保证图片的像素大小不变,训练出来的模型也就是为每个像素分配损失,并且平均化损失,如下图最终输出的也是H*W大小的向量,可以预测每个像素对应的每种种类的分数。
但是这种一直叠加卷积层会使运算量变得很大,实际操作时,我们只对一部分卷积层(特别是后面的卷积层)做清晰处理,对于中间的部分可以先进行上采样,再进行下采样等操作来降低运算量。
对于上面所说上下采样,下采样很简单,但是怎么来进行上采样,我们可以多次重复一个值或者其他的补零等操作
具体操作可以看下图例子,2*2的输入,用一个3*3卷积核对它操作,卷积核Stride=2,pad=1,也就实现了维度扩张,对于重叠的部分就加起来。
一维形式可以看成如下运算。
2.分类与定位
分类和定位任务需要做的是先将图片分类,识别出他的种类,然后再进行定位,定位的box参数(x,y,w,h)分别为坐标x,y和高度宽度,同样是用全连接网络实现。
这个任务有两个损失值,分别对应分类和定位,用softmax函数进行计算,但是对于损失值不能每次输出两个,因为这是一个任务
我们可以设定超参数,也就是两个损失值的权重参数,然后每次加权求和就是实际的参数,在现实训练中没法一直盯着,我们可以将超参数放入矩阵中,依次输入,让电脑来比较哪组超参数最适合。
3.目标检测
目标检测是先将对象用方框框出来,然后再对对象进行分类,难点在于图片中可能有多个对象需要识别。如下图,猫只需要预测四个参数,但是狗需要预测12个参数。
在处理这类问题,可以用滑动窗口来实现,每张图片都用一个方框,框住一块,然后传入神经网络中进行识别。
但是上文提及过,这种方法运算量过于复杂,
实际情况中可以用候选区域方法,如下图
具体做法就是,图片先通过候选区域网络进行识别处理,框出对应种类识别出的特征,然后再将它输入到CNN神经网络中对这些框住的特征进行分类,定位出对象的位置以及种类,也就是R-CNN网络,
R-CNN网络结构,先是处理候选区域看,然后放入支持向量机模型中
另一种R-CNN变种就是fast R-CNN网络,值得注意的是,fast R-CNN网络在后面是归类到回归问题进行处理,所有它不一定优于R-CNN网络
还有另一种方法SSD,它不是用候选区域的方法,而是有网格的方法,他直接将问题一步处理,看出回归问题,
具体做法是将图片分成网格状,网格线就是所要预测的box的初始边框,它要预测目标对象跟目前边框的偏移,进而矫正边框的位置,然后再对目标对象进行评分分类。
4.实例分割
处理图像分割问题,可以使用Mask R-CNN模型,先将图片输入到CNN中,生成候选区域,然后一个分支就是做分类以及box定位处理,另一个分支是对候选区域的像素进行分类,就相当于综合了前三类问题。
具体的做法就是前三个任务做法的结合。