Глубокое обучение и Raspberry PI |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2016-12-23 20:31 «Что у нас есть?» — спросил горбоносый поворачиваясь. Недавно я решил заняться изучением глубокого обучения. На работе мне выдали новую карточку с поддержкой CUDA и шеф выразил пожелание что эта вершина инженерной мысли позволит нашей лаборатории сделать рывок вперёд, ну или по крайней мере, не отстать от массы конкурентов. У меня уже был некоторый опыт общения с Tensor Flow, но в этот раз я решил попробовать Torch. Привлекало что он написан на языке Lua и C, является достаточно легковесным и легко расширяемым через FFI. И ещё мне не нравится Python. Недавно на Хабрахабр я наткнулся на статью, в процессе обсуждения которой я вспомнил что где-то в тумбочке у меня пилится Raspberry Pi, модель B+ и мне захотелось посмотреть — а смогу ли я поднять на ней torch и запустить что-нибудь несложное. Естественно первым делом я захотел посмотреть как на моем десктопе с новой карточкой GPU будет тренироваться alexnet и другие известные сети. На гитхабе есть небольшой проект в котором несколько популярных сетей реализованы на Torch. Поигравшись с ними, я перешёл на решение своих задач, но про них я тут говорить не буду. А теперь переходим к малинке (Raspberry PI модель B+). Установка Копируем инсталлятор torch на малинку:
Первым делом, я решил что мне не хочется ждать пока стандартный установщик Torch скомпилирует OpenBLAS и установит QT со всеми зависимостями, поэтому я решил проделать это вручную:
Запускаем компиляцию torch:
У меня компиляция всего занимает примерно час. — А что это там у вас за лампа? — подозрительно спросил Фарфуркис. [1] И тут нас ждёт первый облом: создатели torch: не предполагали что его будут компилировать на архитектуре arm, но без поддержки NEON:
Пришлось пофиксить это дело. И после этого, всё заработало! Если вам лень делать это всё самому и хочется быстро попробовать пример, я сделал архив с пред-компилированным torch для Raspberry PI -B (без поддержки NEON): https://github.com/vfonov/deep-pi/releases/download/v1/torch_intstall_raspbian_arm6l_20161218.tar.gz, распаковывается в /home/pi Тестирование Для проверки я решил посмотреть скорость тренировки распознавания рукописных цифр MNIST, соответствующий пример есть в наборе демок для Torch:
В общем неплохо, для сравнения — на десктопе с i5-4590 CPU @ 3.30GHz, без использования GPU:
Т.е в этом примере малинка работает примерно в 5 раз медленнее чем современный десктоп. Распознавания изображений одушевлённый теперь «Алдан» иногда печатал на выходе: «Думаю. Прошу не мешать» [1] Теперь настал черёд заставить малинку распознавать изображения с помощью натренированной googlenet. Тут меня ждал второй подвох: в Alexnet такое огромное количество параметров, что памяти малинки уже не хватает. Но тут на выручку приходит squeezenet и Network-in-Network, автор последней даже сделал натренерованную модель в формате для torch. Для начала надо преобразовать модель так чтобы её можно было использовать на архитектуре ARM (тренировать на Raspberry PI не стоит — результаты будут готовы лет через сто). На десктопе надо загрузить модель в бинарном формате torch, и записать в формате ‘ascii’, потом на малинке — преобразовать обратно: Desktop:
Raspberry PI:
Версию для arm можно загрузить тут. Я сделал маленький скриптик для проверки работоспособности на малинке:
И вуаля, запускаем с изображением из тестового набора ImageNET:
T.e за 14 сек малинка удачно справилась с процедурой распознавания образов! Настало время сделать пример поинтересней: приделываем интерфейс к камере из пакета camera и веб интерфейс из пакета display, и у нас получается интерактивная машина, раз в 14 секунд объявляющая миру что она видит. Надо только установить пакет для работы с камерой (luarocks install camera) и для визуализации через веб-интерфейс (luarocks install display). Полный текст тут.
Перед запуском надо запустить демона из пакета display: Испытания Тестовая установка:
Результат:
Заключение Итак у нас получилась недорогая машинка для распознавания образов, которой вы можете порадовать ваших друзей во время новогодних праздников. Естественно, задача классификации изображения может быть заменена на что-то более продуктивное, например можно легко сделать систему для идентификации человека по физиономии, несколько примеров есть тут или можно идентифицировать фигуры людей на камере наблюдения за вашим огородом. Для оптимизации производительности можно попробовать использовать nnpack, или даже сделать интерфейс к векторному ускорителю встроенному в процессор малинки как тут. Примечания: Цитаты из "Понедельник начинается в субботу" и "Сказка о тройке" А. и Б. Стругацких. Источник: geektimes.ru Комментарии: |
|