Wytrenuj i wdróż model klasyfikacji obrazów na urządzeniu za pomocą AutoML Vision w ML Kit

1. Wprowadzenie

Najnowsze postępy w dziedzinie systemów uczących się sprawiły, że komputery mogą stosunkowo łatwo rozpoznawać obiekty na obrazach. W ramach tego ćwiczenia w Codelabs przeprowadzimy Cię przez całą ścieżkę tworzenia modelu klasyfikacji obrazów, który będzie rozpoznawać różne typy obiektów, a potem wdrożysz go w aplikacji na Androida i iOS. ML Kit i AutoML umożliwiają tworzenie i wdrażanie modelu na dużą skalę bez konieczności posiadania specjalistycznej wiedzy z zakresu systemów uczących się.

Co to jest ML Kit?

ML Kit to mobilny pakiet SDK, który udostępnia doświadczenie Google w dziedzinie systemów uczących się w aplikacjach na Androida i iOS w zaawansowanym i łatwym w obsłudze pakiecie. Niezależnie od tego, czy dopiero zaczynasz swoją przygodę z systemami uczącymi się, czy masz już doświadczenie w tej dziedzinie, możesz łatwo wdrożyć potrzebne funkcje za pomocą kilku linijek kodu. Istnieje kilka interfejsów API, które rozpoznają tekst, twarze itp., z których można korzystać od razu. Jeśli jednak musisz rozpoznawać obiekty, które nie są obsługiwane przez interfejsy API, na przykład rozpoznawać różne rodzaje kwiatów na obrazie, musisz wytrenować własny model. AutoML może Ci pomóc w tej kwestii.

Co to jest AutoML?

Cloud AutoML to pakiet usług związanych z systemami uczącymi się, który umożliwia programistom, którzy nie mają dużego doświadczenia z systemami uczącymi się, trenowanie wysokiej jakości modeli dostosowanych do ich potrzeb biznesowych, wykorzystując najnowocześniejsze uczenie maszynowe Google oraz technologię neuronowej architektury wyszukiwania.

W tym ćwiczeniu w programowaniu użyjemy AutoML Vision Edge w ML Kit do wytrenowania modelu klasyfikacji kwiatów. Model jest trenowany w chmurze, ale potem jest dołączany do pakietu lub pobierany przez aplikację, aby w pełni uruchamiać wnioskowania na urządzeniu.

93f21fd287496e4e.png

Czego się nauczysz

  • Jak wytrenować model klasyfikacji obrazów za pomocą AutoML Vision Edge w ML Kit.
  • jak uruchomić go w przykładowej aplikacji na Androida lub iOS za pomocą pakietu SDK ML Kit;

Czego potrzebujesz

W aplikacji na Androida

  • najnowszą wersję Android Studio (3.4 lub nowszą),
  • Emulator Androida Studio ze Sklepem Play lub fizyczne urządzenie z Androidem (wersja 5.0 lub nowsza).
  • Podstawowa wiedza o programowaniu na Androida w Kotlin

W przypadku aplikacji na iOS

  • najnowszą wersję XCode (10.2 lub nowszą),
  • Symulatora iOS lub fizyczne urządzenie z iOS (wersja 9.0 lub nowsza)
  • CocoaPods
  • Podstawowa wiedza o programowaniu na iOS w języku Swift

2. Konfiguracja

Pobieranie kodu i zbioru danych treningowych

Pobierz archiwum ZIP, które zawiera kod źródłowy tego ćwiczenia z programowania i zbiór danych treningowych. Rozpakuj archiwum na komputerze lokalnym.

Utwórz projekt w konsoli Firebase

  1. Otwórz konsolę Firebase.
  2. Wybierz Create New Project (Utwórz nowy projekt) i nadaj projektowi nazwę „ML Kit Codelab”.

Konfigurowanie aplikacji na Androida

  1. Dodaj naszą aplikację na Androida do projektu Firebase. Nazwa pakietu na Androida: com.google.firebase.codelab.mlkit.automl
  2. Pobierz plik konfiguracyjny google-services.json i umieść go w aplikacji na Androida pod adresem android/mlkit-automl/app/google-services.json.

