コンピュータービジョン

画像分類タスク がぞうぶんるいたすく

画像分類画像認識ImageNetCNN深層学習ラベル予測
画像分類タスクについて教えて

簡単に言うとこんな感じ!

画像分類は「この画像は何か?(猫・犬・車・花など)」という質問にAIが答えるタスクだよ。コンピュータービジョンで最も基本的なタスクで、ここで培われた技術(CNN転移学習など)が物体検出やセグメンテーションなどの応用タスクの基盤になっているんだ!


画像分類タスクとは

画像分類(Image Classification) は、入力画像を事前に定義されたクラス(カテゴリ)のいずれかに割り当てるタスクです。コンピュータービジョンのタスクの中で最も基本的なもので、「1枚の画像全体に対して1つ(またはTop-K個)のラベル予測」します。

画像分類の研究はImageNet(120万枚以上・1000クラスの大規模画像データセット)とその年次コンテスト「ILSVRC」によって急速に発展しました。2012年のAlexNetがSigmoidからReLUへ・浅いネットから深いネットへという転換点を作り、それ以降每年モデルが改良され続けています。

「猫か犬か」という2クラス分類から、「1000種類の生物を見分ける」大規模多クラス分類まで幅広く応用されています。実務では転移学習を使い、ImageNetで事前学習したモデルを自社データで微調整することが一般的です。


主要な画像分類データセット

データセット画像数クラス数特徴
MNIST7万10手書き数字。入門用
CIFAR-10/1006万10/100小さい画像(32×32)の多クラス
ImageNet(ILSVRC)128万1000深層学習競争の中心
Places365180万365場所・シーン分類
iNaturalist240万8000以上生物種の細粒度分類

歴史と背景

  • 2009年:Fei-Fei LiらがImageNetを公開
  • 2010年:ILSVRCコンテスト開始。手作り特徴量が主流
  • 2012年:AlexNetがエラー率を26%→15%に改善。深層学習革命の始まり
  • 2015年ResNetが人間の認識精度(5%)を初めて下回る3.57%を達成
  • 2020年以降:Vision Transformerなどが台頭するが、CNNも改良が続く

画像分類の実装例

import torchvision.models as models
import torchvision.transforms as transforms
from PIL import Image

# 学習済みモデルをロード
model = models.resnet50(pretrained=True)
model.eval()

# 画像の前処理
transform = transforms.Compose([
    transforms.Resize(256),
    transforms.CenterCrop(224),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

# 推論
image = Image.open("photo.jpg")
input_tensor = transform(image).unsqueeze(0)  # バッチ次元を追加
output = model(input_tensor)
predicted_class = output.argmax().item()  # 最も確率の高いクラス

コンピュータービジョンタスクの難易度

タスク入力出力難しさ
画像分類画像1枚クラスラベル低い
物体検出画像1枚クラス+矩形の複数中程度
セマンティックセグメンテーション画像1枚全ピクセルのクラス高い
インスタンスセグメンテーション画像1枚個体ごとのマスク非常に高い

関連用語