LoginSignup
4
6

More than 1 year has passed since last update.

CNNの基本

Last updated at Posted at 2023-01-28

はじめに

画像等を用いたDeepLearning で使われるConvolutional Neural Netwoek(=畳み込みNN=CNN)についてまとめておきます.

Linearでもいいので簡単なモデルを作ったことがある人なら実装部分は詰まらないと思います.ので,知識のお話をできればと思います.
DNNで出てこなかった部分としては,ConvolutionとPoolingです.

また,Convolution層で使えるGradCAMという便利な技術についても紹介します.

目次

1 畳み込み
2 プーリング
3 GradCAM

1 畳み込み

CNNのメイン処理です.
今回は2次元の画像に対して考えていきます.
畳み込み処理には”フィルタ”を使います.下図の赤の部分が処理される画像,青の部分がフィルタです.
Conv1.png
まずはこのフィルタを左上3*3の領域に対して掛け合わせた値をとります.
Conv2.png
次に,一つ右にずらして同様の処理を行います.
Conv3.png
次に,一つ右.その次は一段下…というように繰り返していきます.
Conv4.png

で,これで何ができるの?ってことですが,特定の色,エッジ,などなどの画像のどこにどんな特徴があるのかを抽出するような役割を持っています.
例えば,”2”と書かれた画像に対して,どこに右肩上がりの情報があるのかをフィルタでやってみます.0,1で表現されているGrayScale画像とします.この時,右肩上がりのフィルタを用意して,これらに畳み込み処理を行うと,右の行列が出力されます.
画像の中で右肩上がりの線がある部分の値が大きくなって,その特徴がない部分の値は小さくなっています.
Conv5.png
こういったフィルタをたくさん用意して,いろんな特徴をとってやるぜ!というのが畳み込み処理になります.

2 プーリング

プーリング処理とは,近傍ピクセルから代表や平均をとることによって,解像度を下げる処理です.これには以下のような効果があります.

  • 微弱な位置変化に頑健
  • 過学習の抑制
  • 計算コスト低下
    処理は簡単で,フィルタの中で平均を取ったり(Average Pooling),一番大きい値をとったりします(Max Pooling).
    AveragePooling.png
    MaxPooling.png

3 GradCAM

GradCAMとは,AIがどこを見て判断しているのかを可視化する手法です.基本的にDeepLeaningはブラックボックスであり,何の特徴を見て機械が判断しているかは分かりません.
ですが,出力層からモデル中の最後のConv層までを誤差逆伝搬して勾配を計算することで,画像中のどの部分を注目しているのかを確認できます.
なんか学習上手くいかんな~って時にAIがどこを見てくれているのか確認したりできるのはありがたいですね.
Pytorchでの実装はGithub等に上がっているので,すぐ実行できます.
GradCAM.png

さいごに

随時追記予定です.
最近Kaggeleを始めたので,データ分析なども勉強してまとめたいな~と思っています:v:

4
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
6