了解函数 forward() 和 getUnconnectedOutLayers()


ln = net.getLayerNames()
print(ln)
ln = [ln[i[0]-1] for i in net.getUnconnectedOutLayers()] 
print(ln)

blob = cv2.dnn.blobFromImage(image, scalefactor = 1/255.0, size = (416,416), swapRB = True, crop = False)   
net.setInput(blob)
start = time.time()
layerOutputs = net.forward(ln)  
end = time.time()
print("[INFO] Yolo took {:.6f} seconds" .format(end-start))

boxes = []  
confidences = []  
classIDs = []   
for output in layerOutputs :    
for detection in output :
scores = detection[5:]  
classID = np.argmax(scores)
confidence = scores[classID]
if confidence > args["confidence"]:
box = detection[0:4] * np.array([W,H,W,H])
(centerX, centerY, width, height) = box.astype("int")
x = int(centerX - (width/2))
y = int(centerY - (height/2))
boxes.append([x,y,int(width), int(height)])
confidences.append(float(confidence))
classIDs.append(classID)

我对上面的代码有两个基本问题:

  1. 我了解使用了getUnconnectedOutLayers()函数 获取未连接输出层的索引,以便查找 了解功能forward()必须在网络中运行多远。我 不明白为什么这些输出层表示为未连接。 此外,这是否意味着在某些情况下我们不会通过整个网络运行数据?如果是这样,为什么? 关于我们使用getUnconnectedOutLayers()函数的行,困扰我的另一件事是它ln[i[0]-1部分。我相信这是反向遍历数组ln某种方法,但我并不完全理解它。
  2. 在文档中,声明该函数forward()返回指定层的第一个输出的 blob。我假设它与我们从函数blobFromImage()获得的斑点相同,因为它也是 4D。 在代码的后面部分,将说明以下内容:scores = detection[5:].由于我假设它是一个 4D 数组,所以我期待以下内容:scores = detection[5:::].是两个维度 由于两个 for 循环而"掉落"切片?

net.getUnconnectedOutLayers() 给出了图层的位置。 输出是形状为 (1,) 的 nd数组。所以为了得到整数,我们做 ln[0]。为了得到索引,我们从仓位中减去 1。

相关内容

  • 没有找到相关文章

最新更新