Wykrywanie obiektów za pomocą YOLOv8
ultralytics YOLO, model.predict(), ramki ograniczające, filtrowanie według pewności, trenowanie własnego modelu.
Wykrywanie obiektów za pomocą YOLOv8 to bezpłatna lekcja Learn AI with Python na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Learn AI with Python, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Klasyfikacja a detekcja
Klasyfikacja obrazu określa, co się na nim znajduje. Detekcja obiektów idzie o krok dalej: wskazuje gdzie znajduje się każdy obiekt, rysując ramki ograniczające i etykiety. YOLO to najpopularniejszy detektor czasu rzeczywistego.
Czym jest YOLO?
YOLO (You Only Look Once) wykrywa wszystkie obiekty w jednym przejściu w przód, dzięki czemu działa wystarczająco szybko dla wideo. YOLOv8 firmy Ultralytics udostępnia przejrzyste API języka Python do inferencji i trenowania.
pip install ultralyticsWczytywanie wstępnie wytrenowanego modelu
Należy zaimportować YOLO i wczytać checkpoint. yolov8n.pt to model nano: niewielki i szybki. Większe warianty (s, m, l, x) wymieniają szybkość na większą dokładność. Wagi są automatycznie pobierane przy pierwszym użyciu.
from ultralytics import YOLO
model = YOLO("yolov8n.pt")Uruchamianie inferencji
Należy wywołać model.predict (lub po prostu model(image)) dla ścieżki obrazu, adresu URL albo tablicy. Metoda zwraca listę obiektów Results, po jednym dla każdego obrazu wejściowego.
results = model.predict("street.jpg", conf=0.5)Próg conf
Parametr conf określa minimalny poziom pewności wymagany do zachowania detekcji. Należy zwiększyć tę wartość, aby odrzucać niepewne ramki (mniej fałszywie dodatnich detekcji), albo zmniejszyć ją, aby wykrywać więcej obiektów kosztem większej ilości szumu.
results = model.predict("street.jpg", conf=0.25) # more detections
results = model.predict("street.jpg", conf=0.7) # only confident onesOdczytywanie ramek
Każdy wynik zawiera obiekt boxes. boxes.xyxy zwraca narożniki ramki ograniczającej w postaci [x1, y1, x2, y2] (współrzędne pikseli lewego górnego i prawego dolnego narożnika).
r = results[0]
print(r.boxes.xyxy) # tensor of [x1, y1, x2, y2] rowsKlasy i poziom pewności
Oprócz ramek dostępne są boxes.cls (indeksy klas) i boxes.conf (wyniki pewności). Indeksy można przypisać do nazw za pomocą model.names.
for box in r.boxes:
cls_id = int(box.cls)
conf = float(box.conf)
name = model.names[cls_id]
print(name, round(conf, 2))Wizualizacja wyników
results[0].plot() zwraca tablicę obrazu z naniesionymi ramkami i etykietami, gotową do wyświetlenia lub zapisania. To świetny sposób na szybkie sprawdzenie detekcji.
annotated = results[0].plot()
import cv2
cv2.imwrite("output.jpg", annotated)Detekcja wideo
Należy przekazać plik wideo lub indeks kamery internetowej, a YOLO przetworzy każdą klatkę. Przy ustawieniu stream=True wyniki są zwracane klatka po klatce, co ogranicza zużycie pamięci podczas przetwarzania długich nagrań.
for result in model.predict("clip.mp4", stream=True):
boxes = result.boxes
# process each frameTrenowanie niestandardowe
Aby wykrywać własne klasy obiektów, należy trenować model na oznaczonym zbiorze danych opisanym w pliku YAML. Należy wywołać model.train, podając konfigurację danych, liczbę epok i rozmiar obrazu. YOLO dostraja wstępnie wytrenowane wagi.
model = YOLO("yolov8n.pt")
model.train(
data="my_dataset.yaml",
epochs=50,
imgsz=640
)Plik YAML danych
Plik YAML zbioru danych zawiera foldery obrazów train/val oraz nazwy klas. YOLO oczekuje, że każdy obraz będzie miał odpowiadający mu plik etykiety ze znormalizowanymi współrzędnymi ramek dla każdego obiektu.
# my_dataset.yaml
# train: images/train
# val: images/val
# names:
# 0: helmet
# 1: vestSzybkie sprawdzenie
Proszę sprawdzić znajomość YOLOv8.
Podsumowanie: detekcja obiektów za pomocą YOLOv8
Wczytano wstępnie wytrenowany detektor za pomocą YOLO("yolov8n.pt"), uruchomiono model.predict(img, conf=0.5) i odczytano detekcje z results[0].boxes.xyxy, .cls oraz .conf. Wyniki zwizualizowano za pomocą results[0].plot(), a następnie dostrojono model dla niestandardowych klas za pomocą model.train i pliku YAML danych.
Często zadawane pytania
Czy lekcja „Wykrywanie obiektów za pomocą YOLOv8” jest bezpłatna?
Tak — pełny tekst „Wykrywanie obiektów za pomocą YOLOv8” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Learn AI with Python, przejdź na CoddyKit PRO. Kurs Learn AI with Python zawiera 4 lekcji w sumie.
Co nauczysz się w „Wykrywanie obiektów za pomocą YOLOv8”?
ultralytics YOLO, model.predict(), ramki ograniczające, filtrowanie według pewności, trenowanie własnego modelu. Ćwiczysz Learn AI with Python z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Learn AI with Python?
Nie wymagamy żadnego doświadczenia. Learn AI with Python w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Wykrywanie obiektów za pomocą YOLOv8”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Learn AI with Python?
Tak. Każda lekcja Learn AI with Python zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Tensory PyTorch i Autograd
- Własne zbiory danych i moduły DataLoader
- Tworzenie i trenowanie sieci CNN w PyTorch
- Wykrywanie obiektów za pomocą YOLOv8