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:
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 .
iOS
Model można zintegrować za pomocą interfejsu API TensorFlow Lite Interpreter Swift . Zobacz przykład iOS poniżej.
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.
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