Wnioskowanie o wykrywaniu obiektów w czasie rzeczywistym w Pythonie z YOLOv7 PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Wnioskowanie o wykrywaniu obiektów w czasie rzeczywistym w Pythonie za pomocą YOLOv7

Wprowadzenie

Wykrywanie obiektów to duże pole widzenia komputerowego i jedno z ważniejszych zastosowań widzenia komputerowego „na wolności”.

Wykrywanie obiektów nie jest tak ustandaryzowane jak klasyfikacja obrazów, głównie dlatego, że większość nowych rozwiązań jest zazwyczaj wykonywana przez indywidualnych badaczy, opiekunów i programistów, a nie przez duże biblioteki i frameworki. Trudno jest spakować niezbędne skrypty narzędziowe w frameworku takim jak TensorFlow lub PyTorch i zachować wytyczne API, które do tej pory kierowały rozwojem.

To sprawia, że ​​wykrywanie obiektów jest nieco bardziej złożone, zazwyczaj bardziej szczegółowe (ale nie zawsze) i mniej przystępne niż klasyfikacja obrazów.

Na szczęście dla mas — firma Ultralytics opracowała prosty, bardzo wydajny i piękny interfejs API do wykrywania obiektów wokół swojego YOLOv5, który został rozszerzony przez inne zespoły badawczo-rozwojowe do nowszych wersji, takich jak YOLOv7.

W tym krótkim przewodniku będziemy wykonywać wykrywanie obiektów w Pythonie za pomocą najnowocześniejszego YOLOv7.

Krajobraz YOLO i YOLOv7

YOLO (patrzysz tylko raz) to metodologia, a także rodzina modeli zbudowanych do wykrywania obiektów. Od momentu powstania w 2015 r. YOLOv1, YOLOv2 (YOLO9000) i YOLOv3 zostały zaproponowane przez tego samego autora (autorów) – a społeczność głębokiego uczenia kontynuowała postępy z otwartymi źródłami w kolejnych latach.

Ultralytics' YOLOv5 to pierwsza implementacja YOLO na dużą skalę w PyTorch, dzięki której jest bardziej dostępna niż kiedykolwiek wcześniej, ale głównym powodem, dla którego YOLOv5 zyskało taki przyczółek, jest również pięknie prosty i potężny interfejs API zbudowany wokół niego. Projekt odrzuca niepotrzebne szczegóły, umożliwiając jednocześnie dostosowywanie praktycznie wszystkich użytecznych formatów eksportu i wykorzystuje niesamowite praktyki, które sprawiają, że cały projekt jest zarówno wydajny, jak i optymalny, jak to tylko możliwe.

YOLOv5 jest nadal podstawowym projektem do budowania modeli Object Detection, a wiele repozytoriów, których celem jest rozwój metody YOLO, zaczyna się od YOLOv5 jako punktu odniesienia i oferuje podobny interfejs API (lub po prostu rozwidla projekt i kompiluje na nim). Tak jest w przypadku YOLOR (Uczysz się tylko jednej reprezentacji) i YOLOv7, który został zbudowany na bazie YOLOR (ten sam autor). YOLOv7 to najnowsze osiągnięcie w metodologii YOLO, a co najważniejsze, YOLOv7 zapewnia nowe głowice modeli, które mogą wyprowadzać punkty kluczowe (szkielety) i przeprowadzać segmentację instancji oprócz tylko regresji pola ograniczającego, co nie było standardem w poprzednich modelach YOLO.

Dzięki temu segmentacja instancji i wykrywanie punktów kluczowych są szybsze niż kiedykolwiek wcześniej!

Ponadto YOLOv7 działa szybciej i z większą dokładnością niż poprzednie modele ze względu na zmniejszoną liczbę parametrów i wyższą wydajność obliczeniową:

Wnioskowanie o wykrywaniu obiektów w czasie rzeczywistym w Pythonie z YOLOv7 PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Sam model został stworzony poprzez zmiany architektoniczne, a także optymalizację aspektów szkolenia, nazwanych „torbą gratisów”, co zwiększyło dokładność bez zwiększania kosztów wnioskowania.

