Привет, это 3-я часть из 3-х частей, для лучшего понимания, пожалуйста, прочтите мои первую и вторую статьи здесь:





В части 3 мы возьмем модель, которую мы построили в частях 1 и 2, и исследуем, как реализовать ее на Raspberry Pi 3.

Контент

  1. Введение: настройка Raspberry Pi 3
  2. Загрузка моделей и реализация
  3. Заключение
  4. использованная литература

Введение: настройка raspberry pi3

Raspberry Pi - это недорогой микрокомпьютер, который можно подключить к монитору компьютера или телевизору вместе с клавиатурой и мышью, чтобы имитировать полноценный опыт работы с ПК.

Это способные маленькие устройства, которые позволяют разработчикам исследовать вычисления и учиться программировать на таких языках, как Python. Он способен делать все, что вы ожидаете от настольного компьютера. Вот спецификации Raspberry Pi 3 (B + и выше), которые я рекомендую для этого проекта, вместе с другими компонентами.

  • Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-битная SoC @ 1,4 ГГц
  • 1 ГБ LPDDR2 SDRAM
  • Беспроводная локальная сеть 2,4 ГГц и 5 ГГц IEEE 802.11.b / g / n / ac, Bluetooth 4.2, BLE
  • Gigabit Ethernet через USB 2.0 (максимальная пропускная способность 300 Мбит / с)
  • Расширенный 40-контактный разъем GPIO
  • 4 порта USB 2.0
  • Полноразмерный HDMI
  • Порт камеры CSI для подключения камеры Raspberry Pi
  • Порт дисплея DSI для подключения сенсорного дисплея Raspberry Pi
  • 4-полюсный стереовыход и композитный видеопорт
  • Порт Micro SD для загрузки операционной системы и хранения данных.
  • Вход питания 5 В / 2,5 А постоянного тока
  • Поддержка Power-over-Ethernet (PoE) (требуется отдельная PoE HAT)

Другие типы плат для разработчиков Raspberry Pi, которые вы можете попробовать использовать, можно найти здесь.

Чтобы Raspberry Pi работал полностью как мини-компьютер, вам понадобится следующее:

  1. Карта Micro SD с NOOBS (32 ГБ).
  2. Блок питания Micro USB (2,1 А).
  3. Телевизор или монитор и кабель HDMI.
  4. Клавиатура и мышь.
  5. Камера Raspberry Pi 3.

Следующие ниже справочные блоги помогут показать, как установить NOOBS и настроить Raspberry Pi.





Интерфейс raspberry pi при запуске выглядит как на скриншоте выше.

Чтобы реализовать модель на Raspberry Pi, мы можем скопировать следующие файлы и сохранить их как папку на рабочем столе Pi; самые последние данные контрольных точек и файлы saved_model.pb, pipeline.config и label_data.pbtxt. Я назвал папку effectiveDet.

Прежде чем мы приступим к запуску модели, нам нужно настроить TensorFlow, Keras, OpenCV и API обнаружения объектов TensorFlow на нашем Raspberry Pi.

Следующие команды могут быть выполнены через терминал для правильной установки TensorFlow, Keras и OpenCV. Обязательно выполните одно за другим:

#install numpy and matplotlib
sudo apt-get update
sudo apt-get dist-upgrade
pip3 install numpy 
pip3 install matplotlib

#Install tensorflow
pip3 install tensorflow==2.2.0 #ensure you install the lastest version of tensorflow
sudo apt-get install libatlas-base-dev
sudo pip3 install pillow lxml jupyter matplotlib cython
sudo apt-get install python-tk
#Install opencv
sudo apt-get install libjpeg-dev libtiff5-dev libjasper-dev libpng12-dev
sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev
sudo apt-get install libxvidcore-dev libx264-dev
sudo apt-get install qt4-dev-tools libatlas-base-dev
sudo pip3 install opencv-python
#install Keras
sudo pip3 install keras

Теперь, когда у нас установлены TensorFlow, Keras и OpenCV, приступим к настройке API обнаружения объектов. Protobuf помогает нам это настроить, поэтому нам нужно скомпилировать и установить protobuf.

Если это вас не устраивает, значит, у вас проблемы с вашим proto.exe файлом; вам может потребоваться выполнить эти инструкции по компиляции и установке protobuf, которые объясняются здесь.

