У меня была задача для стартапа, цель которой заключалась в обнаружении карт на доске Hearthstone с помощью сверточной модели. Поскольку у меня не было доступного графического процессора, я решил использовать трансферное обучение с некоторой тонкой настройкой, чтобы избежать обучения новой модели. Цель этой статьи — рассказать о моем подходе к решению этой проблемы. Я не буду подробно объяснять различные части.

Создание набора данных

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

Я использовал видео чемпионата мира по Hearthstone, из которого извлек 20 изображений для тренировочного набора и 6 для тестового набора. Я понимаю, что количество изображений невелико, но это было только для того, чтобы понять, работает ли моя модель.

Примечание. Чтобы сделать обучение менее затратным в вычислительном отношении, я решил уменьшить размер изображений, так как исходные изображения имели размер 1920 x 1080 пикселей. Я удалил игроков на изображениях, так как они бесполезны для нашего обнаружения карт.

Трансферное обучение

После обрезки изображений я выполнил этап обучения переносу. Для этого я использовал Tensorflow, его API для обнаружения объектов и модель SSD: Single Shot MultiBox Detector, обученную на наборе данных COCO. Я выбрал модель SSD, потому что основным ограничением было наличие модели, работающей в режиме реального времени. Основная сила этой модели заключается в том, что она работает в режиме реального времени, поскольку выполняет однократное обнаружение ограничивающей рамки в 3D.

Прогноз

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

Заключение

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

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

Вы можете связаться со мной в Твиттере @_stephenCS или зайти на мой веб-сайт, если хотите связаться со мной по электронной почте.