目标检测 YOLOv5 - 自定义的模型在使用C++推理时需要注意的问题

本文详细介绍了在C++环境中使用YOLOv5进行目标检测时需要注意的事项,包括如何设置自定义模型的锚点(anchor)、目标类别和调整参数。重点讲解了C++代码中与YOLOv5模型推理相关的部分,如ncnn库中的YoloV5Focus实现,并给出了针对不同 stride 的anchor设置示例。此外,还提到了根据训练数据集更新anchor的步骤和目标类别的修改方法。
摘要由CSDN通过智能技术生成

目标检测 YOLOv5 - 自定义的模型在使用C++推理时需要注意的问题

flyfish

关注的YOLOv5的Python代码部分

C++编写推理时需要关注的YOLOv5代码的是export.py和yolo.py

C++版本的YOLOv5推理已由nihuincnn中完成,路径是ncnn/examples/yolov5.cpp,并且兼容YOLOv5:v6,还提供了移动端的使用demo

1 注意生成新的anchor

3个stride,在原始配置yolov5s.yaml文件中分别是

# anchors
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

推理时C++代码对应写
stride 8

ncnn::Mat anchors(6);
anchors[0] = 10.f;
anchors[1] = 13.f;
anchors[2] = 16.f;
anchors[3] = 30.f;
anchors[4] = 33.f;
anchors[5] = 23.f;

stride 16

ncnn::Mat anchors(6);
anchors[0] = 30.f;
anchors[1] = 61.f;
anchors[2] = 62.f;
anchors[3] = 45.f;
anchors[4] = 59.f;
anchors[5] = 119.f;

stride 32

ncnn::Mat anchors(6);
anchors[0] = 116.f;
anchors[1] = 90.f;
anchors[2] = 156.f;
anchors[3] = 198.f;
anchors[4] = 373.f;
anchors[5] = 326.f;

在使用自定义的数据集训练之后,anchor如果会有变化的,需要把在这里改anchor对应的数值。
可以看YOLOv5中anchor的设置,在训练时的开始阶段,在终端输出的内容中直接把anchor的数值拷贝出来填写到这里。

2. 目标的种类

static void draw_objects(const cv::Mat& bgr, const std::vector<Object>& objects)
{
    static const char* class_names[] = {
        "person", "bicycle", ...
    };
...

}

这里改成自己要检测的物体

3. 可调整的参数

const int target_size = 640;
const float prob_threshold = 0.25f;
const float nms_threshold = 0.45f;

其他部分nihui已经写好,例如YoloV5Focus,代码写到了送佛都已经送到西天的完整。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西笑生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值