AI 2Dモーフィング ～アニメーション技術のデータ拡張への応用～

# 1.はじめに
　AI 2Dモーフィングとは、静止画に対し、AIが「どの部分が動くのか？」を検出し、さらに「どう動くのか？」を類推して、自動でアニメーションをつける技術です。
　ここでは、AI 2Dモーフィングを利用し、手書きで描いた昆虫のイラストに対して、足は歩いているように動き、羽は羽ばたくように動くアニメーションをつけるアプリケーション（AI 2Dモーフィングアプリ）とこの技術の応用事例について紹介します。

<div align="center">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2990701/3fbeb864-7d42-f715-eea5-e08a86068624.gif">
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2990701/6f8aa57b-2cb8-3511-f445-55e34432613f.gif">
</div>
<div style="text-align: center;">AI 2Dモーフィングの事例</div>


# 2.AI 2Dモーフィングを実現する技術
　我々が作ったAI 2Dモーフィングでは、主に2つの技術を使用しています。
　1つ目は、Deep Learningを用いた、セマンティックセグメンテーションです。これは、画像を構成するピクセル一つ一つがどのカテゴリに属しているかを予測する技術です。

![pic3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2990701/84b0dcee-b55d-568c-1f2f-a6324690dbde.png)
入力画像と正解マスク画像の例
左：入力画像　右：正解のマスク画像

　２つ目は、2Dモーフィングです。これは、静止画に含まれる特定のパーツを変形させることで、２次元の静止画にあたかも３次元のような動きをつける技術です。2Dモーフィングを行うためのソフトが多数販売されており、ゲーム、動画やスマホアプリなど様々なシーンで使用されています。
　我々は２つ目の技術を次の２つの用途で使用しました。

* 検出したパーツを動かしアニメーションを作る
* 学習用の絵のデータ拡張に使用する

一番目は一般的な使用方法です。二番目は応用事例で、５章で紹介します。
次の章から、AI 2Dモーフィングアプリを例にこの技術の実現方法を紹介していきます。

# 3.パーツの検出
　今回作成したAI 2Dモーフィングアプリでは、最初に手書きの絵から虫の足、蝶の羽、車のタイヤの３種類のパーツを検出します。パーツの検出には、高速かつ正確にセマンティックセグメンテーションを実施できるDeep Learningベースの手法U-Net[^1]を使用しています。この手法は、電子顕微鏡の映像から、細胞を追跡するチャレンジの「ISBI cell tracking challenge 2015」にて、既存の手法に対して大差で勝利を収め、この分野のエポックメイキングとなっています。
　以下の図は、学習に使用した絵の一例とその検出例です。また、U-Netを用いた予測イメージを図示します。

![pic4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2990701/862e083b-4930-64f9-4779-0d6709464a8c.png)
上段　手書き絵例　左：虫　中央：蝶　右：車
下段　検出パーツ例　左：虫の足　中央：蝶の羽　右：車のタイヤ

![pic5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2990701/3ace105d-e57e-844c-8968-2e54633eab24.png)
U-Netを用いた予測イメージ：抽出対象のパーツがマスクされる

# 4.アニメーションの作成
パーツの領域を検出したら画像処理でアニメーションをつけていきます。今回のアニメーション作成で使用した画像処理方法は以下の通りです。
1. イラストを羽とそれ以外のパーツに分ける。
2. アニメーション対象のパーツ（羽）の画像をドロネー三角形分割で三角形に分割する。
3. 2.で分割した三角形の頂点がどこに移動するかを決定する。
4. パーツの画像ごとに②で作成した三角形それぞれに対し、③で決定した頂点となるようにアフィン変換を行う。
5. パーツの画像ごとに、変換した④画像を合成し、新たな１枚のイラストにする。
※3.～4.の処理を分割アフィンワーピング[^2]と言います。

![pic6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2990701/051d45a9-2356-cbe9-7f4d-8c89c7837618.png)
2Dモーフィングの処理イメージ

これら1.～5.の処理をフレームごとに行うことで、2次元のイラストから３次元のような動きをするアニメーションが作成できます。

