← СИГНАЛ ИССЛЕДОВАНИЯ
ИССЛЕДОВАНИЯ

Как обойти проверку водяного знака SynthID

Автор описал эксперименты по обходу водяного знака SynthID: сжатие JPEG и шум не помогли, а сработал перенос текстурной полосы из второй версии сцены, сгенерированной через ControlNet Canny. Материал показывает уязвимость маркировки синтетических изображений.

Пользователь под ником на платформе «Хабр ML» опубликовал отчёт об эксперименте по обходу детектора водяных знаков SynthID от Google DeepMind. Целью было проверить, насколько заявленная устойчивость знака к преобразованиям сохраняется на конкретном изображении — сгенерированном кадре 1536×1024 с девочкой у пруда, утками и осенними деревьями. Автор подчёркивает, что это не бенчмарк, а журнал ручных проверок одного файла.

Первые попытки воздействовать на пиксели напрямую не дали результата. Геометрические деформации, изменение размера, размытие, цветовые и шумовые возмущения, многократное JPEG-сжатие, GAN-реставрация, имитация печати и пересъёмки — всё это ухудшало картинку, но детектор SynthID продолжал находить знак. Автор отмечает, что пустые метаданные (EXIF, PNG-текст, C2PA) не заменяют отрицательный результат по пиксельному водяному знаку, который живёт в самом изображении.

Прорыв произошёл при смене подхода. Вместо того чтобы пытаться «расшатать» пиксели, автор сгенерировал вторую версию сцены с помощью Stable Diffusion 1.5 и ControlNet с условием Canny (карта контуров). Полученный файл-донор сам по себе давал результат «not detected». Затем из донора была выделена полоса текстуры — разность двух размытых копий — и подмешана в исходное изображение с локальной подгонкой энергии. Итоговый файл также прошёл проверку как «not detected».

Ключевым параметром стала доля исходной полосы в смеси. При 10% и 12% детектор не находил знак, при 15% — снова обнаруживал. Финальное значение — 0.12, то есть 88% полосы текстуры взято из донора. Автор использовал Gaussian-фильтры с сигма 1.2 и 8 пикселей для разделения деталей разного масштаба. Средняя абсолютная разница значений каналов с исходником составила 16.91 по шкале 0–255, что заметно, но сцена остаётся узнаваемой.

Проверка проводилась через сервис OpenAI Verify, который поддерживает различные сигналы, включая C2PA и SynthID. Автор подчёркивает, что результат «not detected» означает лишь отсутствие поддерживаемого знака, а не подтверждение съёмки на камеру. Это отдельное наблюдение от 9 октября, и наличие файлов на GitHub не запускает проверку заново.

В репозитории опубликованы как успешные, так и неудачные ветки эксперимента, а также код на Python 3.14 с использованием Pillow, NumPy, PyTorch, Diffusers и ControlNet. Генерация донора требует скачивания нескольких гигабайт весов и работает на macOS с Apple Silicon (MPS) или CPU; ветка CUDA не тестировалась. Автор предупреждает, что зелёный pytest не равен успешному обходу SynthID, а замена промпта требует новой проверки детектором.

Работа демонстрирует, что заявленная устойчивость SynthID не абсолютна: на конкретном изображении удалось добиться отрицательного результата ценой заметного изменения текстуры. Однако автор не делает обобщений о внутреннем устройстве детектора и подчёркивает, что это лишь один пример, а не доказательство уязвимости метода в целом.

synthidgoogleopenaiводяные знакиcontrolnetизображения
Первоисточник Читать в Хабр ML ↗

Материал подготовлен ИИ-редакцией «Сигнала» как пересказ публикации первоисточника. Фактическую точность и подробности проверяйте по оригиналу.

По этой теме МОДЕЛИ Текстовые водяные знаки LLM: что важно знать Хабр ML · 13 окт, 18:42 ИССЛЕДОВАНИЯ Новые модели OpenAI и Google обходят запреты на нюдсы Ars Technica · 14 окт, 16:00 ИССЛЕДОВАНИЯ Срок жизни ИИ-бенчмарков сократился вдвое Хабр · 13 окт, 21:00 ИССЛЕДОВАНИЯ Хронология инцидентов с ИИ-агентами и чек-лист изоляции Хабр · 13 окт, 13:54 ИССЛЕДОВАНИЯ AlphaProof Nexus решил открытые задачи и прошёл рецензию The Decoder · 12 окт, 14:35