一、总概
学习opencv和深度学习也有一段时间了,也做了不少笔记,乱七八糟的,很多已经忘了,趁有空,赶紧写写博客,分享给更多的喜欢计算机视觉的同学入门。最主要的是自己回顾一下所学。以下的都是自己的一些理解笔记,未免会出错,有不对的地方,望帮忙指正,一起学习讨论。
二、几种目标检测方法的总结
(1)传统的基于滑动窗口的目标检测:
使用滑动窗口,对图片进行多次扫描,找出置信度高的区域。也称级别检测,逐步找出置信度最高的区域。如下图(图片来自此博客):
显然,这种做法需要极大的计算消耗。
(2)早期的深度学习R-CNN家族:
有些专业名称,不知道怎么翻译。上点笔记图片,字写得不好,看不清楚的请往下看,或留言评论。
R-CNN也是使用bounding boxes,只是不同于传统的方法,他是先进行了Selective Search , 使用不同大小的滑动窗口,先试图把邻近的像素组合起来,形成最有可能的框,这样就比传统的方法减少bounding boxes的数量,从而提高速度和准确度。检测的步骤是:
1)通过Selective Search,提取一些认为是目标的区域。
(目前最快最好的Faster R-CNN使用一个网络Region Proposal Network (RPN)来提取区域。)
2)将区域输入一个已经训练好的AlexNet模型,使用SVM来判断这个区域是什么类。
3)一旦分好了类,只需要用线性回归就可得到区域坐标。
理解不是很透彻,强烈建议去读原作者的论文,目前RCNN家族,最好最快的是Faster R-CNN。
(3)目前效果很好的YOLO家族
先上我的英文笔记,看图
YOLO完全和上面的方法不同,是个极大的创新。YOLO actually looks at the image just once but in a clever way.
- YOLO将整张图片划分为13*13个单元网格,每一个单元网格预测5个bounding box,每个bounding box包围着一个目标,还告诉我们每个目标的置信度(认为该预测目标和真实目标有多接近的数值),置信度分数和预测的目标组成最终的预测结果。
- 由于1313个网格,每个网格有5个预测,所以共有1313*5 = 845个 boxes.
- 但并不是每个目标都有很高的预测值,我们会设置一个阈值,把低置信度的预测去掉,这个技术叫 non-maximum suppression.
- 最后每个网格以125个channels结束,为什么是125?因为每个单元格预测5个类,每个类包含:x , y , width , height ,confidence score , 20个 probability distribution(20个类,每个类的可能概率) ,所以5*25=125.
总结:尽管有845个离散的预测,但他们都是同时预测,网络模型仅仅跑一次。况且,随着yolo家族的不断壮大发展,现在速度已经超过SSD(另一个目标检测模型,速度快闻名) ,而且准确度更高。所以YOLO家族应该是目前最好的目标检测算法。
三、总结
本文就简单总结一下几种常见的目标检测模型。就效果来看,YOLO应该是最好用的,YOLO已经推出YOLO9000 , 检测类型已经达到9000种,如果配上好一点的GPU,达到实时流畅并且准确应该没问题。YOLO模型也是我实战最多的,可以留意我其他博客,会相继写YOLOv3的使用和自己训练,其他的Faster R-CNN还没试过,不敢轻易评论。最后,上面的都是自己的一些简单总结,难免出错,望指正,感谢观看。