Wykrywanie obiektów, wykrywanie obiektów

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Mając dany obraz lub strumień wideo, model wykrywania obiektów może zidentyfikować, który ze znanego zestawu obiektów może być obecny i dostarczyć informacji o ich pozycjach na obrazie.

Na przykład ten zrzut ekranu przykładowej aplikacji pokazuje, w jaki sposób rozpoznano dwa obiekty i opisano ich pozycje:

Zrzut ekranu przykładu Androida

Zaczynaj

Aby dowiedzieć się, jak korzystać z wykrywania obiektów w aplikacji mobilnej, zapoznaj się z przykładowymi aplikacjami i przewodnikami .

Jeśli korzystasz z platformy innej niż Android lub iOS lub jeśli znasz już interfejsy API TensorFlow Lite , możesz pobrać nasz początkowy model wykrywania obiektów i dołączone etykiety.

Pobierz model startowy z metadanymi

Aby uzyskać więcej informacji o metadanych i powiązanych polach (np.: labels.txt ) zobacz Czytaj metadane z modeli

Jeśli chcesz wytrenować niestandardowy model wykrywania do własnego zadania, zobacz Dostosowywanie modelu .

W następujących przypadkach użycia powinieneś użyć innego typu modelu:

  • Przewidywanie, którą pojedynczą etykietę najprawdopodobniej reprezentuje obraz (patrz klasyfikacja obrazów )
  • Przewidywanie kompozycji obrazu, na przykład temat w porównaniu z tłem (patrz segmentacja )

Przykładowe aplikacje i poradniki

Jeśli jesteś nowy w TensorFlow Lite i pracujesz z systemem Android lub iOS, zalecamy zapoznanie się z poniższymi przykładowymi aplikacjami, które mogą pomóc w rozpoczęciu pracy.

Android

Możesz skorzystać z gotowego interfejsu API z biblioteki zadań TensorFlow Lite, aby zintegrować modele wykrywania obiektów w zaledwie kilku wierszach kodu. Możesz także zbudować własny, niestandardowy potok wnioskowania, korzystając z interfejsu TensorFlow Lite Interpreter Java API .

Poniższy przykład systemu Android ilustruje implementację obu metod jako odpowiednio lib_task_api i lib_interpreter .

Zobacz przykład Androida

iOS

Model można zintegrować za pomocą interfejsu API TensorFlow Lite Interpreter Swift . Zobacz poniższy przykład iOS.

Zobacz przykład na iOS

Opis modelu

Ta sekcja opisuje sygnaturę modeli Single-Shot Detector przekonwertowanych na TensorFlow Lite z TensorFlow Object Detection API .

Model wykrywania obiektów jest szkolony w celu wykrywania obecności i lokalizacji wielu klas obiektów. Na przykład model może być wytrenowany za pomocą obrazów zawierających różne kawałki owoców, wraz z etykietą określającą klasę owoców, które reprezentują (np. jabłko, banan lub truskawka) oraz danymi określającymi, gdzie każdy obiekt pojawia się w Obraz.

Gdy obraz jest następnie dostarczany do modelu, wyświetla listę wykrytych obiektów, położenie obwiedni zawierającej każdy obiekt oraz ocenę, która wskazuje, że wykrycie było prawidłowe.

Wpisz podpis

Model przyjmuje obraz jako dane wejściowe.

Załóżmy, że oczekiwany obraz ma wymiary 300x300 pikseli, z trzema kanałami (czerwonym, niebieskim i zielonym) na piksel. Powinno to zostać wprowadzone do modelu jako spłaszczony bufor o wartości 270 000 bajtów (300x300x3). Jeśli model jest skwantyzowany , każda wartość powinna być pojedynczym bajtem reprezentującym wartość z przedziału od 0 do 255.

Możesz spojrzeć na nasz przykładowy kod aplikacji, aby zrozumieć, jak wykonać to wstępne przetwarzanie w systemie Android.

Podpis wyjściowy

Model wyprowadza cztery tablice, zmapowane na indeksy 0-4. Tablice 0, 1 i 2 opisują N wykrytych obiektów, przy czym jeden element w każdej tablicy odpowiada każdemu obiektowi.

