用深度学习方法进行图像去水印,需要大量的训练图像样本对,即带有水印的图片和干净的图片。
我使用英伟达与 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 )
原图:
水印图:
去水印图:
原图:
水印图:
去水印图:
原图:
水印图:
去水印图:
第三张羊驼图去除的比较干净。是因为我用的数据集中存在大量的草地相似图。
1
set01 2019-09-10 14:54:22 +08:00
丧心病狂的水印
|
2
eastlhu 2019-09-12 09:27:58 +08:00
不错,mark 先。是不是训练越久就效果越好,理论上可以达到原图效果吗
|
4
firefox12 2019-09-15 09:48:10 +08:00 via iPhone
厉害 从零基础到你这个程度需要多久?从线性代数 高数 学起 还需要学什么基础?然后才能入门?
|
5
zhihupron OP |
6
xiaosan 2019-10-15 10:26:36 +08:00
您好博主,我看了你的知乎文章《使用深度学习去除复杂图像水印,效果好过 photoshop !》。代码下载好并按你的方法修改后,我有个疑问请求下。如果要训练去水印,我需要把大量带水印的图片放在 291 目录,没有带水印的图片放在 Set14 目录,并且将水印图片也放在 py 脚本目录。这样就可以开始训练了,我的理解正确吗?
|
7
zhihupron OP @xiaosan 不是这样的,
你直接在这里下载脚本吧。https://dev.tencent.com/s/c77eb395-3bd7-4fbb-bd9d-d9b981346bcc 我做了一个详细一点的教程 https://www.zhihu.com/question/333086833 水印要单独分离出来,不需要添加到图片上,Set14 和 291 目录下只要放入图片就可以了 |
8
zhihupron OP 如何完美去水印? - 张全蛋的回答 - 知乎
https://www.zhihu.com/question/333086833/answer/841650555 |
10
zhihupron OP |
12
Crando 2019-11-21 20:54:15 +08:00
你好,有个疑问
|
13
Crando 2019-11-21 20:55:11 +08:00
#return img #测试时请注释这一行 启用 48 行
return image #训练模型时请注释这一行 启用 47 行 这两个注释是不是写反了 |
15
Thanks 2020-06-03 18:02:11 +08:00
训练需要无水印图像,既然已经有无水印图像了为什么还要用模型去水印?
|
16
bilibiliCXK 2020-06-04 06:51:35 +08:00
@Thanks 这个东西训练的时
|