alicera / yolov7-opencv-dnn-cpp

使用opencv部署yolov7和yolov5

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

yolov7-opencv-dnn-cpp

使用opencv模块部署yolov7-0.1版本和yolov5-6.0以上版本

OpenCV>=4.5.0

python path/to/export.py --weights yolov5s.pt --img [640,640] --opset 12 --include onnx
python path/to/export.py --weights yolov7.pt --img [640,640]
请注意,yolov7导出的时候不要加--grid这个参数(控制detect层),否则opencv读取没问题,推理报错.

可以通过yolo.h中定义的YOLOV5宏定义来切换yolov5和yolov7两个版本,(其实两个版本onnx后处理方式差不多的说

通过yolo.h中定义的YOLO_P6来切换是否使用两者的P6模型。
YOLOV5:true -->yolov5.onnx
YOLOV5:false-->yolov7.onnx

2022-09-06 update:
最近有些小伙伴使用opencv4.6的版本报错了,经过debug发现,opencv4.6的和4.5.x的forward输出顺序不一样导致的,使用opencv4.6的时候在net.forward之后需要加上一个排序,使得输出口从大到小排序才行。
https://github.com/UNeedCryDear/yolov7-opencv-dnn-cpp/blob/86d4f5ef6ecfd7eb36a14d0c06a84a5468ff98e6/yolo.cpp#L48 2022-10-18 update:

yolov7目前有些模型低于opencv4.5.5会报错,报错信息类似下面使用opencv4.5.0读取yolov7-d6.pt转出的onnx模型(不能加参数--grid),此时建议升级下opencv的版本

OpenCV(4.5.0) Error: Unspecified error (> Node [Slice]:(341) parse error: OpenCV(4.5.0) D:\opencv\ocv4.5.0\sources\modules\dnn\src\onnx\onnx_importer.cpp:697: error: (-2:Unspecified error) in function 'void __cdecl cv::dnn::dnn4_v20200908::ONNXImporter::handleNode(const class opencv_onnx::NodeProto &)'
Slice layer only supports steps = 1 (expected: 'countNonZero(step_blob != 1) == 0'), where
'countNonZero(step_blob != 1)' is 1
must be equal to
'0' is 0
in cv::dnn::dnn4_v20200908::ONNXImporter::handleNode, file D:\opencv\ocv4.5.0\sources\modules\dnn\src\onnx\onnx_importer.cpp, line 1797

debug可以发现是由于yolov7-d6中使用了ReOrg模块引起的报错,这个模块有点类似早期的yolov5的Facos模块,如果一定要在opencv4.5.0下面运行,需要将ReOrg模块修改成下面的代码。 在models/common.py里面搜索下ReOrg.

class ReOrg(nn.Module):
    def __init__(self):
        super(ReOrg, self).__init__()

    def forward(self, x):  # x(b,c,w,h) -> y(b,4c,w/2,h/2)
        #origin code
        # return torch.cat([x[..., ::2, ::2], x[..., 1::2, ::2], x[..., ::2, 1::2], x[..., 1::2, 1::2]], 1)
        self.concat=Contract(gain=2)
        return self.concat(x)

另外关于换行符,windows下面需要设置为CRLF,上传到github会自动切换成LF,windows下面切换一下即可。
贴个yolov7.onnx和yolov5s.onnx的对比
yolo

About

使用opencv部署yolov7和yolov5

License:Apache License 2.0


Languages

Language:C++ 100.0%