c++ onnx之yolov5检测

yolov5和resnet比稍微麻烦了一点,主要就是多了nms部分,还有坐标点映射回原图的yolov5_scale_coords函数。流程大致分为五部分:1)图像等比例放缩,2)图像预处理,3)onnx推理,4)nms后处理,5)坐标点映射回原图

等比例放缩

还是和resnet一样的 letterbox 函数,就不重复了。

图像预处理

还是和resnet一样的,就不重复了,就cv::dnn::blobFromImage一句话。

onnx推理

和之前差不多,改下输入输出的维度、名称,然后resnet的一维输出变成yolo的二维输出,这个在 c++ 使用onnx推理 中写过了,也不重复了。

nms后处理

这个我懒得自己写,还好opencv里面有cv::dnn::NMSBoxes函数,直接用就好。
正常来说onnx推理后返回的预测值是252000 x (n+5) ,其中252000是框的总数一般是不变的, n是等于你设置的类别数,向量含义是(center_x, center_y, width, height, conf_框, conf_类别1,conf_类别2,…,,conf_类别n)。

这个函数主要就是把preds转成opencv_nms函数需要的输入 cv::Rect(left, top, w

你可能感兴趣的:(c++,c++,计算机视觉,人工智能)