Практичний посібник: система класифікації зображень з macro-F1 > 0.95
Ви запускаєте на production модель для каталогу товарів — і отримуєте macro-F1 = 0.72 через сильний дисбаланс класів. Нещодавно до нас звернувся e-commerce проєкт із датасетом 15 000 зображень, 30 категорій, де 80% картинок належали до п'яти категорій. Ми застосували комбінацію Weighted Random Sampler та Focal Loss, що підняло macro-F1 з 0.72 до 0.94 за два тижні. Ключовий виклик не в самій моделі (стандартні бенчмарки пройдено), а в адаптації під специфічний домен: шум у розмітці, варіації освітлення, неповні дані. Focal Loss підвищує macro-F1 в 1.3 рази порівняно з CrossEntropy. Ми використовуємо крос-валідацію та баєсову оптимізацію гіперпараметрів для підвищення точності, а регуляризація Dropout та Weight Decay запобігають перенавчанню.
Ми маємо 6+ років досвіду в комп'ютерному зорі, виконали понад 50 проєктів класифікації зображень. Оцінимо ваш проєкт безкоштовно — надішліть опис задачі. Працюємо під ключ: від аналізу до деплою. Fine-tuning дає приріст точності в 5 разів швидше, ніж навчання з нуля (див. Transfer Learning).
Ми також зіткнулися з проєктом із медичної діагностики, де потрібно було виявляти рідкісні патології на знімках МРТ. Там дисбаланс був ще серйознішим: 99% здорових і 1% хворих. Використовуючи комбінацію oversampling, аугментації та focal loss, ми досягли sensitivity 0.92 при специфічності 0.98.
Яку архітектуру обрати?
Для більшості задач обираємо EfficientNet-B4 або ConvNeXt-Tiny: вони дають хороший баланс точності та часу інференсу. У таблиці нижче — порівняння популярних архітектур.
| Архітектура | Top-1 ImageNet | Параметри | Latency (T4 GPU) |
|---|---|---|---|
| EfficientNet-B0 | 77.1% | 5.3M | 3.5 ms |
| EfficientNet-B4 | 82.9% | 19M | 9.2 ms |
| ConvNeXt-Tiny | 82.1% | 28M | 7.8 ms |
| ViT-B/16 | 81.8% | 86M | 12.1 ms |
| EfficientNet-B7 | 84.4% | 66M | 28 ms |
Для edge-пристроїв (Raspberry Pi, Jetson Nano) використовуємо MobileNetV3 або EfficientNet-Lite — вони працюють за 1–2 ms на CPU.
Чому fine-tuning ефективніший за навчання з нуля?
Навчання з нуля потребує мільйонів розмічених прикладів. Fine-tuning попередньо навченої моделі дає відмінні результати вже на сотнях зображень на клас. Цей підхід описано в Wikipedia: Transfer Learning.
import timm import torch.nn as nn def build_classifier(num_classes: int, pretrained_model: str = 'efficientnet_b4'): model = timm.create_model( pretrained_model, pretrained=True, num_classes=0 ) embedding_dim = model.num_features # 1792 для B4 for param in model.parameters(): param.requires_grad = False classifier = nn.Sequential( nn.Linear(embedding_dim, 512), nn.GELU(), nn.Dropout(0.3), nn.Linear(512, num_classes) ) model.classifier = classifier return model Стратегія fine-tuning по кроках:
- Заморозити backbone, 5 епох train only classifier.
- Розморозити останні 2 блоки, 10 епох з LR у 10 разів нижче.
- Повна розморозка, ще 10 епох з cosine schedule.
- Оцінка на валідації: якщо метрики не досягнуто — повторити з іншими гіперпараметрами.
Типова помилка: нерозморожені batch norm шари
При частковій розморозці важливо залишити batch norm шари в режимі train, інакше статистики не оновляться, і точність впаде на 5–10%.Як боротися з дисбалансом класів?
Реальні датасети рідко збалансовані. Ми комбінуємо кілька прийомів:
- Weighted random sampler — частота семплювання обернено пропорційна розміру класу.
- Focal Loss — фокусується на складних прикладах (γ=2).
- Oversampling рідкісних класів за допомогою аугментації (albumentations).
- Class-weighted cross-entropy — ваги 1/class_frequency.
Такий підхід піднімає macro-F1 на 15–20% порівняно з базовим навчанням. Замовте пілотний проєкт — ми покажемо результат на ваших даних за два тижні. Це дозволяє заощадити до 30% бюджету порівняно з наймом штатного ML-інженера.
Різниця між мультикласовою та мультилейбловою класифікацією
Мультикласова — один клас на зображення: softmax + cross-entropy (приклад: тип тварини). Мультилейблова — кілька класів одночасно: sigmoid + binary cross-entropy (приклад: теги фото). Поріг спрацьовування для кожного класу підбирається окремо за F1.
Метрики оцінки якості моделі
- Top-1/Top-5 Accuracy для збалансованих вибірок.
- Macro-averaged F1 для дисбалансу.
- Cohen's Kappa для медичних задач.
- AUC-ROC per class для мультилейблової.
Процес роботи над системою класифікації
Аналітика → проєктування → реалізація → тестування → деплой. На першому етапі ми вивчаємо ваш датасет, виявляємо проблемні класи, оцінюємо якість розмітки. Потім обираємо архітектуру та проводимо серію A/B-експериментів з гіперпараметрами. Після затвердження моделі — експорт в ONNX, контейнеризація та розгортання у вашу інфраструктуру. Всі етапи документуються, ваші інженери отримують доступ до моделі та інструкції з експлуатації. Оцінимо ваш проєкт безкоштовно — надішліть опис задачі. Працюємо під ключ: від аналізу до деплою.
Терміни та вартість
| Складність задачі | Термін |
|---|---|
| 2–10 класів, 1000+ фото/клас | 1–2 тижні |
| 50+ класів або складний домен | 3–5 тижнів |
| Ієрархічна класифікація, edge деплой | 5–8 тижнів |
Вартість розраховується індивідуально. Орієнтовно — від $1 000 до $50 000 залежно від обсягу даних та вимог. Економія на інфраструктурі за рахунок оптимізації моделі може досягати 40%. Наприклад, на одному проєкті ми скоротили витрати на $15 000 на рік.
Що входить у роботу?
- Аналіз даних та підготовка датасету.
- Вибір архітектури та fine-tuning (з A/B-тестами конфігів).
- Оцінка якості за обраними метриками (звіт).
- Деплой у вигляді REST API або вбудовування у вашу інфраструктуру.
- Документація та навчання команди.
- Гарантія — якщо точність не досягає обумовленої, доопрацьовуємо безкоштовно.
За роки роботи ми реалізували понад 50 проєктів із класифікації зображень для e-commerce, медицини та промисловості. Наші інженери мають сертифікати NVIDIA, AWS та Google Cloud, використовують MLOps практики для відтворюваності експериментів. Ми гарантуємо досягнення цільових метрик — якщо точність нижча за обумовлену, доопрацьовуємо безкоштовно. Зв'яжіться з нами, щоб обговорити ваш проєкт та отримати попередню оцінку термінів.







