メインコンテンツへスキップ

10 コンピュータビジョン(方向選択)

コンピュータビジョンメインビジュアル

この選択章で答える問いはシンプルです。モデルが画像を見るとは、何を意味するのか。 まずピクセルから始め、出力の細かさに沿って進みます。画像全体を分類し、物体を位置づけ、ピクセルを分割し、最後に OCR、動画、マルチモーダルへつなげます。

主線が LLM アプリと Agent なら、あとで戻ってきても大丈夫です。OCR、産業検査、医用画像、画像検索、マルチモーダル製品に関心があるなら、体系的に学ぶ価値があります。

出力粒度で視覚タスクを見る

視覚タスク出力粒度の階段

同じ画像に3つの質問をします。

質問タスク出力
この画像は主に何か?分類1つ以上のラベル
各物体はどこにあるか?検出box、label、confidence
どのピクセルがどの物体や領域か?セグメンテーションmask またはピクセルクラス
どんな文字や視覚意味を取り出せるか?OCR / 視覚理解テキスト、表、説明、回答

学習順序とタスク表

まず出力タイプを理解し、それからプロジェクトへ進みます。同じ画像でも複数のタスクになります。

手順読む内容手を動かすこと残す証拠
10.1画像基礎と OpenCVピクセル、チャンネル、リサイズ、グレー化、エッジを確認入力画像、処理後画像
10.2画像分類小さな分類器を実行または訓練label、accuracy/F1、失敗画像
10.3物体検出box、confidence、IoU、mAP、YOLO を理解予測 box と閾値メモ
10.4セグメンテーションmask とピクセル単位ラベルを理解mask 可視化と IoU/Dice メモ
10.5応用トピック必要なときだけ OCR、動画、顔、3D、医療方向を選ぶ方向メモとシナリオ境界
10.6ステージプロジェクト10.6.4 実践:再現可能なビジョンミニパイプラインを作る を動かす生成画像、mask、box、指標、失敗レポート

最初に動かすループ:依存なしでピクセルを見る

この依存なしの小さなラボは、小さなカラー画像を作り、グレー画像へ変換し、多くの画像ビューアで開ける形式で保存します。学ぶ核心は、画像が構造化された数値データだということです。

ch10_pixel_lab.py を作成し、Python 3.10 以降で実行してください。

from pathlib import Path

width, height = 8, 8

pixels = [
[(x * 32, y * 32, 128) for x in range(width)]
for y in range(height)
]

gray = [
[round(0.299 * r + 0.587 * g + 0.114 * b) for r, g, b in row]
for row in pixels
]

ppm_body = "\n".join(" ".join(f"{r} {g} {b}" for r, g, b in row) for row in pixels)
pgm_body = "\n".join(" ".join(str(value) for value in row) for row in gray)

Path("synthetic_rgb.ppm").write_text(f"P3\n{width} {height}\n255\n{ppm_body}\n")
Path("synthetic_gray.pgm").write_text(f"P2\n{width} {height}\n255\n{pgm_body}\n")

print("size:", (width, height))
print("channels:", 3)
print("top_left_rgb:", pixels[0][0])
print("center_gray:", gray[height // 2][width // 2])
print("saved:", "synthetic_rgb.ppm", "synthetic_gray.pgm")

期待される出力:

size: (8, 8)
channels: 3
top_left_rgb: (0, 0, 128)
center_gray: 128
saved: synthetic_rgb.ppm synthetic_gray.pgm

操作メモ: widthheight、RGB の式を変えてください。保存画像が変われば、すでに画像前処理をしています。後の章では、この小さなラボを OpenCV、Pillow、PyTorch、検出・セグメンテーションモデルへ置き換えます。

視覚結果をデバッグする

視覚パイプラインと失敗レビューのループ

視覚モデルが間違えたら、まず入力とラベルを確認し、そのあとモデル構造を疑います。

症状まず表示・可視化するもの修正候補
分類が不安定誤分類画像とクラス数データ清掃、クラス再バランス、augmentation 調整
小物体を見逃す画像解像度、box、confidence 閾値ラベル改善、解像度向上、閾値調整
セグメンテーション境界が粗いmask を元画像に重ねた図アノテーション改善、適切な IoU/Dice 指標
Demo 画像は良いが実画像で悪い照明、角度、背景、カメラ実サンプルとシナリオ説明を追加

よくある失敗

  • データ品質を見ずにモデル名を追う。
  • accuracy だけ報告し、失敗画像を保存しない。
  • 分類、検出、セグメンテーションの出力を混同する。
  • ラベルの意味を変えてしまう augmentation を使う。
  • 画像サイズ、遅延、デバイスメモリなど配置制約を無視する。

クリア確認

この選択章を出る前に、次をできるようにしてください。

  • 分類、検出、セグメンテーション、OCR、視覚理解を出力で説明できる。
  • ピクセルラボを動かし、画像サイズ、チャンネル、RGB 値、グレー値を説明できる。
  • 入力画像、処理画像、予測、指標、失敗例を残せる。
  • accuracy/F1、mAP、IoU、Dice など適切な指標を選べる。
  • 再現可能なビジョンミニパイプラインを動かし、短い失敗分析を書ける。

印刷用チェックリストは 10.0 学習チェックリスト を使ってください。プロジェクトから始めたい場合は 10.6.4 実践:再現可能なビジョンミニパイプラインを作る へ進みます。