首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
探索世界的好奇心万岁
Udacity
网易公开课
Godel, Escher, Bach: An Eternal Golden Braid
V2EX  ›  分享发现

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

  •  
  •   zhihupron · 87 天前 · 2155 次点击
    这是一个创建于 87 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    我使用英伟达与 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 条附言  ·  79 天前
    14 回复  |  直到 2019-11-22 08:49:47 +08:00
        1
    set01   87 天前
    丧心病狂的水印
        2
    eastlhu   85 天前
    不错,mark 先。是不是训练越久就效果越好,理论上可以达到原图效果吗
        3
    zhihupron   85 天前
    @eastlhu 可以,前提条件要弄到源水印图片
        4
    firefox12   82 天前 via iPhone
    厉害 从零基础到你这个程度需要多久?从线性代数 高数 学起 还需要学什么基础?然后才能入门?
        5
    zhihupron   71 天前
        6
    xiaosan   52 天前
    您好博主,我看了你的知乎文章《使用深度学习去除复杂图像水印,效果好过 photoshop !》。代码下载好并按你的方法修改后,我有个疑问请求下。如果要训练去水印,我需要把大量带水印的图片放在 291 目录,没有带水印的图片放在 Set14 目录,并且将水印图片也放在 py 脚本目录。这样就可以开始训练了,我的理解正确吗?
        7
    zhihupron   51 天前
    @xiaosan 不是这样的,

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

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

    水印要单独分离出来,不需要添加到图片上,Set14 和 291 目录下只要放入图片就可以了
        8
    zhihupron   51 天前
    如何完美去水印? - 张全蛋的回答 - 知乎
    https://www.zhihu.com/question/333086833/answer/841650555
        9
    yao5024   29 天前
    @zhihupron lz 您好,项目限制下载了能否私发一份呢
        10
    zhihupron   23 天前
    @yao5024 https://tianchi.aliyun.com/dataset/dataDetail?dataId=44817
    下载以后把后缀名后面的.bin 去掉。后缀改成 zip 即可解压
        11
    yao5024   23 天前
    @zhihupron 谢谢 lz
        12
    Crando   14 天前
    你好,有个疑问
        13
    Crando   14 天前
    #return img #测试时请注释这一行 启用 48 行
    return image #训练模型时请注释这一行 启用 47 行
    这两个注释是不是写反了
        14
    zhihupron   14 天前
    @Crando 知乎已回复
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2803 人在线   最高记录 5043   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.3 · 24ms · UTC 10:49 · PVG 18:49 · LAX 02:49 · JFK 05:49
    ♥ Do have faith in what you're doing.