年前需要在ROS上使用YoloV4对道路上的障碍物进行检测,记得早期使用YoloV3的时候是用的Yolo开发团队提供的darknet版本,因此就自然而然的去下其提供的Ros节点包然后开搞。
结果由于当时操作了一波,使用的是Manjaro系统,ROS是自己编译的(OpenCV版本是4.5),结果花了一个晚上改了无数错误之后依然编译不过。最后一查才发现darknet架构在OpenCV3.4.0后(OpenCV在该版本后把c接口直接用c++实现了,可能最新的noetic二进制安装文件依然用的是OpenCV3.2就是为了兼容)的版本都支持不良,所以只能作罢。
从该情况看来,修改的办法有三个
-
从系统开始换,换成Ubuntu,也就等同于换了OpenCV版本。但本人实在是不喜欢Ubuntu,甚至当时都直接用Manjaro而放弃Ubuntu了,绝不可能再装回去!
-
直接换掉noetic的OpenCV版本,这个是很容易想到的方案,但本着用新不用旧的原则,本人也一点都不想选。
-
直接不用darknet架构了,这个是本人最后选的,结果却极其意外的发现OpenCV在4.4版本后直接在dnn模块上支持了YoloV4的架构,简直不要再开心!!!
于是事情变得非常简单,参考:https://github.com/SeventhBlue/opencvYolo。去官网下载YOLOV4的weights、cfg和coco.names三个文件,然后在ROS上用上自行编译的带CUDA版本的OpenCV4.5(如果不知道怎么弄可以参考这篇文章:
本文介绍了在ROS上使用OpenCV的dnn模块加载YoloV4模型进行对象检测的过程。由于darknet与OpenCV新版本的兼容问题,作者选择了直接使用OpenCV 4.5的dnn模块支持YoloV4。通过下载YOLOV4的权重、配置文件和类别名,结合CUDA编译的OpenCV,实现了在ROS上的对象检测功能。
订阅专栏 解锁全文
8274

被折叠的 条评论
为什么被折叠?