Выполните этот ниже код из исходного терминала, шаг за шагом:

sudo apt-get install protobuf-compiler
#Set up TensorFlow Directory Structure and PYTHONPATH Variable
mkdir tensorflow1
cd tensorflow1
git clone --depth 1 https://github.com/tensorflow/models.git
sudo nano ~/.bashrc
#move to the end of the line and add this.
export PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow1/models/research:/home/pi/tensorflow1/models/research/slim 
#save and exit
#install protobuf
cd /home/pi/tensorflow1/models/research
protoc object_detection/protos/*.proto --python_out=.
cd /home/pi/tensorflow1/models/research/object_detection

Если вы не получаете сообщения об ошибке, это означает, что object_detection API был успешно установлен. Следующим шагом будет скопировать приведенный ниже код и сохранить как файл с именем test.py; теперь откройте терминал и запустите Python3 test.py. Обязательно выполняйте прямо из каталога /home/pi/tensorflow1/models или в папке рабочего стола, которую мы создали ранее (effectiveDet):

Загрузка моделей и реализация

В этом разделе мы соберем код, чтобы мы могли загрузить модель и запустить ее в реальном времени на Raspberry Pi. Но прежде чем мы перейдем к этой реализации, давайте сначала рассмотрим несколько строительных блоков, которые нам нужно настроить.

Прежде всего, нам нужно активировать нашу камеру. Для этого откройте командную строку и выполните следующее:

sudo raspi-config

С помощью клавиш курсора выберите и откройте Interfacing Options, а затем выберите Camera . F следуйте подсказке, чтобы включить камеру.

Теперь давайте протестируем нашу камеру, транслируя прямую трансляцию с поля камеры Raspberry Pi. Мы можем сделать это с помощью OpenCV.

Вот фрагмент кода, который включает камеру и отображает то, что она снимает, в режиме реального времени. Вы можете сохранить его как camera_testing.py файл в папке на рабочем столе (effectiveDet) и запустить этот файл Python с терминала:

python3 camera_testing.py

Теперь еще одна вещь - нам нужно сохранить результаты предсказания обнаружения объектов в реальном времени из поля видео. Чтобы сохранять каждую сессию из поля камер на локальный диск, необходимо добавить записывающее устройство, что мы видим в фрагменте кода ниже:

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

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

Следующим шагом является создание нового файла Python, содержащего следующий фрагмент кода, в папке рабочего стола (effectiveDet) и назовите его real_time.py.

Теперь, когда все инициализировано, нам нужно встроить модель для прогнозирования в реальном времени из поля камеры. Мы делаем это, объединив два сценария (camera_testing.py и real_time.py) в один сценарий (real_time.py). Теперь файл real_time.py будет изменен на фрагмент кода ниже:

Следующий шаг - запустить это, скопировав все содержимое папки рабочего стола (effectiveDet) в этот каталог (/home/pi/tensorflow1/models) и затем открыв терминал для запуска python3 real_time.py.

В качестве альтернативы мы можем запустить файл Python прямо из папки рабочего стола (effectiveDet) в терминале. Любой способ должен работать - если один не работает из-за проблем с установкой, вы можете попробовать другой.

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

Заключение

Это подводит нас к завершению нашей сквозной реализации EfficientDet на Raspberry Pi 3.

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

Мы можем решить эту проблему, увеличив количество классов с 2 до 3. Мы можем пометить этот третий класс объектов как others (все, что не является перцем или луком). Это поможет нам устранить предубеждения в нашей модели.

Спасибо за чтение - поделитесь с друзьями!

использованная литература

  1. Https://www.raspberrypi.org/products/raspberry-pi-3-model-b/
  2. Https://www.raspberrypi.org/help/what-%20is-a-raspberry-pi/
  3. Https://piguide.dev/2019/03/11/easy-guide-to-installing-noobs-raspberry-pi.html
  4. Https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up
  5. Https://github.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi
  6. Https://www.raspberrypi.org/documentation/faqs/
  7. Https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/
  8. Https://www.raspberrypi.org/documentation/configuration/camera.md
  9. Https://www.raspberrypi.org/products/

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

Независимая редакция, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.

Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.