第1章
画像認識と画像データの基本
画像認識の代表的な課題と、画素・解像度・RGBの考え方を学びます。
この章で学ぶこと
- 画像分類、物体検出、セグメンテーションの違い
- コンピューターが画像を数値として扱う仕組み
- 解像度や色、撮影条件が認識に与える影響
この教材の進め方
「画像認識・機械学習入門」では、データから規則性を学ぶ機械学習と、画像から対象の種類や位置などを推定する画像認識を一緒に学びます。気温を予測する回帰と、衣服を分類する実習を通して学習・評価の流れを体験し、最終的にカメラに写る物体の検出、位置関係、既知のマーカーを基準としたカメラの位置と向きの記録まで進みます。
| 段階 | 学ぶこと | 作るもの・到達点 |
|---|---|---|
| 第1・2章 | 画像・学習データ・学習の仕組み | 画像とデータの基礎を理解する |
| 第3章:回帰 | 公開データの取得、特徴量、数値予測 | 翌日の最高気温を予測するモデル |
| 第4章:画像分類 | CNNの構築、学習、推論 | 衣服を分類するモデル |
| 第5章:評価 | 混同行列、適合率、再現率 | 誤分類とモデルの限界の分析 |
| 第6章:OpenCV | 読み込み、色変換、輪郭、カメラ入力 | エッジ画像と撮影画像 |
| 第7章:YOLO | 学習済みモデルによる物体検出 | 検出枠と種類・座標のログ |
| 第8章:位置関係 | 座標、左右・上下、重なり、奥行きの限界 | 物体間の2次元関係の推定 |
| 第9章:カメラ校正 | 内部パラメーターとレンズ歪み | 自分のカメラの校正ファイル |
| 第10章:自己位置推定 | ArUcoとPnP、座標系の変換 | マーカーを基準にした位置・姿勢の記録 |
| 第11章:SLAMへの入口 | 特徴点対応、VO、SLAM | 対応点の可視化と総合実験 |
第1・2章はプログラミング環境なしで学べます。第3章以降はPythonの変数、関数、配列、コマンド実行を使います。物体検出を先に体験したい人は、第1章から第6章へ進み、第2〜5章を後で読んでも構いません。回帰、TensorFlowを使う衣服分類、OpenCV・YOLOの実習は、それぞれ別の仮想環境を使います。
静止画と保存済み動画でも多くの実習ができます。自分のカメラの校正と自己位置推定には、PCに接続できるカメラ、印刷したパターン、定規を用意します。GPUは必須ではありません。
何を認識したいかを決める
同じ写真でも、欲しい答えによって課題が変わります。
| 課題 | 出力するもの | 例 |
|---|---|---|
| 画像分類 | 画像全体の種類 | 商品写真を「シャツ」「靴」「かばん」に分ける |
| 物体検出 | 対象の種類と位置を囲む枠 | 棚の写真にある商品を一つずつ囲む |
| セマンティックセグメンテーション | 各画素の種類 | 道路の写真を「道路」「歩道」「車」の領域に分ける |
画像分類だけでは、一枚に写った複数の商品の位置や個数は直接分かりません。まず「入力する画像」と「欲しい出力」を言葉にしましょう。前半は画像分類、後半は物体検出と幾何学的な位置・姿勢推定を扱います。物体検出の枠だけで、実世界の距離やカメラの自己位置まで分かるわけではありません。
画像は画素の集まり
デジタル画像は、**画素(ピクセル)**と呼ぶ小さな点を格子状に並べたものです。8ビットのグレースケール画像では、各画素の明るさを0〜255の整数で表します。0が黒、255が白で、その間は灰色です。
次の数値は、中央だけが白い3×3ピクセルの画像を表します。
0 0 0
0 255 0
0 0 0
カラー画像では、一般に赤(R)、緑(G)、青(B)の3つの値を使います。それぞれの成分をチャンネルと呼びます。各成分を8ビットで表すRGBでは、赤は (255, 0, 0)、白は (255, 255, 255)、黒は (0, 0, 0) です。
高さ100、幅200のRGB画像を「高さ・幅・チャンネル」の順に配列へ格納すると、形状は (100, 200, 3) になります。画素数は20,000個、色の成分の数は60,000個です。ファイルの容量は圧縮方式や付加情報にも依存するため、この数とは区別します。
前処理で入力をそろえる
モデルに渡す前に、画像の大きさや値の範囲をそろえる処理を前処理と呼びます。
| 処理 | 目的 | 気を付けること |
|---|---|---|
| リサイズ | 入力の縦横のサイズをそろえる | 縦横比を変えると形がゆがむ |
| 切り抜き | 必要な領域を取り出す | 対象の一部を切り落とすことがある |
| 余白の追加 | 縦横比を保ちながらサイズをそろえる | 余白もモデルへの入力になる |
| 値の変換 | モデルが想定する数値の範囲に合わせる | 学習時と利用時で同じ変換を使う |
たとえば画素の値を255で割ると、0〜255が0〜1になります。ただし、すべてのモデルがこの変換を使うわけではありません。学習済みモデルでは指定の前処理に合わせます。
画像を小さくすると計算量を減らせますが、小さな文字や細い輪郭が失われます。色が分類の手掛かりになる課題では、グレースケール化によって必要な情報を失うこともあります。
やってみよう
- 「写真に犬がいるか」「犬がどこにいるか」「犬の領域を画素ごとに塗る」は、それぞれどの課題でしょうか。
- 高さ28、幅28、グレースケール1チャンネルの画像には、いくつの画素があるでしょうか。
- 赤いりんごと青いりんごを分類するとき、グレースケール化で何が難しくなるでしょうか。
解答例
- 画像分類、物体検出、セグメンテーションです。
28 × 28 = 784個です。1チャンネルなので明るさの値も784個です。- 色の違いが失われ、形や明るさが似ている画像を区別しにくくなります。
次章では、画像と正解ラベルを集め、学習に使うデータを準備します。