Одно правило 1–0 DeepLearning

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

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

Итак, последние полтора месяца я проходил онлайн-курсы, читал онлайн-книги и изучал инструмент глубокого обучения.

Если честно, это была легкая часть.

Настоящей проблемой было собрать набор данных о лицах, классифицированных по эмоциям.

Почему это проблема? Потому что алгоритмы глубокого обучения требуют данных!

Чтобы получить набор данных спуска, я собрал изображения лиц из Google Images и обрезал лица с помощью OpenCV (как описано здесь). Мне удалось собрать несколько тысяч фотографий, но мой подход к аннотации не удался из-за того, что многие фотографии либо не содержат лица, либо не имеют нужных эмоций.

В итоге у меня осталось всего около 600 картинок, бесполезное количество для голодных нейронных сетей. Просматривая Интернет, я смог сканировать предварительно маркированный, но все еще небольшой набор от f lickr пользователя The Face We Make (TFWM). В отчаянии (и, наверное, самый умный ход)

Я спросил на Reddit MachineLearning, и кто-то спас мне жизнь. Мне указали на коллекцию конкурса Kaggle с более чем 35К картинками, помеченными 6 эмоциями плюс нейтральный класс.

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

Я был взволнован и полон ожиданий, пока код работал, ведь самый простой код (простой MNIST), скромная регрессия softmax, достиг 91% точности, а более глубокий код (deep MNIST) - двухуровневый. Сверточная сеть достигла точности около 99,2% по набору данных MNIST.

Какое огромное разочарование, когда максимальная точность, которую я получил, составила 14,7% и 27,9% соответственно. Затем я попытался изменить несколько параметров, таких как скорость обучения, количество итераций, переключиться с Softmax на ReLU на последнем уровне, но ничего не изменилось.

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

Поработав какое-то время с эмоциями, я познакомился с исследованиями психолога Пол Экман. Фактически, большинство эмоций, обнаруживаемых системами, так или иначе основаны на предложенных им шести основных эмоциях. Работа, которая вдохновила меня на эксперимент, - это Система кодирования действий лица (FACS), общепринятый стандарт систематической категоризации физического выражения эмоций.

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

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

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

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

Тогда простое правило выглядит следующим образом. Я вычисляю высоту рта (mh) как разницу между координатами y самых верхних и самых нижних ориентиров. Я установил порог (th) как половину этой высоты (th = mh / 2). Порог можно рассматривать как координату y горизонтальной линии, разделяющей ограничивающую рамку на верхнюю и нижнюю области.

Затем я вычисляю две «высоты углов губ» как разницу между координатами y самого верхнего ориентира и обоими ориентирами углов рта. Я беру максимум (max) из «высоты углов губ» и сравниваю его с th. Если max меньше порогового значения, это означает, что угол губ находится в верхней части ограничивающего прямоугольника, который представляет улыбку (с помощью инструмента Lip Corner Puller). Если нет, то мы имеем дело с действием депрессора уголков губ, которое представляет собой печальное лицо.

Используя этот простой алгоритм, я провел эксперимент. Для сетей NMIST я извлек связанные лица из набора Kaggle, и в итоге я получил 8989 радостных и 6077 грустных обучающих лиц. Для тестирования у меня было 224 и 212 лиц соответственно из набора TFWM. После обучения и тестирования простая сеть NMIST получила 51,4%, а глубокую NMIST - 55% точности, что является значительным улучшением по сравнению с версией с 7 классами, но все же очень плохой производительностью. Затем я использовал набор тестов и запустил алгоритм с одним правилом. Удивительно, но это единственное правило получило точность 76%, что на 21% больше, чем у глубокой сети NMIST.

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

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

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

Присоединяйтесь к 30 000+ людям, которые читают еженедельную рассылку Машинное обучение, чтобы понять, как ИИ повлияет на их работу и жизнь.

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

Рисунки 1 и 2 были получены из замечательного онлайн-инструмента ARTNATOMY Виктории Контрерас Флорес (Испания, 2005).