我可以在 OpenCV 的 yolo 检测模型中更改批量大小吗?

Can I change the batch size in a yolo detection model in OpenCV?

我正在 python 和 cv2.dnn_DetectionModel(cfg,weights) 中用 opencv 加载一个 yolo 模型 然后调用 net.detect(img)。我想我可以使用批处理来加快每张图像的速度,但我看不到除一个批处理大小之外的任何支持。

是否可以设置批量大小?

一个想法是手动组合图像并将其传递到网络中,在得到结果后将它们分开:

h1, w1 = im1.shape[:2]
h2, w2 = im2.shape[:2]

#create empty matrix
vis = np.zeros((max(h1, h2), w1+w2,3), np.uint8)

#combine 2 images
vis[:h1, :w1,:3] = im1
vis[:h2, w1:w1+w2,:3] = im2

推理完成后,再拆分:

result1=pred[:h1,:w1,:]
result2=pred[:h2, w1:w1+w2,:]

net.detect 不支持批量大小 > 1。

但是,通过一些额外的工作,可以在暗网模型上进行批量大小 > 1 的推理。这是部分代码:

net = cv2.dnn.readNetFromDarknet(cfg,weights)
net.setInputNames(["input"])
net.setInputShape("input",(batch_size,3,h,w))
blob = cv2.dnn.blobFromImages(image_list)
net.setInput(blob)
results = net.forward(net.getUnconnectedOutLayersNames())

现在遍历所有图像,并针对结果中的每一层输出,提取每个图像的框和置信度 class,并为每一层收集此信息后,将其传递给 cv2.dnn.NMSBoxes.这部分很重要,但可行。