Image Labeling: какво е, методи и принцип на работа

Автор: IT Sectr Публикувано: 2026-07-19 Време за четене: 9 мин

Image Labeling — е задача на компютърното зрение, при която невронната мрежа присвоява на изображението етикети от предварително дефиниран набор от класове: от прости (котка, куче, кола) до специфични (вид растение, модел смартфон, медицински образ). В мобилното разработване Image Labeling се използва за автоматично тагване на снимки в галерията, модериране на потребителско съдържание, визуално търсене на продукти по снимка и AR приложения. Според Google ML Kit, 2025, вграденият класификатор разпознава 400+ категории за 10–20 ms на кадър с точност 91% (top-1).

Основни точки

  • Image Labeling — присвояване на етикети на изображение от предварително дефиниран набор от класове
  • ML Kit — 400+ вградени етикета, 10–20 ms, 91% top-1 accuracy
  • Core ML — естествена класификация на iOS чрез Vision + custom models
  • Персонализирани модели — обучение чрез TensorFlow, PyTorch, конвертиране в TFLite
  • On-device — всички изчисления локално, без изпращане на данни към сървър

Какво е Image Labeling: основи на класификацията

Image Labeling — подкатегория на класификация на изображения, при която моделът приема изображение и връща вероятности за всеки клас от обучителния набор. За разлика от object detection, Image Labeling не определя позицията на обекта в изображението — само неговото присъствие или отсъствие. За разлика от image segmentation, не отделя контура на обекта. Image Labeling отговаря на въпроса “какво има на снимката?”, а не “къде и какво има на снимката?”.

Архитектура на класификатора: CNN backbone (MobileNet, ResNet, EfficientNet) извлича карта на характеристиките от изображението, Global Average Pooling свива пространствените измерения, напълно свързан слой (Dense) с активация Softmax извежда вероятностите на класовете. MobileNetV2 — най-популярният backbone за мобилни устройства: 3,5M параметри, 0,5–2 ms инференция на Pixel 6 чрез GPU. EfficientNet-Lite — алтернатива с по-добро съотношение accuracy/параметри.

Top-1 vs Top-5 accuracy: top-1 — моделът правилно позна основния клас (91% за ML Kit); top-5 — правилният клас е в първите пет най-вероятни (98% за ML Kit). За производствени приложения използвайте top-5 и покажете на потребителя няколко варианта на етикети. За модериране на съдържание — top-1 с праг confidence >= 0,8 (намалява процента на фалшиво положителните с 40%).

АрхитектураПараметриЛатентностTop-1Размер
MobileNetV23,5M0,5–2 ms90,2%14 MB
MobileNetV32,5M0,3–1,5 ms91,5%10 MB
EfficientNet-Lite04,7M1–3 ms92,3%18 MB
ResNet-5025,6M10–30 ms95,2%98 MB

On-device vs Cloud: класификацията на устройството (ML Kit, Core ML) дава латентност 1–20 ms с пълна поверителност на данните. Cloud API (Google Cloud Vision, AWS Rekognition) — латентност 500–2000 ms + цена на заявка, но по-точна (97–99%) благодарение на по-големи модели (ViT, CLIP). За приложения в реално време (камера, AR) изберете on-device. За сложни сценарии (медицина, експертиза) — cloud с fallback към on-device.

ML Kit Image Labeling на Android и iOS

ML Kit Image Labeling — готова библиотека от Google за класификация на изображения на устройството. Достъпна в два режима: on-device (безплатно, 400+ етикета, 10–20 ms) и cloud (платено, 10000+ етикета, 500+ ms). On-device версията използва MobileNetV3 + INT8 квантуване, заема 4 MB на диска. ML Kit автоматично определя ориентацията на изображението и оптимизира размера преди класификация.

ML Kit API: InputImage (от Bitmap, media.Image, filePath) → ImageLabeler → OnSuccessListener със списък на ImageLabel (label, confidence, index). MillisThreshold (по подразбиране 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) }

ML Kit на iOS: API подобен на Android, използва UIImage или CMSampleBuffer. ML Kit автоматично използва Core ML + ANE на устройства A12+. За iOS 16+, ML Kit Image Labeling дава латентност 8–15 ms на iPhone 15 Pro. За минимална латентност изпратете изображението с възможно най-ниската резолюция (224x224 за MobileNet) — ML Kit сам мащабира, но конвертирането на големи изображения добавя 2–5 ms допълнително натоварване.

Core ML и Vision Framework на iOS

