画像認識の機械学習をざっくり調べる
機械学習(Machine Learning)については、何度か軽く触った程度だったので、画像認識を使ってなにか作ってみようと思う。そんなわけで機械学習について、ざっくり調べてみた。
ちなみに昔やったことあったのは、ResNetを利用した画像分類でreCAPTCHAを自動解決させるというものや、Haar-like特徴分類器を利用してカレーを識別させるというもの。
思い返してみたら、カレーを検出させようとしてたのは13年前…。
画像認識の種類
画像認識とは、ざっくり言うと画像などから特徴量を抽出して対象物を検出する方法。

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が関係してくる。[email protected]や[email protected]などと表記されることもあるが、この.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://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) | 遅め(サイズに依存) |