CoreML

Apples neue Machine-Learning-Funktionen

04.08.2020
Von   
Mark Zimmermann leitet hauptberuflich das Center of Excellence (CoE mobile) zur mobilen Lösungsentwicklung bei der EnBW Energie Baden-Württemberg AG in Karlsruhe. Er weist mehrere Jahre Erfahrung in den Bereichen Mobile Sicherheit, Mobile Lösungserstellung, Digitalisierung und Wearables auf. Der Autor versteht es, seine Themen aus unterschiedlichsten Blickwinkeln für unternehmensspezifische Herausforderungen darzustellen. Neben seiner hauptberuflichen Tätigkeiten ist er Autor zahlreicher Artikel in Fachmagazinen.
Selbst wenn maschinelles Lernen auf Mobiltelefonen 2020 nicht mehr als "next big thing" durchgeht, beschert Apple dem CoreML Framework auch dieses Jahr weitere nützliche Funktionen.
Obwohl es 2020 deutlich weniger Neuigkeiten und Verbesserungen rund um CoreML gibt, bleibt Machine Learning für Apple ein wichtiges Thema.
Obwohl es 2020 deutlich weniger Neuigkeiten und Verbesserungen rund um CoreML gibt, bleibt Machine Learning für Apple ein wichtiges Thema.
Foto: Aleksandr Pobeda - shutterstock.com

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.

Mit der neuen CoreML-Version gibt es die Möglichkeit, statt eines App-Updates nur die ML-Modelle auszutauschen.
Mit der neuen CoreML-Version gibt es die Möglichkeit, statt eines App-Updates nur die ML-Modelle auszutauschen.
Foto: Apple

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.

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)