YOLO — это алгоритм обнаружения объектов, который работает намного быстрее, чем любые другие алгоритмы обнаружения объектов. Как следует из названия, YOLO выполняет операцию прямой связи только один раз для изображения, поэтому работает быстрее, чем модели на основе регионов.

Вторая версия YOLO, называемая YOLOv2, работает быстрее, чем YOLO, и использует некоторые новые методы для более точного и быстрого прогнозирования. Один из них использует Anchor Boxes.

Anchor Boxes — это специальные прямоугольники, которые используются, чтобы дать модели, такой как YOLOv2, некоторые предположения о формах и размерах ограничивающих прямоугольников. Они предопределяются из обучающих данных и передаются модели в виде списка некоторых констант перед обучением и прогнозированием. Например, если мы передаем в сеть пять блоков привязки, это будет список из 2x5 = 10 чисел, где каждая последовательная пара чисел представляет ширину и высоту блока привязки. На самом деле, это не повышает точность предсказания, но может значительно ускорить обучение, фиксируя формы и размеры возможных ограничительных рамок.

Допустим, мы хотим предсказать ограничивающие рамки для людей с помощью YOLOv2. Обычно форма человека представляет собой вертикальный прямоугольник, а квадратные коробки или горизонтальные прямоугольники маловероятны. Таким образом, используя ограничивающие прямоугольники в обучении и прогнозировании, мы можем сместить процедуру обучения и прогнозирования с «какой формы прямоугольника» на «насколько велик прямоугольник по сравнению с якорным прямоугольником». Очевидно, это ускоряет обучение.

На днях я использовал YOLOv2 для предсказания террористов в CSGO, онлайн-игре для ПК, в режиме реального времени. Чтобы сделать это практичным, мне пришлось запускать прогноз со скоростью более 30 или 40 кадров в секунду. Хотя кажется, что это сложно сделать в Python, я столкнулся с API обнаружения объектов под названием darkflow, а также с очень быстрым захватом экрана под названием python-mss.

darkflow — это реализация YOLOv2 на Python, и ее довольно легко использовать для обучения модели на пользовательских обучающих данных.
Сначала я собрал тренировочные изображения и аннотировал их с помощью файлов .xml.

Вы можете видеть, что террористы вписываются в вертикальный прямоугольник. Таким образом, мы можем ожидать, что якорные блоки представляют собой прямоугольники разных размеров по вертикали.

Чтобы увидеть это более глубоко, я проанализировал все данные обучения и построил график следующим образом:

На этом точечном графике я прочитал пять якорных блоков (красные точки):