ごちうさで始める線画の自動着色(2)~TFRecordの作成~
KaggleにあったGochiUsa_Facesデータセットを使って、ごちうさキャラの線画の自動着色で遊んでみました。この投稿では訓練の前段階としてTFRecordを作成していきます。
目次
はじめに
前回のポストで、GochiUsa_FacesデータセットのEDAをしましたが、今回はモデル訓練のためのTFRecord作成をやっていきます。
ごちうさで始める線画の自動着色(1)~データセットのEDA~
https://blog.shikoan.com/gochiusa-01/
- 今回のやること:TFRecordの作成
- 次回以降やること:モデルの作成、訓練
なぜTFRecordなのか
今回の目的がTFRecordを使って実践的な訓練をしてみたかったという点があります(これが大きいです)。TensorFlowの推奨データ形式がTFRecordという点もあります。諸事情により、TFRecordを使わないで訓練するという選択肢もありですが、何かと避けがちなTFRecordに一度しっかり向き合ってみたかったのです。
作りたいモデル
線画を入力データとし、着色した画像を出力とするようなモデルを作ります。線画はデータセットに付属していませんが、カラー画像から人工的に作ります。「画像がどのキャラか」というラベル情報も使います。
今回TFRecordに記録する情報は次の3つです。
- もとのカラー画像
- 線画(1から人工的に作る)
- ラベル
Canny法によるエッジ検出
問題となるのは「どのようにカラー画像から線画を作るか」です。線画を作るとはエッジ検出の問題と捉えられるので、Canny法によるエッジ検出を使います。これはOpenCVに関数があります。
Canny法によるエッジ検出は次のようにします。Canny法には2つのスレッショルドがあり、ヒステリシスが存在する処理の最小値、最大値を示します(直感的な理解は後述)。
GochiUsa_Facesデータセット内の適当な画像をCanny法でエッジ検出し、元画像と並べて表示するコードは次の通りです。
結果は次の通り。このようにエッジ検出できています。
スレッショルドの直感的な理解
Canny法の2つのスレッショルドを変更したらどうなるでしょうか。
スレッショルドを「50、100、150、200、400」と変更してみました。これは実質的にハイパーパラメータとなるので、頑張るのだったらチューニングしてもいいと思います。
直感的な理解としては、第1と第2の値差が小さいほど細かい線を拾う傾向があります。ただ(50, 100)のケースだと背景の線まで拾うので、どこまで拾うのがよいのかは難しいところです。突っ込んでやるんだったら線画の抽出もNNベースになるのでしょうね。
この値が正しいかどうかはわかりませんが、今回は(50, 400)で固定してみました。
TFRecordを記録する
GochiUsa_Facesは画像解像度が無数にありますが、ほとんど正方形画像なので、固定サイズにリサイズしてから記録します。320×320にリサイズして、Data Augmentationをはさみながら256×256でNNに食わせます。短辺の解像度が320未満のサンプルは捨てます。
解像度さえ決まれば簡単ですね。サンプル単位で次のようなスキームにします。
- カラー画像:uint8型 (320, 320, 3)
- エッジ画像:uint8型 (320, 320, 1)
- ラベル:float32型 (9, ) ←クラス数が9だから
ラベルは後々楽したいので、One-hotエンコーディングして記録します。TFRecordの作成コードは次の通り。
やり方はこの記事で行った通りです。NumPy配列を.tobytes()して記録しています。
途中でシャッフルを入れているのがポイントかもしれません。tf.data.Datasetでshuffleすると、ある局所的な区間のみシャッフルします。チノちゃんの画像が1万枚、シャロの画像が7000枚のように大量に連続していると、訓練中にシャッフルしてもキャラごとに団子になってしまうので、TFRecordの作成時にシャッフルを入れました。
write_recordを「write_record(“archive/main_dataset/main_dataset”, 320)」のようにデータセットのディレクトリに対して適用します。
TFRecordの可視化
TFRecordを可視化してみましょう。
このようにしてTFRecordDatasetで使える形式になりました。
予告
次回の投稿では、モデルの設計や訓練をしていきます。
次回はこちら:https:blog.shikoan.com/gochiusa-03
Shikoan's ML Blogの中の人が運営しているサークル「じゅ~しぃ~すくりぷと」の本のご案内
技術書コーナー