(「深層学習 TensorFlow + keras 植物写真の自動着色」の続きです。)
前回は花の色がうまく染まっていなかったので、花を染める目的で学習用のデータを集めてネットワーク構成やパラメータを変えてみました。

 

(1)学習用データ

主に花の葉の写真を集めています。

colorize02.zip

このうちランダムに5%をvalidation用、3%をテスト用、残り92%を学習用として使っています。

 

(2)プログラム

今回は、以下のようなCNN構成で学習させました。

階層を増やしてカーネルサイズを3と5、スライドは2階層につき2として変化させてみました。

## イメージサイズ
PIC_SIZE = 256

## モデルの構築
autoencoder = kr.models.Sequential()
# encoder
autoencoder.add(kr.layers.Conv2D(filters= 64, 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=(5, 5), strides=(1,1), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2D(filters= 64, kernel_size=(3, 3), strides=(2,2), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2D(filters= 64, kernel_size=(5, 5), strides=(1,1), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2D(filters= 64, kernel_size=(3, 3), strides=(2,2), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2D(filters= 64, kernel_size=(5, 5), strides=(1,1), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2D(filters= 64, kernel_size=(3, 3), strides=(2,2), activation=’relu’, padding=’same’))
# decoder
autoencoder.add(kr.layers.Conv2DTranspose(filters= 64, kernel_size=(5,5), strides=(2,2), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2DTranspose(filters= 64, kernel_size=(3,3), strides=(1,1), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2DTranspose(filters= 64, kernel_size=(5,5), strides=(2,2), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2DTranspose(filters= 64, kernel_size=(3,3), strides=(1,1), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2DTranspose(filters= 64, kernel_size=(5,5), strides=(2,2), activation=’relu’, padding=’same’))
autoencoder.add(kr.layers.Conv2DTranspose(filters= 64, kernel_size=(3,3), strides=(1,1), 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’)
# バッチサイズ=48 エポック=120

 

(3)結果

左から、モノクロ写真、着色写真、元の写真の順です。
参考のため前回の結果ログがら一部抜粋して比較しています。

【ツワブキの花】

COLORIZE02_TSUWABUKI21

参考:前回の結果↓

COLORIZE02_TSUWABUKI01

【タンポポの花】

COLORIZE02_TANPOPO21

参考:前回の結果↓

COLORIZE02_TANPOPO01

黄色の花はそれなりに染まっているようです。
色の塗り方にムラがありますが。

【カワラナデシコの花】

COLORIZE02_KAWARANADESHIKO22  COLORIZE02_KAWARANADESHIKO21

前の結果↓

COLORIZE02_KAWARANADESHIKO02COLORIZE02_KAWARANADESHIKO01

まだ不十分ですが少しだけ改善されていると思います。

【サルスベリの花】

COLORIZE02_SARUSUBERI21

前の結果↓

COLORIZE02_SARUSUBERI01

【サザンカの花】
COLORIZE02_SAZANKA21COLORIZE02_SAZANKA22

前の結果↓

COLORIZE02_SAZANKA01

色は薄いですが少しは赤く染まるようになりました。まだ赤色の学習データが足りないと思います。

【サツキの花】

COLORIZE02_SATSUKI21

前の結果↓

COLORIZE02_SATSUKI01

まだ赤色が薄く緑がかった部分が多いです。花びらと葉の区別の問題でしょうか?

全体的には赤色の花の学習データまだ足りないようです。

【サツキの葉】

COLORIZE02_SATSUKI22

前の結果↓

COLORIZE02_SATSUKI02

葉の方の色合いは改善されていると思います。

まだ学習が不十分ですが前回よりは少しましになったと思います。

環境バイオでは自動着色自体は目的ではなく、学習用データや、ネットワーク構成・パラメータなどを都合よく変化させて別の目的に利用できないか検討することです。

このように自動着色で学習用データや、ネットワーク構成・パラメータなどを少しずつ変えて結果の変化を比較してみると変更の影響がなんとなく実感として解ってくると思います。

(2020/5/17 S.Onda)