自分で集めた植物画像データで、python + TensorFlow + kerasを使って簡単な自動着色のブログラムを試してみました。
【参考】
(python keras プログラム)
「現場で使える!TensorFlow開発入門 Kerasによる深層学習モデル構築手法 (AI & TECHNOLOGY)」
(自動着色一般)
https://robotstart.info/2016/06/07/deep-larning-colorize.html
http://iizuka.cs.tsukuba.ac.jp/projects/colorization/ja/
http://iizuka.cs.tsukuba.ac.jp/projects/colorization/data/colorization_sig2016.pdf
(1)学習用データ
AIによる植物分類で集めたデータの一部を流用しました。
(自動着色向けデータではないですが、とりあえずお試しのつもりで。)
このうちランダムに5%をvalidation用、3%をテスト用、残りを学習用として使っています。
(2)プログラム
python keras プログラムについては以下の本を参考にしました。
「現場で使える!TensorFlow開発入門 Kerasによる深層学習モデル構築手法 (AI & TECHNOLOGY)」
今回は、以下のような簡単なネットワーク構成で学習してみました。
## イメージサイズ
PIC_SIZE = 256
## モデルの構築
import tensorflow as tf
import keras as kr
autoencoder = kr.models.Sequential()
# encoder
autoencoder.add(kr.layers.Conv2D(filters= 32, kernel_size=(3, 3), strides=(1,1), activation=’relu’, padding=’same’, input_shape=(PIC_SIZE, PIC_SIZE, 1)))
autoencoder.add(kr.layers.Conv2D(filters= 64, kernel_size=(3, 3), strides=(2,2), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2D(filters=128, kernel_size=(3, 3), strides=(2,2), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2D(filters=256, kernel_size=(3, 3), strides=(2,2), activation=’relu’, padding=’same’))
# decoder
autoencoder.add(kr.layers.Conv2DTranspose(filters=128, kernel_size=(3,3), strides=(2,2), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2DTranspose(filters= 64, kernel_size=(3,3), strides=(2,2), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2DTranspose(filters= 32, kernel_size=(3,3), strides=(2,2), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2DTranspose(filters= 2, kernel_size=(1,1), strides=(1,1), activation=’relu’, padding=’same’))
# コンパイル
autoencoder.compile(optimizer=’adam’, loss=’mse’)
# バッチサイズ=60 エポック=120
(3)結果
結果ログ(結果をPDFファイル変換しました)
colorize01_log.pdf
(プログラムは、表示に IPython.display, PIL を利用、jupyter notebook で実行。)
— 結果の一部抜粋 —
左から、モノクロ写真、着色写真、元の写真の順です。
【イチョウの幹】
元の写真に忠実ではないですが、だいたいそれらしい色に染まっていると思います。
【イチョウの葉】
すこし黄葉ぎみの色合いになってます。鮮やかな緑ではないですがそれなりに染まっています。
【クスノキの幹】
色合いとしては綺麗に染まっていると思います。
【ウメの花】
赤色がうまく染まっていませんでした。
2段目は、元は紅梅ですが白梅になってしまいました。
【ウメの幹】
幹のほうはそれなりに染まっていると思います。
【ケヤキの幹】
元の写真に忠実でないですが、一般的な木の幹らしい色合いで染まっていると思います。
【ケヤキの葉】
色は薄いですが緑色に染まっています。
【カワラナデシコの花】
今回の学習では花の色は染まりにくかったです。
カワラナデシコの花のうち特徴的な部分のみがピンク色に染まっています。
逆にこの結果からどの部分が特徴的と捉えられているかがわかると思います。
【ドクダミの花と葉】
鮮やかではないですが、それなりに染まっていると思います。
【サルスベリの幹】
それらしく染まっていると思います。
【サルスベリの花】
花のほうはうまく染まっていません。
サルスベリの花の色は、赤~白色があるのでうまく判別できないのではないかと思います。
【ツワブキの花】
一応、染まっていますが、黄色が薄いです。
【サツキの花】
赤色に染まっていません。
学習データに赤色の花が少ないことや、元のモノクロ画像では緑と赤の区別がつきにくいことや、CNN構成が単純で花と葉の区別をうまく学習出来なかったなどが考えられると思います。
雌蕊と雄蕊の付近がうっすらと赤くそまっているので、この辺りの特徴は捉えている可能性も考えられます。
【サツキの葉】
それなりに染まっていると思いますが、色が薄いです。
今回の学習では、木の幹の色はもっともらしく染まっていましたが、花の色はうまく染まらないことが多かったです。
花の色は、同じ種類の花でも違うことが多く葉と花は形態的に似ている場合もあり、今回のような少ない学習と単純なネットワーク構成では染めるのが難しかったと思います。
木の幹がそれらしく染まったことやナデシコの花の特徴的な部分が染まっていることなどから、このネットワーク構成では大まかな形態よりも細かい特徴のパターンを捉えている可能性が考えられると思います。
今回は単純なネットワーク構成で試してみましたが、下記の参考サイトのようにより高度の方法もあります。
http://iizuka.cs.tsukuba.ac.jp/projects/colorization/ja/
http://iizuka.cs.tsukuba.ac.jp/projects/colorization/data/colorization_sig2016.pdf
自動着色は、元の色をそれほど正確に再現する必要がなく自然な色合いであることを求められる分野(例えば、イラストやモノクロ映画の着色など)では有用だと思います。
環境・バイオ系での応用としては、元の色の再現よりも特定の特徴を示す部分の着色・強調などではないかと思います。
(2019/12/30 S.Onda)
(2019/12/31 S.Onda 画像とコメントの追加等)