Детектор AI-изображений Wildberries: архитектура, данные, метрики | AiManual
AiManual Logo Ai / Manual.
29 Дек 2025 Гайд

Как Wildberries строит детектор AI-изображений: от данных до метрик

Разбор ML-системы детекции AI-контента в Wildberries: от сбора данных и выбора архитектуры до production-метрик и мониторинга.

Проблема: почему Wildberries инвестирует в детекцию AI-изображений?

С появлением Stable Diffusion, Midjourney и DALL-E 3 маркетплейсы столкнулись с новой реальностью: продавцы массово используют AI для генерации товарных изображений. Это создаёт несколько фундаментальных проблем:

  • Дезориентация покупателей: AI-изображения часто идеализируют товар, создавая нереалистичные ожидания
  • Юридические риски: использование AI-контента без маркировки может нарушать законодательство о рекламе
  • Доверие к платформе: пользователи теряют уверенность в достоверности визуальной информации
  • Конкурентное преимущество: честные продавцы проигрывают тем, кто использует «идеальные» AI-картинки

Важно: детектор нужен не для блокировки AI-контента, а для его маркировки и создания честной конкурентной среды. Полный запрет — контрпродуктивен, так как качественный AI-контент тоже имеет право на существование.

Архитектурное решение: трёхуровневая система детекции

Wildberries использует не одну модель, а целый пайплайн, который обрабатывает миллионы изображений ежедневно. Вот как это работает:

1 Уровень 1: Быстрый пре-скрининг

На этом этапе используются легковесные модели (EfficientNet, MobileNetV3), которые анализируют метаданные и низкоуровневые признаки:

import torch
import torchvision.transforms as transforms
from PIL import Image

class FastScreener:
    def __init__(self):
        self.model = torch.hub.load('pytorch/vision', 'mobilenet_v3_small', pretrained=True)
        self.model.eval()
        
    def predict(self, image_path):
        # Быстрая предобработка
        transform = transforms.Compose([
            transforms.Resize(128),
            transforms.ToTensor(),
        ])
        
        image = Image.open(image_path).convert('RGB')
        tensor = transform(image).unsqueeze(0)
        
        with torch.no_grad():
            prediction = self.model(tensor)
            
        return prediction.squeeze().numpy()
💡
Этот уровень отсеивает 70-80% явно «человеческих» изображений, снижая нагрузку на более сложные модели. Точность здесь не критична — важна скорость (10-50 мс на изображение).

2 Уровень 2: Детальный анализ энкодером

Здесь используется Vision Transformer (ViT-Base) или ConvNeXt, обученные на специфических артефактах AI-генерации:

  • Анализ текстур и градиентов (AI часто создаёт слишком «гладкие» поверхности)
  • Обнаружение артефактов в мелких деталях (уши, пальцы, текст)
  • Анализ цветовых распределений и шумовых паттернов

3 Уровень 3: Ансамбль экспертных моделей

Для сложных случаев (например, когда изображение прошло постобработку в Photoshop) используется ансамбль из 3-5 специализированных моделей:

Модель Целевые артефакты Вес в ансамбле
ResNet-50 (специализированная) Общие паттерны генерации 0.4
CLIP-based детектор Семантические несоответствия 0.3
Детектор частотных артефактов FFT-анализ спектра 0.2
Метаданные анализатор EXIF, история редактирования 0.1

Сбор и подготовка данных: самая сложная часть

Качество детектора на 80% определяется качеством данных. Wildberries использует комбинированный подход, похожий на тот, что описан в нашей статье про источники данных для обучения.

Источники AI-изображений:

  1. Контролируемая генерация: создаём изображения через Stable Diffusion, Midjourney, DALL-E 3 с известными параметрами
  2. Публичные датасеты: LAION-AI, GenImage, DiffusionDB
  3. Активный сбор: мониторинг новых генеративных моделей (включая китайские, как Qwen-Image-Layered)

Источники реальных изображений:

  • Собственная база фотографий товаров (с подтверждённым происхождением)
  • Публичные датасеты (ImageNet, OpenImages) с фильтрацией по лицензии
  • Фотографии, сделанные сотрудниками компании

Критически важно балансировать классы! Если в обучающей выборке будет 90% AI-изображений и 10% реальных — модель научится просто считать всё AI-контентом.

Аугментация данных:

import albumentations as A

transform = A.Compose([
    A.RandomResizedCrop(224, 224, scale=(0.8, 1.0)),
    A.HorizontalFlip(p=0.5),
    # Имитация постобработки, которую делают продавцы
    A.RandomBrightnessContrast(p=0.3),
    A.GaussNoise(var_limit=(10.0, 50.0), p=0.2),
    A.JpegCompression(quality_lower=70, quality_upper=100, p=0.3),
    # Важно: для AI-изображений добавляем дополнительные трансформации
    A.OneOf([
        A.GaussianBlur(blur_limit=(3, 5)),
        A.MedianBlur(blur_limit=3, p=0.5),
    ], p=0.2),
])