Instalowanie YOLOv7

Instalacja i używanie YOLOv7 sprowadza się do pobrania repozytorium GitHub na komputer lokalny i uruchomienia dołączonych do niego skryptów.

Uwaga: Niestety, w chwili pisania YOLOv7 nie oferuje czystego programistycznego interfejsu API, takiego jak YOLOv5, który zwykle jest ładowany z torch.hub(), przekazując repozytorium GitHub. Wygląda na to, że jest to funkcja, która powinna działać, ale obecnie nie działa. Jak to zostanie naprawione, zaktualizuję przewodnik lub opublikuję nowy w interfejsie API programmatic. Na razie – skupimy się na skryptach wnioskowania udostępnionych w repozytorium.

Mimo to możesz wykrywać filmy, obrazy itp. w czasie rzeczywistym i łatwo zapisywać wyniki. Projekt jest zgodny z tymi samymi konwencjami, co YOLOv5, który ma obszerną dokumentację, więc prawdopodobnie znajdziesz odpowiedzi na bardziej niszowe pytania w repozytorium YOLOv5, jeśli je masz.

Pobierzmy repozytorium i wykonajmy pewne wnioskowanie:

! git clone https://github.com/WongKinYiu/yolov7.git

To tworzy yolov7 w bieżącym katalogu roboczym, w którym znajduje się projekt. Przejdźmy do tego katalogu i spójrzmy na pliki:

%cd yolov7
!ls
/Users/macbookpro/jup/yolov7
LICENSE.md       detect.py        models           tools
README.md        export.py        paper            train.py
cfg              figure           requirements.txt train_aux.py
data             hubconf.py       scripts          utils
deploy           inference        test.py          runs

Uwaga: W Notatniku Google Colab musisz uruchomić magię %cd polecenie w każdej komórce, na którą chcesz zmienić katalog yolov7, podczas gdy następna komórka powraca do pierwotnego katalogu roboczego. W lokalnych notatnikach Jupyter zmiana katalogu pewnego razu trzyma cię w tym, więc nie ma potrzeby wielokrotnego wydawania polecenia.

Połączenia detect.py to skrypty wnioskowania, które uruchamiają detekcje i zapisują wyniki pod runs/detect/video_name, gdzie możesz określić video_name dzwoniąc do detect.py skrypt. export.py eksportuje model do różnych formatów, takich jak ONNX, TFLite itp. train.py może służyć do szkolenia niestandardowego detektora YOLOv7 (temat innego przewodnika) oraz test.py może służyć do testowania detektora (ładowanego z pliku wag).

Kilka dodatkowych katalogów przechowuje konfiguracje (cfg), przykładowe dane (inference), dane dotyczące konstruowania modeli i konfiguracji COCO (data), Itd.

Rozmiary YOLov7

Modele oparte na YOLO dobrze się skalują i są zazwyczaj eksportowane jako mniejsze, mniej dokładne modele oraz większe, bardziej dokładne modele. Są one następnie wdrażane odpowiednio na słabszych lub mocniejszych urządzeniach.

YOLOv7 oferuje kilka rozmiarów i porównał je z MS COCO:

Zapoznaj się z naszym praktycznym, praktycznym przewodnikiem dotyczącym nauki Git, zawierającym najlepsze praktyki, standardy przyjęte w branży i dołączoną ściągawkę. Zatrzymaj polecenia Google Git, a właściwie uczyć się to!

Model Rozmiar testowy APtest AP50test AP75test wsad 1 fps partia 32 średni czas
YLOv7 640 51.4% 69.7% 55.9% Fps 161 2.8 ms
YOLov7-X 640 53.1% 71.2% 57.8% Fps 114 4.3 ms
YOLov7-W6 1280 54.9% 72.6% 60.1% Fps 84 7.6 ms
YOLov7-E6 1280 56.0% 73.5% 61.2% Fps 56 12.3 ms
YOLov7-D6 1280 56.6% 74.0% 61.8% Fps 44 15.0 ms
YOLov7-E6E 1280 56.8% 74.4% 62.1% Fps 36 18.7 ms

