VISION / LESSON 11

CNNで画像を分類する

特徴を探す層と、答えを選ぶ層の役割を分けて考えよう。

図から学ぶ
CNNで画像を分類するを表すキャラクターと学習内容のイラスト
TODAY'S GOAL

この回でつかむこと

畳み込み・プーリング・分類の流れを言える。

ことばの窓
01 / SEE THE IDEA

CNNで画像を分類するって何だろう?

CNN(Convolutional Neural Network、畳み込みニューラルネットワーク)は、近くの画素の組み合わせを何度も調べるモデルです。プーリングは特徴マップを小さくまとめます。

あおい

縦線の絵と横線の絵、AIは何を見て選ぶの?

AI先生

最初の層で小さな模様を探し、後ろでその組み合わせを使うんだよ。

はる

分類に使う前に、特徴マップの形を確認したいです。

画像の特徴を探して分類。縦線の画素を入力。小さな窓で線を探す。分類の点数へつなぐ。
図11 画像の特徴を探して分類。縦線の画素を入力。小さな窓で線を探す。分類の点数へつなぐ。

ROBORON ピコン! 小さな窓を動かして、縦線の手掛かりを探すよ。

図を読むと

CNNはConvolutional Neural Network。画像の局所的な特徴から分類する。 CNN(Convolutional Neural Network、畳み込みニューラルネットワーク)は、近くの画素の組み合わせを何度も調べるモデルです。プーリングは特徴マップを小さくまとめます。

小さなコードで確かめるまず結果を予想しよう
import torch
from torch import nn
net = nn.Sequential(nn.Conv2d(1,4,3,padding=1),nn.ReLU(),nn.MaxPool2d(2),nn.Flatten(),nn.Linear(4*4*4,2))
print(net(torch.zeros(2,1,8,8)).shape)
実行結果torch.Size([2, 2])

なぜそうなる? 8×8画像2枚が、2種類の点数へ変わります。ここでは学習前です。

02 / GO ONE STEP FURTHER

初めて見る画像で試す

学習に使った絵だけで判断すると、覚えただけでも高得点に見えます。学習用とテスト用を別々に作ります。

prediction = net(torch.zeros(2,1,8,8))
print(prediction.argmax(dim=1))
実行結果学習前の仮のクラス番号

ここに注目 argmaxは大きい点数の位置を返します。正しさは別の画像と正解で確認します。

03 / YOUR TURN

予想して、理由を話そう

答えを選んで、説明を確かめよう。外れても発見が一つ増えるよ。

CNNの畳み込み層が主に調べるのは?

答えを選ぶと理由が表示されます。

04 / TRY ON COLAB

Colabで試してみよう

コードの実行はColaboratoryの実行環境で行います。まずノートブックを保存し、Colabで「ファイル → ノートブックをアップロード」から開いてください。上から順に実行し、最後に値を変えてみましょう。

保存ボタンを押しても画面は切り替わりません。通常はブラウザの「ダウンロード」フォルダに .ipynb が保存されます。見つからない場合はダウンロード履歴を確認してください。Colabの実習は小さな例から始められます。

COFFEE BREAK

身近な技術とつなげてみよう

AI先生

AI先生:道路標識を見分けるとき、形だけでなく光や角度も変わる。次は『知らない状況でも使えるか』を考えよう。

KEY TERMS

この回の重要な用語

本文で出会った言葉を、ここで意味と一緒に振り返ろう。上の「ことばの窓」からも説明を開けるよ。

CNN
Convolutional Neural Network。畳み込みで特徴を取り出すニューラルネットワークです。
特徴マップ
フィルタがどこに強く反応したかを並べた表です。
プーリング
近くの値をまとめ、特徴マップを小さくする操作です。