Метрики качества: что действительно важно в production?

Точность (accuracy) — это только вершина айсберга. В production-системе Wildberries отслеживает десятки метрик:

Метрика Целевое значение Почему важно
Precision (AI класс) > 0.92 Минимизация ложных обвинений продавцов
Recall (AI класс) > 0.85 Не пропускать явный AI-контент
F1-Score > 0.88 Баланс между precision и recall
AUC-ROC > 0.95 Качество разделения классов
Латентность (p95) < 300 мс Влияет на UX загрузки товаров
Throughput > 100 img/сек на GPU Обработка пиковых нагрузок

Мониторинг дрейфа данных:

Генеративные модели постоянно улучшаются. То, что работало против Stable Diffusion 2.1, может не работать против SD 3.0. Поэтому:

class DataDriftMonitor:
    def __init__(self):
        self.reference_distribution = None
        
    def update_reference(self, predictions):
        # Сохраняем распределение предсказаний на референсных данных
        self.reference_distribution = {
            'mean': np.mean(predictions),
            'std': np.std(predictions),
            'hist': np.histogram(predictions, bins=50)[0]
        }
    
    def check_drift(self, current_predictions):
        # Сравниваем с референсом
        current_mean = np.mean(current_predictions)
        reference_mean = self.reference_distribution['mean']
        
        # KL-дивергенция между гистограммами
        current_hist = np.histogram(current_predictions, bins=50)[0]
        kl_div = entropy(current_hist + 1e-10, 
                        self.reference_distribution['hist'] + 1e-10)
        
        return {
            'mean_drift': abs(current_mean - reference_mean),
            'kl_divergence': kl_div,
            'drift_detected': kl_div > 0.1  # Пороговое значение
        }

Инфраструктура и MLOps

Система работает на гибридной инфраструктуре:

  • Онлайн-инференс: Kubernetes + Triton Inference Server
  • Пакетная обработка: Apache Spark для анализа исторических данных
  • Хранилище признаков: Feast для управления фичами
  • Мониторинг: Prometheus + Grafana + собственные дашборды
💡
Выбор железа для обучения — отдельная история. Как показывает сравнение в статье про GB10 vs RTX vs Mac Studio, для разных этапов подходит разное железо. Быстрый эксперимент — на RTX 4090, обучение больших моделей — на кластере с A100.

Этические соображения и ограничения

Детектор AI-контента — это не полицейский инструмент, а система обеспечения прозрачности. Важные принципы:

  1. Объяснимость: продавцы должны понимать, почему их изображение помечено как AI
  2. Апелляция: возможность оспорить решение системы
  3. Постепенное внедрение: сначала предупреждения, потом маркировка, и только в крайних случаях — ограничения
  4. Конфиденциальность: система не должна сохранять или анализировать изображения дольше необходимого

Будущее развития

Текущие направления развития системы в Wildberries:

  • Мультимодальность: анализ не только изображений, но и текстовых описаний (связь с мультимодальным RAG)
  • Детекция гибридного контента: когда AI-изображение отредактировано в Photoshop
  • Прогнозирование трендов: какие типы AI-контента будут популярны завтра
  • Интеграция с видео-детекцией: по аналогии с инструментами для видео

Ключевой insight: идеального детектора не существует. Это всегда гонка вооружений между генеративными моделями и системами детекции. Цель — не выиграть гонку, а поддерживать приемлемый уровень прозрачности для пользователей.

FAQ: частые вопросы о детекторах AI-изображений

Можно ли обойти детектор с помощью постобработки?

Да, но это требует значительных усилий. Простое добавление шума или изменение размера обычно не работает против современных детекторов. Эффективные методы (вроде adversarial attacks) сложны в реализации для рядового продавца.

Как часто нужно переобучать модель?

В Wildberries есть два цикла: еженедельное дообучение на новых данных и полное переобучение раз в месяц. Также мониторинг дрейфа данных может запустить внеплановое обновление.

Что делать с ложными срабатываниями?

Система имеет несколько уровней проверки. Если изображение помечено как AI с низкой уверенностью (< 0.7), оно отправляется на модерацию к человеку. Также продавцы могут подать апелляцию.

Можно ли использовать open-source модели для детекции?

Да, но их нужно дообучать на своих данных. Модели вроде CLIP или ViT дают хорошую базовую точность, но для production-качества требуется fine-tuning на специфичных для маркетплейса данных.

Как оценить ROI от внедрения такой системы?

Через метрики доверия пользователей: снижение возвратов из-за несоответствия ожиданий, рост конверсии у продавцов с реальными фото, уменьшение жалоб на обман. В долгосрочной перспективе — укрепление бренда как честной платформы.