gpt4 book ai didi

opencv - 每张图像推理的 YOLOv3 分辨率和执行时间

转载 作者:行者123 更新时间:2023-12-02 16:25:27 24 4
gpt4 key购买 nike

我想更深入地了解为什么每次推理的执行时间会随着图像大小的变化而变化。以下是我认为我知道的以及我感到困惑的原因:

标准的 YOLOv3 实现以 3 种不同的分辨率提供(Yolov3-320、YOLOv3-416、YOLOv3-608)。这意味着 Yolo 架构可以接受任何图像尺寸,但在内部它会放大或缩小到目标分辨率,因此不存在任何形状问题。

对我来说,这意味着在查看执行时间时,使用例如 YOLOv3-416 架构时提供大小为 1024x1024 或 800x800 的输入图像并没有太大区别。

但是当我进行图像推断时,我是否选择较低分辨率的图像而不是较高分辨率的图像确实会产生巨大的差异。而且检测的质量也略有变化。在模型之前缩小相同的图像时,检测有时不会那么好。

对于推理,我使用 opencv 集成:

net = cv2.dnn.readNetFromDarknet(model_cfg, model_weights)
net.setPreferableBackend(cv2.dnn.DNN_BACKEND_OPENCV)
net.setPreferableTarget(cv2.dnn.DNN_TARGET_CPU)

IMG_WIDTH=frame.shape[1]
IMG_HEIGHT=frame.shape[0]
blob = cv2.dnn.blobFromImage(frame, 1 / float(255), (IMG_WIDTH, IMG_HEIGHT),[0, 0, 0], 1, crop=False)

net.setInput(blob)
outs = net.forward(get_outputs_names(net))

但是我只测量通过网络的前向传递的推理时间。但也许它可以让您更深入地了解为什么在我在推理之前缩放图像时推理时间会发生变化。

最佳答案

我尝试使用 getLayersShape() 分析网络。我还没有找到正确的格式化方法,所以现在我不知道哪个形状适合哪个图层。但似乎形状取决于输入形状。就像似乎没有 reshape 为 416x416 的 reshape 层一样,恰恰相反,似乎有一些池化层将图像分辨率降低了两倍。这对我来说意味着 YOLO 架构确实能够处理不同的图像形状(如完全卷积网络),或者 dnn 模块能够改变架构以适应 blob 大小

关于opencv - 每张图像推理的 YOLOv3 分辨率和执行时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61737934/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com