- BrainTools - https://www.braintools.ru -
Сегодня я хочу показать и рассказать вам, как, подключив к ESP32-S3 тепловизионную матрицу MLX90640, можно запустить веб-сервер для стриминга теплового изображения с определением в реальном времени того, какие сущности попали в поле зрения [1] тепловизора.
В моём случае была обучена свёртончная нейронная сеть для классификации трёх сущностей в инфракрасном спектре: кошки, человека или же отсутствия двух предыдущих.
Данная система является полностью автономной, и инференс TensorFlow Lite-модели происходит прямо на борту микроконтроллера.
📹VK: https://vkvideo.ru/video-229753773_456239024 [2]
📂 [3]GitHub: https://github.com/DenissStepanjuk/ESP32.MLX90640.Classification_with_TensorFlowLite [4]
Первый этап – собрать набор данных, на котором будет обучена нейросеть для классификации сущностей. Тепловизионная матрица MLX90640 представляет собой матрицу 24×32 пикселя из 768 инфракрасных датчиков. Каждый из датчиков измеряет температуру в своей точке поля зрения [5], благодаря чему два раза в секунду от MLX90640 по интерфейсу I2C можно получить полноценное тепловое изоброжение окружающего пространства.
В репозитории на GitHUB реализован скетч “01_MLX90640_collect_dataset [6]“, который реализует стриминг теплового изображения с матрицы MLX90640, благодаря чему тепловизор можно корректно навести на интересующий обьект и прозвести захват изображения.
Для обучения [7] свёрточной нейросети потребуется собрать как минимум около 50 снимков на каждую категорию: человек, кошка и пустота.
В репозитории на GitHUB есть ноутбук “MLX90640-CNN-TFL.ipynb [8]“, в котором полностью реализован процесс обучения нейросети средствами библиотеки глубокого обучения TensorFlow, тут же давайте разберём ключевые этапы.
1) Загрузка данных
На этом шаге происходит базовая подготовка данных:
Загрузка тепловых матриц из папок dataset/cat, dataset/person, dataset/empty, преобразование файлов в массивы NumPy и формирование единого набора данных и соответствующих меток классов.
2) Масштабирование данных
Тепловизор MLX90640 возвращает тепловые матрицы размерности 24×32, где каждый элемент матрицы это температуры в градусах Цельсия, то есть float значение.
Для нейросети, которая будет залита на ESP32, такой диапазон значений не подходит – модель должна работать с нормализованными входами в формате int8.
Каждое значение нормализуется в диапазон от –128 до +127.
3) Визуализация данных
Перед обучением важно убедиться, что данные корректны. Поэтому в ноутбуке выполняется визуализация тепловыз изображений 24×32. Отобразив нескольких образцов для каждой категории (кошка, человек, пустота), можно убедиться, что данные читаемы и различимы.
Этот этап помогает выявить ошибки [9]: неправильный формат данных, перепутанные метки или некорректное чтение файлов.
4) Прописать структуру модели средствами TensorFlow
Далее создаётся архитектура свёрточной нейросети – это особый тип реализации искусственного интеллекта [10], который использует специальную математическую операцию, называемую свёрткой, для обработки данных из изображений. Свёртка выполняется путём перемножения двух матриц и получения третьей, меньшей матрицы.
Сеть принимает входное изображение и использует фильтр (ядро) для создания карты признаков, описывающей изображение.
5) Обучение модели
После определения архитектуры нейросети начинается этап обучения, в котором модель подбирает оптимальные параметры (веса) для распознавания тепловых паттернов. Обучение проводится в несколько последовательных шагов, каждый из которых важен для корректной сходимости модели.
Квантование – это процесс преобразования весов модели из формата float32 в формат int8. Это уменьшает размер модели и ускоряет инференс модели в десятки раз. Такой формат значительно экономит память [11], что критично для микроконтроллеров. В итоге получается лёгкая и быстрая модель, пригодная для запуска прямо на ESP32.
После квантования модель сохраняется в формате TensorFlow Lite, а затем конвертируется в C-массив, который в свою очередь можно загрузить в память ESP32 и после компиляции и загрузки прошивки получить полностью автономную систему для стриминга теплового изображения с определением в реальном времени того, какие сущности попали в поле зрения тепловизора. Данный скетч можно найти в репозитории на GitHUB “02_MLX90640_CNN_TFL [12]“.
Автор: dsb42
Источник [13]
Сайт-источник BrainTools: https://www.braintools.ru
Путь до страницы источника: https://www.braintools.ru/article/22441
URLs in this post:
[1] поле зрения: http://www.braintools.ru/article/9711
[2] https://vkvideo.ru/video-229753773_456239024: https://vkvideo.ru/video-229753773_456239024
[3] 📂: https://vkvideo.ru/video-229753773_456239020%F0%9F%93%82
[4] https://github.com/DenissStepanjuk/ESP32.MLX90640.Classification_with_TensorFlowLite: https://github.com/DenissStepanjuk/ESP32.MLX90640.Classification_with_TensorFlowLite
[5] зрения: http://www.braintools.ru/article/6238
[6] 01_MLX90640_collect_dataset: https://github.com/DenissStepanjuk/ESP32.MLX90640.Classification_with_TensorFlowLite/tree/main/01_MLX90640_collect_dataset
[7] обучения: http://www.braintools.ru/article/5125
[8] MLX90640-CNN-TFL.ipynb: https://github.com/DenissStepanjuk/ESP32.MLX90640.Classification_with_TensorFlowLite/blob/main/MLX90640_Python/MLX90640-CNN-TFL.ipynb
[9] ошибки: http://www.braintools.ru/article/4192
[10] интеллекта: http://www.braintools.ru/article/7605
[11] память: http://www.braintools.ru/article/4140
[12] 02_MLX90640_CNN_TFL: https://github.com/DenissStepanjuk/ESP32.MLX90640.Classification_with_TensorFlowLite/tree/main/02_MLX90640_CNN_TFL
[13] Источник: https://habr.com/ru/articles/970216/?utm_source=habrahabr&utm_medium=rss&utm_campaign=970216
Нажмите здесь для печати.