Odpowiedz już dziś na lokalne wydarzenie TensorFlow Everywhere!
Ta strona została przetłumaczona przez Cloud Translation API.
Switch to English

Wykrywanie obiektów

Mając obraz lub strumień wideo, model wykrywania obiektów może zidentyfikować, który ze znanych zestawów obiektów może być obecny i dostarczyć informacji o ich pozycji w obrazie.

Na przykład ten zrzut ekranu przykładowej aplikacji pokazuje, w jaki sposób dwa obiekty zostały rozpoznane i ich pozycje zostały opisane:

Zrzut ekranu z przykładem Androida

Zaczynaj

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

Jeśli używasz platformy innej niż Android lub iOS lub jeśli znasz już interfejsy API TensorFlow Lite , możesz pobrać nasz model wykrywania obiektów startowych i towarzyszące mu etykiety.

Pobierz model początkowy z metadanymi

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

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

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

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

Przykładowe aplikacje i poradniki

Jeśli jesteś nowym użytkownikiem TensorFlow Lite i pracujesz z systemem Android lub iOS, zalecamy zapoznanie się z następującymi przykładowymi aplikacjami, które pomogą Ci rozpocząć.

Android

Możesz wykorzystać gotowe API z biblioteki zadań TensorFlow Lite, aby zintegrować modele wykrywania obiektów w zaledwie kilku wierszach kodu. Możesz również zbudować własny, niestandardowy potok wnioskowania, korzystając z interfejsu API języka Java TensorFlow Lite Interpreter .

Poniższy przykład systemu Android demonstruje 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 przykład iOS poniżej.

Zobacz przykład iOS

Opis modelu

W tej sekcji opisano sygnaturę modeli detektorów Single Shot przekonwertowanych na TensorFlow Lite z interfejsu API TensorFlow Object Detection .

Model wykrywania obiektów jest przeszkolony w zakresie wykrywania obecności i lokalizacji wielu klas obiektów. Na przykład model może być wytrenowany za pomocą obrazów, które zawierają 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 listę wykrytych obiektów, lokalizację obwiedni zawierającej każdy obiekt oraz ocenę, która wskazuje, że wykrywanie było poprawne.

Podpis wejściowy

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 kwantowany , każda wartość powinna być pojedynczym bajtem reprezentującym wartość z przedziału od 0 do 255.

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

Podpis wyjściowy

Model generuje cztery tablice, odwzorowane na indeksy 0-4. Tablice 0, 1 i 2 opisują N wykrytych obiektów, z jednym elementem w każdej tablicy odpowiadającym każdemu obiektowi.

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

Na przykład wyobraź sobie, że model został przeszkolony 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 zaufania

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

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

Odcięcie, którego użyjesz, powinno opierać się na tym, czy bardziej czujesz się komfortowo z fałszywymi pozytywami (obiekty, które są błędnie zidentyfikowane lub obszary obrazu, które są błędnie zidentyfikowane jako obiekty, gdy nie są) lub fałszywe negatywy (oryginalne przedmioty, które są przegapili, ponieważ ich zaufanie było niskie).

Na przykład na poniższym obrazku gruszka (która nie jest obiektem, do którego wykrywania został wyszkolony model) została błędnie zidentyfikowana jako „osoba”. To jest przykład fałszywego pozytywnego wyniku, który można zignorować, wybierając odpowiednią wartość graniczną. W takim przypadku odcięcie 0,6 (lub 60%) z łatwością wykluczyłoby fałszywie dodatni wynik.

Zrzut ekranu przedstawiający przykład Androida pokazujący fałszywy alarm

Lokalizacja

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

[ Top, lewo, Dolny, dobrze ]

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

Testy wydajności

Numery testów wydajności dla naszego modelu startowego są generowane za pomocą opisanego tutaj narzędzia.

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

* 4 używane nici.

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

Dostosowywanie modelu

Wstępnie wytrenowane modele

W Detection Zoo można znaleźć modele wykrywania zoptymalizowane pod kątem urządzeń mobilnych, charakteryzujące się różnymi opóźnieniami i precyzją. Każdy z nich jest zgodny z sygnaturami wejściowymi i wyjściowymi opisanymi w kolejnych sekcjach.

Większość suwaków do pobrania zawiera plik model.tflite . Jeśli takiego nie ma, można wygenerować bufor płaski 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 modele wykrywania nie mogą być konwertowane bezpośrednio za pomocą konwertera TensorFlow Lite , ponieważ wymagają one pośredniego etapu generowania modelu źródłowego przyjaznego dla urządzeń mobilnych. Skrypty połączone 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, dokładniejsze przetwarzanie końcowe. Użyj --help ze skryptami, aby zobaczyć pełną listę obsługiwanych argumentów.

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

Jak wybrać model do personalizacji?

Każdy model ma własną precyzję (określaną ilościowo przez wartość mAP) i charakterystykę opóźnienia. 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 o Google Edge TPU na Pixel 4.

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

Dostrajanie modeli na niestandardowych danych

Dostarczane przez nas wstępnie wyszkolone modele są przeszkolone w wykrywaniu 90 klas obiektów. Pełną listę klas można znaleźć w pliku etykiet w metadanych modelu .

Możesz użyć techniki znanej jako transfer learning, aby ponownie wytrenować model w celu rozpoznawania klas spoza oryginalnego zestawu. Na przykład możesz ponownie nauczyć model wykrywania wielu rodzajów warzyw, mimo że w oryginalnych danych szkoleniowych jest tylko jedno warzywo. Aby to zrobić, będziesz potrzebować zestawu obrazów szkoleniowych dla każdej z nowych etykiet, które chcesz wyszkolić. Zobacz naszą Colab wykrywania kilku strzałów jako przykład dostrajania wstępnie wytrenowanego modelu z kilkoma przykładami.

Aby dostosować się do większych zestawów danych, zapoznaj się z tymi przewodnikami dotyczącymi szkolenia własnych modeli za pomocą interfejsu API TensorFlow Object Detection: TF1 , TF2 . Po przeszkoleniu można je przekonwertować na format przyjazny dla TFLite za pomocą instrukcji tutaj: TF1 , TF2