画像認識の機械学習をざっくり調べる

機械学習

機械学習(Machine Learning)については、何度か軽く触った程度だったので、画像認識を使ってなにか作ってみようと思う。そんなわけで機械学習について、ざっくり調べてみた。

ちなみに昔やったことあったのは、ResNetを利用した画像分類でreCAPTCHAを自動解決させるというものや、Haar-like特徴分類器を利用してカレーを識別させるというもの。

思い返してみたら、カレーを検出させようとしてたのは13年前…。

https://www.greenstudio.jp/wp/blog/2012/07/08/235/

画像認識の種類

画像認識とは、ざっくり言うと画像などから特徴量を抽出して対象物を検出する方法。

https://github.com/facebookresearch/detectron2

画像分類

教師あり学習は、ラベル付けした画像データを用いて学習させ、入力した画像データを分類させることができる。ResNetなんかもこれに含まれる。

物体検出

入力した画像データから複数の物体(猫や犬)を検出させることができる。バウンディングボックス(矩形)で位置も特定できる。

セグメンテーション

セグメンテーションは、検出したい物体をピクセル単位で検出させることができる。セマンティックセグメーションとインスタンスセグメンテーションがある。

セマンティックセグメーションは、同じ物体の分類はすべて一括りで検出するので、個々区別されることはない。

インスタンスセグメンテーションは、同じ物体でもそれぞれ個別に区別される。

姿勢推定(人体骨格推定)

画像や動画などから人物の姿勢(骨格)を検出することができる。キーポイントと呼ばれる特定の位置(目や鼻、関節など)を検出し、それらのキーポイントを結んだ線から骨格を推定することができる。

画像認識モデル

画像認識で使われる代表的なモデルを比較してみる。

画像分類モデル

TorchVisionのドキュメントにある認識精度のスコアが参考になる。

https://pytorch.org/vision/stable/models.html#table-of-all-available-classification-weights

AccとGFLOPSの値を参考にどの程度の精度か、計算処理が必要なのかが分かる。

  • Acc(Accuracy)は精度で、@1の場合は、モデルが出した答えで、一番上位のもの含まれているかどうか。@5の場合は、上位5位以内に含まれている確率になる。確率が高いほど、高精度となる。
  • GFLOPS(gigaFLOPS)は、モデルがどの程度、計算処理が必要かの計算負荷が分かる。低いほど計算負荷が低いので軽いとなる。

AlexNet、VGG16 / VGG19、GoogLeNet

初期に使われていたモデル。

これらのモデルのAcc@1は、56〜72%程度となり、精度は低め。

MobileNetV2/V3、ShuffleNet、EfficientNet (B0〜B7)

軽量系でモバイルや組み込み系で使いやすいモデル。

67〜84%となり、EfficientNet-B7はAcc@5で97%と中々精度が高い。

ResNet (18〜152)、DenseNet、EfficientNetV2 (S/M/L)、ConvNeXt、RegNet / NFNet

高精度で認識精度のスコアが高いが、その分動作が少し重い。

70〜85%となり、EfficientNetV2の精度が高い。ResNet50は、Acc@1で80%ほどのようだ。ConvNeXtの方がほぼ同じ計算量でResNet50より少し精度がいい。

精度重視ならEfficientNetV2を使うのが良さそう。

モデル名

Acc@1

Acc@5

GFLOPS

EfficientNet_V2_M_Weights.IMAGENET1K_V1

85.112

97.156

24.58

EfficientNet_V2_S_Weights.IMAGENET1K_V1

84.228

96.878

8.37

ResNet152_Weights.IMAGENET1K_V2

82.284

96.002

11.51

ResNet50_Weights.IMAGENET1K_V2

80.858

95.434

4.09

ConvNeXt_Small_Weights.IMAGENET1K_V1

83.616

96.65

8.68

ConvNeXt_Tiny_Weights.IMAGENET1K_V1

82.52

96.146

4.46

物体検出モデル

mAPとFPSの数値を見てパフォーマンスを比較できる。

IoU、Precision、Recallについては下記のページが分かりやすかった。

https://note.com/kikaben/n/n89118eda52e6

  • mAP(mean Average Precision)推論精度を表す。この数値が大きいほど精度が高い。APの数値を平均したものだが、APはIoU、Precision、Recallが関係してくる。AP@.50やAP@.95などと表記されることもあるが、この.50や.95は、IoUのしきい値になる。AP@[.5:.95]のように表される場合もある。この場合、.50から.95の平均になる。
  • FPSは、推論速度を表す。この数値が大きいほど高速に推論できる。

Faster R-CNN

R-CNN系は、Fast R-CNNなど色々あるが、Faster R-CNNは精度向上と高速化されている。

画像内の領域からバウンディングボックスを検出し、その後に画像分類で物体を特定するという二段階処理を行っているので、速度は遅いが精度は高い。

YOLO

