如何利用深度学习技术处理图像水印?

如何利用深度学习技术处理图像水印?

作者 | 李翔

转载自公众号视说AI(ID: techtalkai)

作者简介:李翔,国内某互联网大厂AI民工,前携程酒店图像技术负责人,主导并参与一系列图像智能化算法的研发与落地工作。在ICCV和CVPR等学术会议及国际期刊上发表论文十余篇。

写在前面

水印作为一种保护版权的有效方式被广泛地应用于海量的互联网图像,针对水印的各种处理显得越来越重要,比如水印的检测和水印的去除与反去除。在这里我们和大家分享一下业余期间在水印智能化处理上的一些实践和探索,希望可以帮助大家在更好地做到对他人图像版权保护的同时,也能更好地防止自己的图像被他人滥用。

我们大家在日常生活中如果下载和使用了带有水印的互联网图像,往往既不美观也可能会构成侵权。为了避免使用带有水印的图像带来的各种影响,最直接的做法就是将带有水印的图像找出来丢弃不用,此外还有一种不推荐的做法就是去掉图像上的水印后再使用。

接下来我们将会围绕上述两种大家常见的做法展开,首先介绍如何利用深度学习技术快速搭建一个水印检测器,实现水印的自动检测,同时我们还会进一步展示在水印检测的基础上如何利用深度学习技术设计一个水印去除器,自动将图像上的水印去除。

一个包罗万象的水印数据集

无论是搭建水印检测器或是水印去除器,都需要海量水印图像作为数据基础。然而现实中并没有直接可以使用的水印图像数据集。因此,我们的首要任务是构建一个水印图像数据集。首先我们要收集各式各样的水印,为了保证后续模型良好的泛化性能,水印的种类要尽可能的多,水印样式也要尽可能的丰富。

如何利用深度学习技术处理图像水印?

我们一共收集了80种来自于公司、组织和个人的水印,包括了中文、英文和logo等不同样式。接下来就是制作带水印的图像,为了保证图像数据的一般性,我们将公开的PASCAL VOC 2012数据集的图像作为原始的无水印图像,然后利用图像处理工具将收集的80种水印以随机的大小、位置和透明度打在原始图像上,同时记录下水印的位置信息,从而得到第一个大规模的水印图像数据集。

如何利用深度学习技术处理图像水印?

水印数据集的80%被划分为训练集,剩余的20%被划分为测试集,为了适应现实场景中需要机器自动检测和去除从未见过的水印的需求,我们确保训练集中的水印不会出现在测试集中,这样可以很好地模拟现实生活中的使用场景。现在水印图像数据集已经准备就绪,接下来就是如何去搭建水印检测器和去除器。

能够一眼看穿各类水印的检测器

水印在图像中的视觉显著性很低,具有面积小,颜色浅,透明度高等特点,带水印图像与未带水印图像之间的差异往往很小,区分度较低。为了构建一个有效的水印检测器,我们将图像水印检测问题转化为一种特殊的单目标检测任务,即判断图像中是否有水印这一单目标存在。

当前基于深度学习的目标检测模型有很多,可以分为以Faster R-CNN为代表的两阶段目标检测算法和以YOLO和RetinaNet等为代表的单阶段目标检测算法。前者是先由算法生成一系列待检测目标的候选框,再通过卷积神经网络进行候选框的分类;后者则不用产生候选框,直接将目标边框定位的问题转化为回归问题处理。一般来说单阶段的算法在检测速度上会更快,但检测精度上会有所下降。我们在这里分别基于Faster R-CNN、YOLOv2和RetinaNet这三种目标检测算法来搭建水印检测器,从对比的结果来看,三种方法都展现了令人满意的检测效果,其中以RetinaNet最优。

如何利用深度学习技术处理图像水印?

为了更加直观地展示我们搭建的基于RetinaNet的水印检测器的效果,我们将测试集上的水印检测结果可视化,蓝色的框是实际的水印区域,红色的框是检测器定位的水印区域,从可视化结果可以看出,对于未出现在训练集中的水印,我们的水印检测器依然可以一眼就看穿。有了这样一款水印检测器,我们就可以在海量图像中快速又准确地检测出带水印的图像。

如何利用深度学习技术处理图像水印?

往前走一步:从检测到去除

如果只是利用AI来自动检测水印,是不是总感觉少了点什么?接下来我们在水印检测的基础上往前再走一步,利用AI实现水印的自动去除。因为水印在图像上的面积较小,所以直接对整幅图像进行水印去除显得过于粗暴,也会严重拖慢去除速度。针对这种情况我们结合水印检测设计了更贴合实际操作的水印处理流程,我们先通过水印检测器检测出水印区域,然后对水印区域进行水印去除操作。

如何利用深度学习技术处理图像水印?

水印去除问题可以看作是一个从图像到图像的转换问题,即将带水印的图像转换为无水印的图像。这里我们使用全卷积网络来搭建水印去除器,实现这种图像到图像的转换。全卷积网络的输入是带水印的图像区域,经过多层卷积处理后输出无水印的图像区域,我们希望网络输出的无水印图像能够和原始的无水印图像尽可能的接近。

如何利用深度学习技术处理图像水印?

为了尽可能提升网络输出无水印图像的质量,我们采用U-net结构替换了传统的编解码器结构,将输入信息添加到输出中,从而尽可能保留了图像的背景信息。同时我们采用感知损失(Perceptual Loss)和一范数损失(L1 Loss)相结合的方式替换传统的均方误差损失(MSE Loss),使输出的无水印图像在细节和纹理上能够更贴近原图。

如何利用深度学习技术处理图像水印?

我们将水印去除器在测试集上的一些去水印效果可视化,左列是输入的水印区域,右列是输出的无水印区域。从可视化的结果可以看出对未知水印的去除效果还是不错的。

写在最后

针对水印的各种处理一直是研究的热点,也吸引了越来越多的关注。本文介绍了如何通过当前流行的深度学习技术来搭建水印的检测器和去除器,实现对水印的智能处理。

在后续的文章中,我们会进一步介绍一种更强大的水印去除器,也会提出一些对水印反去除的思考。值得注意的是,版权保护是大家一直要坚持的事情,水印去除的研究目的更多是为了通过攻击水印来验证其是否有效,从而促进水印反去除能力的提升。保护版权,AI有责

参考资料:

[1] Large-scale visible watermark detection and removal with deep convolutional networks

[2] Focal loss for dense object detection

[3] U-net: Convolutional networks for biomedical image segmentation

相关推荐