Ein Highlight der WWDC 2019 - zumindest für Entwickler - war Apples Ankündigung, dass das Machine Learning Framework CoreML in Version 3 auf den Systemplattformen tvOS, macOS, watchOS, iOS und iPadOS ausgeführt wird und nun auch maschinelles Lernen direkt auf dem Gerät, etwa zu Personalisierungszwecken ("Model Personalization"), unterstützt.
Gemessen daran sind die Neuigkeiten und Verbesserungen in CoreML dieses Jahr deutlich bescheidener ausgefallen. Es sieht sogar danach aus, als ob Apple die Versionsnummer fallen ließ: Wurde das letztjährige Update mit CoreML 3 betitelt, heißt es jetzt einfach nur Core ML - auch wenn die CoreMLTools die Version 4 anzeigen.
Apple CoreML (4): Das ist neu
Apropos CoreML Tools: Das Erstellen eigener Modelle mit dem ML-Framework Create ML macht zwar bei einfachen Projekten Spaß. In der Praxis trifft man jedoch häufiger auf Modelle aus TensorFlow oder PyTorch. Um ein solches Modell mit Core ML zu verwenden, müssen App-Entwickler es zuerst in das mlmodel-Dateiformat konvertieren. Dafür sind die oben erwähnten CoreMLTools gedacht.
Mit der neuen CoreML-Version gibt es eine interessante Möglichkeit, die Modelle (mlmodel-Datei) auszutauschen, anstatt diese mit einem App-Update zu veröffentlichen. Fairerweise muss man sagen, dass dies keine neue Idee ist, sondern mehrere Drittanbieter-SDKs dies bereits anbieten. Der große Vorteil der hauseigenen Lösung ist, dass die Modelle in der Apple-Cloud gehostet werden. Da App-Entwickler möglicherweise mehr als ein Modell in ihrer App haben, können sie mit dem neuen Konzept der Modellsammlungen mehrere Modelle - mithilfe des CloudKit-Dashboard - zusammenfassen. Um ein ML-Kernmodell für die Bereitstellung per Cloud vorzubereiten, gibt es jetzt eine Schaltfläche "Modellarchiv erstellen" in Xcode. Dadurch wird eine .mlarchive-Datei erzeugt. Wirft man einen Blick auf dieses mlarchive, fällt auf, dass es sich dabei anscheinend "nur" um eine Zip-Datei mit den mlmodelc-Ordnern handelt. Diese können Entwickler in das CloudKit-Dashboard hochladen und in eine Modellsammlung aufnehmen.
Ein nettes neues Feature ist außerdem, dass Sie verschiedene Modellsammlungen für verschiedene App-Anwender bereitstellen können. So unterscheidet sich beispielsweise die Kamera auf dem iPhone von der Kamera auf dem iPad, so dass Sie möglicherweise zwei Versionen eines Modells erstellen und eine an iPhone-Benutzer der App und die andere an iPad-Benutzer senden möchten. App-Entwickler können dabei Targeting-Regeln für die Geräteklasse (iPhone / iPad / TV / Watch), das Betriebssystem und die Version, den Regionalcode, den Sprachcode und die Version der App definieren. Die Bereitstellung einer neuen Modellversion erfolgt dabei nicht immer sofort. Vielmehr "erkennt" die App irgendwann eigenständig, dass ein neues Modell verfügbar ist, lädt sich das Modell automatisch herunter und legt es innerhalb ihrer Sandbox ab. App-Entwickler scheinen jedoch keine Kontrolle darüber zu haben, wann und wie dies geschieht.
Auch wenn dies eine bequeme Lösung ist und App-Entwickler sich nicht darum kümmern müssen, die Modelle selbst zu hosten, sollten Sie daran denken, dass die Modelle in CloudKit liegen. Sie belasten somit die Speicherquoten des App-Herausgebers und das Herunterladen der Modelle wird als Netzwerk-Traffic miteingerechnet.
Machine-Learning-Modell: Verschlüsselung gegen Diebe
Bis jetzt war es wirklich einfach, Ihr ML-Kernmodell zu stehlen und in einer eigenen App zu nutzen. Mit iOS 14 / macOS 11.0 ändert sich das: Das neue CoreML kann Modelle automatisch ver- und entschlüsseln, so dass Fremde nicht mehr in Ihre mlmodelc-Ordner hineinschauen können. Sie können die Verschlüsselung mit oder ohne die neue CloudKit-Bereitstellung verwenden. Die Entwicklungsumgebung Xcode verschlüsselt dabei das kompilierte Modell, mlmodelc, und nicht die ursprüngliche mlmodel-Datei. Das Modell bleibt immer in verschlüsselter Form auf dem Gerät des Benutzers. Erst wenn die App das Modell instanziiert, entschlüsselt CoreML es automatisch. Diese entschlüsselte Version existiert nur im Speicher, sie wird nirgendwo als Datei gespeichert. Damit dies funktioniert, benötigt ein App-Entwickler zuerst einen Encryption Key. Hierfür bietet Xcode einen Schaltfläche an. Wählt ein Entwickler diese Schaltfläche aus, erzeugt Xcode einen neuen Verschlüsselungsschlüssel, den es mit dem Apple-Entwicklerteam-Account verknüpft.
Konkret ausgedrückt, wird bei diesem Prozess eine .mlmodelkey-Datei erstellt, von der jeder App-Entwickler eine lokalen Kopie zum Arbeiten erhält. App Entwickler müssen diesen Encryption Key also nicht in Ihre App einbetten - und sollten es auch nicht tun! Der Grund dafür: Der Schlüssel wird ebenfalls auf Apples Servern gespeichert. Um das Modell zu entschlüsseln, wenn es von der App instanziiert wird, muss CoreML den Encryption Key über das Netzwerk von Apples Servern holen. Fällt das Netzwerk aus, bevor der Verschlüsselungsschlüssel heruntergeladen wurde, kann die Anwendung das CoreML-Modell dementsprechend nicht instanziieren. Aus diesem Grund sollten App-Entwickler die neue Funktion YourModel.load() verwenden. Diese verfügt über einen Completion Handler, mit dem eine App auf Ladefehler reagieren kann. Der Fehlercode modelKeyFetch zeigt dabei an, dass Core ML nicht in der Lage war, den Entschlüsselungsschlüssel von Apples Servern zu laden.
- Facebook-Gesichter
Computer können lernen, menschliche Gesichter zu unterscheiden. Facebook nutzt das für die automatische Gesichtserkennung. - Machine Learning
Anders als das Bild suggeriert ist Machine Learning ein Teilgebiet von Artificial Intelligence – allerdings ein sehr wichtiges. - AlphaGo
Maschine schlägt Mensch: 2016 besiegte Googles Machine Learning System AlphaGo den Weltmeister im Spiel Go. - Grafikprozessoren GPU Nvidia
Die führenden Companies im Machine Learning nutzen für die parallele Verarbeitung der Daten Grafikprozessoren (GPUs) - etwa von Nvidia. - Deep Learning
Deep Learning Verfahren lernen erst Low-Level Elemente wie Helligkeitswerte, dann Elemente auf mittlerer Ebene und schließlich High-Level Elemente wie ganze Gesichter. - IBM Watson
IBM Watson integriert mehrere Artificial Intelligence Methoden: Neben maschinellem Lernen sind das Algorithmen der natürlichen Sprachverarbeitung und des Information Retrieval, der Wissensrepräsentation und der automatischen Inferenz.
Machine Learning: Weitere Apple Frameworks
In den iOS/iPadOS-SDKs gibt es mehrere High-Level-Frameworks, die Aufgaben im Zusammenhang mit maschinellem Lernen ausführen. Diese sind so alt wie CoreML selbst. Da ist zum einen das Vision-Framework, das ebenfalls eine Reihe neuer Funktionen erhielt. Verfügte Vision bereits zuvor über Erkennungsmodelle für Gesichter, Gesichtsmarkierungen und menschliche Körper, kommen in der neuen Version die folgende Features hinzu:
Erkennung der Handhaltung (VNDetectHumanHandPoseRequest)
Erkennung von Mehrpersonen-Ganzkörperposen (VNDetectHumanBodyPoseRequest)
Insbesondere die Aufnahme der Erkennung von Mehrpersonen-Ganzkörperposen ist dabei ein interessantes Feature. So gibt es zwar verschiedene Open-Source-Modelle am Markt, aber diese sind nicht wirklich gut oder langsam. Kommerzielle Lösungen hingegen sind teuer. Dabei kann das Apple-Framework neben statischen Bilder auch Videos analysieren, egal, ob als Datei oder aus der Kamera in Echtzeit.
Ebenfalls neu ist VNDetectContoursRequest, um die Umrisse von Objekten in einem Bild zu erkennen. Diese werden dann als Vektorpfade zurückgegeben. VNGeometryUtils wiederum verfügt über Hilfsfunktionen für die Nachbearbeitung der erkannten Konturen, wie etwa deren Vereinfachung auf geometrische Grundformen. Man kann davon ausgehen, dass auch PencilKit bei der Stifteingabe diese geometrische Grundformen-Funktion nutzt. Für die Sprachverarbeitung können App-Entwickler das Natural Language Framework von Apple verwenden. Auch hier gibt es einige neue Funktionen :
NLTagger und NLModel können jetzt mehrere Tags finden und deren Zusammenhang vorhersagen.
Einbetten von Sätzen: Nachdem es bereits möglich war, Worteinbettungen zu verwenden, unterstützt NLEmbedding jetzt auch Sätze. Dabei kommt ein eingebautes neuronales Netz zum Einsatz, um den gesamten Satz in einen 512-dimensionalen Vektor zu kodieren. Dies hilft dabei, den Kontext zu erfassen.
Im Bereich des Speech & SoundAnalysis Frameworks scheint es hingegen keine Neuigkeiten zu geben. (mb/fm)