【发布时间】:2022-01-14 12:54:08
【问题描述】:
我刚刚创建了一个 yolov5 模型,并将其导出为 onnx 格式,以便与 opencv 一起使用 但我不断收到错误:
[ERROR:0] 全局 D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\dnn.cpp (3554) cv::dnn::dnn4_v20211004::Net::Impl: :getLayerShapesRecursively OPENCV/DNN: [Reshape]:(466): getMemoryShapes() 抛出异常。输入=1 输出=1/1 blobs=0 [ERROR:0] 全局 D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\dnn.cpp (3557) cv::dnn::dnn4_v20211004::Net::Impl::getLayerShapes递归输入[0] = [1 24 52 52] [ERROR:0] 全局 D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\dnn.cpp (3561) cv::dnn::dnn4_v20211004::Net::Impl::getLayerShapes递归输出[0] = [] [错误:0] 全局 D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\dnn.cpp (3567) cv::dnn::dnn4_v20211004::Net::Impl::getLayerShapesRecursively 异常消息:OpenCV(4.5.4) D:\a\opencv-python\opencv-python\opencv\modules\dnn\src\layers\reshape_layer.cpp:106:错误:(-215:断言失败)总计(srcShape, srcRange.start, srcRange.end) == maskTotal in function 'cv::dnn::computeShapeByReshapeMask'
代码如下:
onnx_model = onnx.load('best.onnx')
onnx.checker.check_model(onnx_model)
net = cv.dnn.readNetFromONNX('best.onnx')
classes = []
with open("coco-dataset.labels", "r") as f:
classes = [line.strip() for line in f.readlines()]
layerNames = net.getLayerNames()
outputLayers=[]
for i in net.getUnconnectedOutLayers():
outputLayers.append(layerNames[i-1])
bounding_box = {'top': 0, 'left': 0, 'width': 1920, 'height': 1080}
sct = mss()
while True:
screenShot = sct.grab(bounding_box)
img_np = np.array(screenShot)
frame = cv.cvtColor(img_np, cv.COLOR_RGBA2RGB)
frame_id += 1
height, width, channels= frame.shape
blob = cv.dnn.blobFromImage(frame, 0.0039216, (416, 416), (0, 0, 0), True, crop=False)
cv.imshow("Image", frame)
net.setInput(blob)
(这是错误行)
outs = net.forward(outputLayers)
我不确定这是否只是我对 onnx 的理解,或者是否有我没有掌握的修复方法。
感谢任何帮助!
【问题讨论】: