В этом посте мы собираемся продемонстрировать, как использовать 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", чтобы открыть диалоговое окно выбора файла. Выберите загруженную модель и загрузите ее.

Загрузка YOLOv11n в RAiV

После успешной загрузки модели RAiV проверяет ее удобство использования. Если модель пригодна к использованию, на панели параметров искусственного интеллекта отображается статус "READY". В этом случае, чтобы разрешить использование модели, нажмите на значок ракеты с всплывающей подсказкой "Release AI" справа. После выпуска модели с искусственным интеллектом конвейер данных будет передавать изображения в загруженную модель с искусственным интеллектом. Чтобы отменить выпуск модели, нажмите на значок парашюта с всплывающей подсказкой "Unrelease AI".

Последние штрихи к Python

Конвейер передачи данных - еще раз

После загрузки модели искусственного интеллекта и выпуска ее для использования конвейер передачи данных передает изображения в модель искусственного интеллекта и передает выходные данные модели в пользовательский код на Python. Как и в случае получения изображения, пользовательский скрипт на python должен просто проверять наличие доступных данных из AI.

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

Robotic Ai Vision Data Routing Pipeline Diagram
Схема конвейера маршрутизации данных Robotic Ai Vision

Постпроцессор 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". После того, как изображение отобразится в веб-интерфейсе, проверьте вывод на консоль или в приложении для ПК.

Запуск YOLOv11 на EdgeTPU с помощью RAiV

Что дальше?

Чтобы начать оценку карты глубины

От стерео к глубине: Создание вашей первой карты глубины с помощью OpenCV

Проверьте наш Python SDK

RAiV Python SDK

Проверьте наш Репозиторий на Github Для Примеров Кодов:

Наш репозиторий на Github