Несколько лет назад было широко известно, что обнаружение объектов - это сложная проблема. Комикс ниже был выпущен всего несколько лет назад. За это короткое время все изменилось довольно кардинально.

С появлением архитектуры глубокой нейронной сети - сверточной нейронной сети (CNN) в частности, а также с развитием библиотеки CUDA, которая начала использовать многоядерные характеристики графических процессоров для игр / рендеринга и открытых совместных исследований, все изменилось. резко к лучшему.

Можно было бы распознать не только птицу, но и какую именно. Вот снимок с демонстрационной ссылки Google Cloud API - https://cloud.google.com/vision/docs/drag-and-drop

API Google Vision на 99 процентов уверен, что изображение птицы, и на 75 процентов уверен, что это семейство птиц !! Ракообразные - это группа обычно красочных птиц, в которую входят зимородки, пчелоеды, роллеры, мотмоты, и todies - https://en.wikipedia.org/wiki/Coraciiformes)

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

Все не так здорово

Я не исследователь, но в основном использую алгоритмы и фреймворки с открытым исходным кодом для обнаружения объектов уже около двух лет. Начав с HOG и HAAR на основе ML в OpenCV, затем с более быстрой версией этого с помощью CUDA и GPU, и, наконец, поскольку настройка параметров этих систем для работы в разных видео оказалась бесполезной, мы перешли к методу на основе нейронных сетей. ; Я хотел написать это, поскольку многие, кто использовал реализации с открытым исходным кодом, такие как Yolo, склонны думать, что дело сделано; также интенсивный маркетинг множества небольших и специализированных компаний, которые следуют схожему мышлению, и многообещающая визуальная автоматизация, настраиваемая или настраиваемая для определенной вертикали. (Напоминает ли он маркетинг IBM Watson и какое место занимает сейчас).

Может быть, когда мы, люди, видим, что система способна идеально обнаруживать и / или классифицировать некоторые изображения, у нас появляется тенденция вообразить и расширить возможности для всех сценариев; потому что мы, люди, умеем обобщать; и с CNN у нас есть что-то похожее, лучше по обобщающим характеристикам, но пока еще не лучшее. Читать дальше.

Добро

Вот результат фотографии, которую я сделал некоторое время назад; Я использовал демонстрационную страницу Google Cloud Vision API для загрузки и проверки. Я выбираю Google API, потому что они лучшие в этом / или одни из лучших. Ух ты! результаты потрясающие; Он не только определил, что это Цветок с 86-процентной степенью достоверности (он пропустил жука?), но и правильно определил семейство Morning Glory Family! Это некоторая информация! Я действительно впечатлен. Кто угодно будет. То же самое, что IBM Watson, победивший человеческих соперников в Jeopardy, или Go, играющий в AlphaMind от Google DeepMind.

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

Отчасти это правда, но есть пробелы, большие пробелы, которые нельзя преодолеть, но которые требуют работы. Посмотрим несколько.

Плохой и U..ly

Обратите внимание, что в технической архитектуре CNN обнаружение объектов более сложное, чем классификация объектов. Классификаторы изображений имеют очень высокую точность в тестах по сравнению с детекторами (они также должны определять положение объекта и рисовать ограничивающую рамку на изображении). API Google Vision выполняет классификацию изображений.

Система, которая может классифицировать цветок по его семейству, наверняка сможет расшифровать детали на фотографии ниже?

Однако ни один Автомобиль не «обнаружен» (технически это классификатор). Давайте дадим еще один более четкий снимок системе.

Тем не менее, машина не обнаружена. Давайте сделаем машину / машины немного больше

Теперь он обнаруживает автомобили с достоверностью 96%. Это почему?

Масштабная инвариантность

Давайте сделаем машину намного больше

Он не только на 99% уверен, что это автомобиль, но и с 52% уверенностью определяет, что это Toyota Corolla.

Таким образом, если изображение автомобиля маленькое, например, при поверхностном снимке, оно вообще не может быть обнаружено, а если оно разумного размера, то на 99 процентов уверены, что это автомобиль. Действительно ли CNN масштабно инвариантна? Краткий ответ -Нет. Максимальный пул в CNN немного помогает; но не для больших изменений. Читайте дальше, чтобы узнать больше.

Свертка естественно не эквивалентна некоторым другим преобразованиям, таким как изменение масштаба или поворот изображения. - Книга по глубокому обучению от Яна Гудфеллоу, Йошуа Бенжио и Аарона Курвилля

