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

CNNによる画像認識の基礎

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.

 CNNによる画像認識の基礎

Avatar for Masanori Suganuma

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