Акшай Бахадур
Простая реализация Google Quick, Draw Project для людей. Этот блог посвящен моей реализации набора данных Google Quick Draw.
Ссылка на Код.
Аннотация
Зарисовка! — это онлайн-игра, разработанная Google, которая предлагает игрокам нарисовать изображение объекта или идеи, а затем использует искусственный интеллект нейронной сети, чтобы угадать, что представляют собой рисунки. ИИ учится на каждом рисунке, повышая свою способность правильно угадывать в будущем. Игра похожа на Pictionary тем, что у игрока есть только ограниченное время для рисования (20 секунд). Понятия, которые он угадывает, могут быть простыми, например, нога, или более сложными, например, миграция животных. Эта игра — одна из многих простых игр, созданных Google и основанных на искусственном интеллекте в рамках проекта, известного как A.I. Эксперименты. "Зарисовка"
Требование
Самое главное в этой проблеме — получить набор данных. Набор данных Quick Draw представляет собой набор из 50 миллионов рисунков в 345 категориях, предоставленных игроками игры Quick, Draw. Рисунки были захвачены в виде векторов с временными метками, помечены метаданными, включая то, что игрока просили нарисовать и в какой стране он находился. Вы можете просмотреть распознанные рисунки на странице quickdraw.withgoogle.com/data.
Получение набора данных
Набор данных доступен в Google Cloud Storage в виде файлов ndjson, разделенных по категориям. Посмотрите список файлов в Облачной консоли или узнайте больше о доступе к общедоступным наборам данных другими способами. Например, чтобы легко загрузить все упрощенные чертежи, можно выполнить команду gsutil -m cp gs://quickdraw_dataset/full/simplified/*.ndjson.
Полный набор данных, разделенный по категориям
- Необработанные файлы (.ndjson)
- Упрощенные файлы чертежей (.ndjson)
- Бинарные файлы (.bin)
- Файлы растровых изображений Numpy (.npy)
Вот что я сделал:
Я зашел на облачную платформу Google здесь. Страница будет выглядеть так.
Я загрузил файлы .npy для каждого из рисунков, которые хотел. Этикетки включали:
- Яблоко 🍎
- Бабочка 🎀
- Свеча 🕯️
- Дверь 🚪
- Конверт ✉️
- Рыба 🐟
- Гитара 🎸
- Мороженое 🍦
- Молния ⚡
- Луна 🌛
- Гора 🗻
- Звезда ⭐️
- Палатка ⛺️
- Зубная щетка 🖌️
- Наручные часы ⌚️
Настройка среды
Теперь у нас есть файлы .npy. Давайте посмотрим, как мы должны загрузить его и сохранить как файлы рассола. Pickle — это сериализация и десериализация объектов. Я собираюсь сериализовать файлы .npy для обучения.
Загрузка данных
Поскольку у вас есть набор данных, как указано выше, поместите файлы .npy в папку /data.
Запустите приведенный выше скрипт. Я беру 10 000 изображений на образец и сохраняю функции и метки в респектабельном файле рассола.
Обучение
- Модель. Приведенная выше суть определяет модель, которую мы будем использовать.
- Слои. В модели есть два слоя пула свертки-макс, за которыми следуют полностью связанные слои и отсев.
- Выпадения. Они очень важны, так как вы не хотите переобучать свой тренировочный набор. Dropout заставляет вашу модель учиться на всех нейронах, а не только на некоторых из них, это помогает обобщать новые данные.
- Выход: выходной слой имеет активацию softmax, которая позволяет выходу быть одной из 15 меток, которые мы определили ранее.
- Оптимизатор: оптимизатор Адам.
- Эпохи : 3
- Пакет размер : 64
- Обратные вызовы: TensorBoard для визуализации.
- Сохранить и загрузить: я сохраняю модель («QuickDraw.h5») после каждого пакета, чтобы позже делать прогнозы по обученной модели.
Визуализация
Показатели
В конце обучения моя точность составляет около 90% на тренировочном наборе, а наша потеря составляет около 0,4, что довольно впечатляет. Тестовый набор также имеет аналогичную точность (около 92%). Мы явно не переобучаем данные, что всегда является хорошим признаком.
Создание приложения
Теперь у нас все готово. Давайте создадим приложение, которое использует веб-камеру, чтобы помочь вам «рисовать» каракули на экране.
Это приложение, которое я написал.
- Веб-камера: я использую веб-камеру для прямой трансляции с веб-камеры. Обратите внимание, что Lower_green и Upper_green — это два массива numpy, которые хранят интенсивность пикселей нижнего и верхнего диапазона синего цвета.
- Фильтры: я отфильтровываю только синий цвет из изображения, используя эти 2 пустых массива и несколько фильтров и масок.
- Рисование: после этого я прослеживаю путь объекта синего цвета на экране и отправляю его для предсказания. В заключение я держу в руке объект синего цвета и прослеживаю путь этого объекта, чтобы нарисовать его на экране.
- Прогноз . Затем рисунки отправляются в модель для прогнозирования.
Этот код теперь объединен с официальным репозиторием Google на GitHub. [Вытягивающий запрос]
Вывод
Поздравляем, вы успешно создали прототип для Quick, Draw.
Сделано с ❤️ и 🦙 Акшаем Бахадуром