Konfigurowanie aplikacji na iOS

  1. Dodaj naszą aplikację na iOS do projektu Firebase. Identyfikator pakietu na iOS: com.google.firebase.codelab.mlkit.automl
  2. Pobierz plik konfiguracyjny GoogleService-Info.plist i postępuj zgodnie z instrukcjami, aby umieścić go w aplikacji na iOS na stronie ios/mlkit-automl/GoogleService-Info.plist.

3. Przygotowywanie zbioru danych treningowych

Aby wytrenować model do rozpoznawania różnych typów obiektów, musisz przygotować zestaw obrazów i oznaczyć każdy z nich etykietą. Utworzyliśmy archiwum zdjęć kwiatów na licencji Creative-commons, które możesz wykorzystać w ramach tego ćwiczenia z programowania.

Zbiór danych jest spakowany w pliku ZIP o nazwie flower_photos.zip, który znajduje się w archiwum ZIP pobranym w poprzednim kroku.

Przeglądaj zbiór danych

Jeśli rozpakujesz plik flower_photos.zip, zobaczysz, że zbiór danych zawiera obrazy 5 rodzajów kwiatów: mniszka lekarskiego, stokrotek, tulipanów, słoneczników i róż uporządkowanych w foldery o nazwach takich kwiatów. Jest to przydatny sposób na utworzenie zbioru danych treningowych, który będzie przesyłać dane do AutoML i wytrenować model klasyfikacji obrazów.

W tym zbiorze danych treningowych jest 200 obrazów na każdy rodzaj kwiatu. Aby wytrenować model, potrzebujesz tylko co najmniej 10 obrazów na zajęcia. Jednak więcej obrazów do trenowania pozwala uzyskać lepsze modele.

e5772b6527a6048d.png 6c4443d31cd5653e.png

4. Trenuj model

Prześlij zbiór danych treningowych

  1. W konsoli Firebase otwórz utworzony przed chwilą projekt.
  2. Wybierz ML Kit > AutoML.
  3. Możesz zobaczyć kilka ekranów powitalnych. W razie potrzeby kliknij Rozpocznij.
  1. Po zakończeniu konfiguracji wybierz Dodaj zbiór danych i nadaj mu nazwę „Kwiaty”.
  2. W sekcji Cel związany z modelem wybierz Klasyfikacja z jedną etykietą, ponieważ dane treningowe zawierają tylko 1 etykietę na obraz.
  3. Kliknij Utwórz.
  4. Prześlij plik flower_photos.zip pobrany w poprzednim kroku, aby zaimportować zbiór danych do trenowania kwiatów.
  5. Poczekaj kilka minut na zakończenie zadania importu.
  6. Możesz teraz sprawdzić, czy zbiór danych został prawidłowo zaimportowany.
  7. Ponieważ wszystkie obrazy w zbiorze danych treningowych zostały oznaczone etykietami, możesz przejść do wytrenowania modelu.

cdb18b61f890934f.png

Trenowanie modelu klasyfikacji obrazów

Ponieważ nasz model będzie działać na urządzeniu mobilnym o ograniczonej mocy obliczeniowej i pamięci masowej, musimy brać pod uwagę nie tylko jego dokładność, ale także jego rozmiar i szybkość. Zawsze występuje kompromis między dokładnością modelu, czasem oczekiwania (tj.czasem potrzebnym na sklasyfikowanie obrazu) a jego rozmiarem. Model o większej dokładności jest zwykle większy, a sklasyfikowanie obrazu zajmuje więcej czasu.

AutoML udostępnia kilka opcji: możesz wybrać optymalizację pod kątem dokładności, zoptymalizować czas oczekiwania i rozmiar modelu, a także zrównoważyć te różnice. Możesz też wybrać, jak długo model ma trenować. Większe zbiory danych muszą trenować dłużej.