Core ML — рамката на Apple за стартиране на ML модели на устройството. Заедно с Vision Framework (VNCoreMLRequest), Core ML позволява класификация на изображения с минимален код. 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, който поема предварителната обработка на изображението (мащабиране, crop-to-fill, конвертиране на цветово пространство) и предава резултата на модела. Vision връща VNClassificationObservation с identifier (име на клас) и confidence (0..1). MaxCandidates — максимален брой върнати етикети (по подразбиране 1). За класификация с автоматичен избор използвайте VNCoreMLRequest с imageCropAndScaleOption = .centerCrop.

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("TFLite персонализиран модел инференция")
    }
}
request.imageCropAndScaleOption = .centerCrop

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

Core ML vs ML Kit на iOS: Core ML — естествен, не изисква допълнителни SDK, по-добре оптимизиран за ANE (невронен двигател на Apple). ML Kit — по-точен на сложни сцени благодарение на моделите на Google. Core ML поддържа всякакви модели (конвертирани чрез coremltools), ML Kit — само своите. За бързо внедряване — ML Kit. За максимален контрол над модела — Core ML. Практически избор: и двете рамки в едно приложение — ML Kit за стандартни етикети, Core ML за персонализирани.

Обучение и интеграция на персонализирани модели

Персонализирани Image Labeling модели — обучение на собствен класификатор за специфична задача: разпознаване на качеството на плодове, откриване на дефекти на производствената линия, класификация на породи кучета. Процесът включва събиране на набор от данни (1000+ изображения на клас), анотиране, обучение чрез transfer learning на предварително обучен MobileNetV2 или EfficientNet и конвертиране в TFLite / Core ML.

Transfer Learning — основният метод за обучение на мобилни класификатори. Взема се модел, предварително обучен на ImageNet, долните слоеве (CNN backbone) се замразяват, горните слоеве (Fine-tuning) се преобучават. Това изисква само 100–500 изображения на клас и отнема 1–2 часа в Google Colab (GPU). Библиотеки: TensorFlow Keras (Android), PyTorch + coremltools (iOS). Резултат: 95–98% accuracy на целевите класове.

kotlin
// Image Labeling с Core ML за визуално търсене
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 сам зарежда модела и управлява предварителната обработка. Custom Image Labeler приема TFLite модел с входен размер 224x224x3 и изход score float[NUM_CLASSES]. Достатъчно е да предадете файла на модела и да получите стандартни етикети. ML Kit Custom Model API се препоръчва, ако моделът отговаря на формата TFLite. Ако е необходим по-фин контрол върху инференцията (прагове, threshold per class) — използвайте директно TFLite Interpreter.

TFLite и Core ML: сравнение на формати

TFLite (TensorFlow Lite) — формат на моделите на Google за мобилни и edge устройства. Поддържа квантуване (FP16, INT8), което намалява размера на модела 4 пъти и увеличава скоростта 2–3x за сметка на малка загуба на точност (1–2%). TFLite работи на Android чрез GPU Delegate (OpenGL/OpenCL), на iOS — чрез Core ML Delegate. TFLite Task API предоставя унифициран интерфейс за Image Classifier, Object Detector и други задачи.

Core ML — формат на Apple (.mlpackage — нов, .mlmodel — стар). Поддържа квантуване (FP16), палетизация на тегла (weight palettization до 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-bit)
Двигател за инференцияGPU / NNAPI / XNNPACKANE / GPU / CPU (auto)
КвантуванеFP16, INT8, DynamicRangeFP16, Palettization (1-8 bit)
iOS производителностCore ML Delegate (2–5 ms)Естествен ANE (1–3 ms)
ИнструментиTFLite Model Maker, Task APIcoremltools, Create ML

ONNX като междинен формат: конвертирайте моделите в ONNX (PyTorch → ONNX, TensorFlow → ONNX) и след това в TFLite / Core ML чрез onnx2tf или onnx2coreml. ONNX е унифициран формат, поддържан от 70+ рамки. Това опростява pipeline: един обучен модел → ONNX → естествени формати за двете платформи. Обучение в PyTorch + конвертиране в ONNX → TFLite (Android) / Core ML (iOS) — препоръчителният pipeline за мултиплатформени проекти.

Приложение на Image Labeling в приложения

Автоматично тагване на снимки — галерийни приложения (Google Photos, Apple Photos) автоматично присвояват етикети на изображения: “плаж”, “залез”, “куче”, “храна”. ML Kit Image Labeling обработва всяка снимка от галерията на заден план — 1–2 секунди за 100 снимки (batch). Потребителят получава търсене по етикети без ръчно сортиране. Google Photos използва класификация на устройството с последваща сървърна проверка за сложни сцени.

