37
第60回 日本植物生理学会年会 データベース講習会 (3.14.2019@名古屋大) Wet研究者の視点で始める深層学習 ~画像診断と判断要因の可視化 赤木 剛士 (Takashi AKAGI)

Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

第60回 日本植物生理学会年会 データベース講習会 (3.14.2019@名古屋大)

Wet研究者の視点で始める深層学習~画像診断と判断要因の可視化

赤木 剛士 (Takashi AKAGI)

Page 2: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

深層学習は「暗黙知・経験知」を反映可能

Neural Style Transfer (Gatys et al. 2016): CNNによる「特徴抽出」アートツール

Page 3: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

Flyer作りに最適!!

赤木 作 2017 京都大・浙江大 農学部 joint symposiumポスター

Page 4: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

Outline

1. Wet研究視点の深層学習基礎:座学

2. VGG16の転移学習による画像診断と診断理由の可視化:実践編

Page 5: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

深層学習の概要・基本構造

https://leapmind.io/blog/2017/06/16/

https://www.upwork.com/hiring/for-clients/log-analytics-deep-

learning-machine-learning/

人工知能 (AI)

機械学習

ニューラルネットワーク

深層学習

人工ニューラルネットワークを「多層化」したものが深層学習

Page 6: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

(個人的感覚で)シロウトでも扱えそうな深層学習の代表格

畳み込みニューラルネットワーク (CNN) による画像解析

〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている➡ 必ずしも画像だけではない。〇比較的扱いやすいpackageが多い (な気がする)。GUIもある(後述)

再帰型ニューラルネットワーク (RNN) (またはLSTM)

〇フィードバック系 (前を記憶) を有しており、時系列解析に向いている〇自然言語の解析によく用いられる(ということは塩基配列にも?)

https://jp.mathworks.com/solutions/deep-

learning/convolutional-neural-network.html

LuCun et al. 2015, Nature

Page 7: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

0

5

10

15

20

25

30

2010 2011 2012 2013 2014 2015 human

Top

-5 c

lassific

ation e

rror

ILSVRC winner models

Deep learning

AlexNet

8 lay.

8 lay.GoogleNet

22 lay. ResNet

152 lay.

CNNの精度:ImageNet large scale visual recognition challengeの推移

Model Pub. Year Nos Lays. Derivative

AlexNet 2012 8

VGG16 2014 16 VGG19

GoogLeNet 2014 22 Inception

ResNet 2015 152 ResNet50

数字認識(MNIST)においてもヒトの感覚を超える

ヒトは分かるDLは苦手

DLは分かるヒトは苦手

Page 8: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

モデル構造:AlexNet, VGG16, InceptionV3, ResNet50

__________________________________________________________________________________________________

Layer (type) Output Shape Param # Connected to

==================================================================================================

input_1 (InputLayer) (None, 224, 224, 3) 0

__________________________________________________________________________________________________

conv1_pad (ZeroPadding2D) (None, 230, 230, 3) 0 input_1[0][0]

__________________________________________________________________________________________________

conv1 (Conv2D) (None, 112, 112, 64) 9472 conv1_pad[0][0]

__________________________________________________________________________________________________

bn_conv1 (BatchNormalization) (None, 112, 112, 64) 256 conv1[0][0]

__________________________________________________________________________________________________

activation_1 (Activation) (None, 112, 112, 64) 0 bn_conv1[0][0]

__________________________________________________________________________________________________

max_pooling2d_1 (MaxPooling2D) (None, 55, 55, 64) 0 activation_1[0][0]

__________________________________________________________________________________________________

res2a_branch2a (Conv2D) (None, 55, 55, 64) 4160 max_pooling2d_1[0][0]

__________________________________________________________________________________________________

bn2a_branch2a (BatchNormalizati (None, 55, 55, 64) 256 res2a_branch2a[0][0]

__________________________________________________________________________________________________

activation_2 (Activation) (None, 55, 55, 64) 0 bn2a_branch2a[0][0]

__________________________________________________________________________________________________

res2a_branch2b (Conv2D) (None, 55, 55, 64) 36928 activation_2[0][0]

__________________________________________________________________________________________________

bn2a_branch2b (BatchNormalizati (None, 55, 55, 64) 256 res2a_branch2b[0][0]

__________________________________________________________________________________________________

activation_3 (Activation) (None, 55, 55, 64) 0 bn2a_branch2b[0][0]

__________________________________________________________________________________________________

res2a_branch2c (Conv2D) (None, 55, 55, 256) 16640 activation_3[0][0]

__________________________________________________________________________________________________

res2a_branch1 (Conv2D) (None, 55, 55, 256) 16640 max_pooling2d_1[0][0]

__________________________________________________________________________________________________

bn2a_branch2c (BatchNormalizati (None, 55, 55, 256) 1024 res2a_branch2c[0][0]

__________________________________________________________________________________________________

bn2a_branch1 (BatchNormalizatio (None, 55, 55, 256) 1024 res2a_branch1[0][0]

__________________________________________________________________________________________________

add_1 (Add) (None, 55, 55, 256) 0 bn2a_branch2c[0][0]

bn2a_branch1[0][0]

__________________________________________________________________________________________________

activation_4 (Activation) (None, 55, 55, 256) 0 add_1[0][0]

__________________________________________________________________________________________________

res2b_branch2a (Conv2D) (None, 55, 55, 64) 16448 activation_4[0][0]

__________________________________________________________________________________________________

bn2b_branch2a (BatchNormalizati (None, 55, 55, 64) 256 res2b_branch2a[0][0]

__________________________________________________________________________________________________

activation_5 (Activation) (None, 55, 55, 64) 0 bn2b_branch2a[0][0]

__________________________________________________________________________________________________

res2b_branch2b (Conv2D) (None, 55, 55, 64) 36928 activation_5[0][0]

__________________________________________________________________________________________________

bn2b_branch2b (BatchNormalizati (None, 55, 55, 64) 256 res2b_branch2b[0][0]

__________________________________________________________________________________________________

activation_6 (Activation) (None, 55, 55, 64) 0 bn2b_branch2b[0][0]

__________________________________________________________________________________________________

res2b_branch2c (Conv2D) (None, 55, 55, 256) 16640 activation_6[0][0]

__________________________________________________________________________________________________

bn2b_branch2c (BatchNormalizati (None, 55, 55, 256) 1024 res2b_branch2c[0][0]

__________________________________________________________________________________________________

add_2 (Add) (None, 55, 55, 256) 0 bn2b_branch2c[0][0]

activation_4[0][0]

__________________________________________________________________________________________________

activation_7 (Activation) (None, 55, 55, 256) 0 add_2[0][0]

__________________________________________________________________________________________________

res2c_branch2a (Conv2D) (None, 55, 55, 64) 16448 activation_7[0][0]

__________________________________________________________________________________________________

bn2c_branch2a (BatchNormalizati (None, 55, 55, 64) 256 res2c_branch2a[0][0]

__________________________________________________________________________________________________

activation_8 (Activation) (None, 55, 55, 64) 0 bn2c_branch2a[0][0]

__________________________________________________________________________________________________

res2c_branch2b (Conv2D) (None, 55, 55, 64) 36928 activation_8[0][0]

__________________________________________________________________________________________________

bn2c_branch2b (BatchNormalizati (None, 55, 55, 64) 256 res2c_branch2b[0][0]

__________________________________________________________________________________________________

activation_9 (Activation) (None, 55, 55, 64) 0 bn2c_branch2b[0][0]

__________________________________________________________________________________________________

res2c_branch2c (Conv2D) (None, 55, 55, 256) 16640 activation_9[0][0]

__________________________________________________________________________________________________

bn2c_branch2c (BatchNormalizati (None, 55, 55, 256) 1024 res2c_branch2c[0][0]

__________________________________________________________________________________________________

add_3 (Add) (None, 55, 55, 256) 0 bn2c_branch2c[0][0]

activation_7[0][0]

__________________________________________________________________________________________________

activation_10 (Activation) (None, 55, 55, 256) 0 add_3[0][0]

__________________________________________________________________________________________________

res3a_branch2a (Conv2D) (None, 28, 28, 128) 32896 activation_10[0][0]

__________________________________________________________________________________________________

bn3a_branch2a (BatchNormalizati (None, 28, 28, 128) 512 res3a_branch2a[0][0]

__________________________________________________________________________________________________

activation_11 (Activation) (None, 28, 28, 128) 0 bn3a_branch2a[0][0]

__________________________________________________________________________________________________

res3a_branch2b (Conv2D) (None, 28, 28, 128) 147584 activation_11[0][0]

__________________________________________________________________________________________________

bn3a_branch2b (BatchNormalizati (None, 28, 28, 128) 512 res3a_branch2b[0][0]

__________________________________________________________________________________________________

activation_12 (Activation) (None, 28, 28, 128) 0 bn3a_branch2b[0][0]

__________________________________________________________________________________________________

res3a_branch2c (Conv2D) (None, 28, 28, 512) 66048 activation_12[0][0]

__________________________________________________________________________________________________

res3a_branch1 (Conv2D) (None, 28, 28, 512) 131584 activation_10[0][0]

__________________________________________________________________________________________________

bn3a_branch2c (BatchNormalizati (None, 28, 28, 512) 2048 res3a_branch2c[0][0]

__________________________________________________________________________________________________

bn3a_branch1 (BatchNormalizatio (None, 28, 28, 512) 2048 res3a_branch1[0][0]

__________________________________________________________________________________________________

add_4 (Add) (None, 28, 28, 512) 0 bn3a_branch2c[0][0]

bn3a_branch1[0][0]

__________________________________________________________________________________________________

activation_13 (Activation) (None, 28, 28, 512) 0 add_4[0][0]

__________________________________________________________________________________________________

res3b_branch2a (Conv2D) (None, 28, 28, 128) 65664 activation_13[0][0]

__________________________________________________________________________________________________

bn3b_branch2a (BatchNormalizati (None, 28, 28, 128) 512 res3b_branch2a[0][0]

__________________________________________________________________________________________________

activation_14 (Activation) (None, 28, 28, 128) 0 bn3b_branch2a[0][0]

__________________________________________________________________________________________________

res3b_branch2b (Conv2D) (None, 28, 28, 128) 147584 activation_14[0][0]

__________________________________________________________________________________________________

bn3b_branch2b (BatchNormalizati (None, 28, 28, 128) 512 res3b_branch2b[0][0]

__________________________________________________________________________________________________

activation_15 (Activation) (None, 28, 28, 128) 0 bn3b_branch2b[0][0]

__________________________________________________________________________________________________

res3b_branch2c (Conv2D) (None, 28, 28, 512) 66048 activation_15[0][0]

__________________________________________________________________________________________________

bn3b_branch2c (BatchNormalizati (None, 28, 28, 512) 2048 res3b_branch2c[0][0]

__________________________________________________________________________________________________

add_5 (Add) (None, 28, 28, 512) 0 bn3b_branch2c[0][0]

activation_13[0][0]

__________________________________________________________________________________________________

activation_16 (Activation) (None, 28, 28, 512) 0 add_5[0][0]

__________________________________________________________________________________________________

res3c_branch2a (Conv2D) (None, 28, 28, 128) 65664 activation_16[0][0]

__________________________________________________________________________________________________

bn3c_branch2a (BatchNormalizati (None, 28, 28, 128) 512 res3c_branch2a[0][0]

__________________________________________________________________________________________________

activation_17 (Activation) (None, 28, 28, 128) 0 bn3c_branch2a[0][0]

__________________________________________________________________________________________________

res3c_branch2b (Conv2D) (None, 28, 28, 128) 147584 activation_17[0][0]

__________________________________________________________________________________________________

bn3c_branch2b (BatchNormalizati (None, 28, 28, 128) 512 res3c_branch2b[0][0]

__________________________________________________________________________________________________

activation_18 (Activation) (None, 28, 28, 128) 0 bn3c_branch2b[0][0]

__________________________________________________________________________________________________

res3c_branch2c (Conv2D) (None, 28, 28, 512) 66048 activation_18[0][0]

__________________________________________________________________________________________________

bn3c_branch2c (BatchNormalizati (None, 28, 28, 512) 2048 res3c_branch2c[0][0]

__________________________________________________________________________________________________

add_6 (Add) (None, 28, 28, 512) 0 bn3c_branch2c[0][0]

activation_16[0][0]

__________________________________________________________________________________________________

activation_19 (Activation) (None, 28, 28, 512) 0 add_6[0][0]

__________________________________________________________________________________________________

res3d_branch2a (Conv2D) (None, 28, 28, 128) 65664 activation_19[0][0]

__________________________________________________________________________________________________

bn3d_branch2a (BatchNormalizati (None, 28, 28, 128) 512 res3d_branch2a[0][0]

__________________________________________________________________________________________________

activation_20 (Activation) (None, 28, 28, 128) 0 bn3d_branch2a[0][0]

__________________________________________________________________________________________________

res3d_branch2b (Conv2D) (None, 28, 28, 128) 147584 activation_20[0][0]

__________________________________________________________________________________________________

bn3d_branch2b (BatchNormalizati (None, 28, 28, 128) 512 res3d_branch2b[0][0]

__________________________________________________________________________________________________

activation_21 (Activation) (None, 28, 28, 128) 0 bn3d_branch2b[0][0]

__________________________________________________________________________________________________

res3d_branch2c (Conv2D) (None, 28, 28, 512) 66048 activation_21[0][0]

__________________________________________________________________________________________________

bn3d_branch2c (BatchNormalizati (None, 28, 28, 512) 2048 res3d_branch2c[0][0]

__________________________________________________________________________________________________

add_7 (Add) (None, 28, 28, 512) 0 bn3d_branch2c[0][0]

activation_19[0][0]

__________________________________________________________________________________________________

activation_22 (Activation) (None, 28, 28, 512) 0 add_7[0][0]

__________________________________________________________________________________________________

res4a_branch2a (Conv2D) (None, 14, 14, 256) 131328 activation_22[0][0]

__________________________________________________________________________________________________

bn4a_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4a_branch2a[0][0]

__________________________________________________________________________________________________

activation_23 (Activation) (None, 14, 14, 256) 0 bn4a_branch2a[0][0]

__________________________________________________________________________________________________

res4a_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_23[0][0]

__________________________________________________________________________________________________

bn4a_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4a_branch2b[0][0]

__________________________________________________________________________________________________

activation_24 (Activation) (None, 14, 14, 256) 0 bn4a_branch2b[0][0]

__________________________________________________________________________________________________

res4a_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_24[0][0]

__________________________________________________________________________________________________

res4a_branch1 (Conv2D) (None, 14, 14, 1024) 525312 activation_22[0][0]

__________________________________________________________________________________________________

bn4a_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4a_branch2c[0][0]

__________________________________________________________________________________________________

bn4a_branch1 (BatchNormalizatio (None, 14, 14, 1024) 4096 res4a_branch1[0][0]

__________________________________________________________________________________________________

add_8 (Add) (None, 14, 14, 1024) 0 bn4a_branch2c[0][0]

bn4a_branch1[0][0]

__________________________________________________________________________________________________

activation_25 (Activation) (None, 14, 14, 1024) 0 add_8[0][0]

__________________________________________________________________________________________________

res4b_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_25[0][0]

__________________________________________________________________________________________________

bn4b_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4b_branch2a[0][0]

__________________________________________________________________________________________________

activation_26 (Activation) (None, 14, 14, 256) 0 bn4b_branch2a[0][0]

__________________________________________________________________________________________________

res4b_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_26[0][0]

__________________________________________________________________________________________________

bn4b_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4b_branch2b[0][0]

__________________________________________________________________________________________________

activation_27 (Activation) (None, 14, 14, 256) 0 bn4b_branch2b[0][0]

__________________________________________________________________________________________________

res4b_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_27[0][0]

__________________________________________________________________________________________________

bn4b_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4b_branch2c[0][0]

__________________________________________________________________________________________________

add_9 (Add) (None, 14, 14, 1024) 0 bn4b_branch2c[0][0]

activation_25[0][0]

__________________________________________________________________________________________________

activation_28 (Activation) (None, 14, 14, 1024) 0 add_9[0][0]

__________________________________________________________________________________________________

res4c_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_28[0][0]

__________________________________________________________________________________________________

bn4c_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4c_branch2a[0][0]

__________________________________________________________________________________________________

activation_29 (Activation) (None, 14, 14, 256) 0 bn4c_branch2a[0][0]

__________________________________________________________________________________________________

res4c_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_29[0][0]

__________________________________________________________________________________________________

bn4c_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4c_branch2b[0][0]

__________________________________________________________________________________________________

activation_30 (Activation) (None, 14, 14, 256) 0 bn4c_branch2b[0][0]

__________________________________________________________________________________________________

res4c_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_30[0][0]

__________________________________________________________________________________________________

bn4c_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4c_branch2c[0][0]

__________________________________________________________________________________________________

add_10 (Add) (None, 14, 14, 1024) 0 bn4c_branch2c[0][0]

activation_28[0][0]

__________________________________________________________________________________________________

activation_31 (Activation) (None, 14, 14, 1024) 0 add_10[0][0]

__________________________________________________________________________________________________

res4d_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_31[0][0]

__________________________________________________________________________________________________

bn4d_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4d_branch2a[0][0]

__________________________________________________________________________________________________

activation_32 (Activation) (None, 14, 14, 256) 0 bn4d_branch2a[0][0]

__________________________________________________________________________________________________

res4d_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_32[0][0]

__________________________________________________________________________________________________

bn4d_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4d_branch2b[0][0]

__________________________________________________________________________________________________

activation_33 (Activation) (None, 14, 14, 256) 0 bn4d_branch2b[0][0]

__________________________________________________________________________________________________

res4d_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_33[0][0]

__________________________________________________________________________________________________

bn4d_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4d_branch2c[0][0]

__________________________________________________________________________________________________

add_11 (Add) (None, 14, 14, 1024) 0 bn4d_branch2c[0][0]

activation_31[0][0]

__________________________________________________________________________________________________

activation_34 (Activation) (None, 14, 14, 1024) 0 add_11[0][0]

__________________________________________________________________________________________________

res4e_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_34[0][0]

__________________________________________________________________________________________________

bn4e_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4e_branch2a[0][0]

__________________________________________________________________________________________________

activation_35 (Activation) (None, 14, 14, 256) 0 bn4e_branch2a[0][0]

__________________________________________________________________________________________________

res4e_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_35[0][0]

__________________________________________________________________________________________________

bn4e_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4e_branch2b[0][0]

__________________________________________________________________________________________________

activation_36 (Activation) (None, 14, 14, 256) 0 bn4e_branch2b[0][0]

__________________________________________________________________________________________________

res4e_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_36[0][0]

__________________________________________________________________________________________________

bn4e_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4e_branch2c[0][0]

__________________________________________________________________________________________________

add_12 (Add) (None, 14, 14, 1024) 0 bn4e_branch2c[0][0]

activation_34[0][0]

__________________________________________________________________________________________________

activation_37 (Activation) (None, 14, 14, 1024) 0 add_12[0][0]

__________________________________________________________________________________________________

res4f_branch2a (Conv2D) (None, 14, 14, 256) 262400 activation_37[0][0]

__________________________________________________________________________________________________

bn4f_branch2a (BatchNormalizati (None, 14, 14, 256) 1024 res4f_branch2a[0][0]

__________________________________________________________________________________________________

activation_38 (Activation) (None, 14, 14, 256) 0 bn4f_branch2a[0][0]

__________________________________________________________________________________________________

res4f_branch2b (Conv2D) (None, 14, 14, 256) 590080 activation_38[0][0]

__________________________________________________________________________________________________

bn4f_branch2b (BatchNormalizati (None, 14, 14, 256) 1024 res4f_branch2b[0][0]

__________________________________________________________________________________________________

activation_39 (Activation) (None, 14, 14, 256) 0 bn4f_branch2b[0][0]

__________________________________________________________________________________________________

res4f_branch2c (Conv2D) (None, 14, 14, 1024) 263168 activation_39[0][0]

__________________________________________________________________________________________________

bn4f_branch2c (BatchNormalizati (None, 14, 14, 1024) 4096 res4f_branch2c[0][0]

__________________________________________________________________________________________________

add_13 (Add) (None, 14, 14, 1024) 0 bn4f_branch2c[0][0]

activation_37[0][0]

__________________________________________________________________________________________________

activation_40 (Activation) (None, 14, 14, 1024) 0 add_13[0][0]

__________________________________________________________________________________________________

res5a_branch2a (Conv2D) (None, 7, 7, 512) 524800 activation_40[0][0]

__________________________________________________________________________________________________

bn5a_branch2a (BatchNormalizati (None, 7, 7, 512) 2048 res5a_branch2a[0][0]

__________________________________________________________________________________________________

activation_41 (Activation) (None, 7, 7, 512) 0 bn5a_branch2a[0][0]

__________________________________________________________________________________________________

res5a_branch2b (Conv2D) (None, 7, 7, 512) 2359808 activation_41[0][0]

__________________________________________________________________________________________________

bn5a_branch2b (BatchNormalizati (None, 7, 7, 512) 2048 res5a_branch2b[0][0]

__________________________________________________________________________________________________

activation_42 (Activation) (None, 7, 7, 512) 0 bn5a_branch2b[0][0]

__________________________________________________________________________________________________

res5a_branch2c (Conv2D) (None, 7, 7, 2048) 1050624 activation_42[0][0]

__________________________________________________________________________________________________

res5a_branch1 (Conv2D) (None, 7, 7, 2048) 2099200 activation_40[0][0]

__________________________________________________________________________________________________

bn5a_branch2c (BatchNormalizati (None, 7, 7, 2048) 8192 res5a_branch2c[0][0]

__________________________________________________________________________________________________

bn5a_branch1 (BatchNormalizatio (None, 7, 7, 2048) 8192 res5a_branch1[0][0]

__________________________________________________________________________________________________

add_14 (Add) (None, 7, 7, 2048) 0 bn5a_branch2c[0][0]

bn5a_branch1[0][0]

__________________________________________________________________________________________________

activation_43 (Activation) (None, 7, 7, 2048) 0 add_14[0][0]

__________________________________________________________________________________________________

res5b_branch2a (Conv2D) (None, 7, 7, 512) 1049088 activation_43[0][0]

__________________________________________________________________________________________________

bn5b_branch2a (BatchNormalizati (None, 7, 7, 512) 2048 res5b_branch2a[0][0]

__________________________________________________________________________________________________

activation_44 (Activation) (None, 7, 7, 512) 0 bn5b_branch2a[0][0]

__________________________________________________________________________________________________

res5b_branch2b (Conv2D) (None, 7, 7, 512) 2359808 activation_44[0][0]

__________________________________________________________________________________________________

bn5b_branch2b (BatchNormalizati (None, 7, 7, 512) 2048 res5b_branch2b[0][0]

__________________________________________________________________________________________________

activation_45 (Activation) (None, 7, 7, 512) 0 bn5b_branch2b[0][0]

__________________________________________________________________________________________________

res5b_branch2c (Conv2D) (None, 7, 7, 2048) 1050624 activation_45[0][0]

__________________________________________________________________________________________________

bn5b_branch2c (BatchNormalizati (None, 7, 7, 2048) 8192 res5b_branch2c[0][0]

__________________________________________________________________________________________________

add_15 (Add) (None, 7, 7, 2048) 0 bn5b_branch2c[0][0]

activation_43[0][0]

__________________________________________________________________________________________________

activation_46 (Activation) (None, 7, 7, 2048) 0 add_15[0][0]

__________________________________________________________________________________________________

res5c_branch2a (Conv2D) (None, 7, 7, 512) 1049088 activation_46[0][0]

__________________________________________________________________________________________________

bn5c_branch2a (BatchNormalizati (None, 7, 7, 512) 2048 res5c_branch2a[0][0]

__________________________________________________________________________________________________

activation_47 (Activation) (None, 7, 7, 512) 0 bn5c_branch2a[0][0]

__________________________________________________________________________________________________

res5c_branch2b (Conv2D) (None, 7, 7, 512) 2359808 activation_47[0][0]

__________________________________________________________________________________________________

bn5c_branch2b (BatchNormalizati (None, 7, 7, 512) 2048 res5c_branch2b[0][0]

__________________________________________________________________________________________________

activation_48 (Activation) (None, 7, 7, 512) 0 bn5c_branch2b[0][0]

__________________________________________________________________________________________________

res5c_branch2c (Conv2D) (None, 7, 7, 2048) 1050624 activation_48[0][0]

__________________________________________________________________________________________________

bn5c_branch2c (BatchNormalizati (None, 7, 7, 2048) 8192 res5c_branch2c[0][0]

__________________________________________________________________________________________________

add_16 (Add) (None, 7, 7, 2048) 0 bn5c_branch2c[0][0]

activation_46[0][0]

__________________________________________________________________________________________________

activation_49 (Activation) (None, 7, 7, 2048) 0 add_16[0][0]

__________________________________________________________________________________________________

avg_pool (AveragePooling2D) (None, 1, 1, 2048) 0 activation_49[0][0]

__________________________________________________________________________________________________

flatten_1 (Flatten) (None, 2048) 0 avg_pool[0][0]

__________________________________________________________________________________________________

fc1000 (Dense) (None, 1000) 2049000 flatten_1[0][0]

==================================================================================================

Total params: 25,636,712

Trainable params: 25,583,592

Non-trainable params: 53,120

__________________________________________________________________________________________________

Page 9: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

われわれ(植物研究者)の観点から使えそうなコト(in general)

Q.「ヒト(プロ)と同レベルならば人(プロ)がやればよい」のでは?

A.「どんな場所にも暗黙知・経験知を一瞬で持ち込める」ことに意味があると思います。

カルテを何千枚も見てきてパターン認識できる医者はいるbut

全発現データを何千枚見てきてパターン認識できてる人は多分いない

Q.「深層学習において識別(回帰)出来たら、その先はない」のでは?

A.「識別出来た理由が分からないことが多い & 理由自体が求める答えである」ことが多いと思います。

■ Science of integrative info, like “Favors” or “Atmosphere”

Which ones would be OK for purchasing?

What criteria?

“Threshold”

in cucumbers ☚ 農学だと、こういうのが面白いな、と思っています。

Page 10: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

われわれ(植物研究者)の観点から使えそうなコト(in detail)

〇一次的利用(農学だとかなり需要あり)自動障害果判別・病害判定・自動カウント(プロの目を現場に持ち込む)

〇二次的利用判別理由の生理学的解析:例えば発生運命の早期診断&部位特異的トランスクリプトーム解析など

画像以外の「暗黙知」蓄積:ゲノムデータへのCNNの活用(進化学的指標の検出・塩基置換モデルの推定)

Giuffrida et al. 2018, Plant JSingh et al. 2018, Trend Plant Sci

実際にやってる人たちがいました@SMBE2018

Page 11: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

実際の解析例

岐阜県農業技術センター植栽「富有」11/13:調査・写真撮影 1,900果11/15:調査・写真撮影 400果11/20:調査・写真撮影 487果11/21:調査・写真撮影 387果

合計 3,174果

“へたすき”への

「暗黙知」:>60歳くらいの専門家のみ判別可能

これ、へたを取ってみないと分からない(へたを取ると商品価値ゼロ)

写真は「果頂部(へたが無い方)」から:選果場での基準に合わせて。➡ 見抜けるのか?

Page 12: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

実際の解析例

Ans.「見抜ける」GUIツールでの解析例。>90%の精度が出力可能

Qus.「何を見抜いているのか?」信頼性の問題・研究に適用する可能性

➡ 診断理由の可視化が必要。

Page 13: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

ところで、「診断理由」ってわかるの?

Black Box

■ 従来の考え方だと

「ネットワークの逆走は出来ない」

■ “診断理由” はブラックボックス

➡ 最近?出てきた

「ネットワークの逆伝播」

Fine heat-mapping of

contributing parts

>90%

disorder

Page 14: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

FACE: Lapuschkin et al. (2018) arXiv

■ 「何を見て」国籍や性別を見分けているの?

:簡単に聞こえて、案外答えられない疑問

「診断理由」が分かることの強み。例えばの話。

Page 15: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

「ネットワークの逆伝播」ツールの一例

GradCAM (Gradient-weighted Class Activation Mapping) (Selvaraju et al. 2016)

LRP (Layer-wise Relevance Propagation) (Bach et al. 2015)

Page 16: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

実践編

Page 17: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

では、実際に動かしてみましょう。まずは「画像診断」

必要なもの〇GPU搭載PC(CPUでも?)またはクラウド (この後、神沼先生より)〇学習/テストデータ(今回は画像)以下、選択可能。1. GUIツールDIGITSとNeural Network Consoleについて簡単に説明します2. CUIツール今回は「TensorFlow」をバックエンド(framework)に「keras」をラッパーライブラリ (higher API) として使います。「python」を言語としてkerasは書かれています。バックエンドとしては他にもcaffeやPyTorch, Chainer, NNablaなど多数あります。

「困ったらgithubまたはQiitaに聞け」

← Keras, VGG16で検索

Page 18: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

直感的にできるGUIツール①DIGITS

■ 構築済みのネットワークを利用可能。

(AlexNet, GoogLeNet)

■ defaultで「かなりいい感じ」にやってくれる

⇔ この「いい感じ」自動調整が仇にも… (後述)

■ epochや画像の取り込みをいじりやすい

⇔ 反面、ネットワークのチューニングは難しい

■ セットアップがやや難。

■ Nvidiaのcaffeをバックエンドに

■ prototxtで重みづけモデルを出力化。

Page 19: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

直感的にできるGUIツール①DIGITS

■ ローカルホストで扱う

■ 判別・物体認識がメイン

■ データセットを選択

■ 詳細オプションを設定

(defaultでもいい感じ)

やりたいこと選択

画像のデータセット登録

使うデータセットいろいろ

Page 20: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

直感的にできるGUIツール①DIGITS

■ 結果の可視化

■ prototxtモデルを保存可能 (しかし、使えるはずのGrad-camが使えない)

■ epochごとにモデルは保存されている

Page 21: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

直感的にできるGUIツール②

https://dl.sony.com/ja/

■ ネットワークをdrag-dropで設計可能。

⇔ 基本知識ゼロだときつい。

■ 結果の図 (acc/errの推移なども)を簡単出力

■ セットアップ簡単!!!

■ Sony製のNNablaをバックエンドに

: ただし、prototxt (caffe) でも出力化。

■ Nvidia製のGPU x 1のハードで十分演算可能

Page 22: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

今回のコンセプトは、「Deep learningの仕組みは知らないけれど」「お試しで使ってみたい」or「とりあえず結果だけ知りたい」

Litchi Rambutan

■ 2クラスのcategorization

■ 教師データ(学習セット)はかなり少なめ(N<200)

Page 23: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

Kerasで画像診断下準備: 必要ツールのインストール & データ/scriptダウンロード(終わってますよね?)

$ pip install tensorflow$ pip install keras$ pip install opencv-python$ pip install pandas$ pip install tqdm$ pip install sklearn (またはscikit-learn)$ pip install pillow$ pip install h5py$ pip install jupyter

画像データ

今回の画像データ学習後モデル(「きょうの料理」的な)

Jupyterで使うscripts

Page 24: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

$ mkdir models

(後で必要になります)

$ jupyter notebook

➡ web browserにアクセス

(local hostが立ち上がっているはず)

Kerasで画像診断その1: 作業ディレクトリでjupyter notebookを立ち上げる。

Page 25: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

Kerasで画像診断その2: 画像学習- ipynbを開いて、必要ツールをimport

今回みなさんがやるべきは「これを押すだけ」

「素人でもできる」がモットーなので。

あとは各自のデータに成型していってください。

Page 26: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

Kerasで画像診断その3: 画像学習- データの読み込み・成型

ImageDataGeneratorで読み込む

./data/train/ 内のdirectoryを自動認識

今回は事情によりbatch sizeは極小。

Page 27: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

Kerasで画像診断その4: 画像学習- 既存モデル&既存画像で重みづけしたものを更新

VGG16の読み込み (kerasでカバー)

& imagenetの既学習

新データセットによる更新を許容

全結合層 (fully connection) 以降を新規に構築。

今回は2クラス分類

Imagenet: いわゆる「画像集」

このデータセットが既に学習されている。

Page 28: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

Kerasで画像診断その5: 画像学習- main runおよび保存設定

Steps per epochとepochの設定。

今回はbatch size同様、事情により極小。

./models/ に学習モデルを保存。

HDF5形式で任意ですが、後のGrad-camなどと一致させる

Page 29: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

いったん脱線その1:診断理由を検出するには?「ネットワーク逆伝播」の解説を

Grad-CAMでは

1. 全結合層がCNNとGlobal Average Pooling層に置き換わる必要性。

Convolution - Global average – Softmaxと経由させる

2. Convolutionの最終層の勾配情報で可視化

(i) Convolution最終層でGlobalAveragePoolingを行い、指定クラスの最終

層における重要度を決定。

(ii) 重要度に応じて各チャンネルをかけて加算していき、Reluを行ったもの

がGrad-CAM

Page 30: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

1. 外す

2. カスタムしたものを足す

VGG16モデルの構造

3. Grad-camでは全結合直前のconvが大事

Page 31: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

いったん脱線その2:みなさんの目の前の演算がなかなか終わらないワケ。

クラウドシステム(神沼先生がご紹介)

またはGPU搭載マシンで解析しましょう。

(20万円弱で十分に揃います)

Page 32: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

閑話休題:Kerasで画像診断&判断理由を検出その6: Grad-camの下準備

$ mv finetuned_VGG16.h5 ./models

または「finetuned_VGG16.h5」を「models」ディレクトリへ

Page 33: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

Kerasで画像診断&判断理由を検出その7: Grad-camの設定

サイズは全行程で一致させる

Page 34: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

Kerasで画像診断&判断理由を検出その8: 保存設定・画像診断・全結合層直前CNN層の取得

サイズは全行程で一致させる

学習モデルの指定

診断画像の選択

診断結果の表示

Grad-camにおける全結合層直前のCNN層の指定

& Grad-cam解析イメージの表示

Page 35: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

Kerasで画像診断&判断理由を検出その9: 診断結果の表示・診断理由の可視化

果肉 (flesh) や周囲の風景ではなく、

殻の表面を見て判断出来ていそうです。

➡ これで十分なのかな?次のスライドへ

100% ランブータンだと識別!!

Page 36: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

Kerasで画像診断&判断理由を検出その10: Wet研究者のニーズに応じて。情報学者とは方向性が異なる。

Grad-camのメリット■ Grad-CAMではクラス毎の影響度を可視化可能■ネットワークの制限や変更がいらない(複雑なネットワークでもOK)

表現力が高い(予測精度が高い)ことが至上命題ではない。(これは往々にしてオミクス解析の統計にも言える。理論 vs Wet研究)

ResNet50Acc=0.93Grad-CAM

AlexNetAcc=0.87

LRP

Grad-camのデメリット■ 細かい反応部分が分からない■ 既存のGuided Backpropと組み合わせ可能だが…未だ精度が低い

LRPのメリット■ pix単位の反応部位を可視化可能■ 実はInception modelくらいならBackprop可能らしい

LRPのデメリット■ pix毎のGuided Backpropのため、分岐が複雑なモデルは対応不可

Page 37: Wet研究者の視点で始める深層学習 ~画像診断と判 …bioinf.mind.meiji.ac.jp › jspp2019 › data › ...〇畳み込みモデルの特徴(位置普遍性・構成性)が画像解析に向いている

Acknowledgements■ 深層学習

九州大学 大学院情報科学研究科

内田 誠一 博士・黒木 陵平

京都大学 フィールド研

伊勢 武史 博士・大西 信徳

■ 植物 (柿) サンプル

岐阜県農業技術研究センター

新川 猛 博士・鈴木 哲也・杉浦 真由

■ サンプリング

京都大学 大学院農学研究科 果樹園芸学研究室

前田 春香・牧本 里奈・増田 佳苗

ご連絡はこちらまで

[email protected] (1年くらいで使えなくなります)

[email protected]

伊勢武史 准教授京都大フィールド研

内田誠一 教授九州大学情報科学