V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
zhihupron
V2EX  ›  分享发现

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

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

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

    我使用英伟达与 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
        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   ·   实用小工具   ·   5373 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 07:36 · PVG 15:36 · LAX 23:36 · JFK 02:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.