Понимание функций forward () и getUnconnectedOutLayers () - PullRequest
0 голосов
/ 27 апреля 2019
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?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...