Модель скользящего окна концептуально проста: независимо классифицируйте все фрагменты изображения как объектные или необъектные. Этот проект служит введением в методы, используемые при реализации моделей раздвижных окон. Этот проект реализует простой детектор скользящего окна Далала и Триггса. Dalal-Triggs фокусируется на представлении больше, чем на обучении, и вводит представление гистограммы градиентов (HoG), похожее на SIFT. Моя основная ответственность за этот проект заключалась в объединении конвейера обнаружения и настройке многих параметров.

Получите положительные черты и случайные отрицательные черты

Этот участок конвейера очень прост. Цель состоит в том, чтобы извлечь положительные и отрицательные примеры из наборов изображений, преобразовать их в некоторый набор функций, а затем использовать их в качестве обучающих данных. Эта задача особенно проста для положительных примеров. Эти положительные данные существовали в виде изображений 36x36, которые затем были преобразованы в представление HoG и векторизованы для набора функций. Это может быть улучшено за счет увеличения положительных данных. Например, вы можете отразить изображения. Они определенно по-прежнему представляют лица, но увеличение может помочь дать нашим обучающим данным более разнообразный взгляд на положительные примеры.

Получение случайных отрицательных примеров также очень просто. Учитывая набор изображений без лиц, можно извлечь случайный участок того же размера, что и положительные обучающие примеры, преобразовать в представление HoG и векторизовать. Еще одним аспектом является знание того, сколько отрицательных примеров можно взять из каждого изображения. Моя реализация берет одинаковое количество негативов из каждого заданного изображения, однако немного лучшая реализация может брать выборки на основе таких качеств, как размер изображения или уникальность.

Обучайте классификатор и извлекайте жесткие негативы

С вычисленными векторизованными функциями обучение классификатора было относительно простым с использованием linearSVC от sklearn. Данные были изменены с помощью двоичных (положительных или отрицательных) меток, и SVC соответствовал данным. Я ожидал большей чувствительности окончательных результатов к параметрам SVM, но имеет смысл, что при правильно извлеченных данных sklearn может соответствовать хорошей границе данных с наиболее разумным выбором параметров. Возмущение параметров привело к изменению конечной точности лишь на несколько процентных пунктов. Ниже можно увидеть гистограмму оценок SVM, где положительные и отрицательные примеры разделены цветом.

С обученным SVM у нас есть возможность добывать жесткие негативы. Очень похожим образом для получения случайных отрицательных признаков в примерах отрицательного изображения можно искать отрицательные участки, что приводит к положительному результату функции принятия решения. С этими дополнительными отрицательными примерами мы, возможно, улучшим некоторые недостатки нашего выученного классификатора. В случае использования этого проекта было получено очень минимальное улучшение за счет использования жестких негативов. Подобно положительным примерам, жесткие негативы могут быть дополнены для создания большего разнообразия изображений, которые будут использовать слабые места в обученном классификаторе. Сверху слева можно наблюдать «шаблоны лиц» из SVM-разделения пространства признаков.

Представление

Ниже можно увидеть среднюю точность окончательно настроенных классификаторов. Чтобы правильно запустить детектор на изображении, необходимо было выполнить ряд шагов. Чтобы уменьшить сложность, все изображение было преобразовано в представление HoG. При увеличении изображения патчи извлекались и «сравнивались с нашим шаблоном», что достигается путем классификации патчей с помощью обученного классификатора. Если патч проходит определенный порог, он добавляется в коллекцию положительных совпадений. Однако одного прохода по изображению недостаточно из-за того, что шаблон имеет заданную размерность. Поэтому изображение масштабируется несколько раз при выполнении одного и того же сравнения. Если найдено положительное совпадение, координаты из масштабированного представления и представления HoG должны быть преобразованы обратно в координаты изображения по умолчанию для ограничивающей рамки. Чтобы завершить работу детектора, 100 лучших совпадений проходят через немаксимальное подавление, чтобы избежать перекрывающихся совпадений.

Безусловно, параметры в этом разделе оказали наибольшее влияние на точность. Я обнаружил, что использование как можно меньшего размера шага (например, 1) приводит к лучшей средней точности без слишком больших затрат времени выполнения. Однако я обнаружил, что меньший шаг в среднем приводит к большему количеству ложных срабатываний. Немного отрицательное пороговое значение хорошо сработало для функции принятия решений SVM, потому что мы хотим убедиться, что мы даем немаксимальному подавлению несколько результатов для оценки. Для изображений с очень небольшим количеством лиц это может привести к ошибкам. Кроме того, если у изображения много совпадений, отрицательные результаты отбрасываются. Поэтому слегка отрицательный порог помогает получить желаемые результаты. Наконец, я обнаружил, что предоставление NMS 100 лучших совпадений, похоже, работает хорошо. Если значение больше 100, время выполнения начинает сильно страдать, а значение ниже 100 приводит к плохой средней точности. Это имеет смысл, так как ниже, возвращая менее 100 совпадений, вы рискуете выбросить истинные положительные результаты с более высокой вероятностью. Ниже вы можете увидеть несколько примеров результатов.

Подробнее о проекте смотрите здесь: https://www.cc.gatech.edu/~hays/compvision2017/proj5/