YOLOには色々なバージョンがある、2025年現在YOLOv1からYOLOv11まで出ている。YOLOv5、YOLOv8、YOLOv11は、Ultralytics社が開発している。YOLOXやDAMO-YOLOなど、色々派生形があり、ライセンス形態も違うので注意が必要。

画像内をグリッドに分割し、バウンディングボックスと分類を同時に行うことができるので非常に高速でリアルタイム処理もできる。精度はFaster R-CNNほどではないが、バージョンが上がるにつれて精度も上がっている模様。

SSD

こちらもYOLOと同じく一度の処理で、バウンディングボックスと分類を行うことができるので非常に高速にできる。小さい物体の検出にも強い。

ライセンスの問題をクリア出来るならYOLOが良さそう。YOLO > SSD > Faster R-CNNといった感じだ。

モデル名

mAP

FPS

Faster R-CNN

73.2

7

YOLOv2

78.6

40

SSD512

76.8

19

引用元:
https://qiita.com/tokkuman/items/3fabd04a1a524843bea5#%E3%83%A2%E3%83%87%E3%83%AB%E6%80%A7%E8%83%BD%E6%AF%94%E8%BC%83

https://pjreddie.com/darknet/yolo

セグメンテーションモデル

セグメンテーションはとりあえず触る予定はないので、ChatGPTで簡単に調べた。

モデル名

タスク

精度 (mIoU / AP)

処理速度 (FPS)

特徴

FCN

セマンティック

~62.2 (PASCAL VOC)

高速

最初期のセグメンテーションモデル

U-Net

セマンティック

~75.0 (医療データ等)

高速〜中速

医療分野で有名。少ないデータでも学習可能

DeepLabV3 / V3+

セマンティック

~79.3 (Cityscapes)

中速

空間ピラミッドプーリング(ASPP)使用

PSPNet

セマンティック

~78.6 (Cityscapes)

中速

グローバルコンテキスト利用

HRNet

セマンティック

~81.6 (Cityscapes)

低速

高精度。高解像度を維持しながら特徴抽出

Mask R-CNN

インスタンス

AP ~38.2 (COCO)

5–7 FPS

Faster R-CNNをベースにマスク出力追加

YOLACT / YOLACT++

インスタンス

AP ~29.8 (COCO)

~30 FPS

リアルタイムインスタンスセグメンテーション

BlendMask

インスタンス

AP ~39.7 (COCO)

中速

FPNベース。マスクの精度が高い

SOLO / SOLOv2

インスタンス

AP ~38.8〜42.2 (COCO)

20–30 FPS

グリッドベース。従来の2段階手法を廃止

CondInst

インスタンス

AP ~39.1 (COCO)

15–20 FPS

単段構造でMask R-CNNに匹敵する精度

Segment Anything (SAM)

セマンティック+自由切り取り

モデル依存(評価難)

低速

Meta開発の汎用セグメンテーション。プロンプト入力で自在に抽出可能

SegFormer

セマンティック

mIoU ~84.0 (ADE20K)

高速

軽量で高精度。Vision Transformerベース

Mask2Former

セマンティック+パン

mIoU ~57.8 / AP ~44.3 (COCO)

中速

高精度なセマンティック/パン/インスタンス統合モデル

DETR / DINO / Mask2Former+DINO

インスタンス+パン

AP ~50.5 (COCO)

遅い

Transformerベース。検出+セグメンテーション統合可能

姿勢推定モデル

姿勢推定はとりあえず触る予定はないので、ChatGPTで簡単にまとめのみ。

モデル名

フレームワーク

特徴 / 概要

COCO keypoints mAP (AP)

推論速度 (FPS)*

OpenPose

Caffe / PyTorch 変換可

初期の代表モデル。マルチパーソン対応、手・顔も可

~61.0

約5–15(GPU)

AlphaPose

PyTorch

高精度・高速なマルチパーソン姿勢推定。YOLOなどと組み合わせ可能

~72.3

約20–30(GPU)

HRNet (High-Resolution)

PyTorch

高解像度で空間情報保持、非常に高精度

~75.5

約10–15(GPU)

PoseNet

TensorFlow / TF.js

軽量。Webやスマホで動作可能なリアルタイムモデル

~50.0(単体)

30–60(スマホでも可)

BlazePose (MediaPipe)

MediaPipe (Google)

モバイル向け高速モデル。33個のランドマーク。顔・手対応も統合可能

~70.0(独自評価)

30–60(モバイル対応)

DETR + Keypoint

PyTorch (Transformers)

トランスフォーマベースの新しいアプローチ。まだ研究段階

70〜73(報告あり)

中程度(実装により変動)

ViTPose

PyTorch / Transformers

Vision Transformerベース、高精度(SOTA)

最大80.9(COCO)

遅め(サイズに依存)

コメント(0件)

コメントを投稿

コメントは承認後に公開されます。メールアドレスは公開されません。

関連記事