このページの本文へ

Swift Playgroundsで学ぶiOSプログラミング第85回

最新APIのCore MLを利用する

iPadで機械学習を利用するプログラムを作る

2018年05月02日 17時00分更新

文● 柴田文彦 編集●吉田ヒロ

  • この記事をはてなブックマークに追加
  • 本文印刷

 前回までは、複数の画像を整列させて表示するコレクションビューを扱っていました。コレクションビューもiOSのUI関連のフレームワークの中では比較的新しいものですが、今回からはもっと新しいフレームワークを取り上げます。iOS 11以降で利用可能になったものなので新しさは飛び抜けています。あまりに新しいとSwift Playgroundsで使えるかどうか心配になりますが大丈夫です。今回から数回に渡って探求するのは、ただ新しいだけではなくこれまでとはまったく毛色の異なるフレームワークのCoreMLです。

 Core MLの「ML」とは、ズバリ「Machine Learning」のことです。日本語にすれば最近何かと話題になる「機械学習」ですね。Core MLは、iOSやmacOS上で機械学習を利用できるようにするためのフレームワークです。ここで「機械学習を利用する」という言葉は、慎重に解釈する必要があります。早合点するとCore MLを使えばiOSやmacOSで機械学習することができると思いがちですが、正確に言えばCore MLを使っても「学習する」ことはできません。Core MLはほかのシステムで学習した成果を取り込んで、iOSやmacOSのアプリで利用できるようにするための橋渡しをするフレームワークなのです。

 それではCore MLで、その結果を利用できるような「学習」を実現するフレームワークは別にあるのかと言えば、今のところアップルが提供する公式なフレームワークにはありません。Core MLは、アップルがサンプルとして提供しているものやサードパーティーが提供している学習結果を変換して利用することが可能です。と聞くとがっかりする人もいるかも知れませんが、Core MLを使えば、最新の有力な人工知能の手法の1つをアプリに取り込むことができるのです。それだけでも十分に魅力的でワクワクするという人は、今回の記事を読んで実際に試してみてください。今回は、とりあえずSwift PlaygroundsでCore MLを利用して意味のある結果を得られるようにするところまで持っていきます。

Core MLの概要

 Core MLについては、アップルの開発者向けのページに概要が示されています。

Core MLは、サードパーティーを含むほかの環境で得られた機械学習の成果をCore MLモデルとして取り込み、アプリで利用できるようにするためのフレームワークです。今のところ、それ自体で「学習する」機能は持っていません

 詳しいことはそちらを読んでいただくとして、ここでいちばん重要なことは、Core MLは「Core MLモデル」を読み込み、それに応じた機能をアプリに提供するということです。つまり、Core MLモデルの形式で用意することができれば、どんな機械学習の成果もiOSやmacOSアプリで利用できることになります。

 現状ではCore MLの機能を確認するために、アップルが何種類かのモデルを提供しています。今回はその中の1つで最も単純なものを利用します。アップルは、サードパーティーの機械学習ライブラリなどが出力する学習結果をCore MLモデルに変換するツールも提供しています。それを利用することでCore MLの利用範囲は大きく広がります。それについては、また別の機会に述べることにしましょう。

 Core MLを使ってモデルをアプリに取り込む方法は、上に示したページからリンクされた、別のページに解説されています。

Core MLモデルをアプリに取り込む方法は、アップルの開発者向けページに解説してあります。そこでは、シンプルなサンプルアプリのプロジェクトをダウンロードすることもできます。今回は、その中に含まれるモデルファイルだけを利用します

 このページにある「Download」ボタンをクリックすると、最も単純なモデルを取り込んで動作するアプリのプロジェクトをダウンロードすることができます。ただし、このプロジェクトは当然と言えば当然ながら、Mac上で動作するアプリ開発環境のXcode用です。残念ながらそのままではSwift Playgroundsで利用できません。しかし、その中に含まれる最も重要なファイル、つまりCore MLのモデルファイルは取り出して利用できます。そこで、とりあえずこのプロジェクトをダウンロードしてzipファイルを展開しておいてください。

 Swift Playgroundsで直接利用することはできないものの、プロジェクトをXcodeで開いてみると、Core MLをSwift Playgroundsで利用できるようにするためのヒントが得られます。Xcodeを利用できる環境をお持ちの方は、ダウンロードとしてプロジェクトを実際に開いてみるとよいでしょう。

 プロジェクトの中の「Resources」フォルダに入っている「MarsHabitatPricer.mlmodel」が、問題のCore MLモデルです。拡張子が.mlmodelとなっているので、すぐにわかるでしょう。Xcodeのファイルリストの中からこれを選択すると、このモデルの概要を表示することができます。

アップル製のサンプルプロジェクトをXcodeで開いてみました。「Resources」フォルダーに含まれる「MarsHabitatPricer.mlmodel」が件のモデルファイルです

 この中でプログラミングのための仕様は「Model Evaluation Parameters」に表示されています。このモデルの場合、入力のパラメータはsolarPanels、greehouses、sizeの3つで、それを処理して得られる結果は、priceの1つだということがわかります。

 とりあえず、このプロジェクトをビルドしてシミュレーター上で動作させた結果を示します。

プロジェクトをビルドしてiOSシミュレーター上で動かしてみました。太陽光パネルと温室の数、敷地の広さを設定すると火星基地を作るための予想コストが得られます。火星への移住を真剣に検討している人以外には、あまり実用的ではないかもしれません

 上で説明したような3つの入力パラメータの値をピッカーで設定すると、その下に結果が表示されるという単純なものです。これは、実は火星に移住する際に役立つものです。火星の居住地に設けるソーラーパネルと温室の数、敷地の広さを入力すると、その建設コストを予想してくれるのです。これと同じことがSwift Playgrounds上でできれば、とりあえず今回の目的は達成されたことになります。

この連載の記事

週間ランキングTOP5

ASCII倶楽部会員によく見られてる記事はコレだ!

ASCII倶楽部の新着記事

会員専用動画の紹介も!