Если мы внимательно посмотрим на код , то увидим, что все зависит от выходных данных detections
, строка 121, и мы должны настроить его выходные данные, чтобы они соответствовали outs
из это , строка 63. Потратив почти сутки, я пришел к разумному (не идеальному) решению. По сути, это все о выходных двоичных объектах readNetFromCaffe
и readFromDarknet
, потому что они выводят BLOB-объекты в форме 1x1xNx7
и NxC
соответственно. Здесь N
s - количество обнаружений, но с векторами разных размеров, а именно N
в 1x1xNx7
- это количество обнаружений, а каждое обнаружение - это вектор значений.
[batchId, classId, достоверность, слева, сверху, справа, снизу] и N
в NxC
число
обнаруженные объекты, а C - это число классов + 4, где первые 4 числа: [center_x, center_y, width, height] . Проанализировав их, мы можем заменить (124-130 строк)
for i in np.arange(0, detections.shape[2]):
confidence = detections[0, 0, i, 2]
if confidence > args["confidence"]:
idx = int(detections[0, 0, i, 1])
if CLASSES[idx] != "person":
continue
box = detections[0, 0, i, 3:7] * np.array([W, H, W, H])
(startX, startY, endX, endY) = box.astype("int")
с эквивалентными строками
for i in np.arange(0, detections.shape[0]):
scores = detections[i][5:]
classId = np.argmax(scores)
confidence = scores[classId]
if confidence > args["confidence"]:
idx = int(classId)
if CLASSES[idx] != "person":
continue
center_x = int(detections[i][0] * 416)
center_y = int(detections[i][1] * 416)
width = int(detections[i][2] * 416)
height = int(detections[i][3] * 416)
left = int(center_x - width / 2)
top = int(center_y - height / 2)
right = width + left - 1
bottom = height + top - 1
box = [left, top, width, height]
(startX, startY, endX, endY) = box
Таким образом, мы можем отслеживать класс "персона", используя веса cfg и Darknet и подсчитывать их вверх / вниз с помощью линии визуализации.
Опять же, могут быть и другие, более простые способы отслеживания обнаружений файла весов Darknet, но это работает для этого конкретного случая.
Ссылка:
больше о выводе BLOB-объектов readNetFromCaffe
и readFromDarknet