写给普通人用的的深度学习去水印算法

2019-09-10 12:15:54 +08:00
 zhihupron

用深度学习方法进行图像去水印,需要大量的训练图像样本对,即带有水印的图片和干净的图片。

我使用英伟达与 MIT 提出的 noise2noise 方法实现去水印。

经过题主测试,模型训练样本及次数足够多,去水印后的原图基本上接近原图 98%以上。

这里是 1050ti 训练 9 小时的效果,可能有些不干净,理论上训练 20 小时以上就可以达到基本可用程度 (左边是原图,右边是去水印图,)

其效果好过 photoshop 等专业级软件处理。

从左到右 :原图——>水印图——>去水印图

原理及实现思路请阅读论文:


Noise2Noise: Learning Image Restoration without Clean Data

第三方复现代码:


yu4u/noise2noisegithub.com

首先将上述代码 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 )

原图:

水印图:

去水印图:

原图:

水印图:

去水印图:

原图:

水印图:

去水印图:

第三张羊驼图去除的比较干净。是因为我用的数据集中存在大量的草地相似图。

11216 次点击
所在节点    分享发现
16 条回复
set01
2019-09-10 14:54:22 +08:00
丧心病狂的水印
eastlhu
2019-09-12 09:27:58 +08:00
不错,mark 先。是不是训练越久就效果越好,理论上可以达到原图效果吗
zhihupron
2019-09-12 18:15:27 +08:00
@eastlhu 可以,前提条件要弄到源水印图片
firefox12
2019-09-15 09:48:10 +08:00
厉害 从零基础到你这个程度需要多久?从线性代数 高数 学起 还需要学什么基础?然后才能入门?
zhihupron
2019-09-26 07:12:52 +08:00
xiaosan
2019-10-15 10:26:36 +08:00
您好博主,我看了你的知乎文章《使用深度学习去除复杂图像水印,效果好过 photoshop !》。代码下载好并按你的方法修改后,我有个疑问请求下。如果要训练去水印,我需要把大量带水印的图片放在 291 目录,没有带水印的图片放在 Set14 目录,并且将水印图片也放在 py 脚本目录。这样就可以开始训练了,我的理解正确吗?
zhihupron
2019-10-16 09:26:21 +08:00
@xiaosan 不是这样的,

你直接在这里下载脚本吧。https://dev.tencent.com/s/c77eb395-3bd7-4fbb-bd9d-d9b981346bcc
我做了一个详细一点的教程

https://www.zhihu.com/question/333086833

水印要单独分离出来,不需要添加到图片上,Set14 和 291 目录下只要放入图片就可以了
zhihupron
2019-10-16 09:27:54 +08:00
如何完美去水印? - 张全蛋的回答 - 知乎
https://www.zhihu.com/question/333086833/answer/841650555
yao5024
2019-11-06 19:45:46 +08:00
@zhihupron lz 您好,项目限制下载了能否私发一份呢
zhihupron
2019-11-13 06:21:54 +08:00
@yao5024 https://tianchi.aliyun.com/dataset/dataDetail?dataId=44817
下载以后把后缀名后面的.bin 去掉。后缀改成 zip 即可解压
yao5024
2019-11-13 11:42:10 +08:00
@zhihupron 谢谢 lz
Crando
2019-11-21 20:54:15 +08:00
你好,有个疑问
Crando
2019-11-21 20:55:11 +08:00
#return img #测试时请注释这一行 启用 48 行
return image #训练模型时请注释这一行 启用 47 行
这两个注释是不是写反了
zhihupron
2019-11-22 08:49:47 +08:00
@Crando 知乎已回复
Thanks
2020-06-03 18:02:11 +08:00
训练需要无水印图像,既然已经有无水印图像了为什么还要用模型去水印?
bilibiliCXK
2020-06-04 06:51:35 +08:00
@Thanks 这个东西训练的时

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/599596

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX