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 😀