dd6b7eaa2dd5a9de.png

Oto kroki, jeśli chcesz samodzielnie wytrenować model.

  1. Kliknij Wytrenuj model.
  2. Wybierz opcję Zwykłe obciążenia i 1 godzina obliczeniowa.
  3. Poczekaj (prawdopodobnie kilka godzin), aż zadanie trenowania się zakończy.
  4. Po zakończeniu zadania trenowania zobaczysz wskaźniki oceny dotyczące działania wytrenowanego modelu.

73f98fbed5ae5ee5.png

5. Używaj modelu w aplikacjach mobilnych

Przygotowanie

  • To ćwiczenie w Codelabs zawiera przykładową aplikację na Androida i iOS, która pokazuje, jak korzystać z wytrenowanego wcześniej modelu klasyfikacji obrazów w aplikacji mobilnej. Obie aplikacje mają podobne funkcje. Możesz wybrać platformę, którą znasz lepiej.
  • Zanim przejdziesz dalej, pobierz przykładowe aplikacje i skonfiguruj je w kroku 2.
  • Upewnij się też, że Twoje środowisko lokalne zostało skonfigurowane, aby można było tworzyć aplikacje na wybraną platformę (Android lub iOS).

Pobierz model klasyfikacji obrazów

  • Jeśli model został wytrenowany w poprzednim kroku, wybierz Pobierz, aby go pobrać.
  • Jeśli model nie został wytrenowany lub zadanie trenowania jeszcze się nie zakończyło, możesz użyć modelu uwzględnionego w przykładowych aplikacjach.

Dodaj model do przykładowych aplikacji

Wystarczy, że dodasz model do przykładowych aplikacji, a będą one działać od razu. Pełny przewodnik na temat integracji ML Kit AutoML z aplikacją znajdziesz w dokumentacji ( Android, iOS). Kod, który wchodzi w interakcję z pakietem ML Kit SDK, znajduje się odpowiednio w pliku ImageClassifier.kt i ImageClassifier.swift, więc możesz zacząć od tego, aby lepiej poznać działanie aplikacji.

Model można wdrożyć na 2 sposoby: lokalnie i zdalnie.

  • Model lokalny jest używany głównie do łączenia modelu klasyfikacji obrazów w plik binarny aplikacji, ale można go też udostępnić modelom zapisanym w pamięci lokalnej. Dzięki temu model jest dostępny dla użytkowników od razu po pobraniu Twojej aplikacji z App Store lub Sklepu Play i działa bez połączenia z internetem.
  • Model zdalny oznacza, że model jest hostowany w Firebase i zostanie pobrany na urządzenie użytkownika tylko wtedy, gdy jest potrzebny po raz pierwszy. Po tym czasie model będzie działać także offline.

2e71ed2c7cb8757c.png

Aplikacja na Androida

  1. Otwórz Android Studio.
  2. Zaimportuj aplikację na Androida do konta android/mlkit-automl/.
  3. (Opcjonalnie) Wyodrębnij pobrany model i skopiuj jego zawartość do modelu uwzględnionego w przykładowej aplikacji. 10cf6b1e0f34de29.png
  4. Teraz kliknij Uruchom ( c8b8a080b7ead886.png) na pasku narzędzi Android Studio i sprawdź, czy rozpoznaje różne rodzaje kwiatów.

2e71ed2c7cb8757c.png

Aplikacja na iOS

  1. Otwórz Terminal i przejdź do folderu ios/mlkit-automl/
  2. Uruchom pod install, aby pobrać zależności za pomocą Cocoapods
  3. Uruchom open MLVisionExample.xcworkspace/, aby otworzyć obszar roboczy projektu w Xcode.
  4. (Opcjonalnie) Wyodrębnij pobrany model i skopiuj jego zawartość do modelu uwzględnionego w przykładowej aplikacji w ios/ml-automl/Resources/automl/cd291fe04bcdc6ee.png
  5. Teraz kliknij Uruchom ( 16629f86bbeb4208.png) na pasku narzędzi Xcode i sprawdź, czy rozpoznaje różne rodzaje kwiatów.

