深度学习笔记(28):目标探测
前言
我们再更多的情况下不仅仅想要将图像分类,我们还想判断这个物体到底在图像的哪个部位上,所以说这时候目标探测应运而生。
目标探测,除了要使用softmax判断类别外,还需要一个边界框(以中心点的x,y和宽和高四个参数来体现)。
涉及的技术
有判断轮廓的landmarkdetection有判断是否有物品的object detection
还有我们的localization and detection
如何实现?
滑动窗口
我们首先需要训练一个能识别汽车的卷积神经网络,然后一个直观的想法就是说我们使用一个小框,不停的滑动,不断通过分类器对于框内的图像进行识别。这种方法的缺点现在于计算成本较大,要是想精准的找到合适大小的窗口匹配上,需要不断调整大小反复调用分类器,所以是粗粒度也不是,细粒度也不是。
滑动窗口的卷积实现
为了构建滑动窗口的卷积应用,首先要知道如何将神经网络的全连接层转化成卷积层。如下图,假设对象检测算法输入一个14143的图像,使用16个filter,大小为55,在filter处理后输出为101016,然后通过22的最大池化(pooling)操作使图像减少到5516,然后添加一个连接400个单元的全连接层,接着再添加一个全连接层,最终通过softmax输出Y,用4个数字来表示Y,这四个分类可以是人、car、背景或其它对象。核心思路是发现滑动的时候有很多卷积是重复被计算的,所以我们不如对于整体的一张图像输入给卷积神经网络中进行计算。
YOLO
YOLO的全称是,You only look once滑动窗口难以完美的匹配car的位置。
定义训练标签,对于9个格子中的每一个指定一个标签y,每个格子都有一个这样的向量[pc,bx,by,bh,bw,c1,c2,c3],YOLO算法的做法是取car的中点,然后将这个car分配给包含对象中点的格子。
细节补充
交并比
如果实际边界框是红色框,你的算法给出的是紫色的边界框,交并比函数做的是计算两个边界框交集和并集之比。一般自己设置阈值。非极大值抑制
因为算法可能对于同一个对象做出多次检测,(可能很多格子都会显示有车)非最大值抑制可以保证算法对于每个对象只检测一次。具体过程如下,首先查看每次每个检验结果pc找到最大的那个,然后把那些与他有很大IoU的框清除掉,再从剩下的里面选出来最大概率的再重复此过程以此类推,最后我们就可以把那些重复探测的都清除掉
具体实现见作业
https://blog.****.net/weixin_44334615/article/details/105933013
YOLO算法
首先,构造训练集,训练算法去探测若干对象。我们需要明确我们的类别标签,archorboxes,输出格式,然后训练神经网络。给出预测后,我们需要运行非最大抑制,抛弃概率低的预测,产生最后结果。
R-CNN
算法尝试选出一些区域,在这些区域上运行卷积网络分类器是有意义的,此算法不再针对每个滑动窗执行检测算法,而是只选择一些窗口。选出候选区域的方法是运行图像分割算法,先找出可能的2000多个色块,然后在这个2000多个色块上放置边界框,然后在这2000多个色块上运行分类器,这样需要处理的位置可能要比滑动窗口少的多,可以减少卷积网络分类器的运行时间。但仍然不够快,也一直有研究去优化他的速度。