分割
假设我们有一幅图,这幅图片上有多个元素,我们得到所有元素的种类,并在每个像素上刻上其对应的元素种类,这就叫语义分割。下面是一个例子:
但它只区分不同种类的元素,而不区分同一种类的不同个体,如右图。
一个简单的实现语义分割的思路是,每次取一个小块,并通过CNN来得到其种类。但它对算力的要求太高,所以在实际应用中并不好用
一个更好的模型是全连接卷积网络,它是一个用多层卷积网络依次对图像进行处理,并使用argmax给每个像素"涂抹"上其归属类:
其中每一种类对应一层卷积。
但这样做的问题在于对算力和内存的要求过大,我们通常使用以下方法:
我们首先对图像进行卷积获取特征,然后下采样降低清晰度,然后
对其进行处理,得到结果后再进行上采样恢复原尺寸。
上采样包括去池化:
去卷积(也称重卷积、小步长卷积、反向跨卷积):
图像分类与定位
有时候我们不仅想知道图片里有什么,也想知道ta在哪里?这就涉及到图像定位的问题。
这里有两类损失,一类是分类损失,一类是定位损失。
对象识别
对象识别,即识别给定图片中的对象与指定种类集的子集,并对其进行标注。它和定位的区别是,在识别前,人们并不知道图片中含有几个待识别的对象。
一个方法是滑动窗口:
依次滑动窗口,分别对其使用识别技术。但这种方法对于算力的要求太大,所以人们往往使用待选窗口的方法,即R-CNN:
选择许多可能含有对象的区域,将其切分并使用CNN进行分类(、选取感兴趣的区域的模型是固定的)。
这种算法的问题在于:一、仍然需要过多的算力;二、模型是固定的,我们并不学习参数;三、特征会被存储到硬盘中,不仅耗费存储空间,也花费时间。
为了改进它,我们有了Fast R-CNN:
首先我们根据CNN来获得图片的特征,然后根据算法(如选择性搜索)选取备选区域,再将这些区域使用ROI(Reign Of Interest,兴趣区域)池化层来得到统一大小的图片,再把它们统统塞进全连接层进行分类,分类后再计算分类损失及框选损失以及其合起来的损失。
ROI池化层应用了类似SPP的思想:将图片切分为m*n的方块后进行最大池化。
然而Fast R-CNN并不完美,其缺点在于使用固定算法来获取备选区域效率太低,我们希望能让神经网络来做这件事。