W zależności od podstawowego sprzętu, na którym oczekujesz, że model będzie działał, i wymaganej dokładności — możesz wybierać między nimi. Najmniejszy model osiąga ponad 160 klatek na sekundę na zdjęciach w rozmiarze 640, na V100! Możesz spodziewać się zadowalającej wydajności w czasie rzeczywistym na bardziej popularnych procesorach graficznych dla konsumentów.

Wnioskowanie wideo z YOLOv7

Tworzenie inference-data folder do przechowywania obrazów i/lub filmów, z których chcesz wykrywać. Zakładając, że znajduje się w tym samym katalogu, możemy uruchomić skrypt wykrywający z:

! python3 detect.py --source inference-data/busy_street.mp4 --weights yolov7.pt --name video_1 --view-img

Spowoduje to wyświetlenie na pulpicie wideo opartego na Qt, w którym można zobaczyć postęp na żywo i wnioskowanie, klatka po klatce, a także wyprowadzić status do naszego standardowego potoku wyjściowego:

Namespace(weights=['yolov7.pt'], source='inference-data/busy_street.mp4', img_size=640, conf_thres=0.25, iou_thres=0.45, device='', view_img=True, save_txt=False, save_conf=False, nosave=False, classes=None, agnostic_nms=False, augment=False, update=False, project='runs/detect', name='video_1', exist_ok=False, no_trace=False)
YOLOR 🚀 v0.1-112-g55b90e1 torch 1.12.1 CPU

Downloading https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt to yolov7.pt...
100%|██████████████████████████████████████| 72.1M/72.1M [00:18<00:00, 4.02MB/s]

Fusing layers... 
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
RepConv.fuse_repvgg_block
Model Summary: 306 layers, 36905341 parameters, 6652669 gradients
 Convert model to Traced-model... 
 traced_script_module saved! 
 model is traced! 
 
video 1/1 (1/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1071.6ms) Inference, (2.4ms) NMS
video 1/1 (2/402) /Users/macbookpro/jup/yolov7/inference-data/busy_street.mp4: 24 persons, 1 bicycle, 8 cars, 3 traffic lights, 2 backpacks, 2 handbags, Done. (1070.8ms) Inference, (1.3ms) NMS

Zwróć uwagę, że projekt będzie działał wolno na komputerach z procesorem (np. 1000 ms na krok wnioskowania w powyższym wyniku, uruchomiony na MacBooku Pro 2017 z procesorem Intel) i znacznie szybciej na komputerach z procesorem graficznym (bliżej ~ 5 ms na klatkę na V100). Nawet w systemach opartych na procesorach, takich jak ten, yolov7-tiny.pt kursuje o 172ms/frame, który choć daleki od czasu rzeczywistego, jest nadal bardzo dobry do obsługi tych operacji na procesorze.

Po zakończeniu biegu możesz znaleźć wynikowy film pod runs/video_1 (nazwa, którą podaliśmy w detect.py zadzwoń), zapisane jako an .mp4:

Wnioskowanie o wykrywaniu obiektów w czasie rzeczywistym w Pythonie z YOLOv7 PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Wnioskowanie o obrazach

Wnioskowanie o obrazach sprowadza się do tego samego procesu – dostarczenia adresu URL do obrazu w systemie plików i wywołania detect.py:

! python3 detect.py --source inference-data/desk.jpg --weights yolov7.pt

Uwaga: W momencie pisania dane wyjściowe nie skalują etykiet do rozmiaru obrazu, nawet jeśli ustawisz --img SIZE. Oznacza to, że duże obrazy będą miały naprawdę cienkie linie ograniczające i małe etykiety.

Wnioskowanie o wykrywaniu obiektów w czasie rzeczywistym w Pythonie z YOLOv7 PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Wnioski

W tym krótkim przewodniku – przyjrzeliśmy się pokrótce YOLOv7, najnowszemu ulepszeniu w rodzinie YOLO, która opiera się na YOLOR. Przyjrzeliśmy się, jak zainstalować repozytorium na komputerze lokalnym i uruchamiać skrypty wnioskowania do wykrywania obiektów ze wstępnie wytrenowaną siecią na filmach i obrazach.

