«Руководство по распознаванию лиц» 0 · Объяснение MTCNN

искусственный интеллект глубокое обучение

Первоисточник:www.sfinst.com/?p=1683

 

Предыстория: Распознавание лиц решает две проблемы: 1) Определить, есть ли лицо на изображении? 2) Если да, то где лицо? Поэтому многие приложения для распознавания лиц (распознавание лиц, ориентированные на анализ) основаны на распознавании лиц. В большинстве случаев обнаружение лиц использует двухэтапный процесс: 1) найти все области-кандидаты, которые могут быть лицами 2) выбрать области, которые с наибольшей вероятностью могут быть лицами из областей-кандидатов его преимущества и недостатки: точный и медленный. Обнаружение лиц MTCNN было предложено в статье 2016 года. «MT» MTCNN относится к многозадачному обучению (Multi-Task), которое одновременно изучает «распознавание лица», «регрессию кадров» и «лицо» в той же задаче. . Распознавание ключевых моментов». По сравнению со структурой CVPR (отдельная настройка кадра и распознавание лиц) 2015 года, MTCNN является инновационной. В инженерной практике MTCNN - это алгоритм с хорошей скоростью обнаружения и точностью Процесс вывода алгоритма имеет определенное вдохновение, и я поделюсь им с вами здесь. (Далее для обозначения этого алгоритма используется «MTCNN».) В этой статье мы поделимся с вами некоторым опытом и мыслями в форме вопросов и ответов. Начните со списка вопросов, на которые будут даны ответы в этой статье:

  1. Первый этап процесса вывода MTCNN: 1.1 Зачем нужно делать "пирамидальное" преобразование на картинке? 1.2 Алгоритм MTCNN может принимать изображения любого масштаба, почему? 1.3 Почему установка соответствующего минимального размера лица и масштабного коэффициента может оптимизировать эффективность вычислений? Почему чиновник выбрал 0,709 для коэффициента масштабирования 1.4 Зачем нужно выполнять (x – 127,5)/128 операций над каждым элементом при вводе изображений в модель? 1.5 Как восстановить вывод сети P-NET по координатам области лица на исходном изображении?
  2. Что такое пограничная регрессия? Как использовать результаты регрессии ограничивающей рамки в MTCNN? Почему это возможно?
  3. Какие шаги являются ключевыми, чтобы повлиять на вычислительную эффективность MTCNN? А какие есть идеи по оптимизации?

