Алгоритм обнаружения цели: интерпретация статьи Faster-RCNN

Алгоритм обнаружения цели: интерпретация статьи Faster-RCNN

предисловие

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

иллюстрировать

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

Оригинальный бумажный адрес

Нажмите здесь или скопируйте ссылку

https://arxiv.org/abs/1506.01497

Структура каталогов

1. Обзор содержания статьи:

Все текущие алгоритмы обнаружения основаны на алгоритме «предложения региона».Хотя развитие таких технологий, как SSP-net и Fast-RCNN, сократило время работы сети обнаружения, оно также выявило трудоемкость предложения региона. .

Поэтому автор вводит RPN на основе Fast-RCNN, Добавляя несколько сверточных слоев к исходной структуре CNN, метод предложения области без затрат почти реализуется при реализации общих весов.

2. Внедрение процесса Faster-RCNN:

​ Процесс на исходной картинке из бумаги выглядит следующим образом:

вставьте сюда описание изображения

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

  • Сначала введите изображение
  • Затем это изображение отправляется в архитектуру CNN, которая выводит карту объектов.
  • Затем используйте сеть RPN, чтобы создать несколько региональных блоков предложений.
  • Во-вторых, сопоставьте поле предложения региона с картой объектов и используйте метод ROI Pooling для получения выходных данных фиксированной длины.
  • Затем используйте значение, выводимое ROI Pooling, для регрессии и классификации.

**Однако описанный выше процесс на самом деле очень короткий и местами полон сомнений. ** Поэтому некоторые пожилые люди в Интернете обобщили подробную блок-схему, основанную на официальном коде и документах pytorch (из ссылки 1):

вставьте сюда описание изображения

Простое описание изображения выше:

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

Вопрос: Почему вы хотите масштабировать до указанного размера?

Очевидно, что с ROI Pooling (независимо от ввода, размер вывода фиксирован), зачем вам нужно масштабировать до указанного размера. Это было ограничено инструментами реализации на тот момент, в то время не было простых фреймворков типа tensorflow и pytorch, поэтому, учитывая удобство, изображения масштабировались до одного размера для удобства обработки.

  • Затем карта объектов делится на два этапа: один отправляется в RPN, а другой — в ROI Pooling.

    • Часть RPN: сначала генерируются так называемые привязки в соответствии с обходом карты объектов; затем карта объектов подвергается сверточному слою 3 * 3, а затем выполняются соответственно регрессия (калибровка привязки) и классификация (привязки дискриминации). В структуре RPN на приведенном выше рисунке верхний путь — это классификация, а нижний путь — регрессия.
  • Затем используйте блок предложений, сгенерированный RPN (то есть якоря, откалиброванные выше), для сопоставления с картой объектов и извлеките содержимое карты объектов (разного размера), соответствующее каждому блоку предложений для операции объединения ROI, и выведите соответствующий вектор признаков ROI Pooling (той же длины).

  • Наконец, выполните две полностью связанные операции с вектором признаков ROI Pooling, а затем выполните классификацию и регрессию (softmax).

Затем интерпретируйте ключевые моменты знания выше:

3. Анкерные/якорные ящики:

​RPN является наиболее важной структурой в Faster-RCNN.Сначала нам нужно понять ее цель: создать хорошее поле предложения региона.

Затем посмотрите на исходное изображение бумаги:

вставьте сюда описание изображения

Сначала дайте краткое описание изображения выше, а затем подробно объясните детали . Карта функций conv на приведенном выше рисунке является окончательной картой выходных функций архитектуры CNN.Красный прямоугольник называется скользящим окном. То есть, сдвиньте окно на карте объектов, это окно принимает n*n карты объектов (3*3 на рисунке) в качестве входных данных и отправляет конечный результат (256-d на рисунке) в классификацию и регрессию. .

На самом деле нетрудно заметить, что это так называемое скользящее окно представляет собой сверточный слой 3*3, в котором нет ничего волшебного. Это также соответствует сверточному слою 3*3 оригинального Faster-RCNN.

Объяснение: Значение цифр выше

​ 256-д, это значение размерности. Потому что в статье Faster-RCNN архитектура CNN использует модель ZF, а количество каналов карты объектов, выводимых последним сверточным слоем модели, составляет 256 измерений. Аналогично, если его изменить на VGG16, то здесь должно быть 512-d.

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

​ 2k оценок и 4k координат, одна из них — оценка классификации (значение вероятности), а другая — значение координаты. 2k означает поле с 2 значениями (вероятность положительного случая + вероятность отрицательного случая), тогда k полей - это 2k значений. Аналогично, 4k означает 4 значения координат (x+y+w+h) блока, тогда k блоков — это 4k значений.

Объяснение: как генерируются поля привязки

Прежде всего, Anchor обычно относится к центру поля, а Anchor Boxex относится к окну.

Из приведенного выше рисунка нетрудно увидеть, что центры k блоков привязки соответствуют центру скользящего окна с синими пунктирными линиями, ** Это означает, что каждый центр скользящего окна (подвижного) будет генерировать k анкерные ящики. Мы также знаем, что скользящее окно на самом деле представляет собой сверточный слой 3 * 3, а карта объектов является его входом, а это означает, что каждая точка карты объектов будет генерировать k блоков привязки. ** В исходном тексте k занимает 9.

​ Первая проблема решена выше, то есть как генерируются поля привязки. Тогда есть еще один вопрос.Каждая точка будет генерировать k блоков привязки.Есть ли какие-либо требования для этих блоков привязки ? На самом деле это искусственно, и в статье автор полагает, что будут использоваться три соотношения сторон и три соотношения сторон, что даст 3*3=9 кадров, как показано на следующем рисунке (нарисованном мной): (конкретно Код, как правило, дается базовый якорь, а последний генерируется по соотношению и т. д.)

