yolo源码解析c语言,YOLO 实践篇(darknet):You Only Look Once

本文介绍了YOLO目标检测模型,特别是其与darknet框架的结合,强调了darknet的C语言实现和无依赖性。通过对比其他目标检测方法如DPM、R-CNN系列,阐述了YOLO的实时性和背景错误少的优点。实践部分详细讲解了YOLO的训练和应用,包括下载预训练模型、图像检测、视频检测和在Pascal VOC数据集上的训练。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近在学习 object detection 领域的相关知识,从传统的目标检测如 DPM 模型,到基于候选区的R-CNN系列模型,再到 single network && end to end 的 yolo 模型,还有针对 yolo 模型的缺陷进一步完善的 SSD 模型等等。一系列的理论和实践需要学习,希望能够记录学习过程中的点点滴滴,不断修改、完善和总结,系统的学习一遍。当然,最后还是要付诸于实践,才能更深入的掌握相关知识。

继 R-CNN 系列的 object detection 之后, YOLO 是一种新的目标检测方法,该方法的特点是实现快速检测的同时还达到较高的准确率。作者将目标检测任务看作目标区域预测和类别预测的回归问题。该方法采用单个神经网络直接预测物品边界和类别概率,实现端到端的物体检测。同时,该方法检测速非常快,基础版可以达到 45fps 的实时检测,Fast YOLO 可以达到 155fps。与当前最好系统相比,虽然 YOLO 网络模型检测得到的目标区域定位误差更大,但是背景预测的假阳性优于当前最好的方法(YOLO 采用全图信息来进行预测。与滑动窗口方法和 region proposal-based 方法不同,YOLO 在训练和预测过程中可以利用全图信息。Fast R-CNN 检测方法会错误的将背景中的斑块检测为目标,原因在于Fast R-CNN在检测中无法看到全局图像。所以相对于Fast R-CNN,YOLO背景预测错误率低一半)。

YOLO-v1 的主要特点:

1)速度快,能够达到实时的要求。在 Titan X 的 GPU 上 能够达到 45 帧每秒。

2)使用全图作为 Context 信息,背景错误(把背景错认为物体)比较少。

3)泛化能力强:在自然图像上训练好的结果在艺术作品中的依然具有很好的效果。

YOLO-v1 在 Pascal VOC-2012 数据集上训练,能识别如下 20 种物体类别:

1)person

2)bird, cat, cow, dog, horse, sheep

3)aeroplane, bicycle, boat, bus, car, motorbike, train

4)bottle, chair, dining table, potted plant, sofa, tv/monitor

darknet 的主要特点:

1)darknet 完全由C语言实现,没有任何依赖项。为了更好的可视化,可以使用 OpenCV 来显示图片;

2)darknet 支持 CPU 和 GPU(CUDA/cuDNN);

3)因为较为轻型,没有像TensorFlow那般强大的API,有另一种味道的灵活性,更为方便的从底层对其进行改进与扩展;4)darknet 的实现与 caffe 的实现存在相似的地方,熟悉了darknet,相信对上手caffe有帮助;

《You only look once: Unified, Real-Time Object Detection》原文 中还提到很多其他 Detection System,如下:

1)Deformable parts models(DPM):在深度神经网络之前,早期的 Object detection 方法是通过提取图像的一些 robust 的特征如( Haar,SIFT,HOG )等特征,使用 DPM 模型,用 silding window 的方式来预测具有较高 score 的 bounding box。DPM 模型把物体看成了多个组成的部件(比如人脸的鼻子、嘴巴等),用部件间的关系来描述物体,这个特性非常符合自然界很多物体的非刚体特征。DPM可以看做是HOG+SVM的扩展,很好的继承了两者的优点,在人脸检测、行人检测等任务上取得了不错的效果,但是DPM相对复杂,检测速度也较慢,从而也出现了很多改进的方法。正当大家热火朝天改进DPM性能的时候,基于深度学习的目标检测横空出世,迅速盖过了DPM的风头,很多之前研究传统目标检测算法的研究者也开始转向深度学习。(更详细的理论知识可以参考这篇 博文)

Felzenszwalb P F, Girshick R B, McAllester D, et al. Object detection with discriminatively trained part-based models[J]. Pattern Analysis and Machine Intelligence, IEEE Transactions on, 2010, 32(9): 1627-1645.

2)R-CNN Series:包括 R-CNN、SPP-net、Fast R-CNN、Faster R-CNN、R-FCN 等经典的网络模型。

[1] R. Girshick, J. Donahue, T. Darrell, J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. ImageNet Large-Scale Visual Recognition Challenge workshop, ICCV, 2013.

[2] R. Girshick, J. Donahue, T. Darrell, J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. IEEE Conference on Computer Vision and Pattern Recognition (CVPR), 2014.

[3] R. Girshick, J. Donahue, T. Darrell, J. Malik. Region-Based Convolutional Networks for Accurate Object Detection and Segmentation. IEEE Transactions on Pattern Analysis and Machine Intelligence, May. 2015.

[4] K. He, X. Zhang, S. Ren, and J. Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV. 2014.

[5] S. Ren, K. He, R. Girshick, J. Sun. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks. Advances in Neural Information Processing Systems 28 (NIPS), 2015.

3)Deep MultiBox:Szegedy et al. train a convolutional neural network to predict regions of interest instead of using Selective Search. (Szegedy 等人训练一个卷积神经网络来预测感兴趣的区域,而不是使用 SelectiveSearch 算法直接获得候选区)YOLO 也是通过训练一个 CNN 预测 bounding-box。相对 MultiBox,YOLO 是一个完整的检测系统。

D. Erhan, C. Szegedy, A. Toshev, and D. Anguelov. Scalable object detection using deep neural networks. In Computer Vision and Pattern Recognition (CVPR), 2014 IEEE Conference on, pages 2155–2162. IEEE, 2014.

4)OverFeat:用CNN统一来做分类、定位和检测的经典之作,作者是深度学习大神之一,Yann Lecun。此外,OverFeat 也是 ILSVRC 2013 任务3(分类+定位)的冠军得主。OverFeat 使用 CNN 做目标检测的早期工作,主要思想是采用了多尺度滑动窗口来做分类、定位和检测。虽然是多个任务但重用了模型前面几层,这种模型重用的思路也是后来 R-CNN 系列不断沿用和改进的经典做法。OverFeat 可以看做是 R-CNN的一个特殊情况,只需要把 Selective Search 换成多尺度的滑动窗口,每个类别的边框回归器换成统一的边框回归器,S

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值