1. Wprowadzenie
TensorFlow to wielofunkcyjna platforma systemów uczących się. TensorFlow można używać w każdym miejscu: od trenowania ogromnych modeli w klastrach w chmurze po uruchamianie modeli lokalnie w umieszczonym systemie takim jak telefon.
W ramach tych ćwiczeń w Codelabs wykorzystano TensorFlow Lite do uruchomienia modelu rozpoznawania obrazów na urządzeniu z iOS.
Czego się nauczysz
- Jak zoptymalizować model za pomocą konwertera TFLite.
- Jak uruchomić go w gotowej aplikacji na iOS przy użyciu interpretera TFLite.
Co utworzysz
Prosta aplikacja aparatu, która rozpoznaje kwiaty przy użyciu programu do rozpoznawania obrazów TensorFlow.
Wymagania wstępne
Jeśli wykonujesz ćwiczenia z programowania na własnym sprzęcie, upewnij się, że masz zainstalowane:
- Xcode 10 lub nowsza
- CocoaPods w wersji 1.8.0 lub nowszej
Licencja: do użytku bezpłatnie
2. Wytrenuj system rozpoznawania kwiatów za pomocą Colab
To ćwiczenia w programie będą korzystać z Colaboratory i Xcode.
Otwórz Colab, który używa Kreatora modeli TensorFlow Lite, aby wytrenować klasyfikator do rozpoznawania kwiatów za pomocą systemów uczących się i wyeksportować model TFLite do użycia w aplikacji mobilnej.
3. Skonfiguruj katalog roboczy
Klonowanie repozytorium Git
Następujące polecenie sklonuje repozytorium Git zawierające pliki wymagane do wykonania tego ćwiczenia z programowania:
git clone https://github.com/tensorflow/examples.git
Teraz cd
do głównego projektu Xcode utworzonego właśnie klona. W tym miejscu będziesz wykonywać resztę tego ćwiczenia z programowania:
cd examples/lite/examples/image_classification/ios
4. Konfigurowanie aplikacji na iOS
Zainstaluj zależności
Za pomocą CocoaPods zainstaluj zależności aplikacji na iOS (w tym TensorFlow Lite). Po zakończeniu polecenia instalacji otwórz ImageClassification.xcworkspace
, aby otworzyć projekt w Xcode.
pod install --repo-update open ImageClassification.xcworkspace
5. Przetestuj uruchamianie aplikacji
Aby używać kamery, musisz uruchomić aplikację na prawdziwym urządzeniu, ponieważ symulator iOS nie ma dostępu do aparatu Maca. Aby utworzyć kompilację na urządzeniu z iOS, musisz należeć do programu Apple dla deweloperów lub mieć dostęp do urządzenia, które udostępniła Ci inna osoba.
Jeśli chcesz uruchomić to ćwiczenia z programowania w symulatorze, musisz skopiować obrazy do wklejenia z Safari w samym symulatorze. Oto kroki przetwarzania zdjęcia za pomocą symulatora:
- Utwórz aplikację do wybranego celu symulatora.
- W symulatorze iOS naciśnij Cmd+Shift+H, aby zminimalizować aplikację.
- Dotknij Safari u dołu ekranu głównego i wyszukaj obraz.
- W wynikach wyszukiwania Grafiki Google kliknij wynik i przytrzymaj obraz. W wyświetlonym oknie wybierz „Kopiuj”.
- Wróć do aplikacji TFL Classify. Skopiowany obraz powinien wyświetlić się automatycznie wraz z wynikami wnioskowania. Jeśli tak nie jest, upewnij się, że zostały skopiowane dane zdjęcia, a nie adres URL obrazu.
Testowanie kompilacji i instalowania aplikacji
Zanim wprowadzisz jakiekolwiek zmiany w aplikacji, uruchom wersję, która jest wysyłana razem z repozytorium. Wybierz swoje urządzenie z iOS z menu w lewym górnym rogu:
Następnie naciśnij klawisze Cmd + R lub kliknij przycisk Odtwórz w Xcode, aby utworzyć aplikację na swoim urządzeniu. Aplikacja powinna uruchomić się automatycznie po zainstalowaniu na urządzeniu.
Ta wersja aplikacji korzysta ze standardowej platformy MobileNet, która została wstępnie wytrenowana na podstawie 1000 kategorii ImageNet. Powinna wyglądać mniej więcej tak:
6. Uruchamianie dostosowanej aplikacji
Domyślna konfiguracja aplikacji klasyfikuje obrazy w jednej z 1000 klas ImageNet przy użyciu standardowej MobileNet.
Zmodyfikujmy teraz aplikację, aby korzystała z naszego ponownie wytrenowanego modelu na potrzeby niestandardowych kategorii obrazów wytrenowanych w Colab.
7. Przekonwertuj aplikację, aby uruchomić model
Dodaj pliki modelu do projektu
Zasoby modelu projektu znajdują się w nawigatorze projektów Xcode w lokalizacji ImageClassification > Model
. Aby je zastąpić, najpierw usuń 2 dotychczasowe pliki w grupie Model
. Gdy pojawi się komunikat, wybierz „Przenieś do kosza”:
Następnie przeciągnij pliki model.tflite
i labels.txt
pobrane z Colab do grupy modeli. Gdy pojawi się komunikat, zaznacz Copy items if needed
i Add to targets
.
Modyfikowanie kodu aplikacji
Aby aplikacja działała, musimy zaktualizować ścieżkę logiki wczytywania modelu, wskazującą nowo dodany model.
Otwórz ModelDataHandler.swift (ścieżka nawigacyjna Xcode: klasyfikacja obrazów -> ModelDataHandler -> ModelDataHandler.swift) i zmień wiersz 36 na
// before static let modelInfo: FileInfo = (name: "mobilenet_quant_v1_224", extension: "tflite") // after static let modelInfo: FileInfo = (name: "model", extension: "tflite")
Pamiętaj, by zapisać wszystkie zmiany.
8. Uruchamianie aplikacji dostosowanej
Naciśnij klawisze Cmd+B lub kliknij przycisk Odtwórz w Xcode, aby utworzyć aplikację na swoim urządzeniu. Po uruchomieniu aplikacja powinna wyglądać mniej więcej tak:
Aby zrobić zrzut ekranu, możesz przytrzymać przyciski zasilania i zwiększania głośności.
Teraz wyszukaj w internecie kwiaty, skieruj aparat na ekran komputera i sprawdź, czy zdjęcia są poprawnie sklasyfikowane.
Możesz też poprosić znajomego o zrobienie Ci zdjęcia i sprawdzić, jakim typem TensorFlower jesteś
.
9. Jak to działa?
Teraz gdy aplikacja jest już uruchomiona, przyjrzyjmy się kodowi TensorFlow Lite.
TensorFlowLiteSwift
Ta aplikacja korzysta z biblioteki TensorFlowLite Swift w CocoaPods. Biblioteka Swift jest cienkim kodem interfejsu TFLite C API, który sam w sobie jest otoką biblioteki TFLite C++.
Poniższe wiersze w pliku Podfile modułu pobierają do projektu najnowszą wersję globalnego repozytorium specyfikacji podów CocoaPods.
target 'ImageClassification' do
use_frameworks!
# Pods for ImageClassification
pod 'TensorFlowLiteSwift'
end
Korzystanie z interfejsu TensorFlow Lite Swift API
Kod, który wchodzi w interakcję z TensorFlow Lite, jest zawarty w ModelDataHandler.swift.
Konfiguracja
Pierwszy blok zainteresowań to inicjator dla ModelDataHandler
:
/// A failable initializer for `ModelDataHandler`. A new instance is created if the model and
/// labels files are successfully loaded from the app's main bundle. Default `threadCount` is 1.
init?(modelFileInfo: FileInfo, labelsFileInfo: FileInfo, threadCount: Int = 1) {
let modelFilename = modelFileInfo.name
// Construct the path to the model file.
guard let modelPath = Bundle.main.path(
forResource: modelFilename,
ofType: modelFileInfo.extension
) else {
print("Failed to load the model file with name: \(modelFilename).")
return nil
}
// Specify the options for the `Interpreter`.
self.threadCount = threadCount
var options = InterpreterOptions()
options.threadCount = threadCount
do {
// Create the `Interpreter`.
interpreter = try Interpreter(modelPath: modelPath, options: options)
// Allocate memory for the model's input `Tensor`s.
try interpreter.allocateTensors()
} catch let error {
print("Failed to create the interpreter with error: \(error.localizedDescription)")
return nil
}
// Load the classes listed in the labels file.
loadLabels(fileInfo: labelsFileInfo)
}
Jest kilka wierszy, które należy omówić bardziej szczegółowo.
Następujący wiersz tworzy interpreter TFLite:
interpreter = try Interpreter(modelPath: modelPath, options: options)
Tłumacz odpowiada za przekazywanie nieprzetworzonych danych przez graf TensorFlow. Przekazujemy interpreterowi ścieżkę do naszego modelu na dysku, który następnie interpretuje jako FlatBufferModel.
Ostatni wiersz wczytuje listę etykiet:
loadLabels(fileInfo: labelsFileInfo)
Pozwala to jedynie wczytać ciągi tekstowe z pliku tekstowego do pamięci.
Uruchamianie modelu
Drugi blok zainteresowań to metoda runModel
. Pobiera ona CVPixelBuffer
jako dane wejściowe, uruchamia tłumacza i zwraca tekst do wydrukowania w aplikacji.
try interpreter.copy(rgbData, toInputAt: 0)
// ...
try interpreter.invoke()
// ...
outputTensor = try interpreter.output(at: 0)
10. Co dalej?
Oto kilka linków do dodatkowych informacji:
- Więcej informacji na temat TFLite znajdziesz w dokumentacji na stronie tensorflow.org i w repozytorium źródłowym.
- Wypróbuj inne wstępnie wytrenowane modele TFLite, w tym wykrywacz słów-kluczy i inteligentną wersję inteligentnej odpowiedzi działającą na urządzeniu.
- Więcej ogólnych informacji o TensorFlow znajdziesz w dokumentach Pierwsze kroki.