UWAGA! Używamy plików cookies, by ułatwić korzystanie z naszego serwisu. Jeśli nie chcesz, by pliki cookies były zapisywane na Twoim dysku zmień ustawienia swojej przeglądarki. Co to są pliki cookies?



Wolfram Language
Machine Learning
Uczenie maszyn z Wolfram Language
funkcje dedykowane i predefiniowane klasyfikatory
W środowisku programu Mathematica dostępnych jest szereg procedur dedykowanych określonym zagadnieniom z dziedziny maszyn uczących się oraz predefiniowanych klasyfikatorów bazujących na algorytmach uczenia nadzorowanego.

Klasyfikacja i rozpoznawanie treści graficznych
Binarny klasyfikator treści graficznych
Wykrywanie twarzy
Rozpoznawanie twarzy sławnych ludzi

  • Klasyfikacja i rozpoznawanie treści graficznych
  • Procedura ImageIdentify

    Procedura wymaga połączenia z Wolfram Cloud, a ponieważ producent rozwija nieustannie klasyfikatory wbudowane może ulegać zmianom zbiór uczący i metoda trenowania modelu, dlatego w różnych wersjach programu ten sam obraz może być różnie klasyfikowany.

    Składnia

    KlasyfikatorTresciGraficznej_1.gif

    Procedura wymaga połączenia z Wolfram Cloud, gdyż pobiera aktualne dane do pracy klasyfikatora. Kopia danych przechowywana jest lokalnie, więc kolejne wywołanie procedury nie wymaga już pobierania danych, chyba że uległy one aktualizacji. Klasyfikator będzie pracował na raz pobranych danych bez ograniczeń czasowych, ale procedury ulegają modernizacji i wskazane jest utrzymywać aktywne połączenie z serwerem producenta, aby klasyfikatory predefiniowane mogły podlegać aktualizacji.

    Przykład

    KlasyfikatorTresciGraficznej_2.gif

    KlasyfikatorTresciGraficznej_3.png

    KlasyfikatorTresciGraficznej_4.gif

    KlasyfikatorTresciGraficznej_5.png

    KlasyfikatorTresciGraficznej_6.gif

    KlasyfikatorTresciGraficznej_7.png

    Każdy uczy się przez całe życie

    Poniżej zaprezentowane zostały wyniki klasyfikacji tych samych obiektów, wykonanej przez przypadek w ponad rocznym odstępie czasu, co pozwoliło na dodatkowe ciekawe wnioski.

    Jabłka na jabłoni jesienią 2016 w interpretacji programu w kwietniu 2017 stały się “jadalnymi owocami” (edible fruit), co oczywiście jest zgodne z prawdą. W maju 2018 program rozpoznał owoc jako “European crab apple” (Malus sylvestris) czyli dzika jabłoń. Program przez rok się czegoś nauczył.

    Klasyfikatory predefiniowane są przez producenta ulepszane i formie tak zwanych pakletów pobierane z serwera firmy Wolfram podczas pracy w środowisku programu Mathematica. Jeśli dane klasyfikatora uległy zmianie pobierana jest ich aktualna wersja i robiona jest lokalna kopia. Dlatego w odstępie rocznym program dał bardziej precyzyjną odpowiedź.

    Kwiecień 2017

    KlasyfikatorTresciGraficznej_8.gif

    KlasyfikatorTresciGraficznej_9.png

    Maj 2018

    KlasyfikatorTresciGraficznej_10.gif

    KlasyfikatorTresciGraficznej_11.png

    Pierwszy termin to oczywiście owczarek niemiecki, a drugi w “wolnym” tłumaczeniu przez “internetowego tłumacza automatycznego” to “pies od bydła”, czyli mówiąc inaczej berneński pies pasterski. Oba zwierzaki są psami autora niniejszego opracowania i z całą pewnością ich wizerunki nie pochodzą z żadnej bazy. Mathematica po prostu rozpoznała rasę psa ze zdjęcia.  

    Trudno też powiedzieć, nie będąc botanikiem czy krokus jest indyjski, a tulipan karłowaty, ale niewątpliwie są to krokusy i tulipany. Program nawet poradził sobie z dwoma różnymi rodzajami tulipanów. To okazy sfotografowane przez autora wczesną wiosną 2017.

    Uwagi:

    Lokalna kopia plików

    Pliki pobrane do celów identyfikacji zachowywane są na lokalnej ścieżce $LocalBase. Za pomocą procedury LocalObjects[] można sprawdzać jakie dane są zgromadzone na tej ścieżce, a dyrektywa ResourceRemove[...] pozwala usuwać zbędne dane.

  • Binarny klasyfikator treści graficznych
  • Procedura ImageInstanceQ

    Podobnie jak ImageIdentify procedura wymaga połączenia z Wolfram Cloud, a zbiór uczący i metoda trenowania modelu mogą ulegać zmianom w różnych wersjach programu.

    Składnia

    KlasyfikatorBinarny_1.gif

    Procedura daję binarną odpowiedź Yes lub No na pytanie czy obraz przedstawia obiekt określonej kategorii.

    Przykłady

    Jednoczesne sprawdzanie, czy na obrazku będącym pierwszym argumentem funkcji ImageInstanceQ jest kot czy pies. Odpowiedź jest w formie listy, gdzie każdy z elementów jest werdyktem dla odpowiedniej kategorii obiektów. W poniższym przypadku oznacza ona {True,False}, że obrazek przedstawia kota i nie przedstawia psa, gdyż kategorie zostały wymienione w tej własnie kolejności.

    KlasyfikatorBinarny_2.gif

    KlasyfikatorBinarny_3.png

    Poniżej sprawdzamy czy obiekt na obrazku należy do kategorii “pies lub kot” i odpowiedź jest oczywiście prawdą, obraz przedstawia psa lub kota.

    KlasyfikatorBinarny_4.gif

    KlasyfikatorBinarny_5.png

    Dla sprawdzenia zobaczymy jeszcze co na tym obrazku rozpoznaje program. Widzi w nim domowego kota, co jest zgodne ze stanem faktycznym.

    KlasyfikatorBinarny_6.gif

    KlasyfikatorBinarny_7.png

    Uwagi:

    Lokalna kopia plików

    Podobnie jak w przypadku procedury ImageIdentify[...] pliki pobrane do celów identyfikacji zachowywane są na lokalnej ścieżce $LocalBase i do operacji na nich można używać komend  LocalObjects[] oraz ResourceRemove[...] pozwala usuwać zbędne dane.

  • Wykrywanie twarzy
  • Procedura FindFaces

    Procedura analizuje obraz wykrywając twarze.

    Składnia

    WykrywanieTwarzy_1.gif

    Funkcja FindFaces jako odpowiedź zwraca listę współrzędnych w pikselach, gdzie na obrazie zidentyfikowane zostały twarze.

    Parametry z grupy FacialFeatures wymagają kopiowania informacji z Wolfram Cloud.

    Przykładowy obraz do analizy

    Wersal, marzec 2017

    Nieformalny szczyt przywódców Francji, Niemiec, Włoch i Hiszpanii: premier Hiszpanii Mariano Rajoy, kanclerz Nieniec Angela Merkel, prezydent Francji Francois Hollande i  premier Włoch Paolo Gentiloni.

    WykrywanieTwarzy_2.png

    WykrywanieTwarzy_3.gif

    Warianty użycia procedury FindFaces

    Domyślnie program podaje parametry obszarów, w których wykryte zostały twarze. Obszary te są definiowane przez podanie parametrów prostokąta Rectangle.

    WykrywanieTwarzy_4.png

    WykrywanieTwarzy_5.png

    Drugi argument funkcji FindFaces pozwala sterować charakterem odpowiedzi. Mogą być podawane między innymi wymiary prostokąta, współrzędne punktu centralnego w pikselach obrazu, wycięty fragment obrazu, czy powierzchnia prostokąta obejmującego rozpoznaną twarz.

    WykrywanieTwarzy_6.png

    WykrywanieTwarzy_7.png

    WykrywanieTwarzy_8.png

    WykrywanieTwarzy_9.png

    WykrywanieTwarzy_10.png

    WykrywanieTwarzy_11.gif

    WykrywanieTwarzy_12.png

    WykrywanieTwarzy_13.png

    Generowanie cech obiektu na podstawie obrazu twarzy wymaga połączenia i kopiowania danych z Wolfram Cloud. Można między innymi rozpoznać wiek osoby, jej stan emocjonalny czy płeć.

    WykrywanieTwarzy_14.png

    WykrywanieTwarzy_15.gif Age→58 Emotion→Indeterminate Gender→Male
    WykrywanieTwarzy_16.gif Age→58 Emotion→Indeterminate Gender→Female
    WykrywanieTwarzy_17.gif Age→60 Emotion→WykrywanieTwarzy_18.png Gender→Male
    WykrywanieTwarzy_19.gif Age→51 Emotion→WykrywanieTwarzy_20.png Gender→Male

    Jedynie Paolo Gentiloni nie potrafił ukryć emocji. Pozostałe osoby zachowały się jak wytrawni politycy, nie można u nich rozpoznać stanu emocjonalnego.

    Operacje na obrazie pierwotnym

    WykrywanieTwarzy_21.png

    WykrywanieTwarzy_22.gif

    Program może też zaznaczyć na zdjęciu wyłącznie osoby określonej płci. Poniżej zostały zaznaczone twarze mężczyzn.

    WykrywanieTwarzy_23.png

    WykrywanieTwarzy_24.gif

    Uwagi:

    1. Program podaje współrzędne w układzie określonym przez rozdzielczość obrazu, jednostką jest piksel.
    2. Zestaw dodatkowych własności wykrytych twarzy jest taki sam jak dla dyrektywy FacialFeatures[...].  

  • Rozpoznawanie twarzy sławnych ludzi
  • Klasyfikatory wbudowane

    Poniżej pokazana została lista zdjęć sławnych osób, która użyjemy do testowania predefiniowanego klasyfikatora rozpoznającego ich twarze NotablePerson. Zbiór jest dobrany przypadkowo, nie stosowano żadnego klucza w doborze tych osób, poza tym, że autorowi wydawało się, że z różnych powodów powinny uchodzić za sławne.  

    TwarzeSlawnychLudzi_1.gif TwarzeSlawnychLudzi_2.gif TwarzeSlawnychLudzi_3.gif
    TwarzeSlawnychLudzi_4.gif TwarzeSlawnychLudzi_5.gif TwarzeSlawnychLudzi_6.gif
    TwarzeSlawnychLudzi_7.gif TwarzeSlawnychLudzi_8.gif TwarzeSlawnychLudzi_9.gif
    TwarzeSlawnychLudzi_10.gif TwarzeSlawnychLudzi_11.gif TwarzeSlawnychLudzi_12.gif
    TwarzeSlawnychLudzi_13.gif TwarzeSlawnychLudzi_14.gif TwarzeSlawnychLudzi_15.gif
    TwarzeSlawnychLudzi_16.gif TwarzeSlawnychLudzi_17.gif TwarzeSlawnychLudzi_18.gif

    Zbiór do analizy

    Twarze te przedstawimy w formie wygodnej do operacji w środowisku programu Mathematica listy, o standaryzowanej wysokości obrazu wynoszącej 60 pikseli. To dla estetyki, bo dla rozpoznawania twarzy nie ma to znaczenia.

    TwarzeSlawnychLudzi_19.png

    TwarzeSlawnychLudzi_20.gif

    Klasyfikacja

    Zmienna ktoTo zawiera wynik klasyfikacji. Zastosowano dodatkowy parametr klasyfikatora {“TopProbabilities”,1}, który jest poleceniem, aby w odpowiedzi podany został jeden najbardziej prawdopodobny wynik.

    TwarzeSlawnychLudzi_21.png

    Tabela wyników

    Dodatkowo wprowadzono przycisk, który pozwala oznaczyć poprawne i błędne odpowiedzi przez kolorowanie tła odpowiednio na niebiesko lub czerwono. Pierwsze użycie procedur identyfikacji twarzy wymaga połączenia z Wolfram Cloud. Wynik został zaprezentowany w formie tabelarycznej z zastosowaniem funkcji Grid.

    TwarzeSlawnychLudzi_22.png
    TwarzeSlawnychLudzi_Tabela.png

    Niektóre błędy są zaskakujące, ale jak się dobrze przyjrzeć, to pomyłki są uzasadnione, bo jakieś podobieństwo między źle rozpoznanymi postaciami istnieje. Twierdzi się, że każdy uczy się przez całe życie, wiec maszyna też może poprawiać stan swojej wiedzy i na pewno w przyszłości na tym zbiorze testowym otrzymamy 100% poprawnych odpowiedzi.

    Liczba klas

    Sprawdzimy ile sławnych osób aktualnie rozpoznaje program (sierpień 2018). W tym celu użyta zostanie funkcja ClassifierInformation, która użyta z parametrem “Classes” zwraca listę nazw klas klasyfikatora, czyli w tym przypadku listę nazwisk rozpoznawanych osób.

    TwarzeSlawnychLudzi_41.png

    TwarzeSlawnychLudzi_42.png

    Liczba 1001 osób nie jest imponująca, ale to dobry początek. Klasyfikatory predefiniowane są nieustannie rozwijane, więc i rozpoznawanie sławnych osób będzie robić postępy.