Инвариантность вращения

CNN (или текущие сети CNN) не инвариантны к вращению, для этого необходимо обучить (увеличение данных), чтобы получить эффект. Даже в хорошо обученном NW, таком как Google Vision API, мы можем увидеть некоторые эффекты этого. Сделаем небольшое изменение в приведенном выше тестовом изображении автомобиля; Я переворачиваю изображение машины выше и пробую.

Он все еще обнаруживает автомобиль с высокой точностью; нет проблем с этим; Марка автомобиля -Toyota теперь ошибочно определяется как BMW (не видно наверху, но вы можете увидеть то же самое на картинке ниже)

Поворачиваю по-прежнему на 90 градусов.

И тогда он тоже теряет уверенность в BMW, но уверенность приобретает колеса и другие автозапчасти.

Это будет более очевидно на менее распространенных изображениях. Вот изображение крана, повернутого на 90 градусов, и вы можете увидеть, как меняется уверенность (стул?)

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

Но, как вы можете видеть, когда угол меняется от обучающего набора, из-за угла камеры или случайных снимков из дикой природы, результат тоже меняется. Я только что использовал случайные изображения; Моя цель здесь - не показать, насколько плоха система и запутать систему сложными изображениями, а указать на определенные аспекты.

Многим это может показаться удивительным. CNN должны быть инвариантными к масштабу и инвариантному перемещению и вращению. Или это просто пустые разговоры о торговле. Немного технически, давайте копнем дальше

Существует общая концепция, согласно которой Pooling (Max Pooling) обеспечивает неизменность масштаба и трансляции. Это и правда, и ложь. Следует понимать, что объединение помогает в неизменности обучения, а для обучения NW следует обучать изображениям. Кроме того, CNN инвариантны к переводу. Думаю, мало кто думает, что это означает также инвариантность к вращению. Но перевод здесь означает смещение положения объекта влево, вправо, вверх или вниз. (четко показано здесь, рисунок ниже)

Здесь помогает Maxpooling. Этот ответ наглядно это иллюстрирует. Здесь не требуется никакого увеличения данных. Предполагая, что CNN хорошо обнаруживает изображение кошки, она обнаружит кошку переведенным в любом месте кадра.

Вот из очень известного источника книга Deep Learning Яна Гудфеллоу, Йошуа Бенжио и Аарона Курвилля. Наряду с Джеффри Хинтоном и Янном Лекуном Бенжио считается одним из трех человек, наиболее ответственных за продвижение глубокого обучения в 1990-е и 2000-е годы »

Во всех случаях объединение помогает сделать представление приблизительно инвариантным для небольших переводов ввода. Инвариантность к переводу означает, что если мы переводим ввод на небольшой объем, значения большинства объединенных результатов не изменяются - книга Deep Learning, http://www.deeplearningbook.org/

Но что касается масштабной инвариантности и инвариантности вращения; вот из той же книги

Свертка естественно не эквивалентна некоторым другим преобразованиям, таким как изменение масштаба или поворота изображения.

Есть и другие документы, которые тестировали существующие сети и сообщали о том же. Вот цитата из статьи за декабрь 2017 г. (2).

«Мы получили удивительный результат, заключающийся в том, что выбор архитектуры, такой как количество уровней объединения и размер фильтра свертки, имеет лишь вторичный эффект на инвариантность трансляции в сети. Наш анализ определяет увеличение обучающих данных как наиболее важный фактор в получении инвариантных к переводу представлений изображений с использованием сверточных нейронных сетей ». Из «Количественная оценка трансляционной инвариантности в сверточных нейронных сетях (Стэнфордский университет Эрика Каудерера-Абрамса)»

И из другой недавней статьи, май 2018 г.

Глубокие сверточные нейронные сети (CNN) произвели революцию в компьютерном зрении. Возможно, наиболее значительный успех достигнут в области распознавания объектов, где производительность теперь описывается как «сверхчеловеческая» [20]. …

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

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

From Почему глубокие сверточные сети так плохо обобщают небольшие преобразования изображений? Яир Вайс, Аарон Азулай ELSC Еврейский университет Иерусалима https://arxiv.org/pdf/1805.12177.pdf

