701 Views
January 29, 23
スライド概要
トピックス:画像理解, 畳み込み, 畳み込みニューラルネットワーク, 全結合層, 畳み込み層, ディープラーニング, 人工知能
ディープラーニング(スライドとプログラム例,Python を使用)(全15回)
https://www.kkaneko.jp/ai/ae/index.html
金子邦彦研究室ホームページ
https://www.kkaneko.jp/index.html
金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko
4. ディープラーニングでの物体 認識,画像分類 (ディープラーニング,Python を使用) (全15回) https://www.kkaneko.jp/cc/ae/index.html 金子邦彦 1
画像分類での教師あり学習 mammal placental carnivore canine dog など 分類結果 (正解) 画像 訓練データ 人工知能 person bicycle 画像分類 文献 J. Deng, W. Dong, R. Socher, L. -J. Li, Kai Li and Li Fei-Fei, "ImageNet: A large-scale hierarchical image database," 2009 IEEE Conference on Computer Vision and Pattern Recognition, 2009, pp. 248-255, doi: 10.1109/CVPR.2009.5206848. 2
アウトライン 番号 項目 4-1 4-2 4-3 4-4 4-5 復習 コンピュータによる画像理解 畳み込みの仕組み 画像での畳み込み 畳み込み層と全結合層 畳み込みニューラルネットワーク(CNN)の仕 組み 4-6 畳み込みニューラルネットワーク(CNN)の作 各自、資料を読み返したり、課題に取り組んだりも行う 成 3
ディープラーニング • 学習による上達の能力 • 訓練データを使用して,学習を行う • 巨大な訓練データ,深い層のニューラルネット ワークの利用により,良好な性能・機能を発揮す る場合も 4
ディープニューラルネットワーク • ディープニューラルネットワークは, 層が深い(層の数が多い)ニューラルネットワーク 層の数が少ない(浅い) 層の数が多い(深い) 5
画像分類の精度の向上 • ディープラーニングの進展 • 画像分類は,場合によっては,AI が人間と同等の精度 とも考えら るように ImageNet データセット の画像分類の結果 画像分類の誤り率 (top 5 error) 人間: 5.1 % PReLU による画像分類: 4.9 % (2015年発表) 文献: Kaiming He, Xiangyu Zhang, Shaoqing Ren, Jian Sun, Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification arXiv:1502.01852, 2015. 6
ニューラルネットワークの仕組み • 前の層から結果を受けとって,次の層へ結果を 渡す 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 入力層 〇 はニューロン,線は結合 〇 〇 〇 〇 〇 (他の結合は書 〇 〇 いていない) 〇 (他の結合は書 〇 〇 〇 いていない) 〇 〇 〇 全結合のときは, 〇 〇 〇 次層の全ニュー 全結合のときは, 〇 〇 ロンと結合する 次層の全ニュー 〇 〇 ロンと結合する 〇 〇 〇 〇 〇 出力層 中間層 7
ニューラルネットワークのユニット ニューラルネットワークのユニットは,数理により 動く ① 入力は複数 ② 入力を重みづけし合計をとる ③ その合計から出力値を得る ・合計に,バイアスという値を 1 2 3 4 5 6 7 8 9 入力 1 2 3 4 5 6 7 8 9 1 1 1 0 1 1 0 0 1 白黒の画像 (画素は 0 または 1) 足し引きしたあと,活性化関数 が適用され出力値が得られる. ・活性化関数はさまざまな種類 重み w1 ~ w9 w1 w2 w3 w4 w5 w6 w7 w8 w9 合計 シグモイド ユニット 0.9 0.8 0.7 合計は, 0.6 1 × w1 + 1 × w2 + 1 × w3 + 0 × w4 + 1 × w5 + 1 × w6 + 0 × w7 + 0 × w8 + 1 × w9 0.3 ReLU (2011年発表) 0.5 0.4 0.2 0.1 0 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 8
1 2 活性化関数 重み 1, 1 0, 1 1, 0 1 1 1 2.0 ReLU 1.0 0 0 ユニット -2.0 -1.0 0.0 1.0 -1重み 2.0 1.0 0 0 2 0, 0 入力 1 正解 2.0 -2.0 -1.0 0.0 1.0 2.0 重み ReLU + バイアス (バイアス は -1) 1 1 2.0 訓練データ ユニット 1.0 0 -2.0 -1.0 0.0 1.0 2.0 ReLU + バイアス (バイアス は +1) 9
それぞれのユニットが「特定のパターンを識別して いる」と考えることもできる 1 2 1, 1 0, 1 1, 0 1 0 0 1 1 2.0 ReLU 1.0 0 ユニットが 識別する パターン -2.0 -1.0 0.0 -1 1 2.0 2.0 1.0 0 2 0, 0 1.0 1 1 ユニットが 識別する パターン -2.0 -1.0 0.0 1.0 2.0 ユニットが 識別する パターン ReLU + バイアス (バイアス は -1) 2.0 1.0 0 -2.0 -1.0 0.0 1.0 2.0 ReLU + バイアス (バイアス は +1) 10
4-1. コンピュータによる画像理解 11
コンピュータによる画像理解 コンピュータが画像を理解する 12
コンピュータによる画像理解 • 一般的な画像(実験室で撮影などの制約が無い) • さまざまな応用:スマホ,デジカメ,自動車,ロ ボット • さまざまな種類:画像分類,物体検出,セグメン テーション,超解像,3次元化など 13
① 画像分類 画像分類の結果は,ラベルと確率 ※ 5つの候補 (top 5) が表示さ れている 14
② 物体検出 car person bicycle バウンディングボックス, ラベルを得る バウンディングボックスは, 物体を囲む最小のボックス(四角形) 15
③ セグメンテーション 物体の形を画素単位で抜き出し, ラベルも得る 16
画像理解の主な種類 ① 画像分類 「何があるか」を理解 person bicycle person ② 物体検出 場所と大きさも理解 ③ セグメンテーション 画素単位で領域を理解 bicycle 17
4-2. 畳み込みの仕組み 18
畳み込み 畳み込みは,あるデータを移動しながら,カーネルと 重ね合わせる.重ね合わせの結果は1つの値になる. データ 移動 カーネルと同じ長さに切り出し カーネル 重ね合わせ (掛け算と合計) 19
畳み込みの例 データ 0 1 0 1 0 0 1 1 1 0 この部分を切り出す カーネル 1 0 1 0×1 1×0 0×1 0 重ね合わせの結果: 0×1 + 1×0 + 0×1 = 0 20
畳み込みの例 移動 0 1 0 1 0 0 1 1 1 1 0 1 1 0 1 1 0 1 0×1 1×0 0×1 1 0 1×1 0×0 0×1 1 1×1 0×0 1×1 1 0 1 2 0 1×1 1×0 1×1 1 0×1 0×0 0×1 1 0×1 1×0 0×1 0 0 1 1 0 0 1 0 1 1×1 1×0 0×1 1 0×1 1×0 1×1 1 1 2 1 21
畳み込み 畳み込みは,「特定のパターンに強く反応する」と考える こともできる 畳み込み結果が大きくなる部分 データ 0 1 0 0 1 0 2 1 0 0 1 1 1 0 1 1 1 2 1 0 カーネル 1 畳み込み結果 22
畳み込みの用途 人工知能の他,画像,音声,その他信号の処理など に広く応用されている • パターンの分析 データの中からパターンを発見 • 周波数での分析,処理 特定の周波数のみ抜き出す など 23
畳み込みのまとめ • 畳み込みは,あるデータを移動しながら,カーネルと 重ね合わせる. • カーネルは値の並び (例) 0 1 0 • 重ね合わせは,同じ長さの2つのデータについて,要 素同士の掛け算の合計. 24
畳み込みを行う Python プログラムの例 https://colab.research.google.com/drive/1pcdD-I5-2VbLizKb3egJIQWXn8tBfOuK?usp=sharing 25
4-3. 画像での畳み込み 26
画像の畳み込み カーネル(3×3マス) 元画像(5×5マス) 出典: https://serokell.io/blog/introduction-to-convolutional-neural-networks 27
画像での畳み込み 元画像(5×5マス) カーネル (3×3マス) 切り出した部分とカーネルの 掛け算の合計 0×1 1×0 1×1 0×1 1×1 1×1 0×0 1×0 1×1 合計: 4 (これが畳み込み結果) 切り出し(3×3マス) カーネルと同じサイズ で切り出す 畳み込み 28
画像での畳み込み カーネル (3×3マス) 元画像(5×5マス) 0×1 1×0 1×1 0×1 1×1 1×1 0×0 1×0 1×1 4 3 合計: 4 切り出し(3×3マス) 切り出し領域を横にずらす 1×1 1×0 0×1 1×1 1×1 0×1 1×0 1×0 0×1 畳み込み結果 合計: 3 畳み込み結果 29
画像での畳み込み カーネル (3×3マス) 元画像(5×5マス) 画像全体について 4 畳み込み 3 5 4 3 5 4 3 5 畳み込み結果 切り出し(3×3マス) 切り出し領域を縦横にずらす 30
画像の畳み込みを行う Python プログラムの例 https://colab.research.google.com/drive/1pcdD-I5-2VbLizKb3egJIQWXn8tBfOuK?usp=sharing 31
画像の畳み込みの応用例 • 人工知能以外でも,ぼかし,エッジ抽出などさま ざまな処理で,畳み込みを使用できる 畳み込みによる ぼかし 畳み込みによる エッジ抽出 32
4-4. 畳み込み層と全結合層 33
濃淡画像(モノクロ画像)とニューラルネット ワーク モノクロ画像(濃淡画像)を扱うとき,入力層では,1つの 画素に,1つのユニットになる. 〇 はニューロン,線は結合 画像 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 入力層 (他の結合は書 いていない) 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 (他の結合は書 いていない) 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 34
全結合層 • 全結合層のユニットは,前の層のすべてのユニッ トと結合している 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 前の層 (他の結合は 書いていない) 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 全結合層 35
畳み込み層① • 畳み込み層は,畳み込みを行う 0×1 + 1×0 + 0×1 = 0 • 結合の重みが,畳み込みのカーネルになる • 前の層の,一部分のユニットとのみ結合 • すべてのユニットの結合の重み、バイアスは同じ 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 前の層 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 畳み込みのカーネルのサ イズが 2×2 のとき: 前の層の 4つのユニット とのみ結合 畳み込み層 36
畳み込み層① • 畳み込み層は,畳み込みを行う 0×1 + 1×0 + 0×1 = 0 • 前の層の,一部分のユニットとのみ結合 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 前の層 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 畳み込みのカーネルのサ イズが 2×2 のとき: 前の層の 4つのユニット とのみ結合 畳み込み層 37
畳み込み層② • 畳み込み層は,一度に複数の畳み込み(数十以 上)を行うように作る のがふつうである. • それぞれの畳み込みについて,全ユニットで,重 みとバイアスが同じ 複数のカーネル 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 前の層 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 1つの畳み込み層 38
畳み込み層の特徴 • 画像内の特定のパターンの識別など → 全結合層にこだわる必要はなく, 畳み込み層などが利用される 画像内のパターン MIT Introduction to Deep Learning | 6.S191, https://www.youtube.com/watch?v=5tvmMX8r_OM の「Why Deep Learning」のページ 39
ニューラルネットワーク 畳み込み層も,全結合層も,同じ原理で動作する. 「学習」も行われる ① 入力は複数 ② 入力を重みづけし合計をとる ・合計に,バイアスという値を ③ その合計から出力値を得る 足し引きしたあと,活性化関数 1 2 3 4 5 6 7 8 9 入力 1 2 3 4 5 6 7 8 9 1 1 1 0 1 1 0 0 1 白黒の画像 (画素は 0 または 1) が適用され出力値が得られる. ・活性化関数はさまざまな種類 重み w1 ~ w9 w1 w2 w3 w4 w5 w6 w7 w8 w9 合計 シグモイド ユニット 0.9 0.8 0.7 合計は, 0.6 1 × w1 + 1 × w2 + 1 × w3 + 0 × w4 + 1 × w5 + 1 × w6 + 0 × w7 + 0 × w8 + 1 × w9 0.3 ReLU (2011年発表) 0.5 0.4 0.2 0.1 0 -2.0 -1.5 -1.0 -0.5 0.0 0.5 1.0 1.5 2.0 40
まとめ • データからの学習により,結合の重みが定まる (畳み込みのカーネルができる) 複数のカーネル 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 学習に応じた カーネルが得られる 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 〇 41
4-5. 畳み込みニューラルネット ワーク(CNN)の仕組み 42
畳み込みニューラルネットワーク(CNN) 畳み込みニューラルネットワークは,畳み込み 層と,プーリング層を交互に繰り返すディープ ニューラルネットワーク 畳 み 込 み 層 プ ー リ ン グ 層 畳 み 込 み 層 プ ー リ ン グ 層 畳 み 込 み 層 プ ー リ ン グ 層 畳 み 込 み 層 プ ー リ ン グ 層 畳 み 込 み 層 プ ー リ ン グ 層 さまざまなバリエーション • 畳み込み層 • プーリング層 変になる ・・・ ・・・ 畳み込みによるパターンの識別 画像の小移動に対して,出力が不 43
畳み込みニューラルネットワークの特徴 全結合層のみの場合と比べて. • ユニット間の結合を局所に限定 • 結合の数を,大幅に削減 • 結合の数が減り,過学習の問題を緩和 44
畳み込みニューラルネットワーク(CNN)の用途 画像分類,物体検出,セグメンテーションなどで高 い性能・機能を発揮する場合がある 画像分類 物体検出 セグメン テーション 45
CNN Explainer • CNN Explainer ジョージア工科大学 Polo Club • 畳み込み層などの仕組みをビジュアルに学ぶこと ができるサイト Webブラウザで次の URL を開く https://poloclub.github.io/cnn-explainer/ 46
① 画面の確認 このニューラルネットワークは,画像分類を行う 画像を選ぶ 元画像の 赤青緑の成分 ニューラルネットワーク 画像の分類結果. ここでは espresso 47
② ニューラルネットワークの構成 畳み込み層とプーリング層を含む conv relu 畳み込み層 conv relu max_pool conv relu conv relu max_pool 畳み込み層 プーリング層 畳み込み層 畳み込み層 プーリング層 conv は畳み込み層で,max_pool はプーリング層 全結合層 全結合層 全結合層 全結合層 48
③ 左上の画像をクリック → 畳み込みの様子をアニメーションで確認できる (この画像は,各層での処理結果である.画像1個 がニューロン1つというわけではない) 49
④ 出てきた画像をクリック → 畳み込みの詳細をアニメーションで確認できる 50
⑤ 畳み込みの様子がアニメーションで表示される その他の層についてもビジュアルに表示できる (いろいろ試すことは,各自の自主的な自習とす る) 51
プーリングを行う Max Pooling 層 • 2次元のデータの縮小 (例)サイズ 100 × 100 ⇒ 50 × 50 のように • 一定領域内の結果を,1つにまとめる. • 定まった計算を行う(学習の対象ではない) • Max Pooling は,縮小後に,最大値が残る 範囲内のユニットの活性度の最大を得る 7, 1 の最大値は 4 ・「4, 8, 7, 1」の 4マス から,最大値の 8 を選ぶ. ・4, 8, 出典: https://github.com/jeffheaton/t81_558_deep_learning/blob/084023876b6cf09c931b452584dbd44c56314a03/t81_558_class_06_2_cnn.ipynb 52
LCN 層 • コントラストの補正(明るい部分、暗い部分を補 正する) • 定まった計算を行う(学習の対象ではない) • 領域内の平均を引くという計算を行うもの.さら に分散で割るという場合もある 5 5 4 0 0 -1 6 6 5 1 1 0 5 5 4 0 0 -1 領域内の 平均を引く 53
4-6. 畳み込みニューラルネット ワーク(CNN)の作成 54
• 手書き文字の画像を,0 ~ 9 に分類 • 訓練データとして,手書き文字の画像 60000枚を 使用 55
MNISTデータセット • 0 ~ 9 の手書き文字.濃淡画像 28 × 28 • 訓練データ (学習用) 60000枚の画像と正解 抜粋 • 検証データ (検証用) 10000枚の画像と正解 抜粋 56
画像分類を行う畳み込みニューラルネッ トワーク ユニット ユニット 128 個 10 個 relu softmax 入力 畳 み 込 み 層 畳 み 込 み 層 プ ー リ ン グ 層 全 結 合 層 全 結 合 層 10種類に 分類 出力 最終層 57
ニューラルネットワーク作成のプログラム例 import tensorflow as tf m = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(32, kernel_size=(3, 3), ←畳み込み層 activation='relu', input_shape=(28, 28, 1)), tf.keras.layers.Conv2D(64, (3, 3), activation='relu'), ←畳み込み層 tf.keras.layers.MaxPooling2D(pool_size=(2, 2)), ←プーリング層 tf.keras.layers.Dropout(0.25), tf.keras.layers.Flatten(), tf.keras.layers.Dense(units=128, activation='relu'), ←全結合層 tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(units=10, activation='softmax') ←全結合層 ]) https://colab.research.google.com/drive/18IPPkY96Oc6jkYD2su4cFgWcoYAskLo_?usp =sharing 58
学習の繰り返しを行うプログラム例 学習の繰り返し回数は 10 訓練データの指定 検証データの指定 59
学習の繰り返しを行うプログラムと実行結果 同じ訓練データを用いた学習を10回繰り返し. そのとき,検証データで検証 プログラム 実行結果 画像分類の精度は 0.99 学習の繰り返しごとに, 訓練データや検証データ での精度や損失 の変化を確認 60
全体まとめ • 画像の画素数は多い • 全結合層だけでは,画像をうまく扱えない場合が 多い • CNN(畳み込みニューラルネットワーク)は,畳 み込み層,プーリング層の繰り返しにより,画像 を扱う技術 • CNN(畳み込みニューラルネットワーク)は,全 結合層で画像がうまく扱えない問題を一部解決 • CNN(畳み込みニューラルネットワーク)の作成 は,プログラムで簡単にできる 61