Image Labeling — это задача компьютерного зрения, в которой нейросеть присваивает изображению метки из предопределённого набора классов: от простых (кошка, собака, машина) до специфичных (вид растения, модель смартфона, медицинский снимок). В мобильной разработке Image Labeling применяется для авто-тегирования фотографий в галерее, модерации пользовательского контента, визуального поиска товаров по фото и AR-приложений. По данным Google ML Kit, 2025, встроенный классификатор распознаёт 400+ категорий за 10–20 мс на кадр с точностью 91% (top-1).
Главное
Image Labeling — подвид классификации изображений, где модель принимает на вход изображение и возвращает вероятности для каждого класса из обучающей выборки. В отличие от object detection, Image Labeling не определяет положение объекта на изображении — только его наличие или отсутствие. В отличие от image segmentation, не выделяет контур объекта. Image Labeling решает задачу «что на фото?», а не «где и что на фото?».
Архитектура классификатора: CNN backbone (MobileNet, ResNet, EfficientNet) извлекает feature map из изображения, Global Average Pooling свёртывает пространственные размерности, полносвязный слой (Dense) с Softmax активацией выдаёт вероятности классов. MobileNetV2 — самый популярный backbone для мобильных устройств: 3.5M параметров, 0.5–2 ms inference на Pixel 6 через GPU. EfficientNet-Lite — альтернатива с лучшим accuracy/параметры ratio.
Top-1 vs Top-5 accuracy: top-1 — модель правильно угадала основной класс (91% у ML Kit); top-5 — правильный класс входит в пятёрку самых вероятных (98% у ML Kit). Для production-приложений используйте top-5 и показывайте пользователю несколько вариантов меток. Для модерации контента — top-1 с порогом confidence >= 0.8 (снижает false positive rate на 40%).
| Архитектура | Параметры | Latency | Top-1 | Размер |
|---|---|---|---|---|
| MobileNetV2 | 3.5M | 0.5–2 ms | 90.2% | 14 MB |
| MobileNetV3 | 2.5M | 0.3–1.5 ms | 91.5% | 10 MB |
| EfficientNet-Lite0 | 4.7M | 1–3 ms | 92.3% | 18 MB |
| ResNet-50 | 25.6M | 10–30 ms | 95.2% | 98 MB |
On-device vs Cloud: on-device классификация (ML Kit, Core ML) даёт latency 1–20 ms с полной приватностью данных. Cloud API (Google Cloud Vision, AWS Rekognition) — latency 500–2000 ms + стоимость за запрос, но точнее (97–99%) за счёт больших моделей (ViT, CLIP). Для real-time приложений (камера, AR) выбирайте on-device. Для сложных сценариев (медицина, экспертиза) — cloud с fallback на on-device.
ML Kit Image Labeling — готовая библиотека от Google для классификации изображений на устройстве. Доступна в двух режимах: on-device (бесплатно, 400+ меток, 10–20 мс) и cloud (платно, 10000+ меток, 500+ мс). On-device версия использует MobileNetV3 + INT8 квантование, занимает 4 MB на диске. ML Kit автоматически определяет ориентацию изображения и оптимизирует размер перед классификацией.
API ML Kit: InputImage (из Bitmap, media.Image, filePath) → ImageLabeler → OnSuccessListener со списком ImageLabel (label, confidence, index). MillisThreshold (по умолчанию 0.5) — минимальная уверенность для возврата метки. Повышение порога до 0.7 уменьшает количество меток на кадр, но повышает точность каждой. Для модерации контента установите порог 0.8.
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 мс latency на iPhone 15 Pro. Для минимизации задержки передавайте изображение минимально возможного разрешения (224x224 для MobileNet) — ML Kit сам масштабирует, но конвертация больших изображений добавляет 2–5 мс overhead.
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, color space conversion) и передаёт результат модели. Vision возвращает VNClassificationObservation с identifier (название класса) и confidence (0..1). MaxCandidates — максимальное количество возвращаемых меток (по умолчанию 1). Для классификации с автоподбором используйте VNCoreMLRequest с imageCropAndScaleOption = .centerCrop.
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("Label: \(obs.identifier), Confidence: \(obs.confidence)")
}
}
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 на целевых классах.
// TFLite custom model inference
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 модель с входом size 224x224x3 и выходом score float[NUM_CLASSES]. Достаточно передать модели файл и получить стандартные метки. ML Kit Custom Model API рекомендован, если модель соответствует формату TFLite. Если требуется более тонкий контроль над inference (грейферы, threshold per class) — используйте TFLite Interpreter напрямую.
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.
| Характеристика | TFLite | Core ML |
|---|---|---|
| Размер (MobileNetV2) | 14 MB (FP32) / 3.5 MB (INT8) | 14 MB (FP16) / 2.8 MB (4-bit) |
| Inference Engine | GPU / NNAPI / XNNPACK | ANE / GPU / CPU (auto) |
| Квантование | FP16, INT8, DynamicRange | FP16, Palettization (1-8 bit) |
| iOS Performance | Core ML Delegate (2–5 ms) | Native ANE (1–3 ms) |
| Инструменты | TFLite Model Maker, Task API | coremltools, Create ML |
ONNX как промежуточный формат: конвертируйте модели в ONNX (PyTorch → ONNX, TensorFlow → ONNX) и затем в TFLite / Core ML через onnx2tf или onnx2coreml. ONNX — единый формат, поддерживаемый 70+ фреймворками. Это упрощает пайплайн: одна обученная модель → ONNX → нативные форматы для обеих платформ. Обучение в PyTorch + конвертация в ONNX → TFLite (Android) / Core ML (iOS) — рекомендуемый пайплайн для кроссплатформенных проектов.
Авто-тегирование фотографий — галерейные приложения (Google Фото, Apple Photos) автоматически присваивают метки изображениям: «пляж», «закат», «собака», «еда». ML Kit Image Labeling обрабатывает каждое фото из галереи в фоне — 1–2 секунды на 100 фото (batch). Пользователь получает поиск по меткам без ручной сортировки. Google Фото использует on-device классификацию с последующей серверной верификацией для сложных сцен.
Модерация контента — автоматическое определение нежелательных изображений в пользовательском контенте (соцсети, маркетплейсы, UGC-платформы). ML Kit Custom Model детектирует NSFW-контент, насилие, пропаганду с точностью 92–96%. Порог срабатывания — confidence 0.8. Для снижения false positives (легальные медицинские изображения) используйте комитет классификаторов: Image Labeling + Object Detection + Blur Detection. On-device модерация быстрее и защищает приватность пользователей.
Визуальный поиск товаров — пользователь фотографирует товар (кроссовки, сумка, мебель), приложение определяет метку и находит похожие товары в каталоге. Image Labeling сужает поиск до категории, затем дескрипторы признаков (feature vectors) находят визуально похожие экземпляры. Pinterest Lens, Google Lens, Amazon StyleSnap используют этот подход. On-device классификация даёт результат за 10–30 мс, cloud — поиск по базе товаров за 200–500 мс.
// 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 классифицирует объекты в реальном времени через камеру. Пользователь наводит телефон на растение — приложение показывает название, уход, полив. Наводит на деталь механизма — подсказывает назначение. Требование: latency < 30 мс. EfficientNet-Lite на Flagship-устройствах даёт 15–25 мс. При слабом освещении точность падает — используйте автоматический порог confidence (снижайте порог при low-light, чтобы компенсировать падение качества входа).
Часто задаваемые вопросы
Image Labeling определяет, какие объекты присутствуют на изображении, но не указывает их расположение. Object Detection — находит объекты и возвращает bounding box каждого. Image Labeling быстрее (1–20 ms vs 20–100 ms), требует меньше данных для обучения, но не даёт позиционной информации. Для простой классификации (кошка/собака) — Image Labeling. Для прицельного распознавания (сколько объектов, где находятся) — Object Detection.
Нет, ML Kit Image Labeling работает полностью on-device. Модель загружается при первом запуске (downloaded mode — 4 MB) и сохраняется локально. Core ML модели загружаются вместе с приложением. TFLite Custom Model — часть APK. Все вычисления выполняются на устройстве, данные не отправляются на сервер. Это гарантирует приватность пользователя и работу без интернета. Cloud-классификация (Google Cloud Vision) — альтернатива с интернетом и более высокой точностью.
Для transfer learning на MobileNetV2: минимум 50–100 изображений на класс, оптимально 300–500. Чем больше вариативность (ракурсы, освещение, фон), тем выше точность. Для обучения с нуля (без предобученной модели) требуется минимум 1000 изображений на класс. Рекомендация: начните с 200 изображений на класс, оцените accuracy, добавляйте данные для низкоточных классов. Data augmentation (повороты, масштаб, сдвиг) увеличивает эффективный датасет в 3–5x без сбора новых данных.
Основные методы: INT8 квантование после обучения (post-training quantization) — уменьшает размер в 4x с потерей 1–2% accuracy; pruning (отбрасывание малозначимых весов) — до 50% сжатия; distillation (меньшая student-модель, обученная на выходах большой teacher-модели) — до 80% сжатия. MobileNetV2 INT8 занимает 3.5 MB, SqueezeNet — 5 MB. Целевой размер — не более 10 MB для моментальной загрузки без индикатора прогресса.
ML Kit Image Labeling v2 показывает top-1 accuracy 91% на тестовом наборе Google (400+ классов). Top-5 accuracy — 98%. На нестандартных ракурсах и условиях освещения точность может снижаться до 75–85%. Для production рекомендуется использовать confidence threshold 0.7 для стабильной фильтрации низкокачественных предсказаний. Если точность недостаточна — используйте кастомную модель, обученную на специфичном датасете: accuracy 95–98% на целевых классах.
Итоги
Мы разработаем мобильное приложение под ключ
IT Sectr создаёт приложения для iOS и Android для стартапов и бизнеса с 2017 года. Мы проконсультируем вас и предложим наилучшее решение.
Читайте также