вставьте сюда описание изображения

Объяснение: количество ячеек привязки на карте объектов.

Мы предполагаем, что размер исходного изображения составляет 400*400, а архитектура CNN принимает VGG16, тогда мы можем знать, что после того, как исходное изображение проходит через VGG16, полученная карта признаков фактически уменьшается в 16 раз (4 объединяющих слоя, каждый уменьшилась в 2 раза).

Тогда общее количество якорных ящиков равно:

(400/16)*(400/16)*9 = 5625

Вот в чем проблема, ящиков для предложений слишком много, более 5000. Затем автор отобрал 256 подходящих ящиков для предложений, а соотношение положительных и отрицательных примеров составило 1:1.

Как определить, подходит ли ящик для предложений? Только при соблюдении следующих условий:

  • Коробки предложений с IOU> 0,7 являются положительными примерами.
  • Коробка предложений с самой большой долговой распиской является положительным примером.
  • Ящики для предложений с IOU < 0,3 являются отрицательными примерами.
  • Ящики предложений от 0,3 до 0,7 игнорируются.

Объяснение: NMS и удаление за пределами границ

После получения ящика предложений, NMS (немаксимальное подавление, если вам неясно, пожалуйста, обратитесь к моему документу RCNN для интерпретации) и устранение за пределами (то есть ящик предложений превышает исходное изображение и должен быть удаленный).

Пояснение: Как получаются числа 18 и 36 на рисунке ниже?

вставьте сюда описание изображения

Прежде всего, как 18, так и 36 представляют количество каналов или измерений. 36=4*9, то есть 9 ящиков, каждый ящик имеет 4 значения координат, и соответствующий формат данных должен быть:

[batch_size,4*9,W,H]

​ 18=2*9, то есть 9 полей, каждое поле соответствует 2 значениям категории (положительные или отрицательные примеры), и соответствующий формат данных:

[batch_size,2*9,W,H]

Вопрос: Блоки привязки создаются на исходном изображении или на основном изображении?

На самом деле, с моей личной точки зрения, нет большой разницы между блоками привязки, сгенерированными на исходном изображении, и картой объектов . Например, если он сгенерирован на исходном изображении, вы можете сопоставить его с картой объектов (VGG16), разделив на 16, и то же самое верно для карты объектов.

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

Как реализовать регрессию в RPN?

Как сказать, это обычная проблема регрессии кадров, которая почти такая же, как регрессия кадров в RCNN. В этом нет ничего особенного. Если вам интересно, вы можете открыть домашнюю страницу моего блога и найти часть в интерпретации Документы RCNN. Или просто скопируйте ссылку ниже:

https://blog.csdn.net/weixin_46676835/article/details/129929232

4. Функция потерь:

Функция потерь Faster-RCNN вполне удовлетворительна, а преобразование Fast-RCNN невелико.

Конкретная формула выглядит следующим образом:

вставьте сюда описание изображения

из которых:

  • i представляет i-е якорное поле в пакете
  • Pi указывает вероятность того, что объекты, окруженные рамкой привязки, относятся к разным типам (например, всего имеется 20 типов, каждый из которых является значением вероятности каждого типа)
  • Pi* принимает {0, 1}, и его значение определяется тем, является ли якорь i положительным примером. Если это положительный пример, он принимает 1, в противном случае — 0. Это означает, что только когда значение равно 1, регрессия включается в потери, то есть только коробка, содержащая объект, стоит включать потери, в противном случае это бессмысленно.
  • ti представляет 4 значения координат, соответствующих i-му якорю, а ti* — значение координат реального кадра
  • В документе Ncls берет число batch_size (предполагается, что оно равно 256), Nreg берет размер карты признаков (при условии, что входное изображение 600*1000, архитектура VGG16, размер карты признаков составляет около 2400) и λ используется для балансировки двух соотношений размеров , в настоящее время примите 2400/256, что составляет около 10.
  • В коде пусть Ncls и Nreg оба принимают размер batch_size, чтобы λ можно было сразу принять равным 1, что удобно и просто.

Lcls — это обычно используемая функция потерь классификации, а именно функция потерь перекрестной энтропии:

вставьте сюда описание изображения

Lreg представляет собой гладкую функцию потерь L1, обычно используемую в области обнаружения целей, а именно:

вставьте сюда описание изображения

5. Обучение Faster-RCNN:

Теперь подумайте об этом, процесс обучения Faster-RCNN на самом деле так же важен, как и его Anchor.

На самом деле, о том, как тренировать Faster-RCNN, автор предложил три метода, а именно 4-этапное попеременное обучение, приблизительное совместное обучение и неприближенное совместное обучение.

Кратко расскажем об этих трех методах:

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

Наконец, автор , конкретный процесс выглядит следующим образом:

  • Прежде всего, он должен быть обучен на ImageNet с архитектурой CNN (здесь установлено значение VGG).
  • Затем VGG добавляет сетевую часть RPN ( идея совместного использования весов/сверток ) и начинает обучение RPN, которое создает серию блоков региональных предложений.
  • Обучение Faster-RCNN в первый раз (не включая часть RPN, точнее обучение Fast-RCNN)
  • Обучите RPN еще раз, чтобы получить новое поле предложения региона.
  • Второй тренинг Faster-RCNN (не включая часть RPN, точнее обучение Fast-RCNN)
  • ... (Повторяйте и повторяйте до сходимости, автор обнаружил, что он сходится примерно через два раза)

6. Резюме:

​ Faster-RCNN — шедевр двухэтапного обнаружения, вобравший в себя всю суть предыдущих. Его основные вклады:

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

Supongo que te gusta

Origin blog.csdn.net/weixin_46676835/article/details/131049773
Recomendado
Clasificación