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

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

Кто нанял ботаника?

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

Нам, ботаникам в области ИИ, Элиэзер Юдковски знаком и как исследователь безопасности ИИ, и как автор самого популярного в истории фанфика о Гарри Поттере (мы от всей души рекомендуем всем Гарри Поттер и метод рациональности, сокращенно HPMoR). И серия о Гарри Поттере представляет собой прекрасный пример для этого поста, вымышленный артефакт, который кажется интуитивно понятным, но трудно воспроизвести на практике:

Альбус Дамблдор разместил Линию возраста вокруг Кубка огня, чтобы никто младше семнадцати не приблизился к нему. Магия Age Line была настолько развита, что даже зелье старения не могло обмануть ее. Даже Юдковский не особо вдавался в подробности механики Age Line в своей дотошной манере в HPMoR, но сегодня мы попробуем; и пока мы говорим об этом, мы также сделаем попытку признания пола. Как обычно в компьютерном зрении, мы начинаем со сверточных нейронных сетей.

Сверточные нейронные сети

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

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

В конце концов, после нескольких (иногда нескольких сотен) слоев мы получаем глобальные функции, которые «смотрят» на все исходное изображение, и теперь они могут быть объединены относительно простыми способами для получения меток классов (распознавать, является ли это собакой, кошкой или лодка, или Гарри Поттер).

Технически сверточная нейронная сеть - это нейронная сеть со сверточными слоями, а сверточный слой - это преобразование, которое применяет определенное ядро ​​(фильтр) к каждой точке входа («изображение» с множеством каналов в каждом пикселе, т. Е. трехмерный тензор) и генерировать отфильтрованный вывод, перемещая ядро ​​по входу.

Давайте рассмотрим простой пример фильтра: обнаружение краев на изображениях. В этом случае входом для обнаружения края является изображение, и каждый пиксель в изображении определяется тремя числами: интенсивностью красного, зеленого и синего цвета этого пикселя. Мы создаем специальное ядро, которое будет применяться к каждому пикселю изображения; вывод - это новое «изображение», которое показывает результаты этого ядра. По сути, ядро ​​здесь представляет собой небольшую матрицу. Вот как это работает:

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

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

Модельный конвейер

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

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

Распознавание лиц

Распознавание лиц - классическая проблема компьютерного зрения. Еще до революции глубокого обучения, в начале 2000-х, она была решена довольно успешно с помощью так называемого алгоритма Виолы-Джонса. Это было одно из самых известных применений каскадов Хаара в качестве функций; но те времена давно прошли ...

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

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

Короче говоря, модель обнаружения лиц может быть описана как SVM в представлении функций HOG + SIFT. Представления HOG и SIFT - это созданные вручную функции, результат многолетнего опыта в создании систем распознавания изображений. Эти функции распознают ориентацию градиента в локализованных частях изображения и выполняют серию детерминированных преобразований изображения. Оказывается, это представление довольно хорошо работает с методами ядра, такими как поддержка векторных машин (SVM).

Увеличение данных

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

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

Оценка возраста

Чтобы предсказать возраст, мы применяем глубокую сверточную нейронную сеть к изображению лица, обнаруженному на предыдущем этапе обработки. В демонстрационном методе используется архитектура Wide Residual Network (WRN), которая превосходит архитектуру Inception в основных наборах данных обнаружения объектов, достигая сходимости по одной и той же задаче в два раза быстрее. Прежде чем мы объясним, что такое остаточные сети, мы начнем с краткой исторической справки.

Задача ImageNet

Проект ImageNet - это большая визуальная база данных, предназначенная для использования в исследованиях визуального распознавания объектов. Революция глубокого обучения 2010-х годов в компьютерном зрении началась с резкого прогресса в решении задачи ImageNet. Результаты ImageNet были признаны не только в сообществе ИИ, но и во всей отрасли, и ImageNet стал и остается самым популярным набором данных общего назначения для компьютерного зрения. Не вдаваясь в подробности, давайте просто взглянем на график сравнения победителей нескольких первых лет:

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

Остаточные соединения

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

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

DEX на NeuroPlatform

Мы упаковали модель DEX в контейнер докеров и загрузили ее на NeuroPlatform. Давайте начнем! Сначала войдите на страницу входа в Neuromation https://mvp.neuromation.io/

На панели инструментов NeuroPlatform вы можете увидеть, сколько NTK осталось на вашем балансе, и потратить их в трех разделах:

  • Модели AI,
  • Наборы данных,
  • Генераторы.

Сегодня мы имеем дело с оценкой возраста и пола, моделью искусственного интеллекта, доступной на NeuroMarket. Купим нашу первую модель! Входим в модели AI и покупаем модель Age & Gender:

Затем мы запрашиваем новый экземпляр; это может занять некоторое время:

И здесь мы идем! Теперь мы можем опробовать модель на демонстрационном интерфейсе:

Это меня немного льстит.

Сергей Николенко
Главный научный сотрудник, Neuromation

Рауф Курбанов
Старший научный сотрудник, нейроматология