![pic7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2990701/336c0b56-0d49-d338-834c-3dfc95a5594e.png)
蝶の羽を羽ばたくようにアニメーションをつけた例

# 5. データ拡張への応用
　先述の通りAI 2Dモーフィングでは、稼働パーツの検出にセマンティックセグメンテーションを使用します。一般的にパーツ検出のモデルの学習には、数百～数千枚の入力画像と正解のマスク画像のセットが必要となります。しかしながら、大量のデータを用意できないケースも多くあります。
　今回は、虫の足、蝶の羽、車のタイヤの３種類のパーツを検出するために、学習にそれぞれ100枚の絵（入力画像）を描き、マスク画像を手作業で作成しました。入力画像とマスク画像のセットを分割アフィンワ―ピングを用いて同じように変換することで、新たな入力画像とマスク画像のセットを作成し、検出に十分なデータ数になるようデータ拡張を行いました。
　分割アフィンワ―ピングのデータ拡張のメリットは、トポロジーを保ったまま新たな形状の学習データを作成することが可能である点です。この手法を用いれば、回転や反転、拡大、縮小といった単純な手法とは異なるデータ拡張が可能です。
　以下の蟻の絵のように、入力画像を元に自然な新たな画像を作成することができます。お腹やお尻の形が変わっているのがよくわかります。

![morph1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2990701/466cb21b-974d-bc88-a29a-76321497e752.gif)
![morph2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2990701/69993929-88f6-c371-3015-75c328b10c27.gif)


分割アフィンワ―ピングによるデータ拡張の例
上段：変換前の画像（絵）⇔分割アフィンワ―ピングでの変換後の画像（絵）
下段：変換前のマスク画像⇔分割アフィンワ―ピングでの変換後のマスク画像

# 6. 分割アフィンワ―ピングを用いたデータ拡張の活用事例
　ここでは事例として、筆者らが優秀賞およびボクセル大賞を受賞した、精密工学会画像応用技術専門委員会（IAIP）が主催する外観検査アルゴリズムコンテスト2019[^3]での分割アフィンワ―ピングを用いたデータ拡張の活用方法を紹介します。
　2019年のコンテストの課題は、Ｘ線ＣＴによって得られる工業製品（鋳造品）のボクセルデータから鋳巣と呼ばれる空洞を見つけるというものでした。アルゴリズム開発に使用できるデータとして5つのボクセルデータが配布されましたが、提供データのみでは、学習データ数として不十分なため、受領したデータに対して今回の手法を用いてデータ拡張を行いました。
　鋳巣は様々な形（不定形）をとるという特徴があります。このような特徴を持つデータに対しては、分割アフィンワ―ピングを用いてランダムにデータを変換することで学習データにないパターンの学習データを作成することができます。
![pic8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2990701/ec474831-117f-b066-dfcc-2ee9de073fa8.png)
分割アフィンワ―ピングによる画像変形の一例

今回の手法を用いてデータ拡張した結果、12.5%精度が向上しました。

分割アフィンワーピングによるデータ拡張の適用効果
|   |データ拡張前|データ拡張後|
|:-:|:-:|:-:|
|Dice係数(%)|63.2|75.7|
|検出数/正解数|1812/4759|2869/4759|
|推定時間(s/枚)|0.02|0.02|

# 7. まとめ
　AI 2Dモーフィングで使用した技術を紹介しました。従来、2Dモーフィングはゲームや動画などでアニメーションを作るために使用されている技術です。その技術を応用することで、対象物の特徴を損なうことなくデータ拡張することができ、対象物の検出精度向上に繋がりました。今後も様々な分野の技術をAI開発に応用していきたいと思います。

AI Powerhouse　永田　亮

[^1]:U-Net: Convolutional Networks for Biomedical Image Segmentation https://arxiv.org/abs/1505.04597
[^2]:三次元頂点情報を用いた訓練画像生成による画像分類精度の向上　https://www.ipsj-kyushu.jp/page/ronbun/hinokuni/1005/1B/1B-4.pdf
[^3]:外観検査アルゴリズムコンテスト http://alcon.itlab.org/