4种YOLO目标检测的C++实现

时间:2024-05-21 18:26:38

2020年,新出了几个新版本的YOLO目标检测,在微信朋友圈里转发的最多的有YOLOv4,Yolo-Fastest,YOLObile以及百度提出的PP-YOLO。在此之前,我已经在github发布过YOLOv4,Yolo-Fastest,YOLObile这三种YOLO基于OpenCV做目标检测的程序,但是这些程序是用Python编写的。接下来,我就使用C++编写一套基于OpenCV的YOLO目标检测,用面向对象的思想定义一个类,类的构造函数会读取输入的.cfg和.weights文件来初始化YOLO网络,类有一个成员函数detect对输入的图像做目标检测。这个程序里包含了经典的YOLOv3,YOLOv4,Yolo-Fastest和YOLObile这4种YOLO目标检测的实现。在主函数了修改一个参数就可以切换到另一种YOLO做目标检测,为此,我多次运行程序来比较这4种YOLO目标检测网络在一幅图片上的运行耗时。运行程序的环境是win10-cpu,VS2019+opencv4.4.0,这4种YOLO目标检测网络在同一幅图片上的运行耗时的结果如下:

     4种YOLO目标检测的C++实现

     4种YOLO目标检测的C++实现      

     4种YOLO目标检测的C++实现

     4种YOLO目标检测的C++实现

可以看到Yolo-Fastest运行速度最快,YOLObile号称是实时的,但是从结果看并不如此。并且查看它们的模型文件,可以看到Yolo-Fastest的是最小的。如果在ubuntu-gpu环境里运行,它还会更快。

4种YOLO目标检测的C++实现

整个程序的运行不依赖任何深度学习框架,只需要OpenCV4这个库,做到了YOLO目标检测的极简主义,这个在硬件平台部署时是很有意义的。我把这套程序发布在github上,地址是 https://github.com/hpc203/yolov34-cpp-opencv-dnn