Робот Стив II — Глаза

Автор Райан Уокер

Есть только одна вещь, которую биологический Стив любит больше еды: играть со своей девушкой Мисо. Чтобы подражать такому поведению, Робостиву понадобится способ идентифицировать собак, еду и другие объекты, представляющие интерес, и глубокая нейронная сеть должна помочь. В этом посте будет представлен общий обзор архитектуры и реализации Tensor RT на Nvidia TX1.

Некоторое время назад я разработал обзорную диаграмму системы того, как я буду формировать ИИ Стива.

На очень высоком уровне: входные данные (как окружающая среда стимулирует Робостива) подаются в «мозг», «мозг» принимает решения на основе этих входных данных и генерирует какой-то результат (как Робостив собирается стимулировать окружающую среду). ). В этой блок-схеме нет необходимости вставлять обратную связь от выходов к входам, поскольку среда по своей сути является обратной связью.

Я мог бы написать страницы о других элементах систем, обо всем, от обработки естественного языка до управления двигателем постоянного тока, но, как я уже сказал выше, этот пост находится в нейронной сети классификатора изображений.

Я потратил некоторое время на поиски того, как это реализовать быстро, и наткнулся на хакерскую золотую жилу: кто-то уже сделал 90% работы, меня не очень удивляет, что Nvidia собрала проект, который действительно хвастается. их оборудование.

Клонировать репозиторий на TX1 и компилировать было очень просто, я решил продолжить работу со встроенной камерой, чтобы все было просто с самого начала. Были некоторые первоначальные проблемы с работой камеры, но копаться в ней не было чем-то, что можно было бы исправить с помощью пары строк кода. Проект был очень хорошо собран, внесение изменений в исходный код и перекомпиляция прошли безболезненно.

Сеть была предварительно обучена, и, прежде чем приступить к переобучению, я попробовал ее со стандартной обученной сетью. Поскольку это был просто дневной проект, я не проводил много исследований раньше, поэтому не знал, чего ожидать, результат был действительно потрясающим. Он не только может классифицировать «собаку» от «кошки», он может классифицировать определенные породы собак и кошек, а точнее различные породы корги!! Этого будет более чем достаточно для Робостива…

Было ровно тысячу различных «вещей», которые могла классифицировать эта конкретная сеть, после чего я составил небольшой список возможных эмоций, которые мог испытывать Робостив:

  • Злой
  • Голодный
  • Игривый
  • Грустный
  • Напугана

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

Будучи «юниксом», я просто взял все классифицированные в реальном времени объекты, которые преодолели определенный порог достоверности, и поместил их в файл. Создав быстрый скрипт Python, сравнивающий содержимое файла, теперь можно создать текущие эмоции Робостива и поместить их в еще один файл. К нему можно получить доступ из любого другого приложения, это служит для модульности дизайна, обеспечивая доступ из любого места на уровне приложения.

Тогда возникает вопрос, как долго длятся эмоции собаки? Минуты? Часы? Дни? Я начал со времени обнуления 10 минут, то есть каждые 10 минут Робостив возвращается к своей «нейтральной» эмоции.

Другой сценарий меняет лицо Робостива (ниже) в зависимости от его эмоций. На экране также есть динамик, позволяющий Робостиву лаять, рычать и (надеюсь, не плакать).

Я предполагаю, что следующим шагом будет рендеринг плавающей собачьей головы в OpenGL, отражающий все эмоции плавным и более реалистичным образом.

В конце концов, это было действительно классное упражнение: понять некоторые высокоуровневые реализации машинного зрения и применить их к офисному роботу-собаке.