OpenCV DNN 中 net.forward() 返回的 4D 数组是啥意思?我对深度学习知之甚少

Posted

技术标签:

【中文标题】OpenCV DNN 中 net.forward() 返回的 4D 数组是啥意思?我对深度学习知之甚少【英文标题】:What does the 4D array returned by net.forward() in OpenCV DNN means? I have little knowledge about deep learningOpenCV DNN 中 net.forward() 返回的 4D 数组是什么意思?我对深度学习知之甚少 【发布时间】:2021-07-25 02:23:24 【问题描述】:

我需要使用人脸检测来完成我的作业,然后我在网上搜索,我认为使用带有 OpenCV 的 DNN 模块的预训练深度学习人脸检测器模型既简单又好,效果很好。我在这里学到的:https://www.pyimagesearch.com/2018/02/26/face-detection-with-opencv-and-deep-learning/,但我真的对 net.forward() 返回的 4D 数组感到困惑:

net = cv2.dnn.readNetFromCaffe("deploy.prototxt", "res10_300x300_ssd_iter_140000_fp16.caffemodel")
def detect_img(net, image):
    blob = cv2.dnn.blobFromImage(image, 1.0, (300, 300), (104.0, 177.0, 123.0), False, False)
    net.setInput(blob)
    detections = net.forward() # Here is the 4D array.
    print(detections.shape)
    return show_detections(image, detections)

我对深度学习几乎一无所知。我想我通过阅读“deploy.prototxt”猜到了一些东西,我猜这可能是预训练模型的配置文件,但我仍然对此感到非常困惑。请问是否有一种方法可以快速理解4D数组的含义?我能否在一周内了解预训练模型的大致工作原理,以及对深度学习的了解不足?

【问题讨论】:

【参考方案1】:

第三维帮助您迭代预测和

在第四维度,有实际结果

class_lable = int(inference_results[0, 0, i,1]) --> 为第 i 个盒子提供一个热编码类标签

conf = inference_results[0, 0, i, 2] --> 给出第 i 个框预测的置信度

TopLeftX,TopLeftY, BottomRightX, BottomRightY = inference_results[0, 0, i, 3:7] -->给 调整大小的小图像的坐标边界框

当预测在多个阶段进行时使用第二维,例如在 YOLO 中,预测是在 3 个不同的层中完成的。 你可以使用像[:,i,:,:]这样的二维来迭代这些预测

【讨论】:

我可以再问一件事吗?第 1 维是什么意思?而且我也很好奇,无论是一种标准还是一种规则,无论你使用什么物体检测系统,比如 SSD 和 YOLO,你总能得到一个 4D 数组?

以上是关于OpenCV DNN 中 net.forward() 返回的 4D 数组是啥意思?我对深度学习知之甚少的主要内容,如果未能解决你的问题,请参考以下文章

cv2.dnn_Net.forward() 函数究竟返回啥?

OpenCV3.3深度学习模块(DNN)应用-图像分类

致命错误:opencv2/dnn.hpp:没有这样的文件或目录(opencv4)

哪个caffe版本opencv在dnn模块中使用?

Opencv 之 DNN 与 CUDA综述

使用 caffe 模型遇到 opencv/dnn 问题