用深度学习方法进行图像去水印,需要大量的训练图像样本对,即带有水印的图片和干净的图片。
我使用英伟达与 MIT 提出的 noise2noise 方法实现去水印。
经过题主测试,模型训练样本及次数足够多,去水印后的原图基本上接近原图 98%以上。
这里是 1050ti 训练 9 小时的效果,可能有些不干净,理论上训练 20 小时以上就可以达到基本可用程度
(左边是原图,右边是去水印图,)
其效果好过 photoshop 等专业级软件处理。
从左到右 :原图——>水印图——>去水印图
原理及实现思路请阅读论文:
Noise2Noise: Learning Image Restoration without Clean Data
第三方复现代码:
首先将上述代码 clone to 本地 or gpuCloud Server。 具体细节请参阅 README.md
由于原脚本不支持去水印,需要修改一下。
修改 noise_model.py 文件
https://github.com/yu4u/noise2noise/blob/c25d5a81cd2c7077e801b42e1dd05442fd19d8c2/noise_model.py#L29
添加引入 model
from PIL import Image
将 30-50 行修改为以下代码
首先您需要一张水印,我这里用的是www.shutterstock.com水印。
训练模型
python train.py --image\_dir dataset/291 --test\_dir dataset/Set14 --image\_size 128 --batch\_size 8 --lr 0.001 --source\_noise\_model text,0,50 --target\_noise\_model text,0,50 --val\_noise\_model text,25,25 --loss mae --output\_path text\_noise
训练时间由显卡决定,1080ti 跑了 55 小时。训练过程中会生成 xxxxx.hdf5 模型文件。也可以使用百度 AI Studio - 一站式 AI 开发实训平台训练
加载训练好的模型测试去水印
python test\_model.py --weight\_file text\_noise/weights.xxxxx.hdf5 --test\_noise\_model text,0,25 --image\_dir dataset/Set14 --output\_dir output
weights.xxxxx.hdf5 为模型路径。output 为去水印之后的输出路径
去水印样图(使用的模型训练时间为 6 个小时。理论上模型训练周期越长,效果越好,想要 100%去干净,模型训练至少 20h )
原图:
水印图:
去水印图:
原图:
水印图:
去水印图:
原图:
水印图:
去水印图:
第三张羊驼图去除的比较干净。是因为我用的数据集中存在大量的草地相似图。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.