Если это так, то как Google API смог распознать перевернутый и повернутый автомобиль в тестах, которые мы показали ранее? (обратите внимание, что он поднял машину довольно высоко, и упустил только другие детали, такие как марка, которую он, возможно, не тренировал так сильно).

Увеличение данных - ключ к успеху

Ключевым моментом является увеличение количества данных. В основном входное изображение используется вместе с поворотами, масштабированием, шумом и т. Д., Создаваемыми из изображения, как и другие изображения для обучения. Хорошее объяснение можно найти здесь https://medium.com/ymedialabs-innovation/data-augmentation-techniques-in-cnn-using-tensorflow-371ae43d5be9.

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

«Изучение» инвариантности ротации посредством объединения

Давайте сначала посмотрим на инвариантность вращения, как сначала обучить CNN, поскольку это немного проще. Вот иллюстрация из книги Deep Learning.

Пример выученных инвариантов. Единица объединения, объединяющая несколько функций, изученных с отдельными параметрами, может научиться быть инвариантной к преобразованиям входных данных. Здесь мы показываем, как набор из трех изученных фильтров и максимальная единица объединения могут научиться становиться инвариантными к вращению. Все три фильтра предназначены для обнаружения написанного от руки 5. Каждый фильтр пытается сопоставить немного отличающуюся ориентацию от 5. Когда на входе появляется 5, соответствующий фильтр совпадает с ним и вызывает большую активацию детекторного блока. В этом случае максимальный блок объединения имеет большую активацию независимо от того, какой блок детектора был активирован

стр. 338 http://www.deeplearningbook.org/contents/convnets.html

По сути, нам нужно либо увеличить обучающие изображения путем вращения, либо получить пул данных изображений, снятых под разными углами, и использовать их для обучения CNN. (также см. альтернативный метод - где к CNN добавляется обучаемый модуль трансформации, который принимает входное изображение и учится применять к нему трансформации для улучшения обнаружения Spatial Transformer NW Google DeepMind - я не использовал)

Детализация - проблема инвариантности CNN к масштабированию

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

Вот одно изображение, которое вы, возможно, видели на домашней странице YOLO.

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

Вот результат предыдущей версии Yolo (Yolo v2, текущая версия v3, похоже, значительно улучшилась) на фотографиях, сделанных на высоте.

И если вы думаете, что такие изображения или варианты использования редки - многие варианты использования в реальном мире очень похожи на это. Это одна из проблем при использовании обнаружения объектов для реальных продуктов; это очень сложно проверить; У вас может быть высококвалифицированный детектор людей, но уверены ли вы, что у вас достаточно изображений для всех оттенков кожи, черт лица и одежды, чтобы он отлично работал во всем мире?

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

Как я уже сказал, почему NW не обнаруживает маленькие размеры, хотя хорошо обучен для больших, может быть по двум причинам.

Проблема 1. Ограничение разрешения на входе

В YoloV2 он уменьшает изображение; входное изображение было кадром из видеопотока высокой четкости. Масштабирование от входного (1280 * 720) до (416 * 416) немедленно уничтожает множество функций, особенно небольших объектов. Это первая проблема. Извлеченный урок - используйте реализацию NW, которая будет снимать изображения с более высоким разрешением, а также иметь приличный графический процессор с достаточным объемом памяти (для начала подойдет GTX 1080). Обратите внимание, что каждый уровень свертки и максимального объединения еще больше сокращает возможности: Максимальное объединение важно для позиционной инвариантности; но конечный эффект обнаружения мелких объектов очень плох.

Если мы разрежем вышеуказанный кадр на 4 кадра и передадим его Yolo v2 по отдельности, а затем сшиваем вместе, он работает хорошо (хорошее решение в то время одного из моих товарищей по команде Сай Нарасимха Веннаманени). Здесь есть цена; один скорости; а затем сложность удаления перекрывающихся граничных блоков; поскольку прямая нарезка может разрезать сами объекты по границам; поэтому должна выполняться логика перекрывающейся резки с последующим игнорированием возможных дубликатов.

Проблема 2: слои CNN удаляют функцию; плохие новости для обнаружения мелких объектов с помощью глубоких нейронных сетей.

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

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

из https://medium.com/@jonathan_hui/what-do-we-learn-from-single-shot-object-detectors-ssd-yolo-fpn-focal-loss-3888677c5f4d



Вот еще несколько технических объяснений из недавно опубликованной статьи.

