CoreML to framework dostępny w języku Swift i urządzeniach Apple, pozwalający na integrację Machine Learning do swoich aplikacji. Dowiecie się za chwilę, co można, a czego nie można z nim zrobić. Apple postawił ostatnimi czasy na uczenie maszynowe. Głównie dlatego, że dzięki temu smartfony mogą być jeszcze bardziej "smart". Więcej o blogu, który uruchomiło samo Apple, dowiesz się w artykule "Apple stawia na uczenie maszynowe". Tymczasem przyjrzyjmy się temu, czym jest, a czym nie jest CoreML. Zgodnie z wprowadzeniem Apple, Core ML pozwala na integrację różnych typów modeli uczenia się maszynowego z aplikacją. Oprócz wspierania intensywnego głębokiego uczenia się poprzez ponad 30 typów warstw, obsługuje również modele standardowe, takie jak zespoły drzew, SVM i uogólnione modele liniowe. Ponieważ jest zbudowany w oparciu o technologie niskiego poziomu, takie jak Metal i Accelerate, Core ML bezproblemowo wykorzystuje CPU i GPU w celu zapewnienia maksymalnej wydajności i wydajności. Możesz uruchomić modele uczenia się maszyn na urządzeniu, dzięki czemu dane nie muszą opuszczać analizowanego urządzenia. I tutaj rzeczywiście mamy całkiem spore możliwości. Jednakże, aby nasza aplikacja mogła zacząć korzystać z ML, musimy mieć ten model. Model musi zostać przygotowany wcześniej, lub pobrany z internetu. Apple przygotowało kilka modeli, które pozwalają na implementację kilku algorytmów uczenia maszynowego. Główne kategorie pracy modeli ML to Vision: modele pozwalające ropoznawać obraz, twarze, tekst, obiekty itp, oraz NLP: pozwalające na przetwarzanie naturalnego tekstu, tokenizację. identyfikację, lematyzację, wyróżnianie części mowy itp.
MODELE, KTÓRE SĄ DOSTĘPNE NA STRONIE APPLE TO:
- MobileNet: Bazują na architekturze, powalającej zbudować lekkie i głębokie sieci neuronowe. Wykrywa obiekty dominujące występujące na obrazie z 1000 kategorii takich jak drzewa, zwierzęta, żywność, pojazdy, ludzie i inne.
- SquezeNet: Wykrywa obiekty dominujące występujące na obrazie z 1000 kategorii takich jak drzewa, zwierzęta, żywność, pojazdy, ludzie i inne. SqueezeNet używając zaledwie 5 MB ma podobny poziom dokładności jak AlexNet, ale posiada 50 razy mniej parametrów.
- Places205-GoogLeNet: Wykrywa scenę obrazu z 205 kategorii, takich jak terminal lotniczy, sypialnia, las, wybrzeże i wiele innych.
- ResNet50: Wykrywa obiekty dominujące występujące na obrazie z 1000 kategorii takich jak drzewa, zwierzęta, żywność, pojazdy, ludzie i inne.
- Inception v3: Wykrywa obiekty dominujące występujące na obrazie z 1000 kategorii takich jak drzewa, zwierzęta, żywność, pojazdy, ludzie i inne.
- VGG16: Wykrywa obiekty dominujące występujące na obrazie z 1000 kategorii takich jak drzewa, zwierzęta, żywność, pojazdy, ludzie i inne.
Więcej modeli można stworzyć konwertując odpowiednio przygotowane modele (z wykorzystaniem np. narzędzia mxnet.
Czym są więc te modele?
Modele to wyniki zastosowania algorytmów uczenia się maszynowego, na zbiorze danych szkoleniowych. Gdy model jest już przygotowany, wykonuje prognozy na podstawie nowych danych wejściowych. Na przykład model, który został przeszkolony na temat historycznych cen domów w danym regionie, może być w stanie przewidzieć cenę domu, jeśli weźmie się pod uwagę liczbę pokoi i lokalizację.
Czego więc nie można tu zrobić?
Otóż wytrenowanie modelu będzie wymagało pracy poza aplikacją. CoreML nie może trenować i tworzyć modelu, nie można go więc nazwać frameworkiem Machine Learning z prawdziwego zdarzenia. Core ML pozwala tylko na wykorzystanie gotowego modelu do testowania i przewidywania. Nie napiszecie więc aplikacji, która będzie uczyła się nawyków użytkownika, albo poprawiała swój model na podstawie kolejnych doświadczeń (a przynajmniej nie bezpośrednio). Nie można zmienić modelu na podstawie danych wprowadzonych przez użytkownika. Nie możesz mieć spersonalizowanego modelu. CoreML wspiera rozpoznawanie obrazu i tekstu. Co więcej wspiera tylko dwa rodzaje modeli. Mianowicie regresję i klasyfikację. Podczas gdy klasyfikacja jest prawdopodobnie najpopularniejszym zadaniem ML, istnieje wiele innych: grupowanie, ranking, zmniejszanie wymiarów, szacowanie gęstości, przewidywanie struktury, wykrywanie anomalii i niespodzianek, szukanie reguł, odszumianie, kompresja danych, uczenie się z i bez wzmocnienia,,,. Wszystko to leży niestety poza zakresem Core ML. Chociaż, jeśli potrzebne nam drzewa decyzyjne, możemy skorzystać z GameplayKit.
Jak wytrenować?
Aby wytrenować własny model można skorzytać na przykład z takich narzędzi jak:
- Caffe: Framework do głębokiego uczenia się, tworzony na Berkeley AI Research
- GITS: narzędzia upraszczające standardowe zadania związane z głębokim uczeniem się, takie jak zarządzanie danymi, projektowanie i szkolenie sieci neuronowych w systemach wieloprocesorowych, monitorowanie wydajności w czasie rzeczywistym dzięki zaawansowanym wizualizacjom oraz wybór najlepszego modelu z przeglądarki wyników do wdrożenia. DIGITS jest całkowicie interaktywny, dzięki czemu badacze danych mogą skupić się na projektowaniu i szkoleniu sieci, a nie programowaniu i debugowaniu. Ciekawy przykład, jak wytrenować i zaimplementować model możecie przeczytać tu: http://www.reza.codes/2017-07-29/how-to-train-your-own-dataset-for-coreml/#ec2.
Inne ograniczenia?
Oczywiście są. Chociażby takie, że dane testowane w modelu nie są szyfrowane, więc nie powinno się korzystać z danych wrażliwych, a sam CoreML nie potrafi korzystać z kompresji modeli, które potrafią mieć wielkości gigabajtów.
Podsumowanie
CoreML przyda się więc w aplikacjach, które mają korzystać z gotowych, niezbyt rozbudowanych modeli podstawowych zadań MachineLearning. Do wszystkich innych zastosowań trzeba będzie sięgnąć jednak po bardziej zaawansowane narzędzia.
Źródło obrazu tytułowego: opracowanie własne na podstawie apple.com