Pythonを1行も書かずにSwiftとMacで機械学習コンペに参戦してみた
ドローン空撮画像を入力として、魚群自動検知を行うモデルを構築するコンペに参加してみた。
コンペ概要
こんな感じで"Jumper School"(「白湧き群」魚が海面上へ跳ねることで生じる飛沫が白く見える状態)と"Breezer School"(「水持ち群」海面直下にいる魚の動きが風波を打ち消してできる海面の凪)を検出するというのがお題。
ただ、参加したといっても、使ったのはTensorFlowでもPyTorchでもなく、Create ML。
学習
Create MLのObject Detectionテンプレートを使って、そこに学習データをつっこんだだけ。
学習データの前処理も、後処理も、学習時のパラメータ調整すらしていない。Create MLに学習データを渡すと提案してくれるIteration回数、グリッドサイズをそのまんま使用した。
なお、Create MLを用いたObject Detection(物体検出)モデルの学習手順はこちらの記事に以前まとめた通り:
ちなみにAlgorithmのところで転移学習(Transfer Learning) or フル学習(Full Network)を選べるが、このコンペのタスクはラベルと矩形を出力とするので物体検出のようでいて実は全然違うため、Full Networkを選択した。上の見本画像の通り、海の中の魚群を検出するという目的にあたって、机の上にあるモノを検出するようなタスクのために学習された汎用物体検出の特徴抽出部は役に立たないと判断した。
コンペで提供されているアノテーションデータのJSONを、Create ML形式に加工するツールはSwift / Mac Catalystで書いた。
学習に要した時間は旧型のMBP(2019 16インチ)を利用して2日弱。
作成したCore MLモデルを使用してテスト画像に対して評価を行い、提出用JSONをはくツールもSwift / Mac Catalystで書いた。
結果
ちなみに重要な前提として、この方法はコンペの要件を満たしていない。
・本コンペティションの入賞モデルは、将来的にエッジデバイス(NVIDIA / JETSON AGX XAVIER)に実装し実験を行う予定です。
→ Create MLで学習して生成したCore MLモデルはmacOS, iOS, watchOS, tvOSでしか使えない
・モデルの学習に利用するツールは、オープン且つ無料なもの(Python, R 等)に限定します。
→ Create MLは無料だが、オープンなツールではない。
というわけで、あくまで記念受験的なものです。
さて気になる結果は...
95組中、59位!
下から数えた方が早い順位だけど、ツールにデータを食わせただけ、なわりには健闘したのではと。
モデルのアーキテクチャを変えたりとかはできないが、前処理や後処理の余地はあるわけで、Create ML、結構いけるのでは?という手応えを個人的には得られた。
今後の展望:時系列情報の利用
このコンペはもう終了しているが、もしまだ何かやるとしたら、時系列情報を使うように改善したい。
というのも、アノテーションデータにはラベルと矩形の情報だけではなく、実は「画像の時系列情報(画像の並び順の情報)」も与えられている。
Jumper SchoolとBreezer Schoolは完全に別々のものではなく、同じ魚群の見え方が状態によって相互に変化するものです
画面中央付近にある魚群は、周辺の水面に比べて濃い色で見えているのが「水持ち群(Breezer School)」であり、その一部の白くなっている部分が「白湧き群(Jumper School)」です。この動画の前半でJumper Schoolだった部分は徐々にBreezer Schoolに遷移しています。このようにJumper SchoolとBreezer Schoolは完全に別個のものではなく同じ魚群の状態の変化であり、相互に変化し得るものです。
ということらしい。
これは学習データ(つまり正解)を可視化してみたものだが、正直"Breezer School"は人間の目で見てもよくわからない。
おそらく前後のフレームからの変化ありきで判断できるのだろう。
最後まで読んでいただきありがとうございます!もし参考になる部分があれば、スキを押していただけると励みになります。 Twitterもフォローしていただけたら嬉しいです。 https://twitter.com/shu223/