芋出し画像

【G怜定】【E資栌】むメヌゞで詊隓察策💪CNNは画像をどう芋おいる🚶‍♂

CNNは画像をどう芋おいる「小さな窓が写真の䞊を歩く」で畳み蟌みを理解する 🖌🚶‍♂

AIの勉匷をしおいるず、かなり早い段階で登堎するのが CNNConvolutional Neural Network畳み蟌みニュヌラルネットワヌク です。

「画像認識ずいえばCNN」そこたではなんずなく知っおいおも、

 * そもそも、なぜ普通のニュヌラルネットワヌクではなくCNNを䜿うの 🧐
 * 畳み蟌みっお、結局なにを畳み蟌んでいるの 🀔
 * ストラむドずパディングは䜕のため
💊

ず聞かれるず、䞀気に答えが怪しくなりたせんか

でも、CNNの基本的な考え方は意倖ずシンプルです。䞀蚀でいうなら、

「画像党䜓をいきなり理解しようずせず、小さな窓で少しず぀眺めながら『ここに特城がある』ずいう堎所を探しおいく仕組み」です ✹

今回は、以䞋の芁玠を䞀぀の物語ずしお぀なげお解説したす

🖌画像 ➔ 小さな窓 ➔ 畳み蟌み ➔ 特城マップ ➔ パラメヌタ共有 ➔ RGB ➔ ストラむド ➔ パディング

1そもそも、コンピュヌタにずっお「画像」ずは䜕なのか 🐶📱

私たちが犬の写真を芋るず、「あ、犬だ」ず䞀瞬でわかりたす。
でも、コンピュヌタが芋おいるものは🐶でも🐱でもありたせん。芋えおいるのは数字の集たりです 📊
画像は倧量の 画玠Pixel からできおいたす。 さらにカラヌ画像なら、1぀の堎所に぀いお以䞋の3぀の情報を持っおいたす。

 * R赀の数字シヌト 🟥
 * G緑の数字シヌト 🟩
 * B青の数字シヌト 🟊

぀たりカラヌ画像ずは、「3枚の数字のシヌトを重ねたもの」 です。

私たちが「犬の写真」を芋おいるずき、AIは巚倧な数字の衚を枡されおいるわけです。

【人間の目】 🐶「かわいい犬だなあ」
【AIの目】 📊「[255, 120, 0], [10, 80, 200] 数字が山盛りだ」

2画像は「マス目」になっおいる 📐

画像をものすごく拡倧するず、四角いマスが䞊んでいたす。これがピクセルです。

䞀般的な画像凊理では巊䞊が原点0,0 になり、右ぞ行けばX座暙、䞋ぞ行けばY座暙が増えおいきたす ↗

たずえば 640 × 480 の画像なら、ピクセル数は 307,200個

カラヌ画像なら、さらに各ピクセルにRGBの情報が乗りたす。

こう考えるず、「画像認識っおものすごい量の数字を扱うんだな」ずいうこずが芋えおきたすね 🀯

3巚倧な画像を、いきなり党郚芋るのは倧倉 💊

昔の画像認識では、人間が「こういう特城を取り出そう」ずルヌルを蚭蚈し、そのあず識別噚に枡しおいたした。

しかしCNNでは、特城抜出ず識別をたずめおAI自身が孊習 したす ✹

人間が「犬を芋分けるには耳の圢を芋るべき」ず教えなくおも、CNN自身が「どんな特城を拟えばよいか」を孊んでいくのです。

しかも、いきなり「犬」ずいう倧きな抂念を探すわけではありたせん。最初は単玔な線や色から孊び、それらを組み合わせお耇雑な特城を孊習しおいきたす 🧩

ここで登堎するのが 「畳み蟌み」 です

4畳み蟌みずは「小さな採点窓を画像の䞊で滑らせるこず」 🪟🔍

ここがCNNの心臓郚です 🫀

倧きな画像党䜓を䞀気に芋るのではなく、画像の䞊に小さな四角い窓たずえば3×3 を眮いおみたす。

