Часть 1
Привет, меня зовут Ярослав, мне 8 лет и Владимир, мне 12 лет. Мы изучаем программирование и сегодня расскажем как мы обучили нейросеть определять жанр игры по скриншоту.
Наш папа поставил перед нами задачу — для сайта о компьютерных играх создать программу, которая будет автоматически создавать описания для картинок-скриншотов.
Например описание к такому скриншоту:

У нас была подсказка — в описании к картинке нужно упомянуть жанр игры но не обязательно использовать ее название.
Чтобы решить эту задачу мы попросили ChatGPT составить план работы и вот что он предложил:
Для написания программы, которая анализирует скриншот из игры и определяет ее жанр, требуется использовать методы компьютерного зрения и машинного обучения.
Ниже приведен пример возможного алгоритма для создания такой программы:
* Собрать и подготовить набор данных, состоящий из скриншотов игр разных жанров и размеченных меток жанра для каждого изображения.
* Обучить модель машинного обучения, используя этот набор данных, чтобы она могла классифицировать изображения на различные жанры.
* Написать программу, которая принимает скриншоты игры и подает их на вход модели машинного обучения.
* Модель будет классифицировать скриншот и возвращать жанр игры.
* Использовать полученную информацию о жанре игры для вывода результата анализа пользователю.
Важно отметить, что для создания такой программы потребуется использовать библиотеки машинного обучения и компьютерного зрения, такие как TensorFlow, Keras, OpenCV и др. Также, для получения наиболее точных результатов, необходимо обеспечить модель достаточным количеством данных для обучения.
Мы приступили к выполнению.
1. Собрать и подготовить набор данных, состоящий из скриншотов игр разных жанров и размеченных меток жанра для каждого изображения.
Для подготовки картинок наш заказчик (наш папа) посоветовал использовать браузер Firefox и плагин «Download All Images». Список жанров для игр мы тоже попросили составить ChatGPT:
- Экшен (Action)
- Аркады (Arcade)
- Приключения (Adventure)
- Ролевые игры (Role-playing games, RPG)
- Симуляторы (Simulator)
- Стратегии (Strategy)
- Спортивные игры (Sports)
- Гонки (Racing)
- Шутеры (Shooter)
- ММОРПГ (Massively multiplayer online role-playing game)
- Симуляторы жизни (Life simulation)
- Головоломки (Puzzle)
- Инди (Indie)
- Тактические игры (Tactical)
- Визуальные новеллы (Visual Novel)
- Квесты (Quest)
- Стелс-экшен (Stealth-action)
- Файтинг (Fighting)
- Карточные игры (Card games)
- Музыкальные игры (Music games)
- Виртуальная реальность (Virtual reality, VR)
- Мобильные игры (Mobile games)
Заказчик посоветовал добавить еще один пункт «Это не скриншот» для тех случаев когда на картинке не скриншот игры.
Мы по очереди 22 раза вводили на сайте Yandex в разделе поиска по картинкам такие запросы «Спортивные игры (Sports) screenshot» и сохраняли результаты нажав на иконку плагина «Save All Images». в итоге получили 22 архива с набором по примерно 300 картинок в каждом. 23 запрос сделали «разные картинки» и тоже сохранили их.
Затем по совету заказчика мы пошли на сайте Teachable Machine и выбрали раздел обучения нейросети по изображениям. Там мы добавили 23 новых класса по названиям жанров игр:

По плану далее нужно «Обучить модель машинного обучения, используя этот набор данных, чтобы она могла классифицировать изображения на различные жанры«. В Teachable machine мы просто нажимаем кнопку «Train model» и ждем. Обучение заняло примерно 4 минуты и в правой части экрана мы стали нажимать на «Choose image…» и проверять как наша нейросеть определяет жанр игры:

Ответы программа дает вот в таком виде:

Результаты были плоховатые. Жанр большинства игр определялся как Виртуальная реальность (Virtual reality, VR). Заказчик посоветовал проверить картинки для этого жанра. Мы проверили и оказалось что там почти все картинки это фотографии в очках вирутальной реальности, а не скриншоты из игр. Мы решили просто удалить этот жанр и обучить модель заново.
Вторая версия работает здорово! Вот примеры определения жанров:




Мы не знаем что значит Аркада и спросили у ChatGPT, вот его ответ:
Жанр игр «Аркада» (Arcade) обычно описывает игры, которые были разработаны для простых и быстрых игровых сессий с небольшим количеством правил и контролей. Они обычно имеют низкий порог входа и не требуют от игроков большого количества времени на обучение. Игры в жанре «Аркада» могут быть различных типов: от платформеров и шутеров до головоломок и спортивных игр.

Plants VS Zombie — Аркады (Arcade) и Головоломки (Puzzle)


Мафия 2 определилась как гонки
Очень хорошие результаты!
Мы сделали нашу нейросеть доступной для всех, можете сами проверить ее работу по ссылке: https://teachablemachine.withgoogle.com/models/BoZDOJAiM/ (Лучше работает с компьютера, а не телефона).
Половина задачи решена. В следующий раз мы напишем программу на языке программирования JavaScript. Эта программа будет создавать описание для скриншотов используя ответы от нашей нейросети
Всем спасибо!
начинающие разработчики Владимир и Ярослав Безызвестных