АвитоCV3 мин

Автомодерация: исправить фотографию вместо блокировки объявления

Контакты на фото нарушают правила, но отклонение объявления может лишить площадку полезного контента. Сначала находят нарушение, затем убирают только его: от размытия команда перешла к восстановлению фона.

Статья · на русском

Автомодерация изображений: как исправлять нарушения, сохраняя количество и качество контента

Владимир Морозов · Опубликовано: 16 февраля 2025 г.

Почему начали с контактов

Около 1% фотографий в описанном потоке содержали контакты. Удалять изображение целиком неудобно: оно может быть единственным в объявлении. Авито решила автоматически исправлять такие некритичные нарушения.

Через модерацию проходит в среднем около 1500 запросов в секунду, на пике — до 10 тысяч. Поэтому дорогую обработку нельзя запускать для каждой фотографии.

Этот фрагмент в оригинале

Быстрая проверка, затем точная локализация

EfficientNetV2 small отсеивает изображения без контактов. Для этого этапа важна полнота: не пропустить нарушение. Следующая модель на основе YOLO выделяет прямоугольники вокруг телефонов, адресов, логинов и QR-кодов. Здесь особенно важна точность, чтобы не испортить нормальное изображение.

Классификатор обучали на 33 тысячах фотографий; для детектора нужна более дорогая разметка границ. Также использовали 5 тысяч синтетических примеров. Необычные случаи, которые классификатор замечает, а детектор не может локализовать, остаются для ручной модерации или блокировки.

Сравнение классификаторов и детекторов.

Сравнение классификаторов и детекторов.

Источник: Иллюстрация из оригинала
Этот фрагмент в оригинале

Ускоряли весь путь изображения

Повторные фотографии узнают по Image_ID и берут готовый результат из кеша. Aqueduct организует очереди и пакетную работу загрузки, подготовки изображения, модели и обработки выхода. EfficientNetV2 и YOLO перевели в TensorRT.

Подготовку изображений ускоряли через OpenCV, но автор предупреждает: одинаково названное изменение размера в Pillow и OpenCV может давать разные пиксели. В описанной системе подготовка и классификация занимают около 100 мс, вместе со скачиванием — 240 мс. Это время конкретного блока, не всей модерации.

Ускорение моделей при разных способах запуска.

Ускорение моделей при разных способах запуска.

Источник: Иллюстрация из оригинала
Этот фрагмент в оригинале

Почему размытие заменили восстановлением

Размытие контакта сохраняет фото, но иногда оставляет заметное пятно. Inpainting восстанавливает область под маской так, будто надпись убрали. Команда сравнила LaMa, ZITS и MAT по нескольким метрикам и вручную.

ZITS++ лидировала по качеству, но LaMa оказалась значительно быстрее при небольшом отставании. Из-за преобразований Фурье перенос LaMa в ONNX и TensorRT был сложнее, поэтому остановились на TorchScript. Выбор среды исполнения зависел от операций конкретной модели.

Сравнение восстановления изображения разными моделями.

Сравнение восстановления изображения разными моделями.

Источник: Иллюстрация из оригинала
Этот фрагмент в оригинале

Граница маски остаётся важной

Новый путь распространили на несколько причин отклонения, добавив OCR и другие детекторы. Если прямоугольник не покрывает букву целиком, после восстановления остаётся её фрагмент.

Следующее улучшение в статье — уточнять маску сегментацией SAM по найденному прямоугольнику. Авторы сообщают о внедрении этого изменения на момент публикации. Итоговая система не отменяет ручной разбор сложных изображений, а сокращает поток простых исправлений.

Обновлённая схема с восстановлением изображения.

Обновлённая схема с восстановлением изображения.

Источник: Иллюстрация из оригинала
Этот фрагмент в оригинале