Przejdź do głównej zawartości

Wykrywanie obiektów z RT-DETR

RTDetrWorkflow uruchamia model RT-DETR z biblioteki Ultralytics i udostępnia go przez API HTTP. Domyślny model to rtdetr-l.pt, a domyślna konfiguracja wymaga jednego GPU NVIDIA RTX A5000.

Utwórz workflow​

from cgc.sdk import Image
from cgc.sdk.recipes.rtdetr import RTDetrConfig, RTDetrWorkflow

workflow = RTDetrWorkflow(
name="sdk-rtdetr-inference-demo",
image=Image.from_registry("ultralytics/ultralytics:latest"),
config=RTDetrConfig(
model_name="rtdetr-l.pt",
inference_cpu=4,
inference_memory=16,
inference_gpu=1,
inference_gpu_type="nvidia-rtx-a5000",
),
)

Argumenty użyte powyżej:

ArgumentZnaczenie
name="sdk-rtdetr-inference-demo"Nazwa workflow i usługi modelu. Osobną nazwę usługi możesz ustawić przez inference_name.
image=...Obraz kontenera zawierający środowisko, w którym uruchomi się Ultralytics.
"ultralytics/ultralytics:latest"Publiczny obraz kontenera Ultralytics. Aby zachować tę samą wersję środowiska, wybierz konkretny tag zamiast latest.
config=...Konfiguracja modelu i zasobów RT-DETR.
model_name="rtdetr-l.pt"Wagi gotowego modelu pobierane i wczytywane przez Ultralytics.
inference_cpu=4Liczba rdzeni CPU zarezerwowanych dla usługi.
inference_memory=16Ilość pamięci zarezerwowanej dla usługi, w GB.
inference_gpu=1Liczba GPU zarezerwowanych dla usługi.
inference_gpu_type="nvidia-rtx-a5000"Identyfikator wymaganego typu GPU w CGC.

Uruchom usługę​

endpoint = workflow.deploy_pretrained_inference(
wait=True,
reuse_existing=True,
)
endpoint.wait_http("/health", timeout_seconds=300)
print(endpoint.url)

Argumenty użyte powyżej:

ArgumentZnaczenie
wait=TrueCzeka, aż zasób CGC będzie uruchomiony.
reuse_existing=TrueKorzysta z istniejącej usługi o tej samej nazwie zamiast zgłaszać konflikt.
"/health"Endpoint sprawdzający gotowość usługi RT-DETR.
timeout_seconds=300Maksymalny czas oczekiwania na gotowość HTTP, w sekundach.

Wykryj obiekty​

prediction = endpoint.post_json(
"/predict",
{"image_url": "https://ultralytics.com/images/bus.jpg"},
timeout=120,
)

for detection in prediction["detections"]:
print(detection["class_name"], detection["confidence"])

Argumenty użyte powyżej:

ArgumentZnaczenie
"/predict"Trasa HTTP RT-DETR wykonująca detekcję obiektów.
{"image_url": "..."}Treść żądania w formacie JSON. image_url musi wskazywać obraz, który można pobrać z kontenera usługi. API przyjmuje też image_base64.
timeout=120Limit czasu żądania HTTP w sekundach.

Pole annotated_image_base64 w odpowiedzi zawiera obraz z zaznaczonymi detekcjami. Możesz go zdekodować i zapisać do pliku.

endpoint.delete()

Aby uruchomić ten przykład, utwórz plik Pythona we własnym projekcie, np. rtdetr_inference.py, i połącz bloki kodu z tej strony:

from cgc.sdk import Image
from cgc.sdk.recipes.rtdetr import RTDetrConfig, RTDetrWorkflow

workflow = RTDetrWorkflow(
name="sdk-rtdetr-inference-demo",
image=Image.from_registry("ultralytics/ultralytics:latest"),
config=RTDetrConfig(
model_name="rtdetr-l.pt",
inference_cpu=4,
inference_memory=16,
inference_gpu=1,
inference_gpu_type="nvidia-rtx-a5000",
),
)

endpoint = workflow.deploy_pretrained_inference(
wait=True,
reuse_existing=True,
)
endpoint.wait_http("/health", timeout_seconds=300)

prediction = endpoint.post_json(
"/predict",
{"image_url": "https://ultralytics.com/images/bus.jpg"},
timeout=120,
)

for detection in prediction["detections"]:
print(detection["class_name"], detection["confidence"])

Uruchom plik z własnego projektu:

python rtdetr_inference.py

Nazwę pliku możesz wybrać samodzielnie. Przykład korzysta z pakietu cgcsdk i tych importów:

from cgc.sdk import Image
from cgc.sdk.recipes.rtdetr import RTDetrConfig, RTDetrWorkflow

Pełny skrypt rtdetr_inference.py znajdziesz na stronie Przykłady workflow.

notatka

Ten przykład korzysta z gotowych wag RT-DETR. Jeśli chcesz trenować model na własnych danych, zacznij od rozdziału Zbiory danych.

notatka

reuse_existing=True nie aktualizuje modelu, obrazu ani środowiska istniejącego zasobu. Po zakończeniu przykładu usługa nadal działa, dopóki jej nie usuniesz.