1

嗨,我正在努力通过使用更快的 rcnn 模型和 tensorflow 来检测这个人。在我所指的代码中提到了它

net = cv2.dnn.readNetFromTensorflow(args["inferencegraph"],args["graphpbtxt"])

在那之后:

detections = net.forward()

我没有得到确切的检测是什么以及它包含什么内容?例如,它是一个列表还是一个元组,它的元素是什么?

4

2 回答 2

2

cv2.dnn.readNetFromTensorflow获取模型的Protobuf文件.pb和配置文件.pbtxt以加载保存的模型。

net.forward()- 运行前向传递以计算净输出。

您的检测 ienet.forward()Numpy ndarray作为输出提供,您可以使用它在给定的输入图像上绘制框。

您可以考虑以下示例。

import cv2

# Load a model imported from Tensorflow
tensorflowNet = cv2.dnn.readNetFromTensorflow('frozen_inference_graph.pb', 'graph.pbtxt')

# Input image
img = cv2.imread('img.jpg')
rows, cols, channels = img.shape

# Use the given image as input, which needs to be blob(s).
tensorflowNet.setInput(cv2.dnn.blobFromImage(img, size=(300, 300), swapRB=True, crop=False))

# Runs a forward pass to compute the net output
networkOutput = tensorflowNet.forward()

# Loop on the outputs
for detection in networkOutput[0,0]:

    score = float(detection[2])
    if score > 0.2:

        left = detection[3] * cols
        top = detection[4] * rows
        right = detection[5] * cols
        bottom = detection[6] * rows

        #draw a red rectangle around detected objects
        cv2.rectangle(img, (int(left), int(top)), (int(right), int(bottom)), (0, 0, 255), thickness=2)

# Show the image with a rectagle surrounding the detected objects 
cv2.imshow('Image', img)
cv2.waitKey()
cv2.destroyAllWindows()  

我考虑Inception-SSD v2过可以从这里下载的重量文件。并从此链接配置文件。

于 2020-06-04T12:16:34.863 回答
1

net.forward()给出Numpy ndarray作为输出。

在上面的示例中,detections = net.forward()检测是一个数组输出。如果您计算它的形状,那么它将给出 4 个元素,例如 (1,1,200,7)。

其中 1,1 告诉我们当前正在处理的图像数量。

200 是我上面假设的检测到的人脸数量。

而 7 是 7 个值的向量 [图像编号、二进制(0 或 1)、置信度得分(0 到 1)、StartX、StartY、EndX、EndY]。

for i in range(detections.shape[2]):    
    confidence = detections[0, 0, i, 2]

在此示例中,循环将遍历所有检测到的人脸,并将返回检测到的每个人脸的置信度。

于 2022-02-17T18:02:54.737 回答