OpenVINO w detekcji obiektów w wizji komputerowej AI (Frigate + OpenVINO)

Przetłumaczone automatycznie z angielskiego. Przeczytaj oryginał

Czym jest OpenVINO? #

„Otwartoźródłowy zestaw narzędzi do optymalizacji i wdrażania modeli deep learningu”.

Intel rozwija go od 2018 roku. Obsługuje LLM, wizję komputerową i generatywne AI. Działa na Windowsie, Linuksie i macOS. W przypadku Ubuntu zalecane jest uruchamianie na 22.04 LTS lub nowszym. Wykorzystuje sterowniki OpenCL.

W teorii biblioteki używające OpenCL (takie jak OpenVINO) powinny być wieloplatformowe, w przeciwieństwie do podobnych rozwiązań uzależniających od jednego dostawcy, takich jak CUDA. W teorii OpenVINO powinno więc działać zarówno na sprzęcie Intela, jak i AMD. Internet twierdzi, że działa, ale na razie muszę zamówić dodatkowy sprzęt, żeby sprawdzić to samodzielnie.

Na marginesie: dlaczego vendor lock-in CUDA/NVIDIA jest zły? Jesteś zmuszony kupować sprzęt od jednego dostawcy, więc jesteś narażony na wzrost cen, a gdyby cała koncepcja upadła, zostajesz z niczym. Dlatego otwarte standardy są lepsze od zamkniętych.

Lektury o OpenCL #

Osobom mówiącym po polsku polecam moją książkę o OpenCL. Są też różne artykuły, które możesz znaleźć tutaj.

Wymagania #

OpenVINO można uruchomić na Intel Core Ultra serii 1 i 2, Xeon 6, Atom X, Atomach z SSE 4.2 oraz różnych procesorach Pentium. Zdecydowanie najważniejsze jest to, że działa na Intel Core od 6. generacji wzwyż. Obsługiwane są też karty Intel Arc, ale jeśli chodzi o GPU, wspierane są również Intel HD, UHD, Iris Pro, Iris Xe, Iris Xe Max. Szczególnie kluczowa jest kompatybilność z Core 6. generacji i zintegrowaną grafiką HD, UHD.

Dokumentacja Intel OpenVINO mówi też, że obsługiwany jest Intel Neural Processing Unit, w skrócie NPU.

Zestaw instrukcji VMMX jest dostępny od 10. generacji procesorów Intela. Zestaw instrukcji AMX jest dostępny od 12. generacji procesorów Intela. Zarówno VMMX, jak i AMX znacznie zwiększają szybkość i przepustowość inferencji.

Podstawowy pakiet OpenVINO GenAI #

Bash
wget https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
sudo gpg --output /etc/apt/trusted.gpg.d/intel.gpg --dearmor GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB
echo "deb https://apt.repos.intel.com/openvino/2025 ubuntu22 main" | sudo tee /etc/apt/sources.list.d/intel-openvino-2025.list
sudo apt update
sudo apt install openvino

Uruchomienie monitoringu wideo Frigate z detektorem obiektów OpenVINO #

W Linuksie, a konkretnie w Ubuntu 22, urządzenia Intela są udostępniane przez urządzenia /dev/dri, czyli Direct Rendering Infrastructure. To linuksowy framework obecny od 1998 roku. Najnowsza wersja, DRI-3.0, pochodzi z 2013 roku.

Możemy przetestować runtime/biblioteki OpenVINO, a tym samym sprzęt Intela, używając Frigate, urządzenia DRI i kontenera Docker. Oto specyfikacja kontenera Docker:

Bash
cd
mkdir frigate-config
mkdir frigate-media
sudo docker run -d \
  --name frigate \
  --restart=unless-stopped \
  --stop-timeout 30 \
  --mount type=tmpfs,target=/tmp/cache,tmpfs-size=1000000000 \
  --shm-size=1024m \
  --device /dev/bus/usb:/dev/bus/usb \
  --device /dev/dri/renderD128 \
  -v ./frigate-media:/media/frigate \
  -v ./frigate-config:/config \
  -v /etc/localtime:/etc/localtime:ro \
  -e FRIGATE_RTSP_PASSWORD='password' \
  -p 8971:8971 \
  -p 8554:8554 \
  -p 8555:8555/tcp \
  -p 8555:8555/udp \
  ghcr.io/blakeblackshear/frigate:stable

Używamy obrazu frigate:stable. Dla innych detektorów, takich jak TensorRT (Tensor RunTime), użylibyśmy obrazu frigate:stable-tensorrt.

Po uruchomieniu kontenera otwórz logi, aby odczytać hasło administratora:

Bash
sudo docker logs $(sudo docker ps | grep frigate | cut -d ' ' -f 1) -f -n 100

