Machine Learning – podejście nr 1: tagowanie obrazków

Zadanie, które chodzi mi po głowie już od dawna, to dokończenie tagowania postów na wizualnym archiwum rzeczy, które z jakiegoś powodu mi się spodobały. Na tumblrze, którego prowadzę od grudnia 2011 roku zgromadziłem setki obrazków: zdjęć, grafik, rysunków i fotografii.

Niestety przeszukiwanie i przeglądanie tego archiwum jest trudne, ponieważ nie zawsze tagowałem każdy post, który publikowałem. „Czas to nadrobić!” – pomyślałem kiedyś i zdałem sobie sprawę, że postów jest ponad 1000 i dodanie tagu do każdego będzie pracochłonnym zadaniem.

Tu z pomocą przychodzi Machine Learning (ML) oraz uczenie nadzorowane (supervised learning). Zamierzam wykorzystać jego możliwości, aby każdemu obrazkowi przyporządkować jeden tag: painting, drawing, graphics, photography.

Zadanie nr 1
Dodaj tagi (painting, drawing, graphics, photography) do wszystkich postów na tumblrze malowiele.tumblr.com

Schemat rozwiązania

  1. Pobierz wszystkie obrazki wraz z ich identyfikatorami na dysk
  2. Wytrenuj model: wyucz go na grupie testowej (10-20%) jak wyglądają przykłady obrazków otagowanych jako fotografia, obraz, rysunek i grafika
  3. Zastosuj wytrenowany model do pozostałych obrazków – grupy docelowej (80-90%)
  4. Nadaj tagi poprzez Tumblr API

Narzędzia

W środowisku uczenia maszynowego najpopularniejszy język to Python. Łatwy w obsłudze, posiada prostą składnię. Powstało do niego wiele bibliotek do ML m.in. scikit. Opiera się na nim także framework do deep learningu od Google – Tensorflow. Niestety, wykorzystanie pełnych możliwości Pythona i jego bibliotek jest o wiele łatwiejsze pod Linuxem niż pod Windowsem. Na początek spróbuję zatem użyć Accord’a. Napisany w .NET framework ułatwia obliczenia statystyczne a także analizę obrazów.

Potencjalne trudności

  • Czym tak naprawdę różnią się od siebie fotografia, obraz, grafika czy rysunek i które z tych różnic są widoczne dla algorytmu? Użyte kolory, paleta barw, poziom szczegółów, kontrast?
  • Próba testowa? W kolekcji mam około 1000 obrazków. Zakładając, że grupa testowa to 100-200 obrazków dla każdej kategorii mam 25-50 reprezentantów testowych – czy to wystarczy?
  • Jak długo będą przetwarzać się obrazki?
  • Czy mniej popularny framework sprosta wyzwaniu?
  • Czy wyzwaniu sprostam ja sam? 😀 To jedne z pierwszych moich kroków w ML i zastanawiam się czy wyzwanie nie jest zbyt ambitne.

Pierwsze wyniki mam nadzieję otrzymać w weekend, gdy usiądę do kodu.