/rsl_aij2023

AI Journey 2023: Russian Sign Language Recognition (Equal AI Track)

Primary LanguageJupyter Notebook

Equal AI

Logo

Распознавание русского жестового языка 🧏

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

Лучшими методами для распознавания жестового языка являются нейронные сети на основе сверточных подходов (CNN) и трансформеров (Vision Transformers), такие как I3D-ResNet, VideoSWIN и VIT для задач видео, которые принимают на вход последовательность кадров и сопоставляют им класс.

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

Постановка задачи 📚

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

В качестве данных для обучения моделей будет предоставлен датасет Slovo, состоящий из 20000 видео, разделенный на 1000 классов (по 20 видео на класс), представляющих из себя часто используемые слова и фразы русского жестового языка, включая отдельные буквы и цифры. Каждое видео было размечено временным интервалом — начало и конец жеста в видео. 194 носителя РЖЯ участвовали в записи видео. Данные представлены в виде zip архива, каталог состоит из 20000 файлов видео, а также файла разметки в формате таблицы. Таблица разметки состоит из колонок:

attachment_id user_id width height length text begin end
0 de81cc1c-... 1b... 1440 1920 14 привет 30 45
1 3c0cec5a-... 64... 1440 1920 32 утро 43 66
2 d17ca986-... cf... 1920 1080 44 улица 12 31
attachment_id — имя видео файла без расширения
text — текст жеста
user_id — идентификатор пользователя, записавшего жест
height — количество пикселей по высоте
width — количество пикселей по ширине
length — количество кадров в видео
begin — номер кадра начала жеста
end — номер кадра конца жеста

Можно использовать стандартные аугментации изображений для улучшения метрики. Однако, использование любых других открытых или закрытых наборов данных, а также синтетических датасетов для решения задачи запрещено. Приватный обмен идеями (private sharing), решениями и кодом за пределами одной Команды Участников — запрещен. В случае обнаружения этого факта, все причастные решения аннулируются.

Решение должно быть реализовано в виде программы (solution.py), которая принимает на вход каталог с видео (dataset) и на выходе выдает CSV-файл (predicts.csv) с колонками: имя видео файла (attachment_id) без учета расширения файла и предсказанный класс жеста (predicted_class). Публичные и приватные тестовые данные будут также содержать видео без жестов, предложенная модель должна верно их обрабатывать.

Формат решения 🚀

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

Участникам из призовых мест потребуется дополнительно упаковать в архив весь код, содержащий процесс обучения модели, инференса (валидации) модели и лучший чекпоинт весов модели, а также описанный процесс запуска для каждой стадии в файле readme.md для проверки воспроизводимости решения. Также необходимо указать список используемых библиотек и версию python в файле requirements.txt. Эти артефакты передаются организаторам соревнования от всех участников, занявших призовые места.

Описание метрики задачи Equal AI 📈

В качестве метрики качества для этого соревнования используется средняя метрика попадания или средняя точность — Mean Accuracy (mAcc). mAcc равна средней точности оценок для каждого класса по всей выборке:

$$ mAcc = \dfrac{1}{N}\sum_{i=0}^{N-1}\dfrac{TP_i}{TN_i + FN_i} $$

В этой формуле: mAcc — средняя точность, TP (True Positive) — правильно предсказанные положительные ответы, FN (False Negaive) — ложноотрицательные ответы, N — число классов. Высокое значение оценки показывает, что модель хорошо справляется с задачей классификации в среднем для всех классов. Значение метрики будет округлено до 5 знака после запятой. В случае одинакового значения метрики позиция в рейтинге будет выше у того решения, которое было раньше загружено на платформу.

Псевдокод расчета метрики:

import numpy as np
from sklearn.metrics import confusion_matrix

def mean_class_accuracy(predicts: list[int], labels: list[int]) -> np.ndarray:
    """Calculate mean class accuracy.

    Args:
        predicts (list[int]): Prediction labels for each class.
        labels (list[int]): Ground truth labels.

    Returns:
        np.ndarray: Mean class accuracy.
    """

    conf_matrix = confusion_matrix(y_pred=predicts, y_true=labels)

    cls_cnt = conf_matrix.sum(axis=1) # all labels
    cls_hit = np.diag(conf_matrix) # true positives

    metrics = [hit / cnt if cnt else 0.0 for cnt, hit in zip(cls_cnt, cls_hit)]
    mean_class_acc = np.mean(metrics)

    return mean_class_acc

Ограничения ⚠️

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

  • 32 ГБ оперативной памяти
  • 2 vCPU
  • 1 GPU Tesla V100
  • время на выполнение решения: 90 минут
  • решение не имеет доступа к ресурсам интернета
  • максимальный размер упакованного и распакованного архива с решением: 10 ГБ
  • максимальный размер используемого Docker-образа: 30 ГБ

Ограничения моделей 💻

В рамках конкурса будут учитываться только те модели, которые не выходят за рамки данных ограничений:

  • Модель должна быть одностадийной (содержит одну нейронную сеть)
  • Модель должна предсказывать класс 0, если на видео нет жеста
  • Модель принимает на вход только кадры из видео, без дополнительной мета-информации
  • Разрешение входных кадров не должно быть меньше 224✕224 и не более 448✕448 пикселей
  • Веса модели имеют формат FP32 или FP16
  • Файл весов модели не превышает 100 МБ
  • Модель принимает на вход не менее 1 и не более 32-х кадров за раз
  • Время работы модели не должно превышать половины от количества входных кадров $ms<\dfrac{33.333⋅N}{2}$ , где N — количество входных кадров, ms — время работы в миллисекундах на CPU

Ограничения на данные 📚

Для обучения мы предоставляем датасет Slovo без разделения на train, val и test выборки, но вы можете их сформировать, если это потребуется. Можно использовать любые аугментации данных, но требуется соблюдать некоторые ограничения:

  • Обучение нейронной сети происходит только на исходном датасете Slovo (20000 видео).
  • Использовать индексы классов можно только из предоставленного файла разметки.
  • Использовать любые другие открытые датасеты запрещено.

Содержимое контейнера 🛢

Для запуска решений можно использовать существующие окружения: Базовые образы для задач обучения.

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

Призовой фонд 🏆

  • 🥇 1 место - 1 000 000 рублей;
  • 🥈 2 место - 700 000 рублей;
  • 🥉 3 место - 300 000 рублей.

*До вычета НДФЛ