TensorFlow Object Detection е мощна технология за разпознаване на различни обекти в изображенията, включително техните позиции. Обучените модели за откриване на обекти могат да се изпълняват на мобилни и крайни устройства, за да изпълняват прогнози наистина бързо. Използвах тази технология, за да създам демонстрация, в която колите и препятствията на Anki Overdrive се откриват чрез приложение за iOS. При откриване на препятствия колите се спират автоматично.

Вижте краткото видео (само 2 минути) за бърза демонстрация.

Тази снимка показва пистата с две коли и телефон и приложението за iOS, което рисува правоъгълници около обектите.

Имам „отворен код“ на GitHub. Репото включва две части:

  1. Обучен модел за задълбочено обучение за разпознаване на елементи в Anki Overdrive песни с приложение за iOS
  2. Документация как да обучавате модели за откриване на обекти TensorFlow

Инструкциите в README са доста подробни. По-долу е даден бърз преглед на основните стъпки, които можете да следвате, за да обучите моделите да откриват вашите собствени обекти.

1) Настройка на средата за разработка

Първо трябва да изтеглите обучения модел MobileNet, който е оптимизиран модел за мобилни устройства. Вместо обучение на нов модел от нулата, се използва трансферно обучение. По принцип последният слой на невронната мрежа се заменя с вашите собствени обекти.

За да се направи „настройката на средата за разработка“ възможно най-проста, са предоставени Docker контейнери.

2) Етикетиране на изображения

Докато за моделите за визуално разпознаване трябва да се предоставят само изображения и имената на категориите, етикетирането за откриване на обект е по-сложно. В допълнение към списъка с обекти трябва да предоставите и техните позиции. Използвах labelImg, за да създам етикетите и правоъгълниците, както е показано на екранната снимка.

От това, което прочетох, това са някои най-добри практики за създаване на данни за обучение:

  • Направете/получете поне 50 снимки на обект.
  • Използвайте доста малка резолюция, например 640 x 480.
  • Използвайте различни размери на вашите обекти и различни ъгли.
  • Използвайте картини, в които има множество обекти.
  • Когато маркирате обектите с labelImg, поставете правоъгълниците възможно най-близо около обектите.

Изображенията и анотациите, експортирани от инструмента labelImg, трябва да бъдат конвертирани в определен формат (TFRecords), който TensorFlow Object Detection очаква.

3) Обучение на модела

Обученията само с няколко тренировъчни стъпки могат да се провеждат „локално“. Това е полезно, например, ако искате да тествате дали кодът работи. Когато можете да използвате GPU, обученията с много стъпки също трябва да са възможни локално, но не съм го пробвал.

Използвах Kubernetes в облака на IBM, за да проведа обучението. 17 000 тренировъчни стъпки отнеха приблизително 1,5 дни. За да използвам и графичните процесори, искам да разгледам FfDL. Ще напиша блог за това, когато разбера повече. Ако искате да използвате IBM Cloud, можете да получите безплатен акаунт.

След обучението трябва да се създаде замразена графика на модела. Репото съдържа скрипт и Docker контейнер за това.

4) Използване на модела в преносими компютри и приложения

Обучителният модел може да бъде тестван с Python notebook. Екранната снимка показва откритите обекти в тестово изображение.

Репото също съдържа приложение за iOS, което намерих в GitHub.

Свързване на автомобилите и приложението за iOS към платформата Watson IoT

За да спрете автомобилите Anki Overdrive, когато телефоните са поставени на пистата, трябва да настроите допълнителни компоненти, особено контролера Node.js и Watson IoT Platform. За да направите това, следвайте инструкциите от моя проект node-mqtt-for-anki-overdrive.

Ето диаграма на архитектурата от високо ниво:

Следващата екранна снимка показва прост поток Node-RED, който спира автомобилите, когато бъдат открити препятствия.

Ако искате да стартирате тази демонстрация сами, имате нужда от Anki Overdrive Starter Kit и кода от GitHub.

Първоначално публикувано в heidloff.net на 17 септември 2018 г.