Аспекты обнаружения целей

искусственный интеллект глубокое обучение Нейронные сети Байду
Аспекты обнаружения целей

Источник контента:21 апреля 2018 г. Ван Вэнькай, основатель образовательной платформы по поиску работы в области искусственного интеллекта Jinglue Jizhi, выступил с речью на тему «Аспекты обнаружения целей» на «Открытом курсе Baidu по глубокому обучению · Пекинская станция: путь к быстрому развитию инженеров по искусственному интеллекту». . IT Dajiashuo (идентификатор WeChat: itdakashuo), как эксклюзивный видео-партнер, имеет право публиковать видео после просмотра организатором и спикерами.

Количество слов для чтения:4339 | 11 минут чтения

Получите видео с гостевым выступлением и PPT:suo.im/57DI1D

Резюме

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

Visual Recognition


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

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

Classification

Друзья, которые немного знакомы с областью классификации, могут знать набор данных MNIST (рукописные цифры), который в DeepLearning называется hello world, и основные фреймворки глубокого обучения предоставят соответствующий интерфейс для этого набора данных.

Левая сторона приведенного выше изображения — это изображение, видимое человеческим глазом, которое преобразуется в матрицу, подобную той, что справа в компьютере: 0 представляет 0 пикселей, а число в середине представляет собой переход цвета от света к темноте.

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

CNN

Вход здесь также представляет собой цифровое изображение, а выход — 10-мерный вектор. Однако средняя часть несколько иная, она состоит из свертки, подвыборки и пулинга, а ядро ​​лежит в свертке (свертке).

Любое изображение можно преобразовать в матрицу, а маленькая матрица 3*3 в средней части изображения называется ядром свертки. Мы будем вставлять ядро ​​свертки в матрицу изображения, а перекрывающаяся часть также является матрицей 3 * 3. После их расчета будет получен результат.Формула расчета состоит в том, чтобы умножить значения соответствующих позиций пикселей, а затем суммируйте их.

Разные ядра свертки соответствуют разным функциям, таким как значение ядра свертки изображения животного на рисунке, середина равна 8, а окружение равно -1, что указывает на обнаружение края. После скользящего расчета отображается карта признаков справа.Видно, что краевые области на исходном изображении выделены.Хотя в целом изображение стало черно-белым, информационный контраст сильнее.

Pooling & ReLu

Пул предназначен для дальнейшего упрощения информации после получения карты объектов.Как показано на рисунке выше, карта объектов делится на 2 * 2, и для каждых 4 точек берется максимальное значение, чтобы уменьшить количество вычислений в сети и только сохранить наиболее важную характерную информацию. ReLu называется выпрямленной линейной единицей.Это функция активации.Когда она меньше 0, значение всегда равно 0, а когда больше 0, возвращается к норме.

VGG16

Было много разных версий сверточных нейронных сетей, и VGG16 — одна из них, которая используется для извлечения признаков во многих схемах обнаружения объектов. Размер входного изображения, полученного VGG16, составляет 224*224. Черный блок на рисунке — это сверточный слой, за которым следует функция активации, а красный блок — нефтехимический слой. Карта признаков, полученная ядром свертки, будет постепенно уменьшаться, и чем позже точка карты признаков будет соответствовать большей площади исходного изображения.

VGG16 имеет в общей сложности 16 слоев с весами, включая сверточные слои 13 и полносвязные слои 3. Мы можем рассматривать ядро ​​​​свертки, функцию активации и нефтехимический слой как блочный модуль. Вся сеть VGG16 имеет 138 миллионов параметров.

import paddle.v2 as pal

pdl.networks.vgg_16_network(input_image, num_channels,num_classes=1000)

Для такой огромной сети метод, показанный выше, является самым простым. Это фрагмент кода Python, который использует сеть VGG16, импортируя модуль pdI, и ему нужно ввести только 3 параметра, входное изображение, количество каналов и количество категорий. Однако одного этого метода в большинстве случаев явно недостаточно.

import paddle.v2 as pal

def vgg16(input):
   def conv_block(ipc, num_filter, groups, dropouts, num_channels=None):
       return pdl.networks.img_conv_group(input=ipt, num_channels=num_channels,
               pool_type=pdl.pooling.Max(), pool_size=2, pool_stride=2,
               conv_num_filter=[num_filter]*groups, conv_filter_size=3,
               conv_act=pdl.activation.Rolu(), conv_with_batchnorm=True,
               conv_batchnorm_drop_rate=dropouts)
   
   conv1 = conv_block(input, 64, 2, [0.3, 0], 3)
   conv2 = conv_block(input, 128, 2, [0.4, 0])
   conv3 = conv_block(input, 256, 3, [0.4, 0])
   conv4 = conv_block(input, 512, 3, [0.4, 0.4, 0])
   conv5 = conv_block(input, 512, 3, [0.4, 0.4, 0])

   fc1 = pdl.layer.fc(input=conv5, size=4096, act=pdl.activation.Linear())
   fc2 = pdl.layer.fc(input=fc1, size=4096, act=pdl.activation.Linear())
   fc3 = pdl.layer.fc(input=fc2, size=1000, act=pdl.activation.Linear())

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

Как упоминалось ранее, сеть VGG16 имеет параметры 138 млн. Если каждую задачу визуальной классификации необходимо переобучить, масштаб всей задачи все равно будет очень большим. Таким образом, обычная практика основана на наборе данных ImageNet, который имеет 1000 категорий и в общей сложности 14 миллионов изображений. Как правило, для этого мы будем использовать параметры, которые были обучены в наборе данных.

Object Detection

PASCAL VOC

Обнаружение объекта Обнаружение объекта требует использования набора данных PASCAL VOC, который имеет только категории 20. Хотя это намного меньше, чем у ImageNet, информации о каждом изображении больше.

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

Предложение региона — выборочный поиск

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

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

Региональный CNN

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

R-CNN Training

В процессе обучения R-CNN способность извлекать признаки объекта из сверточной части сначала обучается на ImageNet, Перед прививкой к PASCAL сеть должна быть преобразована так, чтобы она вводила только 21 категорию, а дополнительная - фон. Эта модификация нейронной сети использует относительно сложный код, показанный ранее.

Fast R-CNN

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

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

Faster RCNN

Хотя Fast RCNN улучшил скорость обычной RCNN, ее можно улучшить еще больше. Мы также можем завершить процесс генерации предложения через нейронную сеть, которая эквивалентна слою нейронной сети, вложенному в нейронную сеть, так что весь процесс ускоряется с помощью графического процессора, Этот метод называется Faster RCNN.

Ты смотришь только раз (YOLO)

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

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

Многокамерный однокадровый детектор (SSD)

Такой метод объединения номинации области с местоположением и классификацией называется одиночным выстрелом.Приведенное выше изображение является структурной схемой другого многоблочного детектора Single Shot. Многоблочный детектор также использует VGG16, но есть только первые три conv_blocks, полный канальный слой удален, а к исходным FC6 и FC7 добавлены новые свертки. Видно, что к окончательным обнаружениям подключено несколько блоков свертки, то есть угадывание объекта выполняется на картах признаков разного масштаба, так что точность будет немного повышена, а также может играть лучшую роль для объектов с крупномасштабными изменениями.Хорошие результаты.

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