Так как карты характеристик слоев, расположенных ближе к входу, имеют более высокое разрешение и часто содержат дополнительную информацию (по сравнению с conv5), эти функции
либо комбинируются с более мелкими слоями (например, conv4, conv3) [23, 31, 1, 31 ] или независимые прогнозы делаются на уровнях с разным разрешением [36, 27, 3]. Такие методы, как SDP [36], SSH [29] или MS-CNN [3], которые делают независимые прогнозы на разных уровнях, также гарантируют, что более мелкие объекты обучаются на слоях с более высоким разрешением (например, conv3), в то время как более крупные объекты обучаются на более низком разрешении. слои (например, conv5).

Анализ масштабной инвариантности при обнаружении объектов - СНиП
Бхарат Сингх Ларри С. Дэвис, Мэрилендский университет, Колледж-Парк

Http://openaccess.thecvf.com/content_cvpr_2018/papers/Singh_An_Analysis_of_CVPR_2018_paper.pdf

Отличные блоги от Джонатана Хуэя; он объясняет здесь, как Yolo v3 преодолевает эту проблему с помощью пирамиды функций, так что теперь это может быть не слишком большой проблемой, а также другие NW, такие как Retina net, также хорошо справляются с мелкие предметы. Но нужно тестировать и проверять.

Вот из другой статьи, апрель 2018 г.

Мы приводим иллюстрацию мотивации статьи…. Пешеходы на изображениях автомобилей (например, в наборе данных Caltech [11]) часто имеют очень маленькие размеры… .. Точная локализация этих небольших пешеходных объектов является довольно сложной задачей из-за следующих трудностей. Во-первых, большинство экземпляров небольшого размера имеют размытые границы и неясный вид. Их сложно отличить от фоновых помех и других наложенных друг на друга экземпляров. Во-вторых, большие пешеходные объекты обычно визуально сильно отличаются от небольших.

Например, скелеты тела экземпляров большого размера могут предоставить богатую информацию для обнаружения пешеходов, в то время как скелеты экземпляров малых размеров не могут быть распознаны так легко. Эти различия также можно проверить, сравнив сгенерированные карты характеристик для пешеходов большого и малого размера, как показано на рис. 1.

Из масштабируемой быстрой R-CNN для обнаружения пешеходов Автор Цзянан Ли; Сяодань Лян; Шэнмэй Шэнь; Тингфа Сюй; Джиаши Фэн; Шуйчэн Ян

Масштабная инвариантность - обучение

По моему опыту, в настоящее время CNN не масштабируются. Это может быть связано с двумя вышеупомянутыми факторами: потеря функций при маленьком целевом изображении в сочетании с потерей функций в глубокой нейронной сети. Однако мы обнаружили, что если мы можем подготовить набор обучающих данных, который содержит как маленькие, так и большие объекты, текущая сеть способна обнаруживать разные масштабы с одним и тем же классом, если она может работать с входными изображениями без значительного уменьшения масштаба. обучение сети теперь стало своего рода навыком.

Слон в комнате; Необходимость в большом наборе качественных аннотированных изображений человека для обучения

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

Наличие набора изображений COCO предназначено для обнаружения изображений, а ImageNet - для классификации изображений.

Однако высока вероятность того, что объект, который вы хотите обнаружить, не входит в число 80 классов изображений в COCO.

Почему это так важно ? Для этого нам нужно немного разобраться в обобщении.

Основная проблема машинного обучения заключается в том, что наш алгоритм должен хорошо работать с новыми, ранее невидимыми входными данными, а не только с теми, на которых была обучена наша модель. Способность эффективно работать с ранее незамеченными входными данными называется обобщением. Глава 5.2 Книга по глубокому обучению

Когда нейронная сеть обучается, она использует расхождение от тестовых данных, чтобы узнать правильные веса посредством обратного распространения. Если есть только несколько изображений * для обучения, NW будет слишком хорошо изучать (или будет слишком конкретным) для обучающих данных и будет хуже работать с данными в дикой природе. Чтобы уменьшить это, используются методы регуляризации. Вместо того, чтобы просто обучать и тестировать, есть также третий набор изображений, называемый набором проверки, и если результаты начинают слишком сильно расходиться с набором проверки, хотя он больше соответствует набору тестов, тогда он указание сделать раннюю остановку »тренировки.

Другой вариант регуляризации - исключение.

