Обнаружение повернутых объектов с помощью набора инструментов NVIDIA Object Detection Toolkit
Ссылка на оригинал статьи, откуда взята большая часть материала https://developer.nvidia.com/blog/detecting-rotated-objects-using-the-odtk/.
В отдельных задачах при определении детектировании объектов необходимо знать его наклон. Базовые современные модели, используемые при детектировании объектов, возвращают выровненные по вертикали и горизонтали прямоугольники. Даже если угол не нужен, то, к примеру, при детектировании квадрата повернутого на 45°, площадь ограничивающей рамки в два раза больше квадрата.
Без использования нейронных сетей задачу определения наклона объекта решают с помощью:
- контурного анализа, где можно построить минимальный ограничивающий прямоугольник (minAreaRect в opencv);
- детектированию линий, и определению по ним наклону (медленно);
- с использованием особых точек.
Другой проблемой при обучении моделей на выровненных прямоугольниках является то, что часто объекты находятся рядом, и при их повороте эти области пересекаются или даже вкладываются друг в друга. В результате получается детектор, который может пересчитывать или недосчитывать объекты там, где есть кластеры одного и того же или сходного класса. Повернутые ограничивающие рамки могут смягчить эти проблемы и обеспечить более высокую точность и полноту. Например, выровненный по оси прямоугольник вокруг человека на рисунке содержит много неба и немного мотоцикла. В повернутой коробке меньше неба и почти нет мотоцикла.
Методом нейронных сетей стандартными моделями проблему определения поворота можно решить с помощью моделей сегментации, например, Mask-RCNN. Но данная модель значительно уступает в быстродействии моделям детектирования объектов.
Другой метод, который не является стандартным в известных фреймворках, является прямым выводом ограничивающей рамки по результатам отработки модели. Данные метод является более быстрым. Но имеет сложности с объединением ограничивающих рамок на основе IoU. Если для выровненных рамок вычисление IoU выполняется очень просто и может быть ускорено с помощью графических процессоров NVIDIA, то для повернутых рамок ситуация иная.
Во-первых, вы указываете одно или несколько значений для дополнительного параметра, угла, который увеличивает общее количество блоков привязки на коэффициент, равный количеству определенных углов. На рисунке ниже показан пример выровненных по оси ограничивающих прямоугольников привязки (синий) для одного местоположения в пространстве признаков изображения с тремя масштабами и тремя соотношениями сторон. Во-вторых, и это наиболее важно, расчет IoU не может быть выполнен простым способом, подобным выровненным по осям блокам, как показано ранее.
На рисунке ниже показан пример того, как пересечения повернутых блоков могут быть намного сложнее, чем пересечения блоков, выровненных по оси. При наложении двух блоков вы строите новый многоугольник (не обязательно четырехсторонний), который описывается красной и зеленой вершинами. Красные вершины обозначают, где пересекаются края двух прямоугольников, а зеленые вершины находятся внутри двух сравниваемых прямоугольников. Вы должны быть в состоянии рассчитать эти точки для всех сравнений коробок, а затем выполнить расчет IoU.
Чтобы решить эту проблему, авторы предлагают обратиться к геометрии, в частности к методу последовательного вырезания, описанного в книге «Вычислительная геометрия: алгоритмы и приложения». Последовательное вырезание — это рекурсивный метод, который определяет начальный многоугольник с использованием одного сравниваемого прямоугольника. Затем для каждого ребра вычисляется, есть ли какие-либо пересечения с ребрами из второго сравниваемого прямоугольника. Если да, то эти вершины сохраняются и формируются новые ребра, которые затем снова сравниваются со сравниваемым прямоугольником до тех пор, пока ребер не останется.
Если при сравнении двух блоков существует многоугольник с более чем двумя ребрами, теперь вы можете рассчитать IoU; в противном случае IoU равен нулю.
Авторы показывают, что данный метод хорошо распараллеливается и на GPU NVIDIA V100 16 GB более, чем в 500 раз быстрее, чем на процессоре Xeon(R) CPU E5-2698:
Все функции (обнаружение ограничительной рамки с выравниванием по осям и с поворотом) доступны в наборе инструментов NVIDIA Object Detection Toolkit (ODTK). Однако перед тренировкой модели необходимо будет разметить ваш датасет специальной утилитой, повернув ограничивающие рамки на нужный угол:
Пример результата работы модели на рисунке ниже. Предполагаемые ограничивающие рамки (красные) и наземные ограничивающие рамки (зеленые) для модели с выравниванием по осям (слева) и модели с повернутым прямоугольником (справа).
Показатели тестирования:
- Обычная (выровненная по осям) модель. Precision = 0.37, Recall = 0.55, F1-score = 0.44;
- модель c повернутыми прямоугольниками. Precision = 0.77, Recall = 0.76, F1-score = 0.76;