【问题标题】:Can I change the batch size in a yolo detection model in OpenCV?我可以在 OpenCV 的 yolo 检测模型中更改批量大小吗?
【发布时间】:2021-08-30 21:05:37
【问题描述】:

我正在使用cv2.dnn_DetectionModel(cfg,weights) 在 python 中使用 opencv 加载 yolo 模型 然后拨打net.detect(img)。我认为我可以使用批处理来加快每个图像的速度,但我没有看到任何对批处理大小的支持。

是否可以设置批量大小?

【问题讨论】:

  • 你想合并图片并传给网络吗?
  • @AmirKarami 是的,我愿意。

标签: opencv yolo


【解决方案1】:

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())

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

【讨论】:

    【解决方案2】:

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

    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 根本不支持这个。
    猜你喜欢
    • 2011-02-07
    • 1970-01-01
    • 2017-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    • 2019-10-12
    • 2020-03-21
    相关资源
    最近更新 更多