Przejdź do treści

ML.NET – klasyfikacja obrazów

  • przez

Postanowiłem się trochę pobawić ML.NET. Do tej pory „zapoznawałem się” z tematem głównie przy użyciu bibliotek pisanych dla języka python. Przy okazji użyję bardzo pomocnych moim zdaniem notesów (.NET interactive notebooks) 🙂

Polecam artykuł Andrew o notebooks. Myślę, że opisał bardzo zrozumiale jak zacząć przygodę z .NET interactive notebooks.

Jeśli chodzi o ML.NET to ja zacząłem od przeczytania artykułu na stronie microsoft Tutorial: Train an ML.NET classification model to categorize images. Przykład, który tam się znajduje pokazuje jak w łatwy sposób można użyć ML.NET do klasyfikowania obrazów. W tym artykule zamierzam zrobić coś podobnego, ale będę rozróżniał klucze, śrubokręty i młotki.

Idea działania jest następująca:

  • w katalogu images mamy trzy katalogi wrench, screwdriver i hammer. Do tych katalogów kopiujemy obrazki z odpowiednimi narzędziami (ze względów licencyjnych nie dam Ci przykładowych obrazków)
  • otagowanie obrazków wykona metoda CreateTsvFiles(). Metoda dopasowuje pliki z katalogu do taga, np. pliki z katgalogu hammer zostaną oznaczone jako hammer
  • w katalogu test będą obrazki, które będziemy chcieli sklasyfikować (sprawdzić co to jest). Ja tam umieszczę 3 pliki hammer.jpg, screwdriver.jpg i wrench.jpg. Powinny zostać oznaczone według nazwy.

Do testów użyłem plików znalezionych w google. Nie było ich jakoś bardzo dużo, bo po ok 10 z każdego rodzaju narzędzia. Model prawidłowo rozpoznał narzędzia, ale tak naprawdę cel tego przykładu był inny – chciałem sprawdzić jak działa ML.NET. Moim zdaniem działa fajnie, ale też jest takim blackboxem. Co też ma swoje zalety 🙂 Ale ma też wady. Wyniki testu:

[hammer.jpg] jest [hammer] z wynikiem [0.5069281]
[screwdriver.jpg] jest [screwdriver] z wynikiem [0.66097254]
[wrench.jpg] jest [wrench] z wynikiem [0.68434316]

Repozytorium znajdziesz tutaj. Ważne!! W repozytorium nie ma testowych obrazków. Wrzucam puste obrazki tylko po to aby struktura katalogów była w miarę oczywista 🙂

Struktura katalogów powinna wyglądać na przykład tak:

A to przykład uruchomienia notesu (nie wiem czy ta polska nazwa jest ok 😀 Dla mnie brzmi trochę dziwnie)

Przyznam szczerze, że nie wiem w tym momencie czy dalej będę używał ML.NET czy python. Ale temat dość mocno mnie zaciekawił i mam nadzieję,że znajdę czas na kolejne przygody 😀