Indeks Nazwa Opis
0 Lokalizacje Wielowymiarowa tablica [N][4] wartości zmiennoprzecinkowych od 0 do 1, wewnętrzne tablice reprezentujące ramki ograniczające w postaci [góra, lewo, dół, prawo]
1 Klasy Tablica N liczb całkowitych (wyjście jako wartości zmiennoprzecinkowe), z których każda wskazuje indeks etykiety klasy z pliku etykiet
2 Wyniki Tablica N wartości zmiennoprzecinkowych z zakresu od 0 do 1 reprezentująca prawdopodobieństwo wykrycia klasy
3 Liczba wykryć Wartość całkowita N

Na przykład wyobraź sobie, że model został wyszkolony do wykrywania jabłek, bananów i truskawek. Po dostarczeniu obrazu wygeneruje określoną liczbę wyników wykrywania — w tym przykładzie 5.

Klasa Wynik Lokalizacja
Jabłko 0,92 [18, 21, 57, 63]
Banan 0,88 [100, 30, 180, 150]
Truskawka 0,87 [7, 82, 89, 163]
Banan 0,23 [42, 66, 57, 83]
Jabłko 0,11 [6, 42, 31, 58]

Wynik ufności

Aby zinterpretować te wyniki, możemy spojrzeć na wynik i lokalizację każdego wykrytego obiektu. Wynik to liczba z zakresu od 0 do 1, która wskazuje na pewność, że obiekt został rzeczywiście wykryty. Im liczba jest bliższa 1, tym bardziej pewny jest model.

W zależności od aplikacji możesz określić próg odcięcia, poniżej którego odrzucisz wyniki wykrywania. W obecnym przykładzie rozsądnym punktem odcięcia jest wynik 0,5 (co oznacza 50% prawdopodobieństwa, że ​​wykrycie jest prawidłowe). W takim przypadku ostatnie dwa obiekty w tablicy zostałyby zignorowane, ponieważ te wyniki ufności są poniżej 0,5:

Klasa Wynik Lokalizacja
Jabłko 0,92 [18, 21, 57, 63]
Banan 0,88 [100, 30, 180, 150]
Truskawka 0,87 [7, 82, 89, 163]
Banan 0,23 [42, 66, 57, 83]
Jabłko 0,11 [6, 42, 31, 58]

Stosowany przez Ciebie punkt odcięcia powinien zależeć od tego, czy czujesz się bardziej komfortowo z fałszywymi trafieniami (obiekty, które zostały błędnie zidentyfikowane lub obszary obrazu, które są błędnie zidentyfikowane jako obiekty, gdy tak nie jest), czy z fałszywymi negatywami (prawdziwe obiekty, które są brakowało, ponieważ ich zaufanie było niskie).

Na przykład na poniższym obrazie gruszka (która nie jest obiektem, który model został wyszkolony do wykrywania) została błędnie zidentyfikowana jako „osoba”. Jest to przykład fałszywie pozytywnego wyniku, który można zignorować, wybierając odpowiedni punkt odcięcia. W takim przypadku odcięcie 0,6 (lub 60%) wygodnie wykluczyłoby fałszywie dodatni wynik.

Zrzut ekranu przykładu Androida pokazującego fałszywy alarm

Lokalizacja

Dla każdego wykrytego obiektu model zwróci tablicę czterech liczb reprezentujących prostokąt otaczający jego pozycję. W przypadku dostarczonego modelu startowego numery są uporządkowane w następujący sposób:

[ Top, lewy, na dole, prawo ]

Górna wartość reprezentuje odległość górnej krawędzi prostokąta od górnej części obrazu w pikselach. Wartość left reprezentuje odległość lewej krawędzi od lewej strony obrazu wejściowego. Pozostałe wartości reprezentują dolną i prawą krawędź w podobny sposób.

Testy wydajności

Za pomocą opisanego tutaj narzędzia są generowane wartości odniesienia wydajności dla naszego modelu początkowego .