W kolejnych przewodnikach omówimy wykrywanie punktów kluczowych i segmentację instancji.

Idąc dalej – praktyczne uczenie głębokie dla wizji komputerowej

Twoja dociekliwość sprawia, że ​​chcesz iść dalej? Zalecamy sprawdzenie naszego Kurs: „Praktyczne uczenie głębokie dla widzenia komputerowego z Pythonem”.

Wnioskowanie o wykrywaniu obiektów w czasie rzeczywistym w Pythonie z YOLOv7 PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Kolejny kurs na temat wizji komputerowej?

Nie będziemy robić klasyfikacji cyfr MNIST ani mody MNIST. Swoją rolę pełnili dawno temu. Zbyt wiele zasobów edukacyjnych koncentruje się na podstawowych zestawach danych i podstawowych architekturach, zanim zaawansowane architektury czarnoskrzynkowe poniosą ciężar wydajności.

Chcemy się skupić demistyfikacja, praktyczność, zrozumienie, intuicja i realne projekty. Chcieć się nauczyć w jaki sposób możesz zrobić różnicę? Zabierzemy Cię na przejażdżkę od sposobu, w jaki nasze mózgi przetwarzają obrazy, przez pisanie klasyfikatora głębokiego uczenia się na poziomie badań naukowych w zakresie raka piersi, do sieci głębokiego uczenia się, które „halucynują”, ucząc Cię zasad i teorii poprzez praktyczną pracę, wyposażając Cię w know-how i narzędzia, aby stać się ekspertem w stosowaniu uczenia głębokiego do rozwiązywania wizji komputerowych.

Co jest w środku?

  • Pierwsze zasady widzenia i jak nauczyć komputery „widzieć”
  • Różne zadania i zastosowania wizji komputerowej
  • Narzędzia handlu, które ułatwią Ci pracę
  • Znajdowanie, tworzenie i wykorzystywanie zbiorów danych do wizji komputerowej
  • Teoria i zastosowanie splotowych sieci neuronowych
  • Obsługa zmiany domeny, współwystępowania i innych błędów w zbiorach danych
  • Transfer uczenia się i wykorzystanie czasu szkolenia innych i zasobów obliczeniowych dla Twojej korzyści
  • Budowanie i szkolenie najnowocześniejszego klasyfikatora raka piersi
  • Jak zastosować zdrową dawkę sceptycyzmu do głównych idei i zrozumieć konsekwencje powszechnie stosowanych technik?
  • Wizualizacja „przestrzeni koncepcyjnej” ConvNet za pomocą t-SNE i PCA
  • Studia przypadków, w jaki sposób firmy wykorzystują techniki widzenia komputerowego do osiągania lepszych wyników
  • Właściwa ocena modelu, wizualizacja przestrzeni utajonej i identyfikacja uwagi modelu
  • Wykonywanie badań domenowych, przetwarzanie własnych zbiorów danych i tworzenie testów modelowych
  • Najnowocześniejsze architektury, progresja pomysłów, co czyni je wyjątkowymi i jak je wdrażać
  • KerasCV – biblioteka WIP do tworzenia najnowocześniejszych rurociągów i modeli
  • Jak analizować i czytać artykuły i samodzielnie je wdrażać
  • Wybór modeli w zależności od aplikacji
  • Tworzenie kompleksowego procesu uczenia maszynowego
  • Krajobraz i intuicja w wykrywaniu obiektów za pomocą szybszych sieci R-CNN, sieci RetinaNet, dysków SSD i YOLO
  • Segmentacja instancyjna i semantyczna
  • Rozpoznawanie obiektów w czasie rzeczywistym za pomocą YOLOv5
  • Szkolenie wykrywaczy obiektów YOLOv5
  • Praca z transformatorami przy użyciu KerasNLP (biblioteka przemysłowa WIP)
  • Integracja Transformers z ConvNets w celu generowania podpisów obrazów
  • DeepDream
  • Optymalizacja modelu Deep Learning dla wizji komputerowej

Znak czasu:

Więcej z Nadużycie stosu