Обнаружение объектов: запуск YOLOv11 на EdgeTPU
В этом посте мы собираемся продемонстрировать, как использовать RAiV (с EdgeTPU) и Yolo v11 для обнаружения объектов. Вы можете рассматривать этот пост как краткий курс по использованию визуальных моделей искусственного интеллекта.
Введение в Edge AI
Что такое модель искусственного интеллекта и Edge AI
В двух словах, модель искусственного интеллекта представляет собой список уровней операций (таких как умножение, сложение...) и список весов, связанных с этими уровнями. Процессоры выполняют операции с весами, начиная с самого начала (уровень ввода), и вычисляют выходные данные.
Модели искусственного интеллекта, как правило, запускаются на ПК или в облачной среде. Однако некоторые из этих моделей также могут быть запущены на небольших устройствах. Локальный запуск моделей искусственного интеллекта на автономном устройстве называется Edge AI
Что такое EdgeTPU
Во время запуска модели искусственного интеллекта (которая называется логическим выводом) центральный процессор может использовать специализированные устройства (аппаратные ускорители) или вспомогательные библиотеки для ускорения вычислительных процессов. Использование вспомогательных устройств или библиотек называется делегированием.
EdgeTPU, который используется в RAiV, является устройством делегирования (аппаратным ускорителем). Центральный процессор загружает подходящие слои в EdgeTPU, а EdgeTPU выполняет вычисление этих слоев. Затем EdgeTPU отправляет результаты обратно в центральный процессор. Таким образом, пока EdgeTPU занят запуском слоев, центральный процессор может работать над другими задачами.
Рабочий процесс
Ниже вы можете ознакомиться с общим рабочим процессом для использования модели искусственного интеллекта в RAiV. Этот рабочий процесс приведен только для ознакомительных целей. В текущем посте, поскольку мы собираемся использовать обученную модель Yolo, мы пропустим первый шаг рабочего процесса.
Подготовка модели искусственного интеллекта
- Создание наборов данных для обучения и проверки
- Обучение и проверка модели искусственного интеллекта
- Экспорт модели искусственного интеллекта для EdgeTPU или компиляция это делается с помощью edgetpu_compiler.
Загрузить и выпустить
- Загрузить модель искусственного интеллекта с помощью пользовательского веб-интерфейса RAiV
- Запустите модель с помощью пользовательского веб-интерфейса RAiV.
- RAiV передает данные изображения в модель искусственного интеллекта и запускает ее, а затем сохраняет выходные слои в конвейере данных
Подготовьте постпроцессор Python
- Используйте скрипт python для доступа к конвейеру данных
- Проверьте выходные данные (пороговое значение, слияние, изменение формы и т.д.)
Загрузить скрипты
Загрузить скрипт(ы) на python с помощью пользовательского веб-интерфейса RAiV
Запуск конвейера передачи данных
Запуск конвейера передачи данных с помощью:
- Snapshot
- Live Stream
- Capture Frame
- Collect Samples
Давайте использовать искусственный интеллект
Как мы уже упоминали ранее, этот пост представляет собой краткий курс по использованию передовых возможностей искусственного интеллекта RAiV. Чтобы упростить публикацию, мы собираемся использовать предварительно подготовленную версию популярной модели искусственного интеллекта. Затем мы применим постобработку к его выводам с помощью скрипта python.
Подготовьте Yolo v11 для EdgeTPU
YOLO (Вы смотрите только один раз) - популярная модель искусственного интеллекта для визуального обнаружения объектов. Среди различных версий YOLO мы выбрали последнюю модель YOLO (на момент разработки), Yolo-v11, для этой публикации: coco_yolo11n_full_integer_quant_edgetpu.tflite. Вы можете загрузить его из нашего репозитория на Github. Вы можете найти более подробную информацию о Yolo-v11 на официальная веб-страница Yolo-v11
Выбранная предварительно обученная модель искусственного интеллекта Yolo-v11 была обучена на основе хорошо известного набора данных COCO для обнаружения объектов. Таким образом, из коробки он может обнаруживать различные повседневные объекты (например, человека, ноутбук, апельсин, кружку, автобус и т.д.).
Загрузите и выпустите модель
Войдите в учетную запись пользователя веб-интерфейса RAiV. Нажмите на кнопку "AI Settings" справа, чтобы открыть панель параметров настроек искусственного интеллекта. На открывшейся панели нажмите на значок мозга с подсказкой "Upload AI Model", чтобы открыть диалоговое окно выбора файла. Выберите загруженную модель и загрузите ее.
После успешной загрузки модели RAiV проверяет ее удобство использования. Если модель пригодна к использованию, на панели параметров искусственного интеллекта отображается статус "READY". В этом случае, чтобы разрешить использование модели, нажмите на значок ракеты с всплывающей подсказкой "Release AI" справа. После выпуска модели с искусственным интеллектом конвейер данных будет передавать изображения в загруженную модель с искусственным интеллектом. Чтобы отменить выпуск модели, нажмите на значок парашюта с всплывающей подсказкой "Unrelease AI".
Последние штрихи к Python
Конвейер передачи данных - еще раз
После загрузки модели искусственного интеллекта и выпуска ее для использования конвейер передачи данных передает изображения в модель искусственного интеллекта и передает выходные данные модели в пользовательский код на Python. Как и в случае получения изображения, пользовательский скрипт на python должен просто проверять наличие доступных данных из AI.
Обратите внимание, что для простоты данные из выходных данных модели AI также включают входное изображение модели. Таким образом, с помощью одного вызова конвейера данных пользователь может получить как входные, так и выходные данные модели искусственного интеллекта.
Постпроцессор Yolo - зачем он нам нужен?
Модели искусственного интеллекта обычно не выдают готовых к использованию выходных данных. Эти модели в основном необходимы для изменения формы и фильтрации. Наш репозиторий содержит пример кода для постобработки модели Yolo.
Подготовьте и загрузите код
Кратко в приведенном ниже коде мы получаем выходные данные модели искусственного интеллекта из конвейера данных, вызывая getDataAi() и обрабатывая их в соответствии с нашими потребностями в обнаружении объектов
Вы можете найти этот пример в нашем репозитории на Github со всеми необходимыми модулями. Пожалуйста, скачайте пример кода из репозитория github и загрузите его в RAiV через веб-интерфейс.
# For accessing data pipeline
from qCU_Data import qCUData
# For Yolo Helper Functions
from YOLOv8ObjectDetector import YOLOv8ObjectDetector
def main():
# Create interface
theQCUData = qCUData()
# Initialize shared memory
if not theQCUData.init():
print("Failed to initialize shared memory")
return
# Initialize COCO classes
COCO_CLASSES = [
"person", "bicycle", "car", "motorcycle", "airplane", "bus", "train",
"truck", "boat", "traffic light", "fire hydrant", "stop sign",
"parking meter", "bench", "bird", "cat", "dog", "horse", "sheep",
"cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella",
"handbag", "tie", "suitcase", "frisbee", "skis", "snowboard",
"sports ball", "kite", "baseball bat", "baseball glove", "skateboard",
"surfboard", "tennis racket", "bottle", "wine glass", "cup", "fork",
"knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange",
"broccoli", "carrot", "hot dog", "pizza", "donut", "cake", "chair",
"couch", "potted plant", "bed", "dining table", "toilet", "tv",
"laptop", "mouse", "remote", "keyboard", "cell phone", "microwave",
"oven", "toaster", "sink", "refrigerator", "book", "clock", "vase",
"scissors", "teddy bear", "hair drier", "toothbrush"
]
# Initialize Yolo detector post processor
objDetector = YOLOv8ObjectDetector(ai_classes=COCO_CLASSES, confidence_threshold=0.25, iou_threshold=0.45)
# Enter object detection loop
try:
while True:
# Get Ai data
ai_data = theQCUData.getDataAi()
if ai_data:
if 'error' in ai_data:
print(f"Error occurred: {ai_data['error']}")
else:
# Postprocess the ai_data
detected_objects = objDetector.detect_objects(ai_data)
# Get the ai preprocessing parameters
aiHeader = ai_data['header']
aiPrepro = aiHeader.imPreproPrms
detected_objs_image = []
for obj in detected_objects:
# Convert yolo coordinates to image coordinates
bbox_img_float = objDetector.yolo_to_coords_float(aiPrepro, obj['bbox'])
bbox_img_int = [int(coord) for coord in bbox_img_float]
detected_objs_image.append({
'class_id': obj['class_id'],
'class_name': obj['class_name'],
'confidence': obj['confidence'],
'bbox': bbox_img_int,
})
# Print the detected objects
print(detected_objs_image)
# Do not forget to delete the ai data key references and the ai data
del ai_data['data'], ai_data['input_frame_right'], ai_data['input_frame_left'], ai_data['header']
del ai_data
else:
# Wait to avoid high CPU utilization
time.sleep(0.1)
finally:
print("Cleanup completed")
if __name__ == "__main__":
main()
Оперативное действие: запуск конвейера данных
Теперь, чтобы запустить конвейер данных, пожалуйста, нажмите кнопку "Snapshot". После того, как изображение отобразится в веб-интерфейсе, проверьте вывод на консоль или в приложении для ПК.
Что дальше?
Чтобы начать оценку карты глубины
От стерео к глубине: Создание вашей первой карты глубины с помощью OpenCVПроверьте наш Python SDK
RAiV Python SDKПроверьте наш Репозиторий на Github Для Примеров Кодов:
Наш репозиторий на Github