Image Labelingとは:手法と動作原理

著者: IT Sectr 公開日: 2026-07-19 読了時間: 9 分

Image Labeling は、ニューラルネットワークが所定のクラスセットから画像にラベルを割り当てるコンピュータビジョンタスクです。単純なもの(猫、犬、車)から特定のもの(植物の種類、スマートフォンモデル、医用画像)まであります。モバイル開発では、Image Labelingはギャラリー内の写真の自動タグ付け、ユーザー生成コンテンツのモデレーション、写真によるビジュアル商品検索、ARアプリケーションに使用されます。Google ML Kit、2025によると、組み込み分類器は91%の精度(top-1)で1フレームあたり10~20ミリ秒で400以上のカテゴリを認識します。

重要なポイント

  • Image Labeling — 所定のクラスセットから画像にラベルを割り当てる
  • ML Kit — 400以上の組み込みラベル、10~20ミリ秒、91%のtop-1精度
  • Core ML — VisionとカスタムモデルによるiOSのネイティブ分類
  • カスタムモデル — TensorFlow、PyTorchによるトレーニング、TFLiteへの変換
  • オンデバイス — サーバーにデータを送信せず、すべての計算をローカルで実行

Image Labelingとは:分類の基礎

Image Labeling は画像分類のサブタイプで、モデルが画像を入力として受け取り、トレーニングセットの各クラスの確率を返します。物体検出とは異なり、Image Labelingは画像内のオブジェクトの位置を特定しません。存在するかどうかのみを判断します。画像セグメンテーションとは異なり、オブジェクトの輪郭を抽出しません。Image Labelingは「写真に何があるか?」という質問に答えるものであり、「写真のどこに何があるか?」ではありません。

分類器のアーキテクチャ:CNNバックボーン(MobileNet、ResNet、EfficientNet)が画像から特徴マップを抽出し、Global Average Poolingが空間次元を圧縮し、Softmax活性化関数を持つ全結合層(Dense)がクラス確率を出力します。MobileNetV2はモバイルデバイスで最も人気のあるバックボーンで、350万パラメータ、Pixel 6のGPUで0.5~2ミリ秒の推論を実現します。EfficientNet-Liteは精度とパラメータのバランスが優れた代替手段です。

Top-1とTop-5の精度:top-1 — モデルが主要クラスを正しく予測(ML Kitで91%)、top-5 — 正しいクラスが最も確率の高い5つに含まれる(ML Kitで98%)。本番アプリケーションではtop-5を使用し、ユーザーに複数のラベルオプションを表示します。コンテンツモデレーションでは、信頼度しきい値0.8以上でtop-1を使用します(偽陽性率を40%削減)。

アーキテクチャパラメータレイテンシTop-1サイズ
MobileNetV2350万0.5~2ミリ秒90.2%14 MB
MobileNetV3250万0.3~1.5ミリ秒91.5%10 MB
EfficientNet-Lite0470万1~3ミリ秒92.3%18 MB
ResNet-502560万10~30ミリ秒95.2%98 MB

オンデバイス vs クラウド:オンデバイス分類(ML Kit、Core ML)は1~20ミリ秒のレイテンシと完全なデータプライバシーを提供します。クラウドAPI(Google Cloud Vision、AWS Rekognition)は500~2000ミリ秒のレイテンシとリクエストごとのコストがかかりますが、大規模モデル(ViT、CLIP)により高精度(97~99%)です。リアルタイムアプリケーション(カメラ、AR)にはオンデバイスを選択します。複雑なシナリオ(医療、専門家分析)には、オンデバイスフォールバック付きのクラウドを使用します。

AndroidとiOSのML Kit Image Labeling

ML Kit Image Labeling は、Googleが提供するデバイス上の画像分類のためのすぐに使えるライブラリです。オンデバイス(無料、400以上のラベル、10~20ミリ秒)とクラウド(有料、10000以上のラベル、500ミリ秒以上)の2つのモードで利用できます。オンデバイスバージョンはINT8量子化を使用したMobileNetV3を採用し、ディスク容量は4 MBです。ML Kitは自動的に画像の向きを検出し、分類前にサイズを最適化します。

ML Kit API:InputImage(Bitmap、media.Image、filePathから)→ ImageLabeler → OnSuccessListener(ImageLabelのリスト:ラベル、信頼度、インデックス)。信頼度しきい値(デフォルト0.5)はラベルを返すための最小信頼度です。しきい値を0.7に上げると、フレームあたりのラベル数は減りますが、各ラベルの精度が向上します。コンテンツモデレーションでは、しきい値を0.8に設定します。

kotlin
val labeler = ImageLabeling.getClient(
    ImageLabelerOptions.DEFAULT_OPTIONS
)

labeler.process(inputImage)
    .addOnSuccessListener { labels ->
        labels
            .filter { it.confidence >= 0.7f }
            .forEach { label ->
                log("Label: ${label.label}")
                log("Confidence: ${label.confidence}")
            }
    }
    .addOnFailureListener { error -> handleError(error) }

iOSのML Kit:APIはAndroidと同様で、UIImageまたはCMSampleBufferを使用します。ML KitはA12+デバイスで自動的にCore ML + ANEを利用します。iOS 16+では、ML Kit Image LabelingはiPhone 15 Proで8~15ミリ秒のレイテンシを実現します。レイテンシを最小限に抑えるには、可能な限り小さい画像解像度(MobileNetの場合は224x224)を渡します。ML Kitが自動的にスケーリングしますが、大きな画像の変換には2~5ミリ秒のオーバーヘッドが追加されます。

iOSのCore MLとVision Framework

Core ML は、デバイス上でMLモデルを実行するためのAppleのフレームワークです。Vision Framework(VNCoreMLRequest)と組み合わせることで、最小限のコードで画像分類を実現できます。Appleは組み込みモデルを提供しています:SqueezeNet(5 MB、80.5% top-1)、ResNet50(98 MB、95.2%)、MobileNetV2(14 MB、90.2%)。.mlmodelまたは.mlpackage形式のモデルは、coremltoolsを介してTensorFlowまたはPyTorchから変換されます。

VNCoreMLRequest は、画像の前処理(スケーリング、クロップトゥフィル、色空間変換)を処理し、結果をモデルに渡すVision APIです。Visionはidentifier(クラス名)とconfidence(0..1)を含むVNClassificationObservationを返します。MaxCandidatesは返されるラベルの最大数(デフォルト1)です。自動選択分類には、imageCropAndScaleOption = .centerCropを指定したVNCoreMLRequestを使用します。

swift
guard let model = try? VNCoreMLModel(for: MobileNetV2().model) else { return }
let request = VNCoreMLRequest(model: model) { request, _ in
    guard let results = request.results as? [VNClassificationObservation] else { return }
    results.prefix(5).forEach { obs in
        print("ラベル: \(obs.identifier)、信頼度: \(obs.confidence)")
    }
}
request.imageCropAndScaleOption = .centerCrop

let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try handler.perform([request])

iOSにおけるCore ML vs ML Kit:Core MLはネイティブで、追加のSDKを必要とせず、ANE(Apple Neural Engine)に最適化されています。ML KitはGoogleのモデルにより複雑なシーンで高精度です。Core MLは任意のモデル(coremltoolsで変換)をサポートしますが、ML Kitは独自のモデルのみをサポートします。迅速な実装にはML Kit、最大限のモデル制御にはCore MLを使用します。実用的なアプローチ:1つのアプリで両方のフレームワークを使用し、標準ラベルにはML Kit、カスタムラベルにはCore MLを使用します。

カスタムモデルのトレーニングと統合

カスタムImage Labelingモデル — 特定のタスク向けに独自の分類器をトレーニング:果物の品質認識、生産ラインの欠陥検出、犬種の分類。プロセスには、データセットの収集(クラスあたり1000枚以上の画像)、アノテーション、事前トレーニング済みMobileNetV2またはEfficientNetでの転移学習によるトレーニング、TFLite / Core MLへの変換が含まれます。

転移学習 — モバイル分類器をトレーニングする主要な方法です。ImageNetで事前トレーニングされたモデルを取得し、下位層(CNNバックボーン)を凍結して、上位層を再トレーニングします(ファインチューニング)。これにはクラスあたりわずか100~500枚の画像が必要で、Google Colab(GPU)で1~2時間かかります。ライブラリ:TensorFlow Keras(Android)、PyTorch + coremltools(iOS)。結果:ターゲットクラスで95~98%の精度。

kotlin
// TFLiteカスタムモデルの推論
val interpreter = Interpreter(loadModelFile(context))
val inputImage = TensorImage.fromBitmap(bitmap)
    .apply { load(Bitmap.createScaledBitmap(bitmap, 224, 224, true)) }

val output = Array(1) { FloatArray(NUM_CLASSES) }
interpreter.run(inputImage.tensorBuffer, output)

val probabilities = TensorLabel.mapIndexToLabels(output[0])
val topClass = probabilities.maxByOrNull { it.value }

ML Kit Custom Model API — 代替手段:TFLite Interpreterのコードを記述する必要はありません。ML Kitがモデルをロードし、前処理を自動的に処理します。カスタムImage Labelerは、入力サイズ224x224x3、出力スコアfloat[NUM_CLASSES]のTFLiteモデルを受け入れます。モデルファイルを提供するだけで標準ラベルが取得できます。モデルがTFLite形式に対応している場合は、ML Kit Custom Model APIが推奨されます。推論をより細かく制御する必要がある場合(クラスごとのしきい値)は、TFLite Interpreterを直接使用します。

TFLiteとCore ML:形式の比較

TFLite(TensorFlow Lite) は、モバイルおよびエッジデバイス向けのGoogleのモデル形式です。量子化(FP16、INT8)に対応しており、モデルサイズを4分の1に削減し、速度を2~3倍向上させます(精度低下は1~2%)。TFLiteはAndroidではGPUデリゲート(OpenGL/OpenCL)、iOSではCore MLデリゲートを介して動作します。TFLite Task APIは、Image Classifier、Object Detectorなどのタスクに統一されたインターフェースを提供します。

Core ML はAppleの形式です(.mlpackage — 新形式、.mlmodel — 旧形式)。量子化(FP16)と重みパレット化(1/2/4/6/8ビットまで)に対応し、最大80%のモデル圧縮を実現します。Core MLはANE(Neural Engine)、GPU、CPUを使用し、システムが最適なエンジンを自動選択します。PyTorchからの変換はtorch.onnx.export + coremltools、TensorFlowからの変換はtf-keras + coremltoolsを使用します。iOS 18+はCore ML Training APIによるオンデバイストレーニングをサポートしています。

特性TFLiteCore ML
サイズ(MobileNetV2)14 MB(FP32)/ 3.5 MB(INT8)14 MB(FP16)/ 2.8 MB(4ビット)
推論エンジンGPU / NNAPI / XNNPACKANE / GPU / CPU(自動)
量子化FP16、INT8、DynamicRangeFP16、パレット化(1~8ビット)
iOSパフォーマンスCore MLデリゲート(2~5ミリ秒)ネイティブANE(1~3ミリ秒)
ツールTFLite Model Maker、Task APIcoremltools、Create ML

中間形式としてのONNX:モデルをONNX(PyTorch → ONNX、TensorFlow → ONNX)に変換し、onnx2tfまたはonnx2coremlを介してTFLite / Core MLに変換します。ONNXは70以上のフレームワークでサポートされる統一形式です。これによりパイプラインが簡素化されます:1つのトレーニング済みモデル → ONNX → 両プラットフォームのネイティブ形式。クロスプラットフォームプロジェクトでは、PyTorchでのトレーニング + ONNXへの変換 → TFLite(Android)/ Core ML(iOS)が推奨パイプラインです。

モバイルアプリにおけるImage Labelingの応用

写真の自動タグ付け — ギャラリーアプリ(Googleフォト、Appleフォト)が画像に自動的に「ビーチ」「夕日」「犬」「食べ物」などのラベルを割り当てます。ML Kit Image Labelingはバックグラウンドでギャラリーの各写真を処理します(100枚の写真で1~2秒、バッチ処理)。ユーザーは手動で整理しなくてもラベルで検索できます。Googleフォトは、複雑なシーンに対してオンデバイス分類とその後のサーバー検証を併用しています。

コンテンツモデレーション — ユーザー生成コンテンツ(ソーシャルネットワーク、マーケットプレイス、UGCプラットフォーム)における不適切な画像の自動検出。ML Kit Custom Modelは92~96%の精度で不適切コンテンツ、暴力、プロパガンダを検出します。トリガーしきい値は信頼度0.8です。誤検出(正当な医用画像)を減らすには、分類器の委員会(Image Labeling + Object Detection + Blur Detection)を使用します。オンデバイスモデレーションは高速で、ユーザープライバシーを保護します。

ビジュアル商品検索 — ユーザーが商品(スニーカー、バッグ、家具)を撮影すると、アプリがラベルを特定し、カタログから類似商品を見つけます。Image Labelingで検索をカテゴリに絞り込み、特徴記述子(特徴ベクトル)で視覚的に類似したアイテムを見つけます。Pinterest Lens、Google Lens、Amazon StyleSnapはこのアプローチを採用しています。オンデバイス分類は10~30ミリ秒で結果を返し、クラウド検索は200~500ミリ秒です。

swift
// ビジュアル検索のためのCore MLとのImage Labeling
let request = VNCoreMLRequest(model: productClassifier) { req, _ in
    guard let result = req.results?.first as? VNClassificationObservation,
          result.confidence > 0.6 else { return }
    SearchService.findSimilarProducts(
        category: result.identifier,
        image: capturedPhoto,
        limit: 10
    ) { products in
        DispatchQueue.main.async {
            self.showResults(products)
        }
    }
}

ARおよび教育アプリ — Image Labelingがカメラを通じてリアルタイムでオブジェクトを分類します。ユーザーが植物に電話をかざすと、アプリが名前、手入れ方法、水やりのスケジュールを表示します。機械部品にかざすと、その目的を説明します。要件:レイテンシ30ミリ秒未満。フラッグシップデバイスのEfficientNet-Liteは15~25ミリ秒を実現します。低照度では精度が低下するため、適応型信頼度しきい値を使用します(低照度ではしきい値を下げて、入力品質の低下を補います)。

よくある質問

Image LabelingとObject Detectionの違いは何ですか?

Image Labeling は画像内にどのオブジェクトが存在するかを判断しますが、その位置は示しません。Object Detectionはオブジェクトを見つけて、それぞれのバウンディングボックスを返します。Image Labelingは高速(1~20ミリ秒 vs 20~100ミリ秒)で、必要なトレーニングデータも少なくて済みますが、位置情報は提供しません。単純な分類(猫/犬)にはImage Labelingを、特定の認識(オブジェクトの数と位置)にはObject Detectionを使用します。

デバイス上のImage Labelingにインターネット接続は必要ですか?

いいえ、ML Kit Image Labelingは完全にデバイス上で動作します。モデルは初回起動時にダウンロードされ(ダウンロードモード — 4 MB)、ローカルに保存されます。Core MLモデルはアプリにバンドルされています。TFLiteカスタムモデルはAPKの一部です。すべての計算はデバイス上で実行され、サーバーにデータが送信されることはありません。これによりユーザープライバシーとオフライン機能が保証されます。クラウド分類(Google Cloud Vision)はインターネットが必要で、より高精度な代替手段です。

カスタムモデルのトレーニングには何枚の画像が必要ですか?

MobileNetV2での転移学習の場合:クラスあたり最低50~100枚、最適300~500枚です。多様性(角度、照明、背景)が高いほど精度が向上します。ゼロからのトレーニング(事前トレーニング済みモデルなし)には、クラスあたり最低1000枚の画像が必要です。推奨:クラスあたり200枚から始め、精度を評価し、低精度のクラスにデータを追加します。データ拡張(回転、スケーリング、シフト)により、新しいデータを収集せずに実効データセットを3~5倍に増やせます。

Image Labeling用のTFLiteモデルのサイズを削減するには?

主な方法:トレーニング後のINT8量子化 — 1~2%の精度低下でサイズを4分の1に削減。プルーニング(重要でない重みの除去) — 最大50%の圧縮。蒸留(大規模な教師モデルの出力でトレーニングされた小規模な生徒モデル) — 最大80%の圧縮。MobileNetV2 INT8は3.5 MB、SqueezeNetは5 MBを占めます。ターゲットサイズは、プログレスインジケーターなしで瞬時に読み込めるよう10 MB以下を目指します。

ML Kit Image Labeling v2の精度はどのくらいですか?

ML Kit Image Labeling v2は、Googleのテストセット(400以上のクラス)で91%のtop-1精度を示しています。Top-5精度は98%です。標準的でない角度や照明条件では、精度が75~85%に低下する可能性があります。本番環境では、低品質な予測を安定してフィルタリングするために、信頼度しきい値0.7の使用が推奨されます。精度が不十分な場合は、特定のデータセットでトレーニングされたカスタムモデルを使用します:ターゲットクラスで95~98%の精度。

まとめ

  • Image Labeling — 固定セットからラベルを割り当てる画像分類
  • ML Kit Image Labeling — 400以上のラベル、10~20ミリ秒のレイテンシ、デバイス上で91%の精度
  • Core ML + Vision — ANEアクセラレーションとカスタムモデルを備えたネイティブiOSアプローチ
  • 転移学習 — クラスあたり100~500枚の画像、Google Colabで1~2時間のトレーニング
  • TFLite / Core ML — 量子化によるサイズ削減に対応した2つの主要形式
  • オンデバイス — プライバシー、ゼロレイテンシ、インターネット不要
  • 応用 — 写真タグ付け、コンテンツモデレーション、AR、ビジュアル商品検索

ターンキー方式のモバイルアプリケーションを開発します

IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。

プロジェクトについて相談

こちらもお読みください