Powinno to wyglądać mniej więcej tak:

Zacznij od następującego pliku konfiguracyjnego:

YAML
mqtt:
  enabled: false
logger:
  logs:
    frigate.record.maintainer: debug
objects:
  track:
    - person
    - car
    - motorcycle
    - bicycle
    - bus
    - dog
    - cat
    - handbag
    - backpack
    - suitcase
record:
  enabled: true
  retain:
    days: 1
    mode: all
  alerts:
    retain:
      days: 4
  detections:
    retain:
      days: 4
snapshots:
  enabled: true
  retain:
    default: 7
  quality: 95
review:
  alerts:
    labels:
      - person
      - car
      - motorcycle
      - bicycle
      - bus
  detections:
    labels:
      - dog
      - cat
      - handbag
      - backpack
      - suitcase
cameras:
  demo:
    enabled: true
    ffmpeg:
      inputs:
        - path: rtsp://user:pass@ip:port/stream
          roles:
            - detect
            - record
      hwaccel_args: preset-vaapi
    detect:
      fps: 4
version: 0.15-1
semantic_search:
  enabled: true
  reindex: false
  model_size: small

Frigate informuje, że detektory CPU nie są zalecane. Nie zdefiniowaliśmy jeszcze detektora OpenVINO w konfiguracji Frigate:

Frigate wręcz ostrzega nas, że detekcja na CPU jest wolna:

Spróbujmy więc teraz z detektorami OpenVINO:

YAML
detectors:
  ov:
    type: openvino
    device: GPU
model:
  width: 300
  height: 300
  input_tensor: nhwc
  input_pixel_format: bgr
  path: /openvino-model/ssdlite_mobilenet_v2.xml
  labelmap_path: /openvino-model/coco_91cl_bkgr.txt

Po restarcie powinieneś zobaczyć w logach:

Text
2025-03-09 09:41:01.085519814  [2025-03-09 09:41:01] detector.ov                    INFO    : Starting detection process: 430

Intel GPU Tools #

Aby zweryfikować wykorzystanie CPU/GPU, możesz użyć intel-gpu-tools:

Bash
sudo apt install intel-gpu-tools
sudo intel_gpu_top

Pokaże to coś takiego:

Powinno to obejmować zarówno detekcję, jak i dekodowanie wideo, ponieważ ustawiliśmy hwaccel_args: preset-vaapi w konfiguracji Frigate. W teorii powinno to działać zarówno z VAAPI Intela, jak i AMD.

Text
Automatically detected vaapi hwaccel for video decoding

Komputer bez dedykowanego GPU #

Jeśli mamy komputer z procesorem Intela z iGPU, możemy podać następującą konfigurację:

YAML
detectors:
  ov_0:
    type: openvino
    device: GPU
  ov_1:
    type: openvino
    device: GPU

Wtedy będzie używane zarówno iGPU (ov_0, szybkie), jak i CPU (ov_1, wolne). Jak widać, jest to ciekawe pod względem szybkości (87ms vs 493ms). Wykorzystanie CPU będzie oczywiście wyższe w przypadku detektora CPU, ponieważ w przypadku iGPU procesor służy jedynie do koordynacji. Oba komponenty pokazują podobne zużycie pamięci, czyli nadal pamięci RAM, ponieważ iGPU współdzieli ją z CPU. Mój procesor to Intel Core m3-8100y, 4 rdzenie przy 1.1GHz. Ma Intel UHD 615 ze 192 rdzeniami shaderów. Osiąga 691 GFLOPS (dla jasności: mniej niż 1 TFLOPS) w FP16.

Wykorzystanie możesz zobaczyć we Frigate:

Podsumowanie #

Bardzo ważne jest wykorzystywanie już dostępnego sprzętu i to świetnie, że istnieje taki framework jak OpenVINO. Na rynku są tony procesorów Intel Core ze zintegrowanymi układami graficznymi Intel HD i UHD. W takim scenariuszu jak detekcja obiektów we Frigate to idealne rozwiązanie, żeby przenieść detekcję z CPU na zintegrowane GPU procesora. Jest to znacznie wygodniejsze niż moduł Coral TPU USB, zarówno pod względem instalacji, jak i kosztów. To zintegrowane GPU masz już w swoim komputerze.

Wersja Markdown

Wszystkie treści na tej stronie są udostępniane na licencji Uznanie autorstwa – Użycie niekomercyjne – Bez utworów zależnych 4.0 Międzynarodowe (CC BY-NC-ND 4.0). Cytuj jako: Michał Sobczak, „OpenVINO w detekcji obiektów w wizji komputerowej AI (Frigate + OpenVINO)”, 9 marca 2025, https://michalasobczak.pl/pl/posts/openvino-in-ai-computer-vision-object-detection-frigate-openvino.html