写给普通人用的的深度学习去水印算法 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhihupron
V2EX    分享发现

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

  •  1
     
  •   zhihupron 2019-09-10 12:15:54 +08:00 12480 次点击
    这是一个创建于 2292 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    这里是 1050ti 训练 9 小时的效果,可能有些不干净,理论上训练 20 小时以上就可以达到基本可用程度 (左边是原图,右边是去水印图,) nNIGQA.png nNIUdf.png nNINeP.png nNIYLt.png nNIJsI.png nNIao8.png nNIwFS.png nNI0Jg.png nNIBWQ.png nNIDzj.png

    其效果好过 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 )

    原图:

    水印图:

    去水印图:

    原图:

    水印图:

    去水印图:

    原图:

    水印图:

    去水印图:

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

    第 1 条附言    2019-09-18 06:26:01 +08:00
    16 条回复    2020-06-04 06:51:35 +08:00
    set01
        1
    set01  
       2019-09-10 14:54:22 +08:00
    丧心病狂的水印
    eastlhu
        2
    eastlhu  
       2019-09-12 09:27:58 +08:00
    不错,mark 先。是不是训练越久就效果越好,理论上可以达到原图效果吗
    zhihupron
      &nbs; 3
    zhihupron  
    OP
       2019-09-12 18:15:27 +08:00
    @eastlhu 可以,前提条件要弄到源水印图片
    firefox12
        4
    firefox12  
       2019-09-15 09:48:10 +08:00 via iPhone
    厉害 从零基础到你这个程度需要多久?从线性代数 高数 学起 还需要学什么基础?然后才能入门?
    zhihupron
        5
    zhihupron  
    OP
       2019-09-26 07:12:52 +08:00
    xiaosan
        6
    xiaosan  
       2019-10-15 10:26:36 +08:00
    您好博主,我看了你的知乎文章《使用深度学习去除复杂图像水印,效果好过 photoshop !》。代码下载好并按你的方法修改后,我有个疑问请求下。如果要训练去水印,我需要把大量带水印的图片放在 291 目录,没有带水印的图片放在 Set14 目录,并且将水印图片也放在 py 脚本目录。这样就可以开始训练了,我的理解正确吗?
    zhihupron
        7
    zhihupron  
    OP
       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
        8
    zhihupron  
    OP
       2019-10-16 09:27:54 +08:00
    如何完美去水印? - 张全蛋的回答 - 知乎
    https://www.zhihu.com/question/333086833/answer/841650555
    yao5024
        9
    yao5024  
       2019-11-06 19:45:46 +08:00
    @zhihupron lz 您好,项目限制下载了能否私发一份呢
    zhihupron
        10
    zhihupron  
    OP
       2019-11-13 06:21:54 +08:00
    @yao5024 https://tianchi.aliyun.com/dataset/dataDetail?dataId=44817
    下载以后把后缀名后面的.bin 去掉。后缀改成 zip 即可解压
    yao5024
        11
    yao5024  
       2019-11-13 11:42:10 +08:00
    @zhihupron 谢谢 lz
    Crando
        12
    Crando  
       2019-11-21 20:54:15 +08:00
    你好,有个疑问
    Crando
        13
    Crando  
       2019-11-21 20:55:11 +08:00
    #return img #测试时请注释这一行 启用 48 行
    return image #训练模型时请注释这一行 启用 47 行
    这两个注释是不是写反了
    zhihupron
        14
    zhihupron  
    OP
       2019-11-22 08:49:47 +08:00
    @Crando 知乎已回复
    Thanks
        15
    Thanks  
       2020-06-03 18:02:11 +08:00
    训练需要无水印图像,既然已经有无水印图像了为什么还要用模型去水印?
    bilibiliCXK
        16
    bilibiliCXK  
       2020-06-04 06:51:35 +08:00
    @Thanks 这个东西训练的时
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3768 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 05:21 PVG 13:21 LAX 21:21 JFK 00:21
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86