В мире компьютерного зрения термин «предсказания рамкой» (или bounding‑box predictions) относится к задаче, когда модель предсказывает, где находится объект на изображении и какие его параметры. Эти предсказания отображаются в виде прямоугольных рамок, которые можно нарисовать поверх исходного изображения. В статье мы разберём, как работают предсказания рамками, какие алгоритмы используют их, как оценивать качество и применить в практических задачах;
Что такое предсказания рамкой?
Когда модель «видит» объект, она выдает не просто название класса, но и координаты, которые описывают где находится объект и какой он имеет размер. Эти координаты обычно включают:
- центр рамки (x, y)
- ширину (w) и высоту (h)
- конфиденциальность (confidence score)
- дополнительно – вероятность принадлежности к конкретному классу
Рамка визуализируется как прямоугольник, и это позволяет легко увидеть, где на изображении находится объект, а также проанализировать, сколько объектов и какого класса обнаружено.
Ключевые термины
- IoU (Intersection over Union) – мера совпадения предсказанной рамки с реальной. Чем выше IoU, тем точнее предсказание.
- Confidence score – вероятность того, что в рамке действительно есть объект.
- Non‑Maximum Suppression (NMS) – алгоритм, который отбрасывает избыточные рамки, оставляя самые лучшие.
YOLO v3 и предсказания рамками
YOLO (You Only Look Once) – один из самых популярных подходов к детекции объектов. В версии YOLO v3, реализованной в TensorFlow 2.0, предсказания рамок делятся на три масштаба:
- Маленькие объекты – 13×13 сетка
- Средние объекты – 26×26 сетка
- Большие объекты – 52×52 сетка
Для каждой ячейки предсказывается:
- 4 координаты рамки (x, y, w, h)
- 1 объектность (objectness) – вероятность того, что в этой ячейке находится объект
- Классы – вероятность принадлежности к каждому из 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, нужно:
- Применить NMS к предсказаниям.
- Сравнить с ground‑truth рамками, вычислить IoU.
- Собрать Precision–Recall кривую.
- Вычислить площадь под кривой.
Практическая реализация в 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') могут отличаться в зависимости от реализации.
Примеры применения предсказаний рамками
- Безопасность – обнаружение людей и транспортных средств в реальном времени.
- Медицина – локализация опухолей или аномалий на снимках.
- Фотография и видеосъёмка – автофокусировка на объектах.
- Игры и дополненная реальность – отслеживание рук, объектов в сцене.
- Промышленность – контроль качества, инспекция продукции.
Интересная связь с предсказаниями
В культурном контексте, «предсказания рамкой» может быть и метафорой: рамка фиксирует прогноз, как рамка фиксирует картину. Например, в новогодних предсказаниях, которые часто публикуют в виде бумажных записок, рамка — это сама бумага, ограничивающая и подчёркивающая предсказание. В мире ИИ рамка делает предсказание более «видимым» и понятным для пользователя.
Практические советы и «питчи»
- При работе с YOLO v3 используйте batch‑size 1 для реального времени.
- Включайте Non‑Maximum Suppression с IoU‑порогом 0.45–0.55.
- Для повышения точности на мелких объектах можно добавить шарп‑пуллинг (sharp‑pooling) в сетку.
- Проверяйте кросс‑валидацию на разных частях датасета, чтобы избежать переобучения.
- Используйте data augmentation (масштабирование, повороты, яркость) для обогащения тренировочного набора.
Предсказания рамкой — фундаментальный элемент любой системы детекции объектов. Они позволяют не только классифицировать объекты, но и локализовать их в пространстве, что открывает широкие возможности в различных областях от промышленности до развлечений. Внедрение YOLO v3 в TensorFlow 2.0 делает эту задачу доступной даже для небольших команд и устройств, а метрики как mAP и IoU дают чёткое представление о качестве модели.
Независимо от того, хотите ли вы создавать системы видения в реальном времени или просто хотите понять, как работает детекция, знание того, как «обрамлять» предсказания, даст вам мощный инструмент для решения задач компьютерного зрения.