Код, упомянутый в этой статье, является репродукцией Дэвида Сандберга,GitHub.com/Дэвид Сэнд быть…Число, первое чтение, сбивает с толку. В этой статье мы немного рассмотрим их, отвечая на поставленные выше вопросы. Ряд вопросов на первом этапе конвейера логического вывода MTCNN Цель первого этапа — сгенерировать лицевых кандидатов. Первый этап процесса логического вывода MTCNN включает в себя множество навыков CNN, которые я лично считаю наиболее существенной и вдохновляющей частью. А в процессе вывода MTCNN затраты времени на первый этап составляют около 80%, поэтому, если читателям необходимо оптимизировать и понять MTCNN, вложить в первый этап не слишком много усилий. 1.1 Зачем нужно делать "пирамидальное" преобразование изображения? По разным причинам масштаб лица на изображении может быть большим или маленьким, и всегда было проблемой сделать так, чтобы алгоритм распознавания не влиял на масштаб цели; обнаружение цели, по сути, является операцией скалярного произведения функций в изображении. целевая площадь и вес шаблона, тогда, если шаблон Масштаб соответствует масштабу цели, и, естественно, будет высокий эффект обнаружения. Более подробное изложение плана реагирования см. в этой статье MTCNN (https://arxiv.org/pdf/1606.03473.pdf).

MTCNN использует (а) пирамиду изображений на приведенном выше рисунке для решения многомасштабной проблемы цели, то есть исходное изображение масштабируется с определенным коэффициентом (например, 0,5) для получения многомасштабных изображений, очень похожих на пирамида (как показано на рисунке а выше). Модель P-NET обучается на одномасштабных (12 * 12) изображениях.Во время вывода, если вы хотите более точно распознавать лица различных масштабов, вам необходимо изменить масштаб распознаваемого лица, чтобы он был близок к Модель Масштаб (12*12). Недостаток: медленно. Во-первых, создание пирамид изображений происходит медленно, во-вторых, в модель необходимо вводить изображения каждого масштаба, что эквивалентно выполнению нескольких процессов вывода модели. 1.2 Алгоритм MTCNN может принимать изображения любого масштаба, почему? Поскольку первый этап P-NET — это полностью сверточные сети (Fully Convolutional Networks) (АР Вест V.org/ABS/1411.40…Свертка, объединение и нелинейная активация — все это операции, которые могут принимать матрицы любого масштаба, но полносвязные операции требуют определенных входных данных. При наличии полносвязного слоя в сети масштаб входного изображения (в общем случае) необходимо зафиксировать, при отсутствии полносвязного слоя размер изображения может быть произвольным. Конечно, есть и структуры, включающие как полносвязные слои, так и изображения любого масштаба: SPP (Spatial Pyramid Pooling), предложенный Kaiming He et al., делает это (https://arxiv.org/abs/1406.4729). Эта статья не объясняет слишком много. 1.3 Почему установка соответствующего минимального размера лица и масштабного коэффициента может оптимизировать эффективность вычислений? Почему официальные лица выбрали 0,709 для коэффициента масштабирования?minsize означает минимальный размер (единица измерения: пиксели) лица, которое, по вашему мнению, должно быть распознано на изображении. factor - это коэффициент, на который масштабируется каждая сторона. Мы уже знаем, что на первом этапе исходное изображение будет многократно масштабироваться для получения пирамиды изображения, цель — сделать лицо на масштабированном изображении близким к размеру изображения (12px * 12px) во время обучения P-NET. Как этого достичь? Сначала масштабируйте исходное изображение пропорционально `12/minsize`, а затем используйте предыдущий результат масштабирования для непрерывного масштабирования в соответствии с множителем масштабирования `factor` (например, 0,5), пока самая короткая сторона не станет меньше или равна 12. . В соответствии с вышеприведенным алгоритмом, чем больше minsize, тем меньше слоев «пирамиды» генерируется и тем меньше расчетная величина resize и pnet. Вот пример: если тестируемое изображение имеет размер 1200 пикселей * 1200 пикселей, вы хотите сделать масштабированный размер близким к размеру изображения для обучения модели (12 пикселей * 12 пикселей).

Почему коэффициент масштабирования официально равен 0,709? При масштабировании пирамиды изображения ширина и высота меняются на 1/2 от оригинала по умолчанию, а площадь после масштабирования становится 1/4 от оригинала; если вы считаете, что масштаб 1/4 слишком велик, что бы вы сделали? Масштабируйте область до 1/2 от оригинала. Да, это очень интуитивная идея, поэтому коэффициент масштабирования здесь равен 0,709 ≈ sqrt(2)/2, так что ширина и высота становятся исходными sqrt(2)/2, а площадь становится 1/2 исходной. . А из каскадной детекции лиц CVPR2015_cascade CNN предложили раньше, чем MTCNN (users.ee CS.northwestern.quote/~hr 835/ass…С практической точки зрения коэффициент должен быть меньше 1. Чем больше значение, тем больше объем вычислений на первом этапе, но может быть найдено больше блоков-кандидатов. 1.4 Зачем нужно делать (x – 127,5)/128 операций для каждого пикселя при вводе изображения в модель? Операция нормализации для ускорения сходимости. Поскольку число [0, 255] в каждом пикселе изображения неотрицательно, делаем (x – 127,5)/128 для каждого пикселя, а [0, 255] можно преобразовать в (-1, 1). Конкретные теоретические причины можно искать самостоятельно, но на практике оказывается, что есть положительные и отрицательные входы, и скорость сходимости выше. Входное изображение должно быть предварительно обработано во время обучения, и оно должно быть предварительно обработано при выводе. 1.5 Каким образом выход сети P-NET восстанавливает координаты области лица на исходном изображении? В это время вам нужно посмотреть на сетевую структуру P-NET:

Обратите внимание на характеристики изображения выше:

  • После 3 сверток и 1 операции объединения исходная матрица 12*12*3 становится 1*1*32.
  • Используя этот вектор 1 * 1 * 32, а затем с помощью свертки 1 * 1 * 2, получается результат классификации «является ли это лицом» (сначала мы сосредоточимся на задаче классификации)

Подводя итог, ввод области 12 * 12 * 3 в сеть P-NET может вывести вероятность «иметь лицо». Повторное подключение с помощью операций свертки и объединения — это функция скольжения по входной матрице. (Увидеть ниже)

Мы можем представить себе следующую сцену: мы устанавливаем матрицу входного изображения равной A, ядро ​​свертки скользит по исходной матрице изображения A и вычисляет матрицу каждой области 12 * 12 * 3 как оценку того, нет ли лица в области, и, наконец, двумерная матрица может быть получена как S, а значение каждого элемента S является числом [0, 1], представляющим вероятность наличия лица. То есть A изменяется на S посредством ряда матричных операций. Согласно сетевой структуре P-NET, мы можем вычислить область с координатами верхнего левого угла (X, Y), шириной и высотой 12 на входной матрице A. После операций свертки и объединения P-NET это соответствует до S (X/2 – 5 , Y/2 – 5) на . И наоборот, информация о счете S может быть восстановлена ​​​​до наличия или отсутствия лиц в каждой области входного изображения.Псевдокод: Пусть: (x1, y1), (x2, y2) будет верхним левым прямоугольная область во входной матрице, соответственно Координаты угла и правого нижнего угла (x, y, s), где (x, y) — координата любой точки в матрице оценок, а s — значение этой координаты, указывающее вероятность иметь лицо. x1 = x * 2 y1 = y * 2 x2 = x1 + 12 y2 = y1 + 12 Это дает нам вероятность того, что площадь на входной матрице A имеет грань. Поскольку входная матрица A получена путем масштабирования исходного изображения, восстановление исходного изображения x1_origin = x1/масштаб y1_origin = y1/масштаб x2_origin = x2/масштаб y2_origin = y2/масштаб лица в каждой области исходного изображения. Конечно, с одной стороны, мы можем отфильтровать некоторые области с низкой оценкой, урезав порог, с другой стороны, мы можем использовать алгоритм NMS для фильтрации областей с высоким перекрытием. Их можно найти в коде вывода MTCNN. Здесь особо нечего объяснять. Что такое пограничная регрессия? Как использовать результаты регрессии ограничивающей рамки в MTCNN? Почему это возможно? Полностью ли описан в предыдущей статье процесс идентификации P-NET блоков-кандидатов? нет. Предыдущая статья лишь разъяснила, как использовать результаты задачи классификации лиц. Многозадачность MTCNN еще не проявилась. Мы можем использовать результаты регрессии ограничивающей рамки, чтобы скорректировать положение полученной ранее области ограничивающей рамки. Подобно процессу 1.5 выше, входная матрица A, P-NET также может получить 4 двумерных матрицы dx1, dy1, dx2, dy2, каждая из которых имеет тот же размер, что и указанная выше S, а распределение представляет собой верхнюю левый и правый углы области лица "Относительное значение" координаты нижнего угла. Аналогично процессу 1.5 выше восстанавливаем результат до того, какую область исходного изображения следует подкорректировать, как подкорректировать будет объяснено ниже. Обратитесь к ИКТ Южной беседки (blog.CSDN.net/funding 080203…Сопоставленный результат P (красный прямоугольник на рисунке ниже) ближе к реальному окну G (зеленый прямоугольник на рисунке ниже).

Предполагая, что это отображение является линейным отображением, мы можем сначала сделать перенос (Δx, Δy), Δx=Pwdx(P), Δy=Phdy(P), который предлагается в статье R-CNN: Gx=Pwdx(P )+ Px,Gy=Phydy(P)+Py и затем выполнить масштабирование (Sw,Sh),Sw=exp(dw(P)),Sh=exp(dh(P)) В соответствующей статье: Gw=Pwexp( dw(P)) Gh=Phexp(dh(P)) Мы изучаем отношение отображения dx(P), dy(P), dw(P), dh(P). Приведенные выше формулы выполняют линейное преобразование. Процесс изучения этих отображений представляет собой задачу решения матрицы параметров в линейной регрессии. Поэтому это называется пограничной регрессией. Почему можно предположить линейное отображение? Потому что размер окна P и реального окна G не сильно отличаются. Беседка ИКТ на юге (blog.CSDN.net/funding 080203…Согласно приведенному выше объяснению, значения четырех двумерных матриц, полученных P-NET, являются не реальными координатами, а отношением отображения, которое отображает исходные координаты в реальные координаты. Отношение отображения MTCNN немного отличается от приведенного выше.Ниже показано, как получить координаты кадра из P-NET, и алгоритм для исправления координат кадра на исходном изображении: Пусть (x1, y1), (x2 , y2) соответственно — верхний левый и нижний правый углы прямоугольной области во входной матрице (x, y, dx1) — предыдущая точка результата граничной регрессии, dx1 представляет собой значение коррекции абсциссы x1 верхнего левого точка (x, y, dy1) — граница Верхняя точка результата регрессии, dy1 представляет собой значение коррекции ординаты y1 левого верхнего угла точка (x, y, dx2) — верхняя точка результата границы регрессии , dx2 представляет собой значение коррекции абсциссы x2 нижней правой угловой точки (x, y, dy2) является предыдущей точкой результата регрессии границы, а dy2 представляет собой значение коррекции ординаты y2 нижней правой угловой точки, согласно алгоритму восстановления координат 1.5 выше: x1_origin = x * 2 / масштаб y1_origin = y * 2 / масштаб x2_origin = (x * 2 + 12) / масштаб y2_origin = (y * 2 + 12) / масштаб Вот поправка : Для вышеприведенной области ширина и высота равны w = h = 12 / масштаб. объяснили, как использовать результаты пограничной регрессии. На уровне реализации трехуровневой модели P-NET, R-NET, O-NET каждый процесс может одновременно выводить результаты классификации и скорректированные значения. Мы применяем эту поправку ко всем ящикам с классификационными баллами выше порога и низким перекрытием. А теперь посмотрите на Рис1 в исходном тексте, вас вдруг осенило?

Какие шаги являются ключевыми, чтобы повлиять на вычислительную эффективность MTCNN? А какие есть идеи по оптимизации? Эта часть оказывает большое влияние на реальную эффективность вычислений из-за производительности машины, настроек параметров и размера входного изображения Предлагаются только некоторые ключевые моменты. 3.1 Какова пропорция времени в трех этапах?

3.2 Какие существуют решения по оптимизации? Вывод MTCNN — это операция, интенсивно использующая ЦП.Если размер изображения превышает 1080, процесс создания пирамид изображений может занимать больше всего времени. Из-за пирамидальной структуры на первом этапе необходимо вычислять изображения многих масштабов. Но на изображениях с разрешением более 1080, действительно ли самое маленькое лицо, которое вам нужно идентифицировать, нуждается в 12 * 12? Минисайз тоже стал больше? Кроме того, если вы уже знаете размер лица на картинке, можете ли вы настроить минимальный размер? Подумайте об этом в связи с вашим тренировочным сценарием. Принимая самый трудоемкий первый этап в качестве ключевого момента основной оптимизации, вот несколько методов, которые я пробовал:

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

3.3 Действительно ли сетевая модель отнимает столько времени при выводе? Говорить об этом стоит говорить о сумме расчета данной модели. Когда мы обнаружили, что доля изменения размера, отнимающая много времени, была поразительной, напротив, модель обнаружила, что сеть была относительно мелкой. Сумма расчета и величина параметра каждого этапа mtcnn показаны ниже для справки.

Обратитесь к научно-популярному сообщению для оценки параметров и расчетов: анализ графического процессора и памяти в глубоком обучении (Колонка Calling.com/afraid/31558973)…На самом деле количество вычислений невелико.Даже если используется особенно большое изображение, количество вычислений p-net составляет всего 9G FLOPs за раз.В чем заключается концепция? Одна GTX 1080TI имеет вычислительную мощность 10T FLOPs, а расчетная величина p-net также почти в тысячу раз отличается от вычислительной мощности видеокарты. Количество вычислений также не является проблемой. Поэтому я думаю, что вывод этой модели не требует слишком много времени.По результатам моих тестов для изображений с вводом около 200 * 200 время выполнения каждой модели составляет всего несколько мс на ЦП и ГП. Лично я считаю нерентабельным использование графического процессора для вывода MTCNN.В следующей таблице приведены некоторые результаты тестов:

Из приведенной выше таблицы видно, что чем сложнее сеть, тем очевиднее улучшение GPU по сравнению с CPU. Все три этапа MTCNN — это очень слабые сети, и улучшение графического процессора невелико. Кроме того, на первом этапе MTCNN пирамида изображений будет многократно вызывать очень неглубокую сеть P-NET, что приводит к КОПИРОВАНИЮ данных из памяти в видеопамять и из видеопамяти в память, а эта операция копирования является дорогостоящей. , даже больше времени, чем само вычисление. Заинтересованные читатели могут сами пройти тест. Вот ссылка на результаты тестирования серии статей в сообществе Alibaba Cloud Yunqi «Раскрытие графических процессоров» (Колонка Calling.com/afraid/43144460)…Я пробовал следующие три вещи:

  1. Умножьте матрицу 200x200 на numpy, высокооптимизированную библиотеку линейной алгебры процессора.
  2. Умножение матриц 200x200 на GPU с использованием тензоров cuda PyTorch.
  3. Выполните матричное умножение 200x200 на графическом процессоре, используя тензоры cuda PyTorch, каждый раз копируя данные туда и обратно.

Как и ожидалось, GPU работал быстрее, на этот раз примерно в 6 раз. Интересно, что 1 и 3 заняли почти одинаковое количество времени. Эффективность работы графического процессора почти полностью уравновешивается неэффективностью передачи данных!Вот подведение итогов исследования производительности:

  • Оптимизация производительности процесса вывода MTCNN начинается с первого этапа, ключ в том, чтобы уменьшить количество итераций, и можно использовать минимальный размер;
  • В процессе вывода MTCNN время расчета модели не так велико, как предполагалось, но может случиться так, что данные копируются туда и обратно между видеопамятью и памятью, что приводит к неэффективности;

MTCNN, который, как думает первоначальный автор, написан здесь, — это просто мое понимание MTCNN в конце 2018 года. Тем не менее, когда эта статья была опубликована в 2016 году, все еще было много вдохновения, но по количеству повторяющихся репозиториев, которые можно найти на Github, вы можете увидеть подсказки. Присмотревшись, я могу найти несколько реализаций mxnet, pytorch, tensorflow и caffee, Некоторые люди считают, что это медленно, и переписывают его на c. Видно, что MTCNN по-прежнему является относительно успешной моделью. Мы немедленно откажемся от MTCNN и перейдем к лучшим и более быстрым современным моделям распознавания лиц. В такой момент попрощайтесь с MTCNN этой статьей. Наконец, мы заключаем с преимуществами MTCNN, кратко изложенными первоначальным автором: основные вклады этой статьи резюмируются следующим образом: (1) мы предлагаем новую структуру на основе каскадных CNN для совместного обнаружения и выравнивания лиц, а также тщательно разрабатываем облегченную архитектуру CNN. для производительности в режиме реального времени. (2) Мы предлагаем эффективный метод онлайн-анализа жестких образцов для повышения производительности. (3) Проводятся обширные эксперименты на сложных тестах, чтобы показать значительное улучшение производительности предлагаемого подхода по сравнению с состоянием. передовые методы как в задачах обнаружения лиц, так и в задачах выравнивания лиц Реализация справочного кода:

бумага:

  • Оригинал: Совместное обнаружение и выравнивание лиц с использованием многозадачных каскадных сверточных сетей (AR West V.org/FTP/AR West V/Боюсь…
  • MTCNN на самом деле исправит недостатки этой серии статей: Каскад сверточной нейронной сети для обнаружения лиц (users.ee CS.northwestern.quote/~hr 835/ass…
  • FCN: полностью сверточные сети для семантической сегментации (АР Вест V.org/ABS/1411.40…
  • Другим решением для приема изображений произвольного масштаба является SPP: объединение пространственных пирамид в глубоких сверточных сетях для визуального распознавания (АР Вест V.org/ABS/1406.47…
  • Обобщает статью, решающую задачу идентификации объектов любого масштаба: Обнаружение лиц с помощью Faster R-CNN (АР Вест V.org/PDF/1606.03…