项目简介
本项目基于OneFlow框架实现了YOLOv3目标检测算法。YOLO(You Only Look Once)是单阶段目标检测算法的代表,以速度快、准确率高著称。YOLOv3融合了残差网络Darknet - 53作为骨干网络,具备多尺度、多输出的feature map和上采样等特点,大幅提升了模型精度和小目标检测能力。本项目将Yolov3输出特征的nms过程写进C++代码,通过自定义user op调用,同时支持用Python代码处理nms。
项目的主要特性和功能
- 高效的目标检测:基于YOLOv3算法,可快速且准确地进行目标检测。
- 多尺度特征融合:采用Darknet - 53骨干网络,支持多尺度特征融合,增强小目标检测能力。
- C++与Python混合实现:nms过程用C++代码实现以提高性能,同时支持Python代码处理nms,方便灵活使用。
- 预训练模型支持:提供预训练模型,便于用户快速进行预测和推理。
- 数据集支持:支持COCO、PASCAL VOC等多种目标检测数据集,也允许用户自定义数据集。
安装使用步骤
1. 安装环境
2. 下载项目源码
shell
3. 安装依赖库
shell
pip install -r requirements.txt
4. 编译C++代码
shell
./scripts/build.sh
5. 数据集准备
参考数据集制作部分,准备训练和验证所需的数据集。
6. 训练模型
shell
sh yolo_train.sh
7. 预测/推理
shell
sh yolo_predict.sh
或
shell
sh yolo_predict_python_data_preprocess.sh
数据集制作
YoloV3支持任意目标检测数据集,以COCO2014为例:
1. 下载COCO2014训练集和验证集图片,将解压后的train2014和val2014放在data/COCO/images目录下。
2. 准备资源文件:labels,5k.part,trainvalno5k.part。
shell
wget -c https://pjreddie.com/media/files/coco/5k.part
wget -c https://pjreddie.com/media/files/coco/trainvalno5k.part
wget -c https://pjreddie.com/media/files/coco/labels.tgz
3. 在data/COCO目录下执行脚本:
```shell
tar xzf labels.tgz
paste <(awk "{print \"$PWD\"}" <5k.part) 5k.part | tr -d '\t' > 5k.txt
paste <(awk "{print \"$PWD\"}"
find labels/train2014/ -name ".txt" | xargs -i cp {} images/train2014/ find labels/val2014/ -name ".txt" | xargs -i cp {} images/val2014/ ```
训练
准备好数据集后,执行:
shell
sh yolo_train.sh
详细参数介绍:
- --gpu_num_per_node
:每台机器使用的GPU数量
- --batch_size
:批大小
- --base_lr
:初始学习率
- --classes
:目标类别数量
- --model_save_dir
:模型存放文件夹路径
- --dataset_dir
:训练/验证集文件夹路径
- --num_epoch
:迭代总轮数
- --save_frequency
:指定模型保存的epoch间隔
预测/推理
步骤如下:
1. 修改yolo_predict.sh
或yolo_predict_python_data_preprocess.sh
脚本中的参数,指定预训练模型路径、类别标签路径、输入图片文件夹路径和输出文件夹路径等。
2. 执行脚本:
shell
sh yolo_predict.sh
或
shell
sh yolo_predict_python_data_preprocess.sh
执行后,将在data/result
下生成检测后带bbox标记框的图片。
支持的数据格式
- 如果网络初始化前可以确定要做推理的图片,可将文件路径写入一个文件filename中,配置
image_list_path
参数执行。 - 如果网络初始化前不能确定推理的图片,每次执行时传入图片路径执行。
下载地址
点击下载 【提取码: 4003】【解压密码: www.makuang.net】