TensorFlow GoogLeNet Deep Dream の解析
人工知能が見る悪夢、Deep Dream については TensorFlow で Deep Dream 入門 で Caffe 実装と TensorFlow 実装の Deep Dream をそれぞれ試してみました。
今回は TensorFlow 実装の Deep Dream を視覚的に解析してみます。
やりたい事は単純で、各層の重みをベースにノイズを乗せた画像が変形される様子を観察します。
モデルは、TensorFlow で提供されている GoogLeNet Inception v3 モデル使用しました。これは ImageNet でトレーニング済みのものです。
GoogLeNet グラフの Op 総数は 375 ありますが、Conv2D タイプの層に限定すれば 59 層でそれぞれ以下のような名前を持っています。そして * 印のついた層について画像を変形させてみます :
* conv2d1_pre_relu
* conv2d2_pre_relu
* mixed3a_1x1_pre_relu
* mixed3a_3x3_bottleneck_pre_relu
* mixed3a_3x3_pre_relu
* mixed3a_5x5_bottleneck_pre_relu
* mixed3a_5x5_pre_relu
* mixed3a_pool_reduce_pre_relu
mixed3b_1x1_pre_relu
mixed3b_3x3_bottleneck_pre_relu
mixed3b_3x3_pre_relu
mixed3b_5x5_bottleneck_pre_relu
mixed3b_5x5_pre_relu
mixed3b_pool_reduce_pre_relu
* mixed4a_1x1_pre_relu
* mixed4a_3x3_bottleneck_pre_relu
* mixed4a_3x3_pre_relu
* mixed4a_5x5_bottleneck_pre_relu
* mixed4a_5x5_pre_relu
* mixed4a_pool_reduce_pre_relu
mixed4b_1x1_pre_relu
mixed4b_3x3_bottleneck_pre_relu
mixed4b_3x3_pre_relu
mixed4b_5x5_bottleneck_pre_relu
mixed4b_5x5_pre_relu
mixed4b_pool_reduce_pre_relu
mixed4c_1x1_pre_relu
mixed4c_3x3_bottleneck_pre_relu
mixed4c_3x3_pre_relu
mixed4c_5x5_bottleneck_pre_relu
mixed4c_5x5_pre_relu
mixed4c_pool_reduce_pre_relu
mixed4d_1x1_pre_relu
mixed4d_3x3_bottleneck_pre_relu
mixed4d_3x3_pre_relu
mixed4d_5x5_bottleneck_pre_relu
mixed4d_5x5_pre_relu
mixed4d_pool_reduce_pre_relu
mixed4e_1x1_pre_relu
mixed4e_3x3_bottleneck_pre_relu
mixed4e_3x3_pre_relu
mixed4e_5x5_bottleneck_pre_relu
mixed4e_5x5_pre_relu
mixed4e_pool_reduce_pre_relu
* mixed5a_1x1_pre_relu
* mixed5a_3x3_bottleneck_pre_relu
* mixed5a_3x3_pre_relu
* mixed5a_5x5_bottleneck_pre_relu
* mixed5a_5x5_pre_relu
* mixed5a_pool_reduce_pre_relu
* mixed5b_1x1_pre_relu
* mixed5b_3x3_bottleneck_pre_relu
* mixed5b_3x3_pre_relu
* mixed5b_5x5_bottleneck_pre_relu
* mixed5b_5x5_pre_relu
* mixed5b_pool_reduce_pre_relu
* head0_bottleneck_pre_relu
* head1_bottleneck_pre_relu
実験としては以下のノイズを乗せたグレー画像を入力サンプルとし、各層の重みをベースに変形した画像を示します :
以下がその変形画像のリストです。高い層(深い層)から低い層の順序になっています。
言うまでもなく、低い層では画像の変形がピクセル単位に局所化されます :
head1_bottleneck_pre_relu | head0_bottleneck_pre_relu |
---|---|
![]() | ![]() |
【ブロック 5B】
mixed5b_pool_reduce_pre_relu | mixed5b_5x5_pre_relu |
---|---|
![]() | ![]() |
mixed5b_5x5_bottleneck_pre_relu | mixed5b_3x3_pre_relu |
![]() | ![]() |
mixed5b_3x3_bottleneck_pre_relu | mixed5b_1x1_pre_relu |
![]() | ![]() |
【ブロック 5A】
mixed5a_pool_reduce_pre_relu | mixed5a_5x5_pre_relu |
---|---|
![]() | ![]() |
mixed5a_5x5_bottleneck_pre_relu | mixed5a_3x3_pre_relu |
![]() | ![]() |
mixed5a_3x3_bottleneck_pre_relu | mixed5a_1x1_pre_relu |
![]() | ![]() |
【ブロック 4A】
mixed4a_pool_reduce_pre_relu | mixed4a_5x5_pre_relu |
---|---|
![]() | ![]() |
mixed4a_5x5_bottleneck_pre_relu | mixed4a_3x3_pre_relu |
![]() | ![]() |
mixed4a_3x3_bottleneck_pre_relu | mixed4a_1x1_pre_relu |
![]() | ![]() |
【ブロック 3A】
mixed3a_pool_reduce_pre_relu | mixed3a_5x5_pre_relu |
---|---|
![]() | ![]() |
mixed3a_5x5_bottleneck_pre_relu | mixed3a_3x3_pre_relu |
![]() | ![]() |
mixed3a_3x3_bottleneck_pre_relu | mixed3a_1x1_pre_relu |
![]() | ![]() |
【Conv Layers】
conv2d2_pre_relu | conv2d1_pre_relu |
---|---|
![]() | ![]() |
conv2d0_pre_relu | |
![]() |
以上