- 「CNN」について学びたいけど理解できるか不安・・・
- 「CNN」についてどこから学んでいいか分からない?
- 「CNN」を体系的に教えて!
「CNN((Convolutional Neural Network:畳み込みニューラルネットワーク)」は畳み込み層とプーリング層をもつニューラルネットワークです。画像から特徴量を抽出するために効果的なモデルですが、興味があっても難しそうで何から学んだらよいか分からず勉強のやる気を失うケースは非常に多いです。
私は過去に基本情報技術者試験(旧:第二種情報処理技術者試験)に合格し、また2年程前に「一般社団法人 日本ディープラーニング協会」が主催の「G検定試験」に合格しました。現在、「E資格」にチャレンジ中ですが3回不合格になり、この経験から学習の要点について学ぶ機会がありました。
そこでこの記事では、「CNN(畳み込みニューラルネットワーク)」を学習する際のポイントについて解説します。
この記事を参考にして「CNN」が理解できれば、E資格に合格できるはずです。
1.CNNの構造
CNN(Convolutional Neural Network:畳み込みニューラルネットワーク)の構造は以下のとおりである。

1.1 LeNetの構造図
- CNN(畳み込みニューラルネットワーク)の最初の提案および実装である
- 従来は「画像認識向けの3層MLP」
- LeNetでは「畳み込み層 – サブサンプリング層」を2回繰り返したのち、全結合層を3層つなげて識別する

1.2 畳み込み層の全体像

1.3 全結合層での学習

1.4 CNNで扱えるデータの種類
- CNNでは次元間で繋がりのあるデータを扱える
1次元 | 2次元 | 3次元 | |
---|---|---|---|
単一チャンネル | 音声 <時刻,強度> | フーリエ変換した音声 <時刻,周波数,強度> | CTスキャン画像 <x,y,z,強度> |
複数チャンネル | アニメのスケルトン <時刻,(腕の値、膝の値・・・)> | カラー画像 <x,y,(R,G,B)> | 動画 <時刻,x,y,(R,G,B)> |
2.畳み込み層
2.1 Bias(バイアス)
画像の場合、縦、横、チャンネルの3次元データをそのまま学習し、次に伝えることが出来る。
結論:3次元の空間情報も学習できるような層が畳み込み層である。
畳み込みの演算概念


2.2 Padding(パディング)

- 元画像に対してパディングするため、ミニバッチサイズ、チャンネル数をそのまま維持する。
2.3 Stride(ストライド)

2.4 Channel(チャンネル)

画像は3次元データ(縦,横,チャンネル)だが、1次元のデータとして処理される。
↓
RGBの各チャンネル間の関連性が学習に反映されないこと。
2.5 Pooling(プーリング)
- 必要なところは細かく、必要がないところは荒くデータを圧縮する方法

2.6 Unpooling(アンプーリング)

◎確認テスト
- Q1.サイズ6×6の入力画像を、サイズ2×2のフィルタで畳み込んだ時の出力画像のサイズを答えよ。
なお、ストライドとパディングは1とする。 - A1.下の公式より出力画像のサイズを求めると、高さ7×幅7になる。

〈上記公式の補足〉
- 分子:フィルターはその高さ・幅分しか移動できないから画像の高さ・幅からマイナスしている。
- 分母:分子に対してストライド値で割ることで出力画像のサイズを求めることができる。
2.7 Pythonコード
4次元配列(ミニバッチサイズ,チャンネル数,縦幅,横幅)に対して行列演算を行う必要がある。
- np.pad の用途
パディングを計算する関数 - np.pad の使い方
np.padには3つの引数がある。
第1引数:元の配列
第2引数:前・後の文字詰め量
第3引数:埋め込み方式 - 例
data=[ 2, 3, 4]
np.pad=(data, [3, 4], ‘constant‘)
- s[i:j:k] の用途
スライスを行う関数 - s[i:j:k] の使い方
i:開始値
j:終了値(常に含まれない)
k:間隔
i、j、kはそれぞれ組み込み関数rangeやnp.arange関数の引数
start:初期値
stop:終値
step:増分
に対応
- kernel.reshape((○○,ー1)).T
reshape:整形
T:転置行列
補足)-1を渡した場合は「行ベクトル」になる。
kernelを列「〇〇」の「行ベクトル」に変換し、転置をとる。
〈参考〉https://numpy.org/doc/stable/reference/generated/numpy.ndarray.reshape.html
〈参考〉https://numpy.org/doc/stable/reference/generated/numpy.ndarray.T.html
3.まとめ
最後まで読んで頂きありがとうございます。
皆様のキャリアアップを応援しています!!
コメント