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() 函数究竟返回啥?