その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

API Diffsから見るiOS 14の新機能 - ML・画像・音声編 #WWDC20 #iOS14

本日からはじまったWWDC 2020、明日から始まるセッションに備え、ドキュメントからAPIの差分をみて気になったものをピックアップしていきます。

数時間前に投稿した新規追加フレームワーク編に続き、本記事では既存フレームワークのうち、機械学習(ML)、画像、音声関連のものを見ていきます。

f:id:shu223:20200623162859p:plain

Vision

めちゃくちゃ機能追加されてます。

class VNDetectHumanBodyPoseRequest

人体の姿勢推定。ついに標準機能として入ったわけですね。

qiita.com

class VNDetectHumanHandPoseRequest

手の姿勢推定。これが必要でMediaPipeを試したりしたこともありましたが、もう必要なくなるのでしょうか?

class VNRecognizedPointsObservation

上の姿勢推定の結果はこの型で返ってくるようです。

サンプルもセッションもあるので、深堀りしてマガジンに書いていきます。

Core ML, Core ML Tools(coremltools)

ここはピックアップせずともしっかり見るつもりなので、本記事では割愛。

Create ML

テンプレートめっちゃ増えてます。NDA遵守のためベータアプリケーションのスクショは貼らないでおきますが、「Create MLのテンプレート」といってもピンとこない人もいるかもしれないので、代わりに現行版のテンプレート選択画面(の一部)のスクショをはっておきます。

f:id:shu223:20200623155402p:plain:w300

ここから4つのテンプレートが追加されています。

個人的な感想:

  • 動画用モデル(Action Classification)がおもしろそう。
  • Style Transferはいまさら感(Turi Createにはだいぶ前からあったのになぜ今になって?)
  • Soundカテゴリに追加がなかったのが本当に残念
  • MotionカテゴリにActivity Classificationに加えてAction Classificationも追加。これもApple Watchで試したい

Metal Performance Shaders

機械学習系のAPIはML Computeも出たし個人的にはこのレイヤーで組むことはしばらくなさそうなのでフィルタ系だけを見ていく。

MPSImageEuclideanDistanceTransform

A filter that performs a Euclidean distance transform on an image.

"Euclidean distance transform (EDT)"なる変換を適用するフィルタ。知らないのでググってみたところ、以下の記事がヒット。大変にわかりやすい。

medium.com

応用例も書かれていて、セマンティックセグメンテーションの誤差のメトリクスとして使われることがあるらしい。またErosion / Dilationを計算する手法としても利用されるらしい。ちなみにErosion / Dilationはそれぞれ孤立点の除去、不連続な点の接続と穴埋めのために利用される。

ちなみにここまで書いて気付いたが、このAPIはiOS 11.3からあるもので、新APIは

var searchLimitRadius: Float

というプロパティでした。これはEDTの計算手法を知っていれば名前で利用法がわかる。

MPSImageCanny

今度こそiOS 14の新クラス。ドキュメントには何も書いてないが、名前からいってCanny法によるエッジ検出を行うフィルタだと思われる。

f:id:shu223:20200623172504p:plainWikipediaより)

MPSImageEDLines

iOS 14の新クラス。MPSKernelを継承。ドキュメントに説明なし。

Natural Language

NLTaggerクラスに新しいメソッドが2つ

@nonobjc func tagHypotheses(at index: String.Index, unit: NLTokenUnit, scheme: NLTagScheme, maximumCount: Int) -> ([String : Double], Range<String.Index>)

Finds multiple possible tags for a given linguistic unit, for a single scheme, at the specified character position.(指定された文字位置で、指定された言語単位について、単一のスキームについて、複数の可能性のあるタグを見つけます。)

func tokenRange(for: Range<String.Index>, unit: NLTokenUnit) -> Range<String.Index>

Finds the entire range of all tokens of the specified linguistic unit contained completely or partially within the specified range.(指定された範囲内に完全または部分的に含まれる、指定された言語単位のすべてのトークンの範囲全体を検索します。)

NLEmbeddingクラスに4つの新クラスメソッド

class func sentenceEmbedding(for: NLLanguage) -> NLEmbedding?

Retrieves a sentence embedding for a given language.(指定された言語の文の埋め込みを取得します。)

class func sentenceEmbedding(for: NLLanguage, revision: Int) -> NLEmbedding?

Retrieves a sentence embedding for a given language and revision.(与えられた言語とリビジョンのための文の埋め込みを取得します。)

class func currentSentenceEmbeddingRevision(for: NLLanguage) -> Int

Retrieves the current version of a sentence embedding for the given language.

class func supportedSentenceEmbeddingRevisions(for: NLLanguage) -> IndexSet

Retrieves all version numbers of a sentence embedding for the given language.

NLModelクラスに2つのメソッド

func predictedLabelHypotheses(for: String, maximumCount: Int) -> [String : Double]

Predicts multiple possible labels for the given input string.(与えられた入力文字列に対して,複数の可能性のあるラベルを予測します.)

func predictedLabelHypotheses(forTokens: [String], maximumCount: Int) -> [[String : Double]]

Predicts multiple possible labels for each string in the given array.(与えられた配列内の各文字列に対して,複数の可能性のあるラベルを予測します.)

・・・試してみないとピンとこないので、試してみます。あとこのフレームワークはiOS 12の頃に試して以来な気がしていて、当時は日本語をサポートしている機能は一部だけだった気がします。今一度日本語のサポート状況をみてみたいなと。

Final Cut Pro X

期待していたが更新がなかったフレームワーク

事前に予想、というより期待することを書いていたのですが、見事に外れたものから書いていきます。

note.com

AVAudioEngine

SoundAnalysis

Speech

標準の翻訳アプリが入ったことで、音声認識フレームワークであるSpeechフレームワークも強化されているかと期待しましたが、あてが外れました...

Speechの音声認識、デモとして試すとそこそこうまくいく気がするのですが、いざ実運用しようとすると全然ダメなんですよね。しかし音声認識は汎用性が高いのでどうにかしてほしいなぁと。実はAPIが更新されてないだけで内部的には刷新されているのではとまだ期待しています。

公式配布の学習済みCore MLモデル

昨年はWWDCの会期中に新しいモデルが複数個追加されてテンションあがったのですが、今年は何もなし。

しかしちょっと前にPoseNetモデルが追加されています。

まとめ

本記事では既存フレームワークのうち、ML・画像・音声に関連する気になるAPIをピックアップしました。次はこれら以外の既存フレームワークの更新を見ていきます。

そしてそのあとは、サンプルやセッションを見てもっと具体的に実装方法や何ができて何ができないのかといったところを探っていきます。

昨年はそれらの知見を書籍にまとめましたが、今年はnoteの有料マガジンにまとめていきたいと思います。

note.com

まだ記事がないので今ならたったの500円です。サブスクではなく買い切り価格です。記事が充実してきたら価格改定していきたい所存です。