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

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

Прелесть технологий в том, что их можно использовать и для других. Мы стремились сделать именно это.

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

Данные

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

Поскольку мы из Испании, первым делом мы подумали о разработке приложения для LSE (Lengua de Signos Española). Но исследования и инновации - это не путь розового цвета. Мы не смогли найти никаких данных, связанных с испанским алфавитом, ни в Интернете, ни даже в письмах организациям, которые могли бы иметь эту информацию. Поэтому нам пришлось принять решение использовать данные, которые действительно появились на нескольких сайтах: американский язык жестов.

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

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

Модель

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

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

ImageNet - это большая база данных, содержащая более 14 миллионов изображений, содержащих более 20000 категорий и 1000 классов в усеченной версии. С этим набором данных было обучено несколько моделей, которые стали способными понимать очень абстрактные и творческие части изображений. Нам пришлось воспользоваться этими функциями. Этот процесс известен в сообществе как «Извлечение функций». Просто возьмите предварительно обученную модель без верхних слоев, заморозьте модель, добавьте наши верхние слои, указав, сколько классов мы хотим классифицировать, и обучите ее с помощью нашего набора данных. Это казалось хорошей идеей, но, опять же, в реальном времени это было не так хорошо, как мы хотели.

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

Именно тогда мы решили применить «Тонкую настройку», еще один метод, очень часто используемый в Глубинном обучении. Мы решили заморозить только первые 6 слоев VGG19 и обучить остальные вместе с нашими верхними слоями с нашим набором данных.

С другой стороны, но в то же время, набор данных претерпевал несколько изменений. Мы поняли, что исходный набор данных был слишком плохим, затем мы поставили себе задачу получить изображения с помощью нашей собственной камеры, мы смешали их с исходным набором данных и использовали эту смесь изображений для установки Image Data Generator включая некоторые преобразования, такие как диапазоны сдвига, сдвиги ширины и высоты и т. д.

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

Мы открыты для получения отзывов о нашей первоначальной работе, потому что в настоящее время мы разрабатываем ее для будущего лучшего приложения, которое могло бы помочь другим. У нас также есть открытый код на github по этой ссылке:



Мы - Элиза Кабана (Twitter), Джессика Костозо, Хорди Виадер (LinkedIn) и Мигель Гальего (GitHub) с помощью Карлоса Сантаны (Youtube). Мы надеемся, что однажды технологии будут использоваться, чтобы убрать препятствия с пути тех, кто нуждается в нашей помощи, потому что препятствие для некоторых на самом деле является потерей для всех.