Проще говоря, отсев относится к игнорированию единиц (то есть нейронов) во время фазы обучения определенного набора нейронов, который выбирается случайным образом. Https://medium.com/@amarbudhiraja/https-medium-com-amarbudhiraja-learning-less-to-learn-better-dropout-in-deep-machine-learning-74334da4bfc5

В Интернете существует множество вопросов о том, как предотвратить чрезмерную подгонку https://github.com/keras-team/keras/issues/4325. Также посмотрите эту отличную статью с образцом - https://www.analyticsvidhya.com/blog/2018/04/fundamentals-deep-learning-regularization-techniques/

Помимо вышеперечисленных методов, основная часть состоит в том, чтобы иметь достаточное количество точек данных для тренировки.

Лучшее решение для предотвращения переобучения - использовать больше обучающих данных. Модель, обученная на большем количестве данных, естественно, будет лучше обобщать. Когда это больше невозможно, следующим лучшим решением будет использование таких методов, как регуляризация https://www.tensorflow.org/tutorials/keras/overfit_and_underfit

Поскольку мы говорим о теме обобщения (и роли методов регуляризации в предотвращении обобщения), возможно, стоит упомянуть и о популярной статье Понимание глубокого обучения требует переосмысления обобщения Чиюан Чжунг и др. Это показывает, что DNN, особенно CNN, могут запоминать вместо обобщения. См. Этот ответ qurara, который в основном означает, что если вы тренируетесь с говорящими лицами и в котором есть изображения со случайным шумом вместо правильных лиц, NW все равно будет сходиться - проверка точности приближается к 100 процентам. Это означает, что в этом процессе обучения есть много частей, которые имеют популярные объяснения, но также имеют неизвестные объяснения. Хотел вставить это, даже если это немного сбивает с толку, иногда вы можете обнаружить, что ваша обученная сеть не обнаруживает конкретное изображение, и тогда вам нужно искать теории, чтобы лучше объяснить, а затем попробовать какое-то решение - классификация объектов сама по себе еще не решена. .

Несколько слов о трансферном обучении

На недавнем мероприятии Google NEXT был представлен AutoML. При использовании AutoML for Vision утверждалось, что для обучения требуется от десяти до двадцати изображений листьев. Я не уверен во внутреннем устройстве AutoML, но могу сделать вывод, что это могло происходить из трансфер-обучения (практически для такого NW, как Retinanet, описанного здесь).

Вот такое же мнение из другого источника

Магическое число из 1000 изображений происходит от первоначальной задачи классификации ImageNet, где набор данных состоял из 1000 категорий, в каждой из которых было чуть меньше 1000 изображений для каждого класса (…. Этого было достаточно, чтобы обучить ранние поколения такие классификаторы изображений, как AlexNet, доказывают, что достаточно около 1000 изображений.

Сможете ли вы обойтись меньшим? Как ни странно, исходя из моего опыта, в некоторых случаях вы можете, но как только вы попадаете в нижнюю сотню, становится сложнее обучать модель с нуля. Самое большое исключение - это когда вы используете трансферное обучение на уже обученной модели. Поскольку вы используете сеть, которая уже просмотрела много изображений и научилась различать классы, вы обычно можете обучить ее новым классам в том же домене с помощью всего лишь десяти или двадцати примеров. .com / 2017/12/14 / how-many-images-do-you-need-to-a-neural-network / »

Но если нам нужно обнаружить объектный класс изображения, который не находится в том же домене, что и другие изображения, для которых оно обучается, это переносное обучение не сработает. Приведу простой пример - определенно можно обучить систему обнаружению на основе нескольких изображений, скажем, ногтей; но тогда он увидит все буквально как гвозди. В основном, поскольку CNN - это очень глубокие нейронные сети, им требуется много данных (считывание изображений) для обобщения. Это требует большой работы по сбору требуемых изображений с последующим их аннотированием; а затем тренировать сеть таким образом, и до тех пор, пока не будет достигнут оптимальный результат, предотвращающий недостаточное или переобучение.

Будущее

Если вы видите проблеск света, вы уже можете начать представлять небо; Полагаю, очень скоро мы выйдем из этого туннеля, проводя исследования - CapsuleNet, исходящую от Джеффри Хинтона (одного из крестных отцов недавнего возрождения ИИ - того, кто был одним из организаторов обратной пропаганды) о что не так с нынешними CNN и как его представление об архитектуре CapsuleNet могло бы быть лучше.