Когда вы будете искать вдохновляющий контент, вы быстро наткнетесь на такие платформы, как unsplash.com, istockphoto.com, pexels.com и т. д.

Если у нас достаточно, чем это изображения. Unsplash — хорошая платформа, если вам нужно бесплатное изображение, потому что вам нужен красивый заголовок для вашего сообщения в блоге, такой как мой от Marius Masalar, найденный на Unsplash.

Изображения могут иметь авторские права, но эти авторские права трудно отследить. Вы не знаете, кто скачал вашу фотографию, и в большинстве случаев вы также не знаете, для чего она использовалась.

Чтобы защитить ваш имидж, эти платформы будут показывать вам только плохие качества и ставить на них ВОДЯНОЙ ЗНАК.

Я работаю в yoona.ai, стартапе, который меняет то, как индустрия моды и текстиля собирается создавать одежду, принты и т. д. в будущем с помощью ИИ.

Мы используем все виды различных моделей/сетей, от простых, таких как k-средние для кластеризации, до CNN в основном для классификации, GAN для генерации, а также масштабирования, шумоподавления и т. д.

Я спросил себя, может ли простой автокодировщик научиться реконструировать изображение, и я уверен, что кто-то уже пытался использовать его для удаления водяных знаков.

Вокруг него есть несколько статей, и лучший источник для меня — это всегда смотреть на paperswithcode.com. На основе задачи вы можете найти последние реализации/исследования SOTA. Для изображения Inpaiting было несколько подходов от Auto Encoder до GAN.

Мы рассмотрим две «старые» реализации. Идея проста, вы берете изображение + маску водяного знака, а модель учится восстанавливать изображение без водяного знака.

Будет ли это работать? Даже если у нас нет самого ВОДЯНОГО ЗНАКА?

Спойлер: Да, потому что ВОДЯНЫЕ ЗНАКИ всегда находятся в одной и той же позиции, чтобы иметь возможность кэшировать изображения и делать их очень быстро доступными в вашем браузере.

https://github.com/braindotai/Watermark-Removal-Pytorch — это реализация документа Deep Image Prior, в котором показано, что случайно инициализированная нейронная сеть может использоваться в качестве созданного вручную предварительного изображения. с отличными результатами в стандартных обратных задачах, таких как шумоподавление, сверхвысокое разрешение и закрашивание, на основе сети генератора.

Второй — LaMahttps://github.com/saic-mdal/lama, основанный на статье Надежное по разрешению рисование больших масок с помощью сверток Фурье и то, чего они достигли, весьма впечатляет. Особенно с более высокими разрешениями. Они сосредотачиваются на CNN и продвигают их.

Основное отличие состоит в том, что реализация 1 не заботится о том, какое это изображение. Предварительно обученной сети нет. Значит, вы даете ему образ и маску и ждете.

Но это также показывает его обратную сторону. Каждое изображение должно выполняться несколько итераций, что в зависимости от размера может занять некоторое время. Кроме того, сети на основе генератора трудно обучать, потому что нет ничего лучше определенного конца. Вам придется поиграть с итерациями, глубиной, шумом и другими гиперпараметрами.

LaMa, реализация 2 должна быть сначала обучена. К счастью, у них есть предварительно обученные сети, которые вы можете использовать в качестве отправной точки. Проблема здесь в том, что ваш вариант использования настолько далек от обученных данных, что может случиться так, что я не буду работать, и вам придется сначала обучить свою собственную сеть LaMa.

Давайте разбираться.

Посмотрите на этот маленький красивый крупный план цветка. Когда вы откроете его, вы сможете его увидеть, и Shuttersock позаботился о том, чтобы был применен ВОДЯНОЙ ЗНАК, а также ссылка внизу.

Поскольку у нас нет водяного знака, мы просто создадим его. Откройте свое любимое приложение для рисования и просто напишите Shutterstock. Изображение должно иметь одинаковые размеры, и ваш рисунок должен быть в точном положении.

Поэтому в лучшем случае используйте приложение, которое поддерживает слои, загрузите изображение, создайте новый слой, закрасьте его и сохраните только новый слой. Если вы закончите, это будет выглядеть так.

В зависимости от реализации может случиться так, что вам придется инвертировать его, потому что черные часто используются для игнорирования.

Я создал блокнот Juypter на основе кода Удаления водяных знаков Pytorch после борьбы с их собственными.

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

Этой статье около 4 лет, и в это время она уже достигла весьма впечатляющих результатов.

LaMa, Реализация 2 уже поставляется с довольно хорошим Jupyter Notebook. Он загружает предварительно обученную сеть, позволяет загружать свои собственные изображения или загружать их, а также позволяет рисовать МАСКУ!

Когда вы запустите реализацию LaMa, вы также заметите разницу в производительности. В то время как реализация 1 заняла несколько минут, LaMa заняла всего несколько секунд!

Но я не слишком обрадовался результату и хотел понять, в чем разница. Вы можете ясно видеть, как он интерпретировал линии, удлинял их и заполнял. Впечатленный, я хотел понять, почему сеть Generator работает лучше.

Так что я начал играть, немного подправил их Jupyter Notebook, чтобы использовать свою собственную маску. Моя самодельная маска была намного лучше, поэтому было скрыто и удалено меньше деталей.

Мне пришлось инвертировать маску и сначала сохранить ее в оттенках серого.

Он стал немного ближе к оригиналу, но также оставил некоторые фрагменты.

Я также сделал еще одну маленькую настройку и расширил свою маску белым прямоугольником внизу. Честно говоря, больше всего меня впечатлило то, как ЛаМа продлил (закрасил) изображение.

Что мы можем сделать, чтобы защитить наши изображения? Не размещайте один и тот же водяной знак в одном и том же месте. Рандомизация уже помогла бы и усложнила бы задачу, но уже есть статьи, которые пытаются обнаружить подобные вещи. Это похоже на использование криптографического алгоритма с большим количеством итераций, чтобы сделать его слишком сложным для взлома. (означает, что если кому-то нужно потратить несколько часов, чтобы просто снять это, большинство остановится)

Кстати, если вы думаете, что никто не сможет использовать изображения из-за низкого разрешения, то вы тоже ошибаетесь. Машина учится реконструировать его, а это означает, что мы также можем создавать более высокие разрешения и снова обогащать изображения. ;)

Но это тема для другой статьи.