YOLO 检测多张图片并保存标签信息

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了YOLO 检测多张图片并保存标签信息相关的知识,希望对你有一定的参考价值。

参考技术A YOLO 是一个基于深度学习的end-to-end、real-time目标检测方法,至今已经有YOLOv1、YOLOv2、YOLO9000、YOLOv3 4个版本。YOLO网络由作者用C和CUDA语言写的一个卷积神经网络框架 darknet 实现,目前github也有tensorflow,pytorch等开源框架的复现,本文主要基于darknet源码修改实现对一个目录下的图片进行检测并保存检测结果图片和标签信息。

源码修改版本已上传至github: https://github.com/bichenghu/YOLO

YOLO测试图片有两种方式

其中不指定输出路径的命令在darknet/目录下生成predictions.jpg;指定输出路径的时候只需要输入前缀,结果规定了.jpg后缀。
事实上,单张图片的测试也可以用如下通用方式:

如果上述通用命令不指定输出路径,就能实现多张图片测试,作者写的多张图片测试是在加载一次模型后,再一次一次的输入图片路径测试,这样的方式似乎不太实用,一般情况下我们想在一个文件夹下对所有图片进行检测,保存其标签信息,这就需要通过修改源码来实现。需要修改到的文件主要有:include/darknet.h src/image.c examples/detector.c examples/darknet.c

整个检测的入口为:examples/darknet.c 其main函数用于判断参数,从而选择对应函数。对于detect参数,将直接跳转到detector.c中的test_detector函数。test_detector函数定义如下:

在darknet.c中ln437处,这里char *filename = (argc > 4) ? argv[4]: 0;说明当参数大于4个时,默认第5个参数为测试图片路径filename,显然这样我们就无法检测文件夹下的图片了,因此为filename加一个输入标识 -input,这样我们后面就可以添加输入路径idir和输出路径odir参数了(这里输出路径定义为存放images和labels路径)。

detector.c主要修改test_detector函数,其中draw_detections_person函数由draw_detections函数修改而来,draw_detections函数定义在src/image.c中,用于对每张图片进行画框处理。在这里我只需要行人信息,因此对于draw_detections_person函数,需要用到图片路径信息,输出文件夹路径。对于单张图片,图片路径信息就是前面的filename,对于多张图片,图片路径信息为输入文件夹加上在该文件夹内遍历的得到的图片名,所以修改后的test_detector函数需要添加idir,odir两个参数。

image.c主要修改draw_detections_person函数,用于对图片进行画框处理,并保存标签信息。

添加draw_detections_person函数定义:

对于单张图片,可以用如下命令:

对于文件夹内多张图片,可以用如下命令:

当然,在results目录下要提前建好images和labels文件夹。

以上是关于YOLO 检测多张图片并保存标签信息的主要内容,如果未能解决你的问题,请参考以下文章

目标检测YOLO v1-v5演进

Yolo 一文看懂目标检测

EMgucv 保存从网络摄像头检测到的多张人脸

经典论文解读YOLO 目标检测

经典论文解读YOLO 目标检测

PyTorch深度学习实战 | 基于YOLO V3的安全帽佩戴检测