Предсказания рамкой в компьютерном зрении: YOLO v3 и оценка качества

В мире компьютерного зрения термин «предсказания рамкой» (или bounding‑box predictions) относится к задаче, когда модель предсказывает, где находится объект на изображении и какие его параметры. Эти предсказания отображаются в виде прямоугольных рамок, которые можно нарисовать поверх исходного изображения. В статье мы разберём, как работают предсказания рамками, какие алгоритмы используют их, как оценивать качество и применить в практических задачах;

Что такое предсказания рамкой?

Когда модель «видит» объект, она выдает не просто название класса, но и координаты, которые описывают где находится объект и какой он имеет размер. Эти координаты обычно включают:

  • центр рамки (x, y)
  • ширину (w) и высоту (h)
  • конфиденциальность (confidence score)
  • дополнительно – вероятность принадлежности к конкретному классу

Рамка визуализируется как прямоугольник, и это позволяет легко увидеть, где на изображении находится объект, а также проанализировать, сколько объектов и какого класса обнаружено.

Ключевые термины

  1. IoU (Intersection over Union) – мера совпадения предсказанной рамки с реальной. Чем выше IoU, тем точнее предсказание.
  2. Confidence score – вероятность того, что в рамке действительно есть объект.
  3. Non‑Maximum Suppression (NMS) – алгоритм, который отбрасывает избыточные рамки, оставляя самые лучшие.

YOLO v3 и предсказания рамками

YOLO (You Only Look Once) – один из самых популярных подходов к детекции объектов. В версии YOLO v3, реализованной в TensorFlow 2.0, предсказания рамок делятся на три масштаба:

  • Маленькие объекты – 13×13 сетка
  • Средние объекты – 26×26 сетка
  • Большие объекты – 52×52 сетка

Для каждой ячейки предсказывается:

  1. 4 координаты рамки (x, y, w, h)
  2. 1 объектность (objectness) – вероятность того, что в этой ячейке находится объект
  3. Классы – вероятность принадлежности к каждому из 80 классов COCO (или любого другого набора)

Общее число выходов каждого предсказания составляет 5 + число классов. В итоге на выходе модели получается массив размером (число ячеек) × (кол-во предсказаний на ячейку) × (выходы).

Как выглядит выходной тензор YOLO v3

Для примера, если использовать сетку 13×13 и 3 предсказания на ячейку, то выходной тензор имеет форму:

13 × 13 × 3 × (5 + num_classes)

Здесь каждая ячейка содержит 4 координаты, 1 объектность и num_classes вероятностей.

Преимущества YOLO v3

  • Скорость в реальном времени (до 30 fps на GPU)
  • Многомасштабность – точность на разных размерах объектов
  • Надёжная обработка сложных сцен

Оценка качества предсказаний рамок

Для измерения качества детекции используют несколько метрик:

  • mAP (mean Average Precision) – средняя точность по всем классам. Вычисляется как площадь под кривой Precision–Recall.
  • IoU порог – обычно 0.5 (50 %) считается достаточным для «правильного» предсказания.
  • Recall – насколько полно модель нашла все объекты.

В practice, чтобы получить mAP, нужно:

  1. Применить NMS к предсказаниям.
  2. Сравнить с ground‑truth рамками, вычислить IoU.
  3. Собрать Precision–Recall кривую.
  4. Вычислить площадь под кривой.

Практическая реализация в TensorFlow 2.0

Ниже приведён минимальный пример кода, который загружает предобученную модель YOLO v3 в TensorFlow 2.0 и делает предсказание на изображении.

import tensorflow as tf
import numpy as np
import cv2

model = tf.saved_model.load('yolo_v3_tf2')

def preprocess(img_path):
 img = cv2.imread(img_path)
 img_resized = cv2.resize(img, (416, 416))
 img_normalized = img_resized / 255.0
 return np.expand_dims(img_normalized, axis=0).astype(np.float32)

def draw_boxes(img, boxes, scores, classes, class_names):
 for box, score, cls in zip(boxes, scores, classes):
 if score < 0.5: # пороговое значение
 continue
 x, y, w, h = box
 x1, y1 = int(x ⎯ w/2), int(y ‒ h/2)
 x2, y2 = int(x + w/2), int(y + h/2)
 cv2.rectangle(img, (x1, y1), (x2, y2), (0,255,0), 2)
 cv2.putText(img, f'{class_names[cls]}: {score:.2f}',
 (x1, y1-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
 (0,255,0), 2)
 return img

img_path = 'image.jpg'
input_tensor = preprocess(img_path)

preds = model(input_tensor)

boxes = preds['boxes'][0].numpy
scores = preds['scores'][0].numpy
classes = preds['classes'][0].numpy

with open('coco.names', 'r') as f:
 class_names = [line.strip for line in f.readlines]

orig_img = cv2.imread(img_path)
result_img = draw_boxes(orig_img, boxes, scores, classes, class_names)

cv2.imshow('Detections', result_img)
cv2.waitKey(0)
cv2.destroyAllWindows

Обратите внимание, что конкретные имена выходов модели (например, 'boxes', 'scores', 'classes') могут отличаться в зависимости от реализации.

Примеры применения предсказаний рамками

  1. Безопасность – обнаружение людей и транспортных средств в реальном времени.
  2. Медицина – локализация опухолей или аномалий на снимках.
  3. Фотография и видеосъёмка – автофокусировка на объектах.
  4. Игры и дополненная реальность – отслеживание рук, объектов в сцене.
  5. Промышленность – контроль качества, инспекция продукции.

Интересная связь с предсказаниями

В культурном контексте, «предсказания рамкой» может быть и метафорой: рамка фиксирует прогноз, как рамка фиксирует картину. Например, в новогодних предсказаниях, которые часто публикуют в виде бумажных записок, рамка — это сама бумага, ограничивающая и подчёркивающая предсказание. В мире ИИ рамка делает предсказание более «видимым» и понятным для пользователя.

Практические советы и «питчи»

  • При работе с YOLO v3 используйте batch‑size 1 для реального времени.
  • Включайте Non‑Maximum Suppression с IoU‑порогом 0.45–0.55.
  • Для повышения точности на мелких объектах можно добавить шарп‑пуллинг (sharp‑pooling) в сетку.
  • Проверяйте кросс‑валидацию на разных частях датасета, чтобы избежать переобучения.
  • Используйте data augmentation (масштабирование, повороты, яркость) для обогащения тренировочного набора.

Предсказания рамкой — фундаментальный элемент любой системы детекции объектов. Они позволяют не только классифицировать объекты, но и локализовать их в пространстве, что открывает широкие возможности в различных областях от промышленности до развлечений. Внедрение YOLO v3 в TensorFlow 2.0 делает эту задачу доступной даже для небольших команд и устройств, а метрики как mAP и IoU дают чёткое представление о качестве модели.

Независимо от того, хотите ли вы создавать системы видения в реальном времени или просто хотите понять, как работает детекция, знание того, как «обрамлять» предсказания, даст вам мощный инструмент для решения задач компьютерного зрения.