Wykrywanie obiektów

Biorąc pod uwagę obraz lub strumień wideo, model wykrywania obiektów może zidentyfikować, które ze znanego zestawu obiektów mogą być obecne i dostarczyć informacji o ich położeniu na obrazie.

Na przykład ten zrzut ekranu przykładowej aplikacji pokazuje, jak rozpoznano dwa obiekty i opisano ich położenie:

Zrzut ekranu przykładowego 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 znasz już interfejsy API TensorFlow Lite , możesz pobrać nasz startowy model wykrywania obiektów i towarzyszące mu etykiety.

Pobierz model startowy z metadanymi

Aby uzyskać więcej informacji na temat metadanych i powiązanych pól (np.: labels.txt ), zobacz Odczyt metadanych z modeli

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

W następujących przypadkach użycia należy zastosować inny typ modelu:

  • Przewidywanie, którą etykietę najprawdopodobniej reprezentuje obraz (patrz klasyfikacja obrazu )
  • Przewidywanie kompozycji obrazu, na przykład tematu i tła (patrz segmentacja )

Przykładowe zastosowania i poradniki

Jeśli dopiero zaczynasz korzystać z TensorFlow Lite i pracujesz z systemem Android lub iOS, zalecamy zapoznanie się z poniższymi przykładowymi aplikacjami, które mogą pomóc Ci rozpocząć.

Android

Możesz wykorzystać gotowy interfejs API z biblioteki zadań TensorFlow Lite, aby zintegrować modele wykrywania obiektów w zaledwie kilku wierszach kodu. Można także zbudować własny, niestandardowy potok wnioskowania, korzystając z interfejsu API języka Java interpretera TensorFlow Lite .

Poniższy przykład Androida ilustruje implementację obu metod przy użyciu odpowiednio biblioteki zadań i interfejsu API interpretera .

Zobacz przykład Androida

iOS

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

Zobacz przykład iOS

Opis modelu

W tej sekcji opisano sygnaturę modeli detektorów Single-Shot konwertowanych do TensorFlow Lite z interfejsu API wykrywania obiektów TensorFlow .

Model wykrywania obiektów jest szkolony w celu wykrywania obecności i lokalizacji wielu klas obiektów. Na przykład model można wytrenować 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 zostanie następnie dostarczony do modelu, wyświetli on listę wykrytych obiektów, lokalizację ramki zawierającej każdy obiekt oraz wynik wskazujący pewność, że wykrycie było prawidłowe.

Podpis wejściowy

Model przyjmuje obraz jako dane wejściowe.

Załóżmy, że oczekiwany obraz ma wymiary 300x300 pikseli i trzy kanały (czerwony, niebieski i zielony) na piksel. Powinno to zostać wprowadzone do modelu jako spłaszczony bufor o wartościach 270 000 bajtów (300x300x3). Jeśli model jest skwantowany , każda wartość powinna być pojedynczym bajtem reprezentującym wartość z zakresu od 0 do 255.

Możesz rzucić okiem na nasz przykładowy kod aplikacji, aby zrozumieć, jak wykonać to wstępne przetwarzanie na Androidzie.

Podpis wyjściowy

Model generuje cztery tablice odwzorowane 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 z zakresu od 0 do 1, wewnętrzne tablice reprezentujące ramki ograniczające w postaci [góra, lewa, dół, prawa]
1 Zajęcia Tablica N liczb całkowitych (wyjściowych jako wartości zmiennoprzecinkowe), każda wskazująca 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

Załóżmy na przykład, że model został przeszkolony do wykrywania jabłek, bananów i truskawek. Po dostarczeniu obrazu wyświetli 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 zaufania

Aby zinterpretować te wyniki, możemy przyjrzeć się punktacji i lokalizacji 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 model jest pewniejszy.

