Привет, это 3-я часть из 3-х частей, для лучшего понимания, пожалуйста, прочтите мои первую и вторую статьи здесь:
В части 3 мы возьмем модель, которую мы построили в частях 1 и 2, и исследуем, как реализовать ее на Raspberry Pi 3.
Контент
- Введение: настройка Raspberry Pi 3
- Загрузка моделей и реализация
- Заключение
- использованная литература
Введение: настройка 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 работал полностью как мини-компьютер, вам понадобится следующее:
- Карта Micro SD с NOOBS (32 ГБ).
- Блок питания Micro USB (2,1 А).
- Телевизор или монитор и кабель HDMI.
- Клавиатура и мышь.
- Камера 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 opencvsudo 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 Variablemkdir 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 protobufcd /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
(все, что не является перцем или луком). Это поможет нам устранить предубеждения в нашей модели.
Спасибо за чтение - поделитесь с друзьями!
использованная литература
- Https://www.raspberrypi.org/products/raspberry-pi-3-model-b/
- Https://www.raspberrypi.org/help/what-%20is-a-raspberry-pi/
- Https://piguide.dev/2019/03/11/easy-guide-to-installing-noobs-raspberry-pi.html
- Https://projects.raspberrypi.org/en/projects/raspberry-pi-setting-up
- Https://github.com/EdjeElectronics/TensorFlow-Object-Detection-on-the-Raspberry-Pi
- Https://www.raspberrypi.org/documentation/faqs/
- Https://www.raspberrypi.org/products/raspberry-pi-3-model-b-plus/
- Https://www.raspberrypi.org/documentation/configuration/camera.md
- Https://www.raspberrypi.org/products/
Примечание редактора: Heartbeat - это онлайн-публикация и сообщество, созданное авторами и посвященное предоставлению первоклассных образовательных ресурсов для специалистов по науке о данных, машинному обучению и глубокому обучению. Мы стремимся поддерживать и вдохновлять разработчиков и инженеров из всех слоев общества.
Независимая редакция, Heartbeat спонсируется и публикуется Comet, платформой MLOps, которая позволяет специалистам по обработке данных и группам машинного обучения отслеживать, сравнивать, объяснять и оптимизировать свои эксперименты. Мы платим участникам и не продаем рекламу.
Если вы хотите внести свой вклад, отправляйтесь на наш призыв к участникам. Вы также можете подписаться на наши еженедельные информационные бюллетени (Deep Learning Weekly и Comet Newsletter), присоединиться к нам в » «Slack и подписаться на Comet в Twitter и LinkedIn для получения ресурсов, событий и гораздо больше, что поможет вам быстрее и лучше строить модели машинного обучения.