基于AI深度学习清洗去除复杂水印

@Ta 09-10 12:16 525点击

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

我使用英伟达与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

首先您需要一张水印,我这里用的是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)

原图:

水印图:

去水印图:

原图:

水印图:

去水印图:

原图:

水印图:

去水印图:

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


红米Note4高配版(银色)

回复列表(24)
  • 1
    o
    @Ta / 09-10 12:11
    🐮🍺坐等去马赛克工具
  • 2
    @Ta / 09-10 12:11
    大佬,有问题请教,私信你了@张小强
  • 3
    @Ta / 09-10 12:43

    @o,JAVHD,无码


    菩提本无树,明镜亦非台。
    本来无一物,何处惹尘埃!

    ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้۩͇̿v͇̿i͇̿p͇̿۩
    華為P30 (Pro版)-(金色)

  • 4
    @Ta / 09-10 13:29
    @o,已经有了啊。 
    --
    华为荣耀6Plus的孤单
  • 5
    @Ta / 09-10 15:16
    大佬
  • 6
    @Ta / 09-10 15:49

    @mu228,这气泡怎么弄的


    菩提本无树,明镜亦非台。
    本来无一物,何处惹尘埃!

    ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้۩͇̿v͇̿i͇̿p͇̿۩
    華為P30 (Pro版)-(金色)

  • 7
    @Ta / 09-10 22:02


    红米Note4高配版(银色)

  • 8
    @Ta / 09-10 22:49

    有意思,
    你好!ICAC,请配合我们调查。

  • 9
    @Ta / 09-11 08:50
    @老虎會游泳,网页插件代码。要了给你


    <script src="//cdn.bootcss.com/jquery/2.1.0/jquery.min.js"></script>
    <script>
    $(function(){
      var img = "http://qiniu.img.hu60.cn/file-hash-jpg-86433bf86e6346d26fdaa5e76850be71463027.jpg" ,bc = "#1CC";
      //  头像地址,头像边框颜色
     
      var tail = "华为荣耀6Plus的孤单";
      //  底部小尾巴内容
     
      var bg = "#0DD", fc= "#FFF";
      // 气泡背景颜色,气泡字体颜色
     
      var header = "
    ";
      var footer = " 
    --
    "+tail+"
    ";
     
      //  Mark-1
      $('#reply_topic_button,#quick_chat_button,#post_topic_button').click(function(){
         var content = $('#content').val();
         $('#content').val(header + content + footer);
      })
    })
    </script>
    <script src="/tpl/jhin/js/jquery-3.1.1.min.js"></script>
    <script src="/tpl/jhin/js/chartjs/analytics.js"></script>
    <script src="/tpl/jhin/js/chartjs/Chart.js" type="text/javascript"></script>
    <script src="/tpl/jhin/js/chartjs/utils.js" type="text/javascript"></script>
    <script>
    $(document).ready(function () {
        if (location.pathname == "/q.php/index.index.html") {
            $('.layout-head').html('<canvas id="qiniu_traffic" style="display: block; height: 300px; width: 100%;" class="chartjs-render-monitor"></canvas>');
            var ctx = document.getElementById('qiniu_traffic').getContext('2d');
            window.myLine = new Chart(ctx, config);
            $.get('https://hu60.cn/q.php/api.qiniu_traffic.json', function(result) {
                if (result.data) {
                    config.data.labels = result.time.map(function(time) {
                        return time.split(' ')[0];
                    });
                    config.data.datasets[0].data = result.data.china;
                    config.data.datasets[1].data = result.data.oversea;
                    window.myLine = new Chart(ctx, config);
                }
            });
        }
    });
    function bytes_format(bytes) {
        if (bytes < 1024)
            return bytes + ' B';
        if (bytes < 1048576)
            return (bytes / 1024).toFixed(0) + ' KB';
        if (bytes < 1073741824)
            return (bytes / 1048576).toFixed(0) + ' MB';
        return (bytes / 1073741824).toFixed(2) + ' GB';
    }
    var config = {
        type: 'line',
        data: {
            labels: [],
            datasets: [{
                label: '中国',
                backgroundColor: window.chartColors.red,
                borderColor: window.chartColors.red,
                data: [],
                fill: false,
            },{
                label: '海外',
                backgroundColor: window.chartColors.green,
                borderColor: window.chartColors.green,
                data: [],
                fill: false,
            }]
        },
        options: {
            responsive: true,
            title: {
                display: true,
                text: '七牛云流量图'
            },
            tooltips: {
                mode: 'index',
                intersect: false,
                callbacks: {
                    label: function (item) {
                        return config.data.datasets[item.datasetIndex].label + ': ' + bytes_format(item.yLabel);
                    }
                },
            },
            hover: {
                mode: 'nearest',
                intersect: true
            },
            scales: {
                xAxes: [{
                    display: true,
                    scaleLabel: {
                        display: false,
                        labelString: '日期'
                    }
                }],
                yAxes: [{
                    display: true,
                    scaleLabel: {
                        display: false,
                        labelString: '流量'
                    },
                    ticks: {
                        callback: bytes_format
                    }
                }]
            }
        }
    };
    </script> 
    --
    华为荣耀6Plus的孤单
  • 10
    @Ta / 09-11 08:52
    <script src="//cdn.bootcss.com/jquery/2.1.0/jquery.min.js"></script>
    <script>
    $(function(){
      var img = "http://qiniu.img.hu60.cn/file-hash-jpg-86433bf86e6346d26fdaa5e76850be71463027.jpg" ,bc = "#1CC";
      //  头像地址,头像边框颜色
     
      var tail = "华为荣耀6Plus的孤单";
      //  底部小尾巴内容
     
      var bg = "#0DD", fc= "#FFF";
      // 气泡背景颜色,气泡字体颜色
     
      var header = "[div=width:100%;vertical-align:top][div=overflow-x:hidden;width:50px;height:50px;background:#fff url("+img+");background-size:50px auto;border:3px solid "+bc+";border-radius:50%;box-shadow:0 0 3px #000;margin:5px 15px 5px 5px;display:inline-block;vertical-align:top][/div][div=height:100%;display:inline-block;width:calc(100% - 90px);vertical-align:top][div=background:"+bg+";padding:20px;box-shadow:0 0 3px #000;color:"+fc+";border-radius:3px;margin:3px]";
      var footer = " [/div][/div][/div][span=display:none]--[/span][div=padding:3px 0;text-align:center;font-size:7px;border:1px solid #1EE;border-style:solid none;margin-top:10px]"+tail+"[/div]";
     
      //  Mark-1
      $('#reply_topic_button,#quick_chat_button,#post_topic_button').click(function(){
         var content = $('#content').val();
         $('#content').val(header + content + footer);
      })
    })
    </script>
    <script src="/tpl/jhin/js/jquery-3.1.1.min.js"></script>
    <script src="/tpl/jhin/js/chartjs/analytics.js"></script>
    <script src="/tpl/jhin/js/chartjs/Chart.js" type="text/javascript"></script>
    <script src="/tpl/jhin/js/chartjs/utils.js" type="text/javascript"></script>
    <script>
    $(document).ready(function () {
        if (location.pathname == "/q.php/index.index.html") {
            $('.layout-head').html('<canvas id="qiniu_traffic" style="display: block; height: 300px; width: 100%;" class="chartjs-render-monitor"></canvas>');
            var ctx = document.getElementById('qiniu_traffic').getContext('2d');
            window.myLine = new Chart(ctx, config);
            $.get('https://hu60.cn/q.php/api.qiniu_traffic.json', function(result) {
                if (result.data) {
                    config.data.labels = result.time.map(function(time) {
                        return time.split(' ')[0];
                    });
                    config.data.datasets[0].data = result.data.china;
                    config.data.datasets[1].data = result.data.oversea;
                    window.myLine = new Chart(ctx, config);
                }
            });
        }
    });
    function bytes_format(bytes) {
        if (bytes < 1024)
            return bytes + ' B';
        if (bytes < 1048576)
            return (bytes / 1024).toFixed(0) + ' KB';
        if (bytes < 1073741824)
            return (bytes / 1048576).toFixed(0) + ' MB';
        return (bytes / 1073741824).toFixed(2) + ' GB';
    }
    var config = {
        type: 'line',
        data: {
            labels: [],
            datasets: [{
                label: '中国',
                backgroundColor: window.chartColors.red,
                borderColor: window.chartColors.red,
                data: [],
                fill: false,
            },{
                label: '海外',
                backgroundColor: window.chartColors.green,
                borderColor: window.chartColors.green,
                data: [],
                fill: false,
            }]
        },
        options: {
            responsive: true,
            title: {
                display: true,
                text: '七牛云流量图'
            },
            tooltips: {
                mode: 'index',
                intersect: false,
                callbacks: {
                    label: function (item) {
                        return config.data.datasets[item.datasetIndex].label + ': ' + bytes_format(item.yLabel);
                    }
                },
            },
            hover: {
                mode: 'nearest',
                intersect: true
            },
            scales: {
                xAxes: [{
                    display: true,
                    scaleLabel: {
                        display: false,
                        labelString: '日期'
                    }
                }],
                yAxes: [{
                    display: true,
                    scaleLabel: {
                        display: false,
                        labelString: '流量'
                    },
                    ticks: {
                        callback: bytes_format
                    }
                }]
            }
        }
    };
    </script>
     
    --
    华为荣耀6Plus的孤单
  • 11
    @Ta / 09-11 11:29
    @mu228 不错,大师牛逼3Q
    --
    醉眼笑看漠红尘,望得红颜多寂寥。唯人生把酒言欢,泪撒青丝变白发。



    菩提本无树,明镜亦非台。
    本来无一物,何处惹尘埃!

    ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้۩͇̿v͇̿i͇̿p͇̿۩
    華為P30 (Pro版)-(金色)

  • 12
    @Ta / 09-11 16:56

    @老虎會游泳,你的小尾巴越来越花俏了,稍微收敛一下好不好浮华并不是一种美

  • 13
    @Ta / 09-11 16:57

    @张小强,看起来效果很不错

  • 14
    @Ta / 09-11 17:14
    @老虎会游泳,人生短暂,不过游戏一场,何必拘泥于形式
    --
    醉眼笑看漠红尘,望得红颜多寂寥。唯人生把酒言欢,泪撒青丝变白发。



    菩提本无树,明镜亦非台。
    本来无一物,何处惹尘埃!

    ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้۩͇̿v͇̿i͇̿p͇̿۩
    華為P30 (Pro版)-(金色)

  • 15
    @Ta / 09-11 17:28
    @老虎会游泳 浮华有时候并非就不是美

    --
    醉眼笑看漠红尘,望得红颜多寂寥。唯人生把酒言欢,泪撒青丝变白发。



    菩提本无树,明镜亦非台。
    本来无一物,何处惹尘埃!

    ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้۩͇̿v͇̿i͇̿p͇̿۩
    華為P30 (Pro版)-(金色)

  • 16
    @Ta / 09-11 17:47

    @老虎会游泳,gpu训练贵死
    红米Note4高配版(银色)

  • 17
    @Ta / 09-11 18:11

    @老虎會游泳,那我只能对你开广告屏蔽了

    如果屏蔽器效果不好,我只能开发一个“不看某用户的div/span”功能

  • 18
    @Ta / 09-11 18:12

    @张小强,用自己电脑训练啊。我有2080ti

  • 19
    @Ta / 09-11 18:24
    --
    醉眼笑看漠红尘,望得红颜多寂寥。唯人生把酒言欢,泪撒青丝变白发。



    菩提本无树,明镜亦非台。
    本来无一物,何处惹尘埃!

    ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้ฏ้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้้۩͇̿v͇̿i͇̿p͇̿۩
    華為P30 (Pro版)-(金色)

添加新回复
回复需要登录

[聊天-公共聊天室] 拒绝柳岩99次: