Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CNNによる画像認識の基礎

 CNNによる画像認識の基礎

Masanori Suganuma

October 24, 2022
Tweet

More Decks by Masanori Suganuma

Other Decks in Research

Transcript

  1. 3 深層学習以前に主流であった機械学習のアプローチ 事前知識に基づく 特徴量設計 ⼊⼒画像からの 特徴量抽出 抽出した特徴量を もとに識別 「りんご」を識別したい場合 •

    りんごを表現する⼿がかり(特徴量)を設計する • 例えば,「⾊の⾚さ」,「物体の丸さ」など • 画像内のどこからその特徴量を抽出するのかを設計する • 抽出された特徴量をもとに「りんご」かどうかを識別 ⼀⾒すると容易そうにみえるが...
  2. 4 深層学習以前に主流であった機械学習のアプローチ 事前知識に基づく 特徴量設計 ⼊⼒画像からの 特徴量抽出 抽出した特徴量を もとに識別 クラス内の多様性 視点や照明条件の変化

    遮蔽や背景領域の乱雑さ 様々な条件に対応しつつ,多種多様な⼀般物体に応⽤可能な 機械学習モデルの⼿動設計は⾮常に困難
  3. 畳み込みニューラルネットワーク(Convolutional Neural Network; CNN) • 畳み込み層,プーリング層,全結合層で主に構成 9 画像解析でよく⽤いられるのはCNN 畳み込み層 •

    フィルタによって画像から特徴を抽出する操作 プーリング層 • 情報を集約する操作(結果として画像のサイズが⼩さくなることが多い)
  4. 10 What computers see 画素(pixel) RGBの3原⾊で1画素の⾊を表現する. • 例えば,RGB=(200,40,90)のように 1画素を表現する •

    それぞれ⾚⾊,緑⾊,⻘⾊の強さを ⽰す 画像は画素(pixel)の集合で表現される • ⾊の濃淡値を表す数値(画素)が規則的に並んでいるだけ • iPhone8で撮影した画像は,36578304 = 4032×3024×3 個の数値が並んでいる
  5. • 畳み込みは画像とフィルタ間で定義される積和計算 • 𝑢!,# = ∑ $%& '!() ∑ *%&

    '"() 𝑥!+$,#+* ℎ$,* 11 畳み込み 9×9画素の⼊⼒画像 フィルタ 出⼒画像
  6. • 畳み込みは画像とフィルタ間で定義される積和計算 • 𝑢&,& = ∑ $%& '!() ∑ *%&

    '"() 𝑥&+$,&+* ℎ$,* = 𝑥&,& ∗ ℎ&,& + 𝑥&,) ∗ ℎ&,) + ⋯ + 𝑥.,. ∗ ℎ.,. = 21 ∗ −0.5 + 45 ∗ 0.3 + ⋯ + 15 ∗ (−1.3) 12 畳み込み 9×9画素の⼊⼒画像 フィルタ 出⼒画像
  7. • 畳み込みは画像とフィルタ間で定義される積和計算 • 𝑢&,) = ∑ $%& '!() ∑ *%&

    '"() 𝑥&+$,)+* ℎ$,* = 𝑥&,) ∗ ℎ&,& + 𝑥&,. ∗ ℎ&,) + ⋯ + 𝑥.,/ ∗ ℎ.,. = 45 ∗ −0.5 + 64 ∗ 0.3 + ⋯ + 56 ∗ (−1.3) 13 畳み込み 9×9画素の⼊⼒画像 フィルタ 出⼒画像
  8. • 畳み込みは画像とフィルタ間で定義される積和計算 • 𝑢&,. = ∑ $%& '!() ∑ *%&

    '"() 𝑥&+$,.+* ℎ$,* = 𝑥&,. ∗ ℎ&,& + 𝑥&,/ ∗ ℎ&,) + ⋯ + 𝑥.,0 ∗ ℎ.,. = 64 ∗ −0.5 + 45 ∗ 0.3 + ⋯ + 51 ∗ (−1.3) 14 畳み込み 9×9画素の⼊⼒画像 フィルタ 出⼒画像
  9. • 畳み込みは画像とフィルタ間で定義される積和計算 • 𝑢1,1 = ∑ $%& '!() ∑ *%&

    '"() 𝑥1+$,1+* ℎ$,* = 𝑥1,1 ∗ ℎ&,& + 𝑥1,2 ∗ ℎ&,) + ⋯ + 𝑥3,3 ∗ ℎ.,. = 4 ∗ −0.5 + 15 ∗ 0.3 + ⋯ + 63 ∗ (−1.3) 15 畳み込み 9×9画素の⼊⼒画像 フィルタ 出⼒画像
  10. 各フィルタでは,各チャネルについて並⾏に畳み込みを実⾏し,演算結果を画素ごとに 全チャネルにわたって加算する • 結果として,各フィルタ群からは1枚の特徴マップ(出⼒結果)が得られる 22 畳み込み層(Convolution layer) … … …

    … × × × 𝐻 𝑊 3 𝑊! 𝐻! 𝑛 = 0 𝑛 = 1 𝑛 = 𝑁 … 𝑁 正規化 & 活性化関数 … … … 𝑢!,#,9 = 5 :%& /() 5 $%& '!() 5 *%& '"() 𝑥!+$,#+*,: ℎ$,*,:,9 𝑥 𝑢!,#,$ ℎ%,&,',$ 𝐻 𝑊 3
  11. 各フィルタでは,各チャネルについて並⾏に畳み込みを実⾏し,演算結果を画素ごとに 全チャネルにわたって加算する • 結果として,各フィルタ群からは1枚の特徴マップ(出⼒結果)が得られる 24 畳み込み層(Convolution layer) … … …

    … … … × × × 𝑀 𝐻 𝑊 𝑀 𝑊! 𝐻! 𝑛 = 0 𝑛 = 1 𝑛 = 𝑁 … 𝑁 正規化 & 活性化関数 … … … 𝑢!,#,9 = 5 :%& >() 5 $%& '!() 5 *%& '"() 𝑥!+$,#+*,: ℎ$,*,:,9 𝑥 𝑢!,#,$ ℎ%,&,',$
  12. • 現実データの多くが⾮線形性を有するため • ReLU関数が畳み込み処理後によく使⽤される • 𝑓 𝑥 = max(0, 𝑥)

    • 画素ごとに適⽤ • 負の画素値をすべてゼロに変換 25 活性化関数(⾮線形性の導⼊) 0 𝑥 𝑓(𝑥) ReLU ※ 負の画素値は⿊⾊で表⽰,0以上の画素値は灰⾊〜⽩⾊で表⽰
  13. 畳み込みニューラルネットワーク(Convolutional Neural Network; CNN) • 複数の畳み込み層,プーリング層,全結合層で主に構成 27 CNNの構造 畳み込み層 •

    フィルタ数を徐々に増やしていくことが多い(e.g. 32 → 64 → 128) プーリング層 • 画像サイズを1/2にしていくことが多い
  14. 特徴マップを1次元ベクトルに変換する • よく使⽤される変換⽅法は下記の2通り • Flatten • (𝐻, 𝑊, 𝐶) →

    (𝐻×𝑊×𝐶). 単純に各要素を⼀列に並べ替えるだけ. • Global average pooling • (𝐻, 𝑊, 𝐶) → (1,1, 𝐶) → (𝐶).空間情報全体の平均値をとることで圧縮. 29 全結合層 for 画像分類 Conv Pooling Conv Pooling Conv Fully connected リンゴである確率 ミカンである確率 バナナである確率 イチゴである確率
  15. 30 全結合層 for 画像分類 … • 各⼊⼒要素𝑥! と対応する重み𝑤! との積和計算 •

    いわゆる標準的なニューラルネットワーク • 出⼒ノード数◦は分類したいクラス数と⼀致
  16. Softmax関数で各クラスに属する確率表現に変換 • 各クラスらしさを0.0~1.0の数値で表現 31 出⼒は確率表現にする(画像分類の場合) 𝑠𝑜𝑓𝑡𝑚𝑎𝑥(𝑥!) = eC# ∑D eC$

    … りんごである確率(=softmax(𝑥( )) みかんである確率(=softmax(𝑥) )) ばななである確率(=softmax(𝑥* )) いちごである確率(=softmax(𝑥+ )) 𝑥( 𝑥) 𝑥* 𝑥+ 最⼤値をもつノードのクラスを 最終的な予測結果とする
  17. • 正しい出⼒結果 = ⼈間が与えた正解ラベル • CNNの出⼒が正解ラベルと⼀致するように,重みを調整する • 具体的には,現在のNNの出⼒C 𝒚と正解ラベル𝒚との誤差を計算し,その誤差が ⼩さくなるように

    𝒘𝒊 を調整する 33 CNNの学習 … F 𝑦( = 0.2 F 𝑦) = 0.2 F 𝑦* = 0.1 F 𝑦+ = 0.5 𝑥( 𝑥) 𝑥* 𝑥+ 𝑦( = 1.0 𝑦) = 0.0 𝑦* = 0.0 𝑦+ = 0.0 CNNの出⼒& 𝒚 正解ラベル𝒚 … この誤差を最⼩化したい
  18. • 損失関数を⽤いて出⼒C 𝒚とラベル𝒚の誤差𝐿を定量的に算出する • 画像分類では,クロスエントロピー関数が使⽤される 34 損失関数(loss function) … F

    𝑦( = 0.2 F 𝑦) = 0.2 F 𝑦* = 0.1 F 𝑦+ = 0.5 𝑥( 𝑥) 𝑥* 𝑥+ 𝑦( = 1.0 𝑦) = 0.0 𝑦* = 0.0 𝑦+ = 0.0 CNNの出⼒& 𝒚 正解ラベル𝒚 … 𝐿 = 𝑐𝑟𝑜𝑠𝑠 𝑒𝑛𝑡𝑟𝑜𝑝𝑦 C 𝒚, 𝒚 = − 5 !%) N 𝑦OlogO 𝑦! 𝐿 = −(1.0 ∗ log 0.2 + 0.0 ∗ log 0.2 +0.0 ∗ log 0.1 + 0.0 ∗ log 0.5) = 0.69897
  19. 誤差𝐿に関する重み𝒘! の勾配情報をもとに更新 • 勾配: #$ #%! • 𝑤& を微増させたときに,誤差𝐿の値が増加する⽅向を⽰している =

    𝑤& を勾配⽅向と逆に更新することで,誤差𝐿を減らせることが可能! = 𝑤& ← 𝑤& − #$ #%! 35 重みの調整⽅法(勾配降下法) 直感的な理解 • 誤差𝐿は,𝐿 = 𝑤)で表され,𝐿 = 0となる𝑤の値を 求めたいと仮定 • 誤差𝐿の𝑤に関する微分は,,- ,. = 2𝑤 となる • 右図のように,𝑤がどの位置にあろうと, 𝑤 ← 𝑤 − ,- ,. で更新すれば, 𝐿 → 0になることが わかる
  20. 各重みの勾配を計算する際に,⼊⼒に近い重みほど計算が⾯倒 • 深い⼊れ⼦構造になるため,微分の連鎖規則を何度も繰り返す必要がある • 7 𝒚 = 𝑓 𝑾'𝒛" =

    𝑓 𝑾' 𝑓 𝑾"𝒛! = 𝑓 𝑾' 𝑓 𝑾"𝑓(𝑾!𝒛() 36 誤差逆伝播法(Back propagation) 7 𝒚 出⼒ 𝑾) 𝑾. 𝑾/ 𝒛( 𝒛) 𝒛$
  21. 3層⽬の𝑗番⽬の重み𝑊 / #!の損失𝐿に関する勾配 ^_ ^' % &# は, • #$

    #)" #! = #$ # * +# < # * +# #)" #! = = 𝑦, − 𝑦, < # * +" # #)" # = = 𝑦, − 𝑦, < 𝑧" & 37 誤差逆伝播法(Back propagation) 7 𝒚 = 𝑾'𝒛" 出⼒ 𝑾) 𝑾. 𝑾/ 𝒛( 𝒛) 𝒛$ ※ F 𝑦# = 𝑊 * #!𝑧) ! 𝑧) ! 𝑊 * #! F 𝑦# 活性化関数の微分については省略
  22. 2層⽬の𝑗番⽬の重み𝑊 . #!の損失𝐿に関する勾配 ^_ ^' ' &# は, • #$

    #)$ #! = #$ #-$ # < #-$ # #)$ #! = ∑. #$ # * +% < # * +% #-$ # < 𝑧! & = ∑. = 𝑦. − 𝑦. < 𝑓/(𝑧" ,) < 𝑊 ' ., < 𝑧! & 38 誤差逆伝播法(Back propagation) 7 𝒚 = 𝑾'𝒛" 出⼒ 𝑾) 𝑾. 𝑾/ 𝒛( 𝒛) 𝒛$ ※ 𝑧) # = 𝑊 ) #!𝑧( ! 𝑧( ! 𝑊 ) #! 𝑧) # F 𝑦/ = a # 𝑊 * /# 𝑧) #
  23. 𝑙層⽬の𝑗番⽬の重み𝑊 b #!の損失𝐿に関する勾配 ^_ ^' ( &# は, • #$

    #) & #! = #$ #- & # < #-& # #) & #! = ∑. #$ #-&'( % < #-&'( % #- & # < 𝑧01! & 39 誤差逆伝播法(Back propagation) … 𝑾02! 𝒛0 𝒛01( 𝒛$ ※ 𝑧0 # = 𝑊 0 #!𝑧02( ! 𝑧0 ! 𝑊 0 #! 𝑧01( # …
  24. 40 誤差逆伝播法(Back propagation) … 𝑾02! 𝒛0 𝒛01( 𝒛$ 𝑧0 !

    𝑊 0 #! 𝑧01( # ∆0 , ≡ #$ #- & # とおくと, … ここで #$ #- & # = ∑. #$ #-&'( % < #-&'( % #- & # に着⽬して, ∆0 ,= ∑. ∆02! . < #-&'( % #- & # つまり,上層の∆𝒍2𝟏 で∆𝒍 が求まる 同様に,∆02!, ∆02" …もそれらの上層から 求まり,最終的には出⼒層での #$ #- ) # が 陽に求まれば, 𝑙層での勾配 #$ #- & # が求まる 勾配計算必要な情報は出⼒層から⼊⼒層の⽅向に 伝搬される(順伝搬とは逆⽅向=誤差逆伝播法) 𝜕𝐿 𝜕𝑧 - # = 𝑧- # − 𝑦# ※ クロスエントロピーの場合
  25. まとめると, 𝑙層⽬の𝑗番⽬の重み𝑊 b #!の損失𝐿に関する勾配 ^_ ^' ( &# は下記で求まる ^_

    ^' ( &# = ^_ ^d ( & T ^d ( & ^' ( &# = ∆b # T 𝑧b() ! 41 誤差逆伝播法(Back propagation) … 𝑾02! 𝒛0 𝒛01( 𝒛$ ※ 𝑧0 # = 𝑊 0 #!𝑧02( ! 𝑧0 ! 𝑊 0 #! 𝑧01( # … • ∆0 # は上層からの計算結果を利⽤ • ∆0 #を下層に伝搬させていくことで, 効率良く各層での勾配が計算可能
  26. 深層学習モデルの学習 = ⼤量の学習データ 𝐷 = { 𝒙) , 𝑦) ,

    … , 𝒙f , 𝑦f } で 計算される損失関数の値を,ネットワークのパラメータ𝒘! について最⼩化 • 𝑤& ← 𝑤& − 𝛾 #$ #%! • 並列計算資源の有効活⽤と局所解リスク低減のために,少数サンプル(ミニバッチ)で 構成されるサンプル集合 𝐷5 = 𝒙!, 𝑦! , … , 𝒙5, 𝑦5 , (𝑀 ≪ 𝑁) を⽤いて,最適化する • 𝐿 = ! 5 ∑6∈8* 𝐿6 42 確率的勾配降下法(SGD) • ミニバッチを順番に𝐷!, 𝐷", … , となめていき,元の学習データすべてを⼀巡したら, 再度最初から順番になめていく,ということを繰り返す • 学習データを⼀巡することをエポック(epoch)と呼び,通常数⼗〜数百epochの学習を実施する
  27. • 畳み込み処理後の特徴マップに対して正規化を⾏うことで,学習安定化 • バッチ正則化(Batch normalization)がよく使われる • ミニバッチ内のサンプルで算出した平均𝜇9 ,分散𝜎9 を⽤いて,下記のように正規化する •

    ̂ 𝑧!#g : = d#&) * (h) i) '+j + 𝛽g 43 学習の安定化のために:正規化 ※ 𝜇3 = ( 456 ∑!,#,' 𝑧!#3 ' 分散も同様に算出 𝑀: ミニバッチサイズ 𝐻, 𝑊: 画像の縦横サイズ
  28. 画像 → カテゴリ • 画像分類 • 異常検知(画像単位) など 45 CNNの応⽤例

    画像 → カテゴリ+𝜶 • 物体検出 • パーツ検出 など 画像 → 画像 • セグメンテーション • 深度推定 • 画像⽣成 など 粒度 Apple 物体検出 semantic segmentation 画像分類
  29. 強⼒な「正常らしさ」のモデル化⽅法[2] • ⼤規模⾃然画像データセット(ImageNet)で画像分類を解くCNNを通常通り学習 • 異常検知には学習済みのCNNの中間特徴マップを利⽤ • 各画素が「正常らしさ」を表現していると仮定 • 異常画像の各画素値と正常画像の画素値の距離を測り,しきい値以上なら異常と判定 •

    ⾮常にシンプルだが強⼒ 47 CNNによる異常検知 異常度 異常サンプル 正常サンプル CNN Pretrained CNN 学習 通常の画像分類 異常検知フェーズ [2] Reiss+, PANDA: Adapting Pretrained Features for Anomaly Detection and Segmentation, CVPR, 2021
  30. 48 異常検知結果例 ⼊⼒画像 モデルの出⼒ 異常画像 モデルの出⼒ 正常画像 [2] Reiss+, PANDA:

    Adapting Pretrained Features for Anomaly Detection and Segmentation, CVPR, 2021
  31. 53 CNNによるセマンティックセグメンテーション例 ⼊⼒ 正解ラベル CNNの出⼒ L.-C. Chen+, Deeplab: Semantic Image

    Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs. TPAMI, 2017
  32. 56 CNNによる画像修復例 Blurry Ours Sharp DeBlurGAN Table 2: Results for

    motion blur removal. Distorted DeblurGAN [CVPR, 2018] Clean Distorted AttentiveGAN [CVPR, 2018] DuRN [Liu+, CVPR, 2019] Clean Table 6: Results for raindrop removal. Pix2Pix (CVPR’17) AttGAN (CVPR’18) ble 6: Results for raindrop removal. Pix2Pix (CVPR’17) AttGAN (CVPR’18) Ours able 6: Results for raindrop removal. Pix2Pix (CVPR’17) AttGAN (CVPR’18) Ours Ours Motion blur removal Raindrop removal DuRN [Liu+, CVPR, 2019]
  33. 57 解決すべき課題 学習コスト 学習には⼤量のデータとラベルのペアが基本的には必要 • ラベル付けは想像以上に⼤変な作業(数万〜数百万データ) • そもそもデータ⾃体が⼿に⼊りづらいタスクも多数存在 • ラベル付きデータが無くてもできることはあるが,あるに越したことはない

    学習にはGPU搭載の計算機を必要とする • 数⼗万〜数千万円 • ある程度の資⾦がないと試⾏錯誤できない • 公開済みのモデルも多々あるので,⾃前で学習する必要がないこともある https://blogs.nvidia.co.jp/2019/11/26/record-gpu-accelerated-supercomputers-top500/ https://ai.googleblog.com/2018/10/fluid-annotation-exploratory-machine.html
  34. Adversarial example for automated cars • ⾃動運転⾞のライン制御に悪影響を与えることも可能 59 解決すべき課題 深層学習は万能ではない

    https://sites.google.com/view/cav-sec/drp-attack Sato+, Dirty Road Can Attack: Security of Deep Learning based Automated Lane Centering under Physical-World Attack, USENIX Security Symposium, 2021