W zależności od aplikacji możesz określić próg odcięcia, poniżej którego wyniki wykrywania zostaną odrzucone. W bieżącym przykładzie rozsądna granica to wynik 0,5 (co oznacza 50% prawdopodobieństwo, że wykrycie jest prawidłowe). W takim przypadku dwa ostatnie obiekty w tablicy zostaną zignorowane, ponieważ te wskaźniki pewnoś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]

Wartość graniczna, której używasz, powinna opierać się na tym, czy lepiej czujesz się w przypadku wyników fałszywie pozytywnych (obiekty, które są błędnie zidentyfikowane lub obszary obrazu, które są błędnie identyfikowane jako obiekty, gdy tak nie jest), czy fałszywie negatywnych (prawdziwe obiekty, które są pominięte, ponieważ ich pewność siebie była niska).

Na przykład na poniższym obrazku gruszka (która nie jest obiektem, do wykrywania którego model został przeszkolony) została błędnie zidentyfikowana jako „osoba”. Jest to przykład wyniku fałszywie dodatniego, który można zignorować, wybierając odpowiednią wartość odcięcia. W tym przypadku granica wynosząca 0,6 (lub 60%) wygodnie wykluczyłaby wynik fałszywie dodatni.

Zrzut ekranu przykładowego Androida pokazujący fałszywy alarm

Lokalizacja

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

[ szczyt, lewy, spód, Prawidłowy ]

Górna wartość reprezentuje odległość górnej krawędzi prostokąta od góry obrazu w pikselach. Lewa wartość 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.

Benchmarki wydajności

Wartości referencyjne wydajności dla naszego modelu startowego są generowane za pomocą narzędzia opisanego tutaj .

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

* Wykorzystano 4 wątki.

** 2 wątki używane w iPhonie w celu uzyskania najlepszego wyniku.

Personalizacja modelu

Wstępnie przeszkolone modele

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

Większość zipów do pobrania zawiera plik model.tflite . Jeśli go nie ma, za pomocą tych instrukcji można wygenerować płaski bufor TensorFlow Lite. Modele dysków 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 polegającego na wygenerowaniu modelu źródłowego przyjaznego dla urządzeń mobilnych. Skrypty połączone powyżej wykonują ten krok.

Obydwa 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. Aby wyświetlić wyczerpującą listę obsługiwanych argumentów, użyj --help w skryptach.

Obecnie wnioskowanie na urządzeniu jest zoptymalizowane tylko w przypadku modeli SSD. Badana jest lepsza obsługa innych architektur, takich jak CenterNet i EfficientDet.

Jak wybrać model do personalizacji?

Każdy model ma własną precyzję (określoną ilościowo na podstawie wartości mAP) i charakterystykę opóźnienia. Powinieneś wybrać model, który najlepiej sprawdza się w Twoim przypadku użycia i zamierzonym sprzęcie. Na przykład modele Edge TPU idealnie nadają się do wnioskowania na temat Edge TPU firmy Google na Pixelu 4.

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

Dostrajanie modeli na niestandardowych danych

Dostarczane przez nas wstępnie wytrenowane modele są przeszkolone do wykrywania 90 klas obiektów. Pełną listę klas znajdziesz w pliku etykiet w metadanych modelu .

Możesz użyć techniki zwanej uczeniem transferowym, aby ponownie wytrenować model w celu rozpoznawania klas, które nie znajdują się w oryginalnym zestawie. Można na przykład przeszkolić model tak, aby wykrywał wiele rodzajów warzyw, mimo że w oryginalnych danych uczących znajdowało się tylko jedno warzywo. Aby to zrobić, będziesz potrzebować zestawu obrazów szkoleniowych dla każdej nowej etykiety, którą 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 transferowe, aby zmniejszyć ilość wymaganych danych i czasu szkoleniowego. Możesz także uczyć się od Colaba dotyczącego wykrywania kilku strzałów jako przykładu dostrajania wstępnie wytrenowanego modelu za pomocą kilku przykładów.

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