Nazwa modelu Rozmiar modelu Urządzenie GPU procesor
COCO SSD MobileNet v1 27 Mb Piksel 3 (Android 10) 22ms 46ms*
Piksel 4 (Android 10) 20ms 29ms*
iPhone XS (iOS 12.4.1) 7,6 ms 11ms**

* 4 wątki użyte.

** 2 wątki używane na iPhonie w celu uzyskania najlepszej wydajności.

Dostosowywanie modelu

Wstępnie wytrenowane modele

Zoptymalizowane pod kątem urządzeń mobilnych modele wykrywania o różnych opóźnieniach i charakterystyce precyzji można znaleźć w Zoo Detekcji . Każdy z nich jest zgodny z sygnaturami wejściowymi i wyjściowymi opisanymi w kolejnych sekcjach.

Większość plików zip do pobrania zawiera plik model.tflite . Jeśli go nie ma, można wygenerować płaski bufor TensorFlow Lite, korzystając z tych instrukcji . Modele SSD z TF2 Object Detection Zoo można również przekonwertować na TensorFlow Lite, korzystając z instrukcji tutaj . Należy zauważyć, że modeli wykrywania nie można konwertować bezpośrednio za pomocą konwertera TensorFlow Lite , ponieważ wymagają one pośredniego etapu generowania modelu źródłowego przyjaznego dla urządzeń mobilnych. Skrypty, do których linki znajdują się powyżej, wykonują ten krok.

Oba skrypty eksportujące TF1 i TF2 mają parametry, które mogą umożliwić większą liczbę obiektów wyjściowych lub wolniejsze i dokładniejsze przetwarzanie końcowe. Użyj opcji --help ze skryptami, aby zobaczyć pełną listę obsługiwanych argumentów.

Obecnie wnioskowanie na urządzeniu jest optymalizowane tylko w przypadku modeli SSD. Badane jest lepsze wsparcie dla innych architektur, takich jak CenterNet i EfficientDet.

Jak wybrać model do personalizacji?

Każdy model ma swoją własną precyzję (wyrażoną ilościowo wartością mAP) i charakterystykę latencji. Powinieneś wybrać model, który najlepiej pasuje do twojego przypadku użycia i zamierzonego sprzętu. Na przykład modele Edge TPU są idealne do wnioskowania na temat Edge TPU firmy Google na Pixel 4.

Możesz skorzystać z naszego narzędzia porównawczego, aby ocenić modele i wybrać najbardziej wydajną dostępną opcję.

Dostrajanie modeli na danych niestandardowych

Dostarczane przez nas wstępnie wytrenowane modele są wytrenowane pod kątem wykrywania 90 klas obiektów. Pełną listę klas można znaleźć w pliku etykiet w metadanych modelu .

Możesz użyć techniki znanej jako uczenie transferu, aby ponownie nauczyć model rozpoznawania klas spoza oryginalnego zestawu. Na przykład możesz ponownie nauczyć model, aby wykrywał wiele rodzajów warzyw, mimo że w oryginalnych danych uczących występuje tylko jedno warzywo. Aby to zrobić, będziesz potrzebować zestawu obrazów szkoleniowych dla każdej z nowych etykiet, które chcesz trenować. Zalecanym sposobem jest użycie biblioteki TensorFlow Lite Model Maker , która upraszcza proces uczenia modelu TensorFlow Lite przy użyciu niestandardowego zestawu danych, z kilkoma linijkami kodu. Wykorzystuje uczenie transferu w celu zmniejszenia ilości wymaganych danych treningowych i czasu. Możesz również uczyć się od Colab Detekcja kilku strzałów jako przykład dostrajania wstępnie wytrenowanego modelu z kilkoma przykładami.

Aby dostroić się z większymi zestawami danych, zapoznaj się z tymi przewodnikami dotyczącymi uczenia własnych modeli za pomocą interfejsu API do wykrywania obiektów TensorFlow: TF1 , TF2 . Po przeszkoleniu można je przekonwertować do formatu przyjaznego dla TFLite za pomocą instrukcji tutaj: TF1 , TF2