源项目地址:https://github.com/openvino-book/yolov8_openvino_cpp
- 模型导入失败
模型导出时dynamic需要设置为False:
yolo export model=yolov8s.pt format=onnx dynamic=False
这里如果使用openvino的xml格式导入会报错,直接使用onnx模型(不知道为什么报错,如果有知道原因麻烦赐教)
auto compiled_model = core.compile_model("yolov8s.onnx", "CPU");
- 替换为自己的模型时报错
除了更改类别外,还要更改类的数量
const std::vector<std::string> class_names = { "spots", "scratch", "stains" };
//改为自己的类
// Figure out the bbox, class_id and class_score
for (int i = 0; i < output_buffer.rows; i++) {
Mat classes_scores = output_buffer.row(i).colRange(4, 84);
//84修改为自己的类别数加4,我这里目标有3种改为7
Point class_id;
double maxClassScore;
minMaxLoc(classes_scores, 0, &maxClassScore, 0, &class_id);
if (maxClassScore > score_threshold) {
class_scores.push_back(maxClassScore);
class_ids.push_back(class_id.x);
float cx = output_buffer.at<float>(i, 0);
float cy = output_buffer.at<float>(i, 1);
float w = output_buffer.at<float>(i, 2);
float h = output_buffer.at<float>(i, 3);
int left = int((cx - 0.5 * w) * scale);
int top = int((cy - 0.5 * h) * scale);
int width = int(w * scale);
int height = int(h * scale);
boxes.push_back(Rect(left, top, width, height));
}
}
可以在netron上查看onnx模型