Chcę utworzyć klasyfikator obrazów, ale nie znam Pythona. Tensorflow.js działa z javascript, który znam. Czy można na tym trenować modele i jakie kroki należy tego dokonać? Szczerze mówiąc, nie mam pojęcia, od czego zacząć.
Jedyne, co wymyśliłem, to jak załadować „mobilenet”, który najwyraźniej jest zestawem wstępnie przeszkolonych modeli i klasyfikować za pomocą niego obrazy:
const tf = require('@tensorflow/tfjs'),
mobilenet = require('@tensorflow-models/mobilenet'),
tfnode = require('@tensorflow/tfjs-node'),
fs = require('fs-extra');
const imageBuffer = await fs.readFile(......),
tfimage = tfnode.node.decodeImage(imageBuffer),
mobilenetModel = await mobilenet.load();
const results = await mobilenetModel.classify(tfimage);
co działa, ale nie ma dla mnie sensu, ponieważ chcę trenować własny model, używając moich obrazów z tworzonymi przeze mnie etykietami.
=======================
Powiedz, że mam kilka zdjęć i etykiet. Jak używać ich do trenowania modelu?
const myData = JSON.parse(await fs.readFile('files.json'));
for(const data of myData){
const image = await fs.readFile(data.imagePath),
labels = data.labels;
// how to train, where to pass image and labels ?
}
fit
metody lub w przekazywanym zestawie danychfitDataset
, jak pokazano w przykładach.Odpowiedzi:
Przede wszystkim obrazy należy przekonwertować na tensory. Pierwszym podejściem byłoby utworzenie tensora zawierającego wszystkie cechy (odpowiednio tensora zawierającego wszystkie etykiety). Tak powinno być tylko wtedy, gdy zestaw danych zawiera kilka obrazów.
Etykiety byłyby tablicą wskazującą typ każdego obrazu
Trzeba teraz stworzyć gorące kodowanie etykiet
Gdy pojawią się tensory, należałoby stworzyć model treningu. Oto prosty model.
Następnie model można wytrenować
Jeśli zestaw danych zawiera wiele obrazów, należałoby zamiast tego utworzyć tfDataset. Ta odpowiedź wyjaśnia, dlaczego.
I użyj
model.fitDataset(ds)
do trenowania modeluPowyższe dotyczy treningu w nodejs. Aby wykonać takie przetwarzanie w przeglądarce,
genFeatureTensor
można napisać w następujący sposób:Jedno słowo ostrożności: ciężkie przetwarzanie może zablokować główny wątek w przeglądarce. Tutaj wchodzą w grę pracownicy sieci.
źródło
tf.image.resizeBilinear
Rozważ przykład https://codelabs.developers.google.com/codelabs/tfjs-training-classfication/#0
Co oni robią to:
następnie trenuj
Zestaw danych jest następujący:
Duży obraz jest podzielony na n pionowych fragmentów. (n jest chunkSize)
Rozważ kawałek rozmiaru 2.
Biorąc pod uwagę macierz pikseli obrazu 1:
Biorąc pod uwagę matrycę pikseli obrazu 2, jest
Powstała tablica byłaby
1 2 3 4 5 6 7 8 9 1 2 3
(jakoś konkatenacja 1D)Zasadniczo pod koniec przetwarzania masz duży bufor reprezentujący
[...Buffer(image1), ...Buffer(image2), ...Buffer(image3)]
Tego rodzaju formatowanie wykonuje się często w przypadku problemów z klasyfikacją. Zamiast klasyfikować za pomocą liczby, biorą tablicę boolowską. Aby przewidzieć 7 z 10 klas, które rozważymy
[0,0,0,0,0,0,0,1,0,0] // 1 in 7e position, array 0-indexed
Co możesz zrobić, aby zacząć?
Poniżej I podklasę
MNistData::load
(resztę można pozostawić taką, jaka jest (z wyjątkiem script.js, gdzie zamiast tego należy utworzyć instancję własnej klasy)Nadal generuję obrazy 28 x 28, piszę na nich cyfrę i uzyskuję idealną dokładność, ponieważ nie uwzględniam szumu ani dobrowolnie niewłaściwych etykiet.
źródło
Znalazłem tutorial [1], jak wykorzystać istniejący model do szkolenia nowych klas. Główne części kodu tutaj:
index.html head:
index.html body:
index.js:
Główną ideą jest wykorzystanie istniejącej sieci do wykonania prognozy, a następnie zastąpienie znalezionej etykiety własną.
Kompletny kod znajduje się w samouczku. Kolejna obiecująca, bardziej zaawansowana w [2]. Wymaga ścisłego wstępnego przetwarzania, więc zostawiam to tylko tutaj, to znaczy, że jest o wiele bardziej zaawansowane.
Źródła:
[1] https://codelabs.developers.google.com/codelabs/tensorflowjs-teachablemachine-codelab/index.html#6
[2] https://towardsdatascience.com/training-custom-image-classification-model-on-the-browser-with-tensorflow-js-and-angular-f1796ed24934
źródło
TL; DR
MNIST to rozpoznawanie obrazów Hello World. Po nauczeniu się na pamięć, te pytania w twoim umyśle są łatwe do rozwiązania.
Ustawienie pytania:
Twoje główne pytanie jest napisane
wewnątrz twojego bloku kodu. Dla tych znalazłem idealną odpowiedź z przykładów sekcji przykładów Tensorflow.js: przykład MNIST. Moje poniższe linki mają czystą wersję javascript i node.js oraz objaśnienie Wikipedii. Przejdę je na poziomie niezbędnym do odpowiedzi na główne pytanie w twoim umyśle i dodam również perspektywy, w jaki sposób twoje własne obrazy i etykiety mają cokolwiek wspólnego z zestawem obrazów MNIST i przykładami z nich korzystającymi.
Po pierwsze:
Fragmenty kodu.
gdzie przekazać obrazy (próbka Node.js)
Uwagi:
Zestaw danych MNIST to ogromny obraz, w którym w jednym pliku znajduje się kilka obrazów, takich jak kafelki w puzzlach, każdy o tym samym rozmiarze, obok siebie, jak pola w tabeli koordynacyjnej xiy. Każde pudełko ma jedną próbkę, a odpowiednie xiy w tablicy etykiet mają etykietę. Z tego przykładu nie jest wielkim problemem, aby zmienić go na kilka formatów plików, tak że właściwie tylko jedno zdjęcie na raz jest przekazywane pętli while do obsługi.
Etykiety:
Uwagi:
W tym przypadku etykiety są również danymi bajtowymi w pliku. W świecie Javascript i przy podejściu do punktu wyjścia etykiety mogą być również tablicą json.
wytrenuj model:
Uwagi:
Oto
model.fit
właściwy wiersz kodu, który działa: trenuje model.Wyniki całej sprawy:
Uwaga:
W Data Science, również tym razem, najbardziej fascynujące jest to, jak dobrze model przetrwa test nowych danych i żadnych etykiet, czy może je oznaczać, czy nie? Jest to część ewaluacyjna, która drukuje nam teraz niektóre liczby.
Utrata i dokładność: [4]
..
Więcej informacji:
Na stronach github w pliku README.md znajduje się link do samouczka, w którym wszystko w przykładzie github wyjaśniono bardziej szczegółowo.
[1] https://github.com/tensorflow/tfjs-examples/tree/master/mnist
[2] https://github.com/tensorflow/tfjs-examples/tree/master/mnist-node
[3] https://en.wikipedia.org/wiki/MNIST_database
[4] Jak interpretować „utratę” i „dokładność” dla modelu uczenia maszynowego
źródło