Это мое первое самостоятельное исследование в рамках курса прикладного искусственного интеллекта. Я видел много сообщений в LinkedIn, показывающих обнаружение объектов, которые вдохновили меня попробовать такие вещи самостоятельно.

Поэтому я решил использовать обнаружение объектов в качестве своего примера. Тогда мне в голову пришли следующие вопросы:

  1. Какие объекты обнаруживать?
  2. Какой набор данных мне использовать?
  3. Какие у меня вычислительные ресурсы?
  4. Какую модель обнаружения объектов мне следует использовать?
  5. Какую платформу мне следует использовать для обучения / тестирования модели?

В наши дни беспилотный автомобиль - это актуальная тема. В таких автомобилях основная система восприятия обнаруживает пешеходов и транспортные средства. Я знал, что это можно сделать с помощью обнаружения объектов, поэтому решил выбрать эту тему.

Меня больше всего беспокоит то, что у меня нет графического процессора, поэтому сначала я решил использовать совместную работу Google в качестве платформы для обучения и тестирования. Доступно множество наборов данных о беспилотных автомобилях и дорожных объектах, таких как BDD100k, Kitty, Pascal VOC и т. Д. У меня осталось очень мало времени, чтобы завершить мои тематические исследования, и совместная работа также имеет следующие 2 ограничения:

  1. Его время работы составляет 12 часов. Через 12 часов мы должны снова подключиться, что приведет к потере всех переменных и данных.
  2. Кроме того, мы не можем держать сеанс в режиме ожидания более 1,5 часов.

Учитывая все ограничения, я выбрал Pascal VOC в качестве набора данных для обучения и проверки.

Когда дело доходит до обнаружения объектов на основе глубокого обучения, вы можете столкнуться с тремя основными детекторами объектов:

  • R-CNN и их варианты, включая исходный R-CNN, Fast R-CNN и Faster R-CNN.
  • Детектор одиночного выстрела (SSD)
  • ЙОЛО

R-CNN являются одними из первых детекторов объектов на основе глубокого обучения и являются примером двухступенчатого детектора.

  1. В первой публикации R-CNN, Богатые иерархии функций для точного обнаружения объектов и семантической сегментации, (2013) Girshick et al. предложил детектор объектов, который требовал такого алгоритма, как Выборочный поиск (или эквивалентного), чтобы предлагать возможные ограничивающие прямоугольники, которые могли бы содержать объекты.
  2. Затем эти области были переданы в CNN для классификации, что в конечном итоге привело к созданию одного из первых детекторов объектов на основе глубокого обучения.

Проблема со стандартным методом R-CNN заключалась в том, что он был мучительно медленным и не являлся полноценным сквозным детектором объектов.

Чтобы повысить скорость детекторов объектов на основе глубокого обучения, как Single Shot Detectors (SSD), так и YOLO используют стратегию одноэтапного обнаружения.

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

В целом одноступенчатые детекторы обычно менее точны, чем двухступенчатые детекторы , но значительно быстрее.

YOLO - отличный пример одноступенчатого детектора.

Редмон и Фархади недавно опубликовали новую статью YOLO YOLOv3: постепенное улучшение (2018). YOLOv3 работает очень быстро и точно. В MAP, измеренном на 0,5, IOU YOLOv3 находится на одном уровне с Focal Loss, но примерно в 4 раза быстрее. Более того, вы можете легко найти компромисс между скоростью и точностью, просто изменив размер модели, без переобучения!

Собрав вышеуказанную информацию, я решил использовать YOLOv3 для своего тематического исследования, а также Pascal VOC в качестве набора данных для обучения.

Набор данных Pascal VOC состоит из 20 меток, включая, но не ограничиваясь:

  • Человек: человек
  • Автомобиль: велосипед, автобус, автомобиль, мотоцикл и т. д.
  • … Некоторые другие классы.

Благодарим пользователя GitHub qqwweee за создание Keras реализации YOLOv3, который уже обучался на наборе данных PASCAL, но я хочу обучаться самостоятельно, поэтому создал аннотации и якоря и изображения, содержащие человека и транспортные средства.

Я выполнил процедуру преобразования веса YOLOv3 в Keras. Я загрузил набор данных из коллаборации и начал обучение с необходимыми наборами данных для обучения и проверки.

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

Поэтому я решил протестировать свою модель на этом этапе и результат оказался неплохим!

Будущие улучшения:

В будущем я хочу обучить эту модель большему количеству эпох, чтобы получить лучшие результаты. Я попробую эту модель с наборами данных, такими как BDD100K, чтобы научить мою модель обнаруживать другие дорожные объекты, такие как светофор, дорожные знаки, полосы движения, дорожные повреждения / выбоины.

Ссылки:

  1. Https://pjreddie.com/darknet/yolo/
  2. Https://github.com/qqwweee/keras-yolo3
  3. Https://www.pyimagesearch.com/2017/09/11/object-detection-with-deep-learning-and-opencv/
  4. Https://www.pyimagesearch.com/2018/11/12/yolo-object-detection-with-opencv/