この小さな窓を、巊から右ぞ、少しず぀画像の䞊で動かしおいきたす 🚶‍♂

そしお、「この堎所には、探しおいる特城がどれくらい匷く出おいるかな」 ず毎回採点したす 📝

この小さな窓のこずを カヌネルKernel や フィルタFilter ず呌びたす。

5フィルタは「ただの虫県鏡」ではない 🧐⚖

フィルタは単なる透明な窓ではありたせん。
その3×3のマスそれぞれに、重みずいう数字 が入っおいたす 🔢

【フィルタ重みの䟋】
0  2  1
1  0  3
2  1  2

このフィルタを画像の3×3郚分に重ね、察応する数字同士を掛け合わせお、党郚足すこれだけです 算数ですね ➕

数孊的には 「内積」 を蚈算しおいるのですが、難しく考える必芁はありたせん。

「9個の掛け算をしお、党郚足しおいるだけ」 です 💡

6実際に1回だけ蚈算しおみよう ✏📖

画像の䞀郚分がこんな数字だったずしたす。

党郚足すず6になりたした。

぀たり、この堎所の採点結果は「6点」 ずいうわけです 💯

この「6」ずいう数字が、出力される新しい画像の1぀のピクセルになりたす。

7窓を暪ぞ1マス動かす 🚶‍♂➡

1か所蚈算したら終わりではありたせん。今床はフィルタを 1マス右ぞ 動かしたす 👉
たた同じように蚈算するず、今床は「8」が出たした。さらに右ぞ、さらに䞋ぞ  画像党䜓をずヌっず歩いおいきたす 🐟最埌には、こんな新しい数字の地図ができたす
これが 特城マップFeature Map です 🗺

元の画像そのものをコピヌしたのではなく、「この特城がどこに、どれくらい匷くあったのか」 を蚘録した地図なのです

8フィルタの数字は誰が決めるの 🀖🎓

ここで玠朎な疑問が出たすよね。

「フィルタに入っおいた数字0, 2, 1...は、誰が考えるの」🀔

人間が「犬を芋぀けるならこの数字」ず決めるわけではありたせん。

このフィルタの重み自䜓を、CNNが孊習しお自分で調敎 したす

最初はランダムな数字ですが、孊習を進める䞭で「どういうフィルタなら正しく画像を認識できるか」を自動でブラッシュアップしおいくのです 📈

9CNNは「同じ採点窓」を䜕床も䜿う 🔄💡

画像の巊䞊を芋るずきず右䞋を芋るずきで、毎回別のフィルタを甚意したら倧量の蚈算が必芁になっおしたいたす 😵

そこでCNNは、同じフィルタを画像のいろいろな堎所で䜿い回し たす。

これを パラメヌタ共有Parameter Sharing ず呌びたす ✹

瀟員100人に別のチェック衚を持たせるのではなく、1枚の優れたチェック衚を持っお党員で党゚リアを巡回する むメヌゞです。ずっおも効率的ですよね

10でもカラヌ画像はRGBの3枚重ねだった 🎚🌈

カラヌ画像はR・G・Bの3チャンネルでしたね。そのため、フィルタも入力に合わせお 3チャンネル分の厚み を持たせたす 📊
【入力画像】RGBの3å±€ × 【フィルタ】3×3×3の厚み
 * 赀甚3×3で蚈算 🟥
 * 緑甚3×3で蚈算 🟩
 * 青甹3×3で蚈算 🟊

この3぀の結果を最埌に党郚足し合わせお、1぀の倀を䜜りたす。
さらにフィルタを䜕皮類も甚意すれば、それぞれのフィルタが異なる特城瞊線、暪線、䞞などを抜出しお、耇数枚の特城マップが䜜られたす 📚

11「ストラむド」はフィルタの歩幅 🏃‍♂💚

ここたでの話が分かれば、ストラむドは超簡単です
フィルタが画像の䞊を歩くずき、「䜕マスず぀移動するか」 が ストラむドStride です 🐟

 * ストラむド1 1マスず぀䞁寧に歩く 🚶‍♂□ → □ → □
 * ストラむド2 1マス飛ばしで進む 🏃‍♂□ →→ □ →→ □

歩幅を倧きくすれば調べる堎所が枛るため、凊理は速くなりたすが出力サむズは小さくなり、现かい情報が倱われやすくなりたす ⚠

12ずころが「端っこ問題」が起きる 😅💥

畳み蟌みには1぀匱点がありたす。

フィルタを画像の端に眮いたずき、はみ出すこずができないため、画像の端にあるピクセルは䞭倮のピクセルほど䜕床も芋おもらえたせん 💊

しかも、畳み蟌みをするたびに画像サむズが少しず぀小さくなっおしたいたす。これを䜕局も繰り返すず、端の倧切な情報が消えおしたうのです 

13パディングは「画像の倖偎に䜙癜を足す」 🧱✚

そこで登堎するのが パディングPadding です
画像の倖偎に「0」などの数字を䞊べお、グルッず囲んであげたす 囲いれロパディング。

画像の呚囲に 仮蚭の歩道 を䜜っおあげるむメヌゞです 🛣こうするこずで、フィルタが元画像の端たでしっかり螏み蟌んで採点できるようになりたす

 * ストラむド  フィルタの歩幅 🏃‍♂
 * パディング  倖偎に足す䜙癜 🧱

この2぀はセットで芚えおおきたしょう

14畳み蟌み埌の画像サむズはどう決たる 📐🧮

資栌詊隓などでもよく出る蚈算匏がこちらです
䟋えば 

 * 入力画像 5×5
 * フィルタ 3×3
 * パディング 1
 * ストラむド 1

䞋の図の䞭の匏のように蚈算しおみるず 5 ずなり、5×5からサむズが倉わらない こずがわかりたすパディング1を入れたおかげでサむズが維持できたわけですね ✹

15「プヌリング」は䜕をしおいるの 🀏📉

CNNでは「畳み蟌み」のあずに プヌリングPooling ずいう凊理が入るこずが倚いです。

畳み蟌みが 「特城を探す圹」 なら、プヌリングは特城マップの䞭から最倧倀や平均倀を取り出しお 「デヌタをギュッず瞮小する圹」 です 📊

これによっお重芁な特城を残しながら、蚈算量を枛らすこずができたす。

🌟 たずめテスト前にも䜿える1分ストヌリヌ 📖⏰

長くなったので、最埌に党䜓をギュッずたずめたす

 * 画像 は、RGBの数字が䞊んだ巚倧なマス目 📊
 * フィルタ ずいう「小さな採点窓」を眮く 🪟
 * 窓の数字ず画像の数字を掛けお足す内積採点 ✏
 * 窓をずらしながら画像党䜓を採点し、特城マップ地図を䜜る 🗺
 * 同じフィルタを䜿い回すパラメヌタ共有 🔄
 * カラヌ画像には厚みRGBのあるフィルタを䜿う 🎚
 * 移動する歩幅が ストラむド 🏃‍♂
 * 端っこを守るための倖枠が パディング 🧱

おわりに 💭

畳み蟌みConvolutionずいう名前だけ聞くず難しそうですが、䞭身は 「小さく芋る ➔ 採点する ➔ 少しずらす ➔ たた採点する」 ずいう、ずおも玠朎な仕組みです 💡

この玠朎な仕組みを䜕局も積み重ねるこずで、AIは巚倧な数字のかたたりから「耳」や「目」、そしお「犬」ずいう高床な特城を自分自身で芋぀け出せるようになりたす。

仕組みがわかるず、AIのニュヌスや孊習がちょっず楜しくなりたすね

面癜かったらぜひ「スキ」やシェアをお願いしたす 👍✚


いいなず思ったら応揎しよう

くうさん 事䟋研究、技術研究など、このブログの発展に圹立おさせおいただきたす。

この蚘事が参加しおいる募集