我可以在 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.这部分很重要,但可行。
我正在 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.这部分很重要,但可行。