1. Zanim zaczniesz
W ramach poprzedniego ćwiczenia w Codelabs utworzyliśmy aplikację na Androida i iOS, w której wykorzystano podstawowy model etykietowania obrazów, który rozpoznaje kilkaset klas obrazów. Urządzenie rozpoznało zdjęcie kwiatu bardzo ogólnie – widziało płatki, kwiat, roślinę i niebo.
Aby zaktualizować aplikację tak, aby rozpoznawała na przykład konkretne kwiaty, stokrotki lub róże, potrzebujesz niestandardowego modelu, który został wytrenowany na wielu przykładach każdego rodzaju kwiatów, które chcesz rozpoznawać.
Wymagania wstępne
- Poprzednie ćwiczenia z programowania w tej ścieżce szkoleniowej.
Czego się nauczysz i czego się nauczysz
- Jak wytrenować model niestandardowy klasyfikatora obrazów za pomocą Kreatora modeli TensorFlow Lite.
Czego potrzebujesz
- Nie potrzebujesz żadnego konkretnego sprzętu – wszystkie zadania możesz wykonać w Google Colab w przeglądarce.
2. Rozpocznij
Cały kod do wykonania został już przygotowany i możesz go wykonać za pomocą Google Colab tutaj. Jeśli nie masz dostępu do Google Colab, możesz skopiować repozytorium i użyć notatnika o nazwie CustomImageClassifierModel.ipynb
, który znajduje się w katalogu ImageClassificationMobile->colab
.
Jeśli masz wiele przykładów konkretnych kwiatów, możesz stosunkowo łatwo wytrenować model za pomocą Kreatora modeli TensorFlow Lite, aby je rozpoznać.
Najprostszym sposobem jest utworzenie pliku .zip lub .tgz zawierającego obrazy i uporządkowanego w katalogach. Jeśli na przykład wykorzystujesz zdjęcia stokrotek, mniszka lekarskiego, róż, słoneczników i tulipanów, możesz uporządkować je w następujący sposób:
Spakuj ją i hostuj na serwerze, aby móc trenować na niej modele. Będziesz używać wersji przygotowanej dla Ciebie w pozostałej części tego modułu.
W tym module zakładamy, że do trenowania modelu używasz Google Colab. Znajdziesz ją na stronie colab.research.google.com. Jeśli używasz innego środowiska, konieczne może być zainstalowanie wielu zależności – zwłaszcza TensorFlow.
3. Instalowanie i importowanie zależności
- Zainstaluj Kreator modeli TensorFlow Lite. Możesz to zrobić przez instalację pipa. Przycisk &> /dev/null at the end just suppresses the output. Kreator modeli generuje wiele elementów, które nie są od razu istotne. Została wstrzymana, aby umożliwić Ci skupienie się na wykonywanym zadaniu.
# Install Model maker
!pip install -q tflite-model-maker &> /dev/null
- Następnie musisz zaimportować biblioteki, których potrzebujesz, i upewnić się, że używasz TensorFlow 2.x:
# Imports and check that we are using TF2.x
import numpy as np
import os
from tflite_model_maker import configs
from tflite_model_maker import ExportFormat
from tflite_model_maker import model_spec
from tflite_model_maker import image_classifier
from tflite_model_maker.image_classifier import DataLoader
import tensorflow as tf
assert tf.__version__.startswith('2')
tf.get_logger().setLevel('ERROR')
Gdy środowisko jest gotowe, możesz zacząć tworzyć model.
4. Pobieranie i przygotowywanie danych
Jeśli obrazy znajdują się w folderach, które są skompresowane, to po pobraniu i zdekompresowaniu obrazów automatycznie oznaczysz obrazy etykietami na podstawie folderu, w którym się znajdują. Ten katalog będzie przywoływany jako data_path
.
data_path = tf.keras.utils.get_file(
'flower_photos',
'https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz',
untar=True)
Tę ścieżkę danych można następnie wczytać do modelu sieci neuronowej na potrzeby trenowania za pomocą klasy ImageClassifierDataLoader
Kreatora modeli TensorFlow Lite. Wystarczy, że skierujesz go na folder.
Ważnym elementem w modelach trenowania z systemami uczącymi się jest niewykorzystywanie wszystkich danych do trenowania. Zaczekaj chwilę, aby przetestować model z użyciem danych, których wcześniej nie widział. Możesz to łatwo zrobić dzięki metodzie podziału zbioru danych, który pochodzi z ImageClassifierDataLoader
. Jeśli wprowadzisz do niego wartość 0, 9, otrzymasz 90% z tych danych jako dane treningowe i 10% jako dane testowe:
data = DataLoader.from_folder(data_path)
train_data, test_data = data.split(0.9)
Po przygotowaniu danych możesz utworzyć przy ich użyciu model.
5. Tworzenie modelu klasyfikatora obrazów
Kreator modeli abstrakcyjnie wiele szczegółów projektowania sieci neuronowej, dzięki czemu nie musisz zajmować się projektowaniem sieci i takimi zagadnieniami jak sploty, gęste, relu, spłaszczone, funkcje utraty czy optymalizatory. W przypadku modelu domyślnego możesz użyć pojedynczego wiersza kodu, aby utworzyć model, trenując sieć neuronowa z użyciem udostępnionych danych:
model = image_classifier.create(train_data)
Po uruchomieniu tego polecenia dane wyjściowe będą wyglądać mniej więcej tak:
Model: "sequential_2"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
_________________________________________________________________
dropout_2 (Dropout) (None, 1280) 0
_________________________________________________________________
dense_2 (Dense) (None, 5) 6405
=================================================================
Total params: 3,419,429
Trainable params: 6,405
Non-trainable params: 3,413,024
_________________________________________________________________
None
Epoch 1/5
103/103 [===] - 15s 129ms/step - loss: 1.1169 - accuracy: 0.6181
Epoch 2/5
103/103 [===] - 13s 126ms/step - loss: 0.6595 - accuracy: 0.8911
Epoch 3/5
103/103 [===] - 13s 127ms/step - loss: 0.6239 - accuracy: 0.9133
Epoch 4/5
103/103 [===] - 13s 128ms/step - loss: 0.5994 - accuracy: 0.9287
Epoch 5/5
103/103 [===] - 13s 126ms/step - loss: 0.5836 - accuracy: 0.9385
W pierwszej części przedstawiona jest architektura modelu. To, co robi za kulisy Kreatora modeli, to funkcja Transfer Learning, która wykorzystuje istniejący już wytrenowany model jako punkt wyjścia i wykorzystuje informacje o tym, jak skonstruowany jest obraz, i wykorzystuje je do zrozumienia tych 5 kwiatów. Można ją odczytać w pierwszym wierszu o treści:
hub_keras_layer_v1v2_2 (HubK (None, 1280) 3413024
Kluczem jest słowo „Hub”, które informuje nas, że ten model pochodzi z TensorFlow Hub. Domyślnie Kreator modeli TensorFlow Lite używa modelu o nazwie „MobileNet” który rozpoznaje 1000 typów obrazów. Logika stwierdza, że stosowana przez nią metodologia, uczenie się „funkcji” do rozróżnienia 1000 klas, można używać wielokrotnie. Te same „funkcje” można przypisać do 5 klas kwiatów, więc nie trzeba uczyć się ich od zera.
Model przeszedł 5 epok, gdzie epoka to pełny cykl trenowania, podczas którego sieć neuronowa stara się dopasować obrazy do etykiet. W 5 epokach, w około 1 minutę, dokładność danych treningowych wyniosła 93,85%. Biorąc pod uwagę, że jest 5 klas, przypadkowe odgadnięcie będzie miało 20% dokładności, więc to jest postęp. (Raport rejestruje też „stratę”, ale na razie możesz to bezpiecznie zignorować).
Wcześniej podzieliłeś dane na dane treningowe i testowe, by uzyskać wskaźnik wydajności sieci na podstawie danych, z których wcześniej nie korzystała. To lepszy wskaźnik tego, jak sieć może działać w świecie rzeczywistym – w tym celu użyj funkcji model.evaluate
w danych testowych:
loss, accuracy = model.evaluate(test_data)
Zwrócony wynik będzie podobny do tego:
12/12 [===] - 5s 115ms/step - loss: 0.6622 - accuracy: 0.8801
Zwróć uwagę na dokładność. Wynosi on 88,01%, więc używając modelu domyślnego w świecie rzeczywistym, można spodziewać się takiego poziomu dokładności. Nie jest to źle w przypadku modelu domyślnego, którego wytrenowano mniej więcej minutę. Oczywiście można będzie wiele zrobić, aby ulepszyć model, i to jest sama nauka!
6. Eksportowanie modelu
Po wytrenowaniu modelu możesz wyeksportować go do formatu .tflite, którego może używać aplikacja mobilna. Kreator modeli zapewnia łatwą metodę eksportowania, której możesz użyć – wystarczy podać katalog, do którego mają zostać wyeksportowane dane.
Oto kod:
model.export(export_dir='/mm_flowers')
Jeśli uruchamiasz ten kod w Google Colab, możesz zobaczyć model, klikając ikonę folderu po lewej stronie ekranu:
Zobaczysz listę bieżącego katalogu. Użyj wskazanego przycisku, aby przesunąć widok w górę. katalog:
W kodzie podanym przez Ciebie do wyeksportowania do katalogu mm_flowers. Otwórz go. Zobaczysz plik o nazwie „model.tflite
”. To jest wytrenowany model.
Wybierz plik. Po prawej stronie pojawią się 3 kropki. Kliknij je, aby wyświetlić menu kontekstowe, z którego możesz pobrać model.
Po kilku chwilach model zostanie pobrany do folderu z pobranymi plikami.
7. Gratulacje
Możesz teraz zintegrować ją ze swoją aplikacją mobilną. Zrobisz to w następnym module.