初めまして。LeapMindのインターン生、堂園です。
昨年は人生初大学祭ミスターコンテストに出たりなど、新たなチャレンジが沢山ありました。
思い返すとエモーショナルになりますが...
それはさておき、現在は主にBusiness Div.を担当しております。
Deep Learningを必死に勉強しておりますが、まだ一人では1からモデル構築ができず...
ということで、誰でも簡単に組込みDeep Learningモデル構築が可能な『DeLTA-Lite』を使って、実際にモデルを作ってみます!
今回作るモデルは『笑顔と真顔の分類』です。
前編では主に泥臭くデータセットを準備する内容をご紹介します。
まずは、大まかな作業フローをご紹介します。
◾️画像収集
↓
◾️トリミング
↓
◾️オーグメンテーション
という流れで進めていきます。
1.画像収集
Deep Learningでモデル構築の際に無くてはならないもの、それはデータです。画像です。
DeLTA-Liteを使う場合はざっくりとデータセットの「量×質」を意識すれば良いかなと思います。
まずは、スクレイピングで画像をネットから引っ張ってきます。
使えないデータ(画像が荒い、OpenCVで認識しない等)が結構出てくるので、
余裕をもって笑顔、真顔それぞれ2000枚くらいずつスクレイピングします。
今回は「smile」「smile human」「笑顔」「serious」「serious expression」「真顔」を検索ワードにしました。
検索ワードに対するゲットした画像数は下記です。
・smile: 553枚
・smile human: 798枚
・笑顔: 724枚
・serious: 742枚
・serious expression: 609枚
・真顔 : 698枚
<笑顔 例>
<真顔 例>
*実際にスクレイピングした画像をお見せしたかったのですが著作権の都合上、イメージとしてオープンデータセットの画像を載せます。
出典:https://vis-www.cs.umass.edu/lfw/index.html
後で顔だけ切り抜くので、背景は特に気にしなくて大丈夫です。
このタイミングで関係のない画像(イラスト、明らかに荒い、真顔のなかに笑顔の画像あるなど)を取り除きます。
このタイミングで取り除かないと、次のオーグメンテーションで画像を増やした後に消すのは超面倒になります。
なので、ここは人力で1つずつ画像を確認していきます。
今までの人生の中で一番command+deleteを使いました...
ここで笑顔、真顔それぞれのファイルを統合し、「Smile」「Not_Smile」の2つにします。
「Smile」・・・ smile、smile human、笑顔 の3ファイルを統合
「Not_Smile」・・・ serious、serious expression、真顔 の3ファイルを統合
にします。
これでこのフェーズは完了です。
2.トリミング
OpenCVを使ってスクレイピングした画像から顔のみを抜き取ります。
Pythonはあまり得意ではないのですが、Google先生を駆使して書きました。
パス指定、結構むずかったです...
それはさておき、切り抜いた画像がこれです。
いい感じに切り取れました。
背景気にしなくて正解でした。
OpenCVで認識されない画像も結構ありましたが、それらは無視して認識されたものだけを使います。
そして、画像の枚数はこうなりました。
・Smile: 663枚
・Not_Smile:412枚
画像サイズを揃えない(大きいサイズ、小さいサイズなど)でDeLTA-Lite上でモデルを作った時、
FPGAで推論する際FPS(Frames per Second)がめっちゃ遅くなったという経験があります。
そこで、画像サイズを128×128にするために一括リサイズをかけます。
一番良い方法は、Pythonでリサイズのコードを書くことだと思うのですが、
今回はパソコンのグラフィックスペックにモノ言わせて、開く→ツール→サイズを調節という方法でリサイズしました。
これで、元となるデータセットの準備は完了です!
3.オーグメンテーション
ここまでの処理で、データセットの『量×質』の『質』の部分を中心に作業しました。
ここからは『量』を意識して作業します。
これまでに用意した画像だけでは量が少ないので、このフェーズでは画像の枚数を増やします。
かけた処理は以下です。
<Smile>
・ブルーにする
・グレースケール
・コントラスト変更
・ノイズを加える
<Not_Smile>
・ブルーにする
・グレースケール
・コントラスト変更
・ノイズを加える
・暗くする
ここでもまた人力での作業が発生します。
明らかに精度を下げそうな画像(例えばノイズが乗りすぎて何の画像かわからない)などを取り除きます。
ここで、最終的な画像の枚数は下記になります。
・Smile: 2503枚
・Not_Smile:2468枚
これでデータセットの準備は完了です。
後編に続く
Back to Index