Акшай Бахадур

Простая реализация 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.

Полный набор данных, разделенный по категориям

Вот что я сделал:

Я зашел на облачную платформу Google здесь. Страница будет выглядеть так.

Я загрузил файлы .npy для каждого из рисунков, которые хотел. Этикетки включали:

  1. Яблоко 🍎
  2. Бабочка 🎀
  3. Свеча 🕯️
  4. Дверь 🚪
  5. Конверт ✉️
  6. Рыба 🐟
  7. Гитара 🎸
  8. Мороженое 🍦
  9. Молния ⚡
  10. Луна 🌛
  11. Гора 🗻
  12. Звезда ⭐️
  13. Палатка ⛺️
  14. Зубная щетка 🖌️
  15. Наручные часы ⌚️

Настройка среды

Теперь у нас есть файлы .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

Этот код теперь объединен с официальным репозиторием Google на GitHub. [Вытягивающий запрос]

Вывод

Поздравляем, вы успешно создали прототип для Quick, Draw.

Сделано с ❤️ и 🦙 Акшаем Бахадуром