Существует множество приложений нейронных сетей в области компьютерного зрения. А с небольшими изменениями одни и те же инструменты и методы можно эффективно применять для решения широкого круга задач. В этой статье мы рассмотрим некоторые из этих приложений и способы их решения. Четыре самых распространенных:

  • Семантическая сегментация
  • Классификация и локализация
  • Обнаружение объектов
  • Сегментация экземпляра

Семантическая сегментация

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

Один из возможных подходов к этой проблеме - рассматривать ее как задачу классификации со скользящим окном. Таким образом, мы берем входное изображение и разбиваем его на несколько обрезков одинакового размера. Затем каждая культура будет отправлена ​​на какой-нибудь CNN, чтобы получить классифицированную категорию для этой культуры в качестве выходного. Кадры, сделанные на уровне пикселей, классифицируют каждый пиксель. Это очень просто, не правда ли.

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

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

Короче говоря, ближайший сосед просто дублирует определенный элемент в своем воспринимающем поле (2x2 в примере выше). С другой стороны, транспонированная свертка стремится узнать соответствующие веса для фильтра, необходимого для выполнения выборки. Здесь мы начинаем со значения в верхнем левом углу, которое является скаляром, умножаем его на фильтр и копируем эти значения в выходные ячейки. Затем мы перемещаем фильтр на некоторые определенные пиксели на выходе пропорционально перемещению одного пикселя на входе. Это соотношение между движением на выходе и на входе даст нам шаг, который мы хотим использовать. В случае совпадений мы просто суммируем значения. Таким образом, эти фильтры также представляют собой обучаемые параметры этой сети, а не некоторый фиксированный набор значений, как в случае с ближайшим соседом. Наконец, мы можем использовать кросс-энтропийную потерю на уровне пикселей, чтобы обучить всю эту сеть посредством обратного распространения.

Классификация и локализация

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

Сначала мы загружаем наше входное изображение в некий гигантский ConvNet, который будет давать нам оценки по каждой категории. Но теперь у нас есть еще один полностью связанный слой, который предсказывает координаты ограничивающего прямоугольника для объекта (координаты центра x, y вместе с высотой и шириной) на основе карты характеристик, созданной более ранними слоями. Итак, наша сеть будет выдавать два вывода: один соответствует классу изображения, а другой - ограничивающей рамке. В дальнейшем, чтобы обучить эту сеть, мы должны учитывать две потери, а именно потерю перекрестной энтропии для классификации и потерю L1 / L2 (своего рода регрессионную потерю) для прогнозов ограничивающего прямоугольника.

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

Здесь мы можем определить позу человека по фиксированному набору точек на теле, например суставов. Затем мы вводим наше изображение в ConvNet и выводим тот же фиксированный набор координат точки (x, y). Затем мы можем применить какую-то регрессионную потерю к каждой из этих точек, чтобы обучить сеть через обратную пророгу.

Обнаружение объекта

Идея обнаружения объектов состоит в том, что мы начинаем с некоторого фиксированного набора категорий, которые нас интересуют, и каждый раз, когда какая-либо из этих категорий появляется во входном изображении, мы будем рисовать ограничивающую рамку вокруг этого изображения вместе с предсказанием его метки класса. Это отличается от классификации и локализации изображений в том смысле, что раньше мы будем классифицировать и рисовать ограничивающую рамку только вокруг одного объекта. Тогда как в последнем случае мы не знаем заранее, сколько объектов ожидать на изображении. Мы снова можем применить к этой проблеме метод скользящего окна методом грубой силы. Однако это снова было бы неэффективно с вычислительной точки зрения. Вместо этого разработано несколько алгоритмов для эффективного решения этой проблемы - алгоритмы на основе предложения регионов и алгоритм обнаружения объектов YOLO.

Алгоритмы на основе предложений регионов

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

Чтобы сделать все блоки кандидатов одинакового размера, нам нужно деформировать их до некоторого фиксированного квадратного размера, который мы могли бы в конечном итоге передать в сеть. Затем мы можем применить гигантскую ConvNet к каждому блоку кандидатов, выведенному из предложения региона, чтобы получить окончательную категорию. Это, безусловно, в конечном итоге будет намного более эффективным с точки зрения вычислений по сравнению с алгоритмом скользящего окна грубой силы. В этом вся идея R-CNN. Теперь, чтобы еще больше снизить сложность, используются Fast R-CNN. Идея быстрого R-CNN состоит в том, чтобы сначала получить карту функций с высоким разрешением, передав входное изображение через ConvNet, а затем наложить эти предложения по регионам на эту карту функций вместо фактического изображения. Это позволяет нам повторно использовать много дорогостоящих вычислений свертки по всему изображению, когда у нас много урожая.

YOLO (вы смотрите только один раз)

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

Сначала мы делим все входное изображение на сетку SxS. Каждая ячейка сетки предсказывает вероятности условного класса C (Pr (Class | Object)) вместе с B ограничивающими прямоугольниками (x, y, w, h), каждый с оценкой достоверности. Координаты (x, y) представляют центр прямоугольника относительно границ ячейки сетки, тогда как ширина и высота прогнозируются относительно всего изображения. Вероятности обусловлены ячейкой сетки, содержащей объект. Мы прогнозируем только один набор вероятностей классов на ячейку сетки, независимо от количества блоков B. Оценки достоверности отражают, насколько уверена модель в том, что блок содержит объект. Если в поле нет объекта, тогда показатель достоверности должен быть равен нулю. С другой стороны, оценка достоверности должна быть такой же, как пересечение по объединению (IOU) между предсказанным прямоугольником и наземной меткой истинности.

                 Confidence score = Pr(Object) * IOU

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

      Pr(Class | Object) ∗ (Pr(Object) ∗ IOU) = Pr(Class) ∗ IOU

Сегментация экземпляра

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

Маски R-CNN являются предпочтительной сетью для такого рода задач. В этой задаче многоэтапной обработки мы передаем входное изображение через ConvNet и некоторую сеть предложений изученного региона. Как только у нас есть предложения по регионам, мы проецируем их на сверточную карту функций, как мы это делали в случае с R-CNN. Однако теперь, помимо прогнозирования классификации и ограничивающей рамки, мы также прогнозируем маску сегментации для каждого из этих предложений по регионам.

Ресурсы





Сообщите мне в комментариях о любых улучшениях / модификациях, которые могут быть внесены в эту статью.