65172c3f35336d4e.png

6. (Opcjonalnie) Użyj modelu zdalnego

Model zdalny ML Kit pozwala nie umieszczać modeli Tensorflow Lite w pliku binarnym aplikacji, ale pobierać je na żądanie z Firebase w razie potrzeby. Modele zdalne mają kilka zalet w porównaniu z modelami lokalnymi:

  • Mniejszy plik binarny aplikacji
  • Możliwość aktualizowania modeli bez aktualizowania aplikacji
  • Testy A/B z użyciem wielu wersji modelu

W tym kroku opublikujemy model zdalny i wykorzystamy go w przykładowych aplikacjach. Pamiętaj, aby w kroku 4 tego ćwiczenia z programowania zakończyć trenowanie modelu.

Publikowanie modelu

  1. Otwórz konsolę Firebase.
  2. Wybierz „ML Kit AutoML Codelab”. utworzonego wcześniej projektu.
  3. Wybierz ML Kit > AutoML.
  4. Wybierz „Kwiaty”. utworzonego wcześniej zbioru danych.
  5. Sprawdź, czy zadanie trenowania zostało ukończone, a następnie wybierz model.
  6. Kliknij Opublikuj i nadaj mu nazwę „mlkit_flowers”. b63a58b83e814acd.png

Rozpoznawaj kwiaty dzięki zdalnemu modelowi

Przykładowe aplikacje są skonfigurowane do używania modelu zdalnego, jeśli jest dostępny. Po opublikowaniu modelu zdalnego musisz tylko ponownie uruchomić aplikacje, aby aktywować pobieranie modelu. Aby sprawdzić, czy aplikacja używa modelu zdalnego, spójrz na „Źródło” w stopce ekranu aplikacji. Patrz sekcja „Rozwiązywanie problemów” poniżej.

7c8292293fd858ad.png de359886ccecef2.png

Rozwiązywanie problemów

Jeśli przykładowa aplikacja nadal używa modelu lokalnego, sprawdź, czy nazwa modelu zdalnego w kodzie jest prawidłowo ustawiona.

Aplikacja na Androida

  1. Wejdź na ImageClassifier.kt i znajdź ten blok.
val remoteModel = FirebaseRemoteModel.Builder(REMOTE_MODEL_NAME).build()
  1. Sprawdź, czy nazwa modelu ustawiona w kodzie jest zgodna z nazwą modelu opublikowaną wcześniej za pomocą konsoli Firebase.
  2. Teraz kliknij Uruchom ( c8b8a080b7ead886.png) na pasku narzędzi Android Studio, aby ponownie uruchomić aplikację.

Aplikacja na iOS

  1. Przejdź do ImageClassifier.swift i znajdź ten blok,
return RemoteModel(
  name: Constant.remoteAutoMLModelName,
  allowsModelUpdates: true,
  initialConditions: initialConditions,
  updateConditions: updateConditions
)
  1. Sprawdź, czy nazwa modelu ustawiona w kodzie jest zgodna z nazwą modelu opublikowaną wcześniej za pomocą konsoli Firebase
  2. Teraz kliknij Uruchom ( 16629f86bbeb4208.png) na pasku narzędzi Xcode, aby ponownie uruchomić aplikację.

7. Gratulacje!

Udało Ci się przejść całą ścieżkę trenowania modelu klasyfikacji obrazów z wykorzystaniem własnych danych treningowych przy użyciu AutoML, a następnie wykorzystać go w aplikacji mobilnej za pomocą ML Kit.

Zapoznaj się z naszą dokumentacją, aby dowiedzieć się, jak zintegrować AutoML Vision Edge z własną aplikacją ML Kit.

Możesz też wypróbować nasze przykładowe aplikacje ML Kit, aby poznać inne funkcje Firebase ML Kit.

Przykłady na Androida

Przykłady na iOS