本日からはじまったWWDC 2020、明日から始まるセッションに備え、ドキュメントからAPIの差分をみて気になったものをピックアップしていきます。
数時間前に投稿した新規追加フレームワーク編に続き、本記事では既存フレームワークのうち、機械学習(ML)、画像、音声関連のものを見ていきます。
Vision
めちゃくちゃ機能追加されてます。
class VNDetectHumanBodyPoseRequest
人体の姿勢推定。ついに標準機能として入ったわけですね。
class VNDetectHumanHandPoseRequest
手の姿勢推定。これが必要でMediaPipeを試したりしたこともありましたが、もう必要なくなるのでしょうか?
Hand Tracking on iOS #MediaPipepic.twitter.com/lUUCghK6gz
— Shuichi Tsutsumi (@shu223) 2020年5月9日
class VNRecognizedPointsObservation
上の姿勢推定の結果はこの型で返ってくるようです。
サンプルもセッションもあるので、深堀りしてマガジンに書いていきます。
Core ML, Core ML Tools(coremltools)
ここはピックアップせずともしっかり見るつもりなので、本記事では割愛。
このLTで言ってる通り、Core MLのアップデートはcoremltoolsリポジトリの更新が肝となるのですが、つい2時間前に4.0b1がリリースされました🎉
— Shuichi Tsutsumi (@shu223) 2020年6月23日
Core MLのアップデートを3倍楽しむ方法 #wwdctokyohttps://t.co/RDFTtjCBvL
https://t.co/Nx1Q3imKXOpic.twitter.com/aGwneh4PoK
— Shuichi Tsutsumi (@shu223) 2020年6月23日
coremltoolsのドキュメントページが新しくなっている!これは良い。今までコードのコメントから自動生成されたやつしかなかったので...
— Shuichi Tsutsumi (@shu223) 2020年6月23日
Introduction https://t.co/0ZNfVO1ZdT
Create ML
テンプレートめっちゃ増えてます。NDA遵守のためベータアプリケーションのスクショは貼らないでおきますが、「Create MLのテンプレート」といってもピンとこない人もいるかもしれないので、代わりに現行版のテンプレート選択画面(の一部)のスクショをはっておきます。
ここから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)"なる変換を適用するフィルタ。知らないのでググってみたところ、以下の記事がヒット。大変にわかりやすい。
応用例も書かれていて、セマンティックセグメンテーションの誤差のメトリクスとして使われることがあるらしい。またErosion / Dilationを計算する手法としても利用されるらしい。ちなみにErosion / Dilationはそれぞれ孤立点の除去、不連続な点の接続と穴埋めのために利用される。
ちなみにここまで書いて気付いたが、このAPIはiOS 11.3からあるもので、新APIは
var searchLimitRadius: Float
というプロパティでした。これはEDTの計算手法を知っていれば名前で利用法がわかる。
MPSImageCanny
今度こそiOS 14の新クラス。ドキュメントには何も書いてないが、名前からいってCanny法によるエッジ検出を行うフィルタだと思われる。
(Wikipediaより)
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
Final Cut ProのAPIが刷新されてる。 @shmdevelopさんあたり、Metalでガッツリ自分用の動画編集プラグインつくってみてほしい #WWDC20
— Shuichi Tsutsumi (@shu223) 2020年6月23日
FxPlug | Apple Developer Documentation https://t.co/sua0LyjRX6
期待していたが更新がなかったフレームワーク
事前に予想、というより期待することを書いていたのですが、見事に外れたものから書いていきます。
AVAudioEngine
AVAudioEngineは更新なしか... #WWDC20pic.twitter.com/wbk1RzTjwv
— Shuichi Tsutsumi (@shu223) 2020年6月23日
SoundAnalysis
SoundAnalysisも更新なしってまじか...(MLSoundClassifierの更新はある) #WWDC20pic.twitter.com/CQZiGlpmSd
— Shuichi Tsutsumi (@shu223) 2020年6月23日
Speech
標準の翻訳アプリが入ったことで、音声認識フレームワークであるSpeechフレームワークも強化されているかと期待しましたが、あてが外れました...
期待が外れ、Speechフレームワーク(音声認識API)も更新なし。しかしAPIが変わってないだけで内部的に刷新されてる可能性は大いにあると引き続き期待している...https://t.co/kdRMsBftOM
— Shuichi Tsutsumi (@shu223) 2020年6月23日
Speechの音声認識、デモとして試すとそこそこうまくいく気がするのですが、いざ実運用しようとすると全然ダメなんですよね。しかし音声認識は汎用性が高いのでどうにかしてほしいなぁと。実はAPIが更新されてないだけで内部的には刷新されているのではとまだ期待しています。
公式配布の学習済みCore MLモデル
昨年はWWDCの会期中に新しいモデルが複数個追加されてテンションあがったのですが、今年は何もなし。
Core MLの公式配布モデルは追加なし #WWDC20#ios14https://t.co/545g8e4cxO
— Shuichi Tsutsumi (@shu223) 2020年6月23日
しかしちょっと前にPoseNetモデルが追加されています。
Apple公式配布のPoseNetのCore MLモデル来た!すぐに試せるサンプルつき。https://t.co/545g8e4cxOhttps://t.co/RwHQAomaZBpic.twitter.com/dNK8vQjbVz
— Shuichi Tsutsumi (@shu223) 2020年5月4日
まとめ
本記事では既存フレームワークのうち、ML・画像・音声に関連する気になるAPIをピックアップしました。次はこれら以外の既存フレームワークの更新を見ていきます。
そしてそのあとは、サンプルやセッションを見てもっと具体的に実装方法や何ができて何ができないのかといったところを探っていきます。
昨年はそれらの知見を書籍にまとめましたが、今年はnoteの有料マガジンにまとめていきたいと思います。
まだ記事がないので今ならたったの500円です。サブスクではなく買い切り価格です。記事が充実してきたら価格改定していきたい所存です。