Модериране на съдържание — автоматично откриване на нежелани изображения в потребителско съдържание (социални мрежи, маркетплейси, UGC платформи). ML Kit Custom Model открива NSFW съдържание, насилие, пропаганда с точност 92–96%. Праг на активиране — confidence 0,8. За намаляване на фалшиво положителните (легитимни медицински изображения) използвайте комитет от класификатори: Image Labeling + Object Detection + Blur Detection. Модерирането на устройството е по-бързо и защитава поверителността на потребителите.

Визуално търсене на продукти — потребителят снима продукт (обувки, чанта, мебел), приложението определя етикета и намира подобни продукти в каталога. Image Labeling стеснява търсенето до категория, след това дескрипторите на характеристики (feature vectors) намират визуално подобни екземпляри. Pinterest Lens, Google Lens, Amazon StyleSnap използват този подход. Класификацията на устройството дава резултат за 10–30 ms, cloud — търсене в базата данни с продукти за 200–500 ms.

swift
// Image Labeling with Core ML for visual search
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 ms. EfficientNet-Lite на водещи устройства дава 15–25 ms. При слаба осветеност точността намалява — използвайте автоматичен праг на confidence (намалете прага при слаба светлина, за да компенсирате спада на качеството на входа).

Често задавани въпроси

По какво се различава Image Labeling от Object Detection?

Image Labeling определя кои обекти присъстват в изображението, но не посочва тяхното местоположение. Object Detection — намира обекти и връща bounding box на всеки от тях. Image Labeling е по-бърз (1–20 ms vs 20–100 ms), изисква по-малко данни за обучение, но не дава позиционна информация. За проста класификация (котка/куче) — Image Labeling. За точно разпознаване (колко обекта, къде се намират) — Object Detection.

Необходим ли е интернет за Image Labeling на устройството?

Не, ML Kit Image Labeling работи изцяло на устройството. Моделът се зарежда при първото стартиране (режим на изтегляне — 4 MB) и се съхранява локално. Core ML моделите се зареждат заедно с приложението. TFLite Custom Model — част от APK. Всички изчисления се извършват на устройството, данните не се изпращат на сървъра. Това гарантира поверителността на потребителя и работа без интернет. Класификацията в облак (Google Cloud Vision) — алтернатива с интернет и по-висока точност.

Колко изображения са необходими за обучение на персонализиран модел?

За transfer learning на MobileNetV2: минимум 50–100 изображения на клас, оптимално 300–500. Колкото по-голяма е вариативността (ъгли, осветление, фон), толкова по-висока е точността. За обучение от нулата (без предварително обучен модел) са необходими минимум 1000 изображения на клас. Препоръка: започнете с 200 изображения на клас, оценете accuracy, добавете данни за класове с ниска точност. Data augmentation (завъртания, мащаб, изместване) увеличава ефективния набор от данни 3–5x без събиране на нови данни.

Как да намалим размера на TFLite модела за Image Labeling?

Основните методи: INT8 квантуване след обучение (post-training quantization) — намалява размера 4x със загуба на 1–2% accuracy; pruning (отхвърляне на по-малко значими тегла) — до 50% компресия; distillation (по-малък ученически модел, обучен на изходите на голям учителски модел) — до 80% компресия. MobileNetV2 INT8 заема 3,5 MB, SqueezeNet — 5 MB. Целеви размер — не повече от 10 MB за моментално зареждане без индикатор за напредък.

Каква е точността на ML Kit Image Labeling v2?

ML Kit Image Labeling v2 показва top-1 accuracy 91% на тестовия набор на Google (400+ класа). Top-5 accuracy — 98%. При нестандартни ъгли и условия на осветление точността може да падне до 75–85%. За производство се препоръчва използването на праг на confidence 0,7 за стабилно филтриране на нискокачествени прогнози. Ако точността е недостатъчна — използвайте персонализиран модел, обучен на специфичен набор от данни: accuracy 95–98% на целевите класове.

Резюме

  • Image Labeling — класификация на изображения с присвояване на етикети от фиксиран набор
  • ML Kit Image Labeling — 400+ етикета, латентност 10–20 ms, 91% accuracy на устройството
  • Core ML + Vision — естествен iOS подход с ANE ускорение и персонализирани модели
  • Transfer Learning — 100–500 изображения на клас, 1–2 часа обучение в Google Colab
  • TFLite / Core ML — два основни формата с квантуване за намаляване на размера
  • On-device — поверителност, нулева латентност, без интернет
  • Приложения — тагване на снимки, модериране на съдържание, AR, визуално търсене на продукти

Ще разработим мобилно приложение под ключ

IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.

Обсъдете проекта

Прочетете също