视频教程https://www.zhihu.com/question/333086833/answer/841650555
用深度学习方法进行图像去水印,需要大量的训练图像样本对,即带有水印的图片和干净的图片。
我使用英伟达与MIT提出的noise2noise方法实现去水印。
经过题主测试,模型训练样本及次数足够多,去水印后的原图基本上接近原图98%以上。
其效果好过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行修改为以下代码
img = img.copy()
TRANSPARENCY = random.randint(28, 82)
image = Image.fromarray(img)
watermark = Image.open('./watermark.png')#水印路径
if watermark.mode!='RGBA':
alpha = Image.new('L', watermark.size, 255)
watermark.putalpha(alpha)
random_X = random.randint(-750 , 45)
random_Y = random.randint(-500 , 30)
paste_mask = watermark.split()[3].point(lambda i: i * TRANSPARENCY / 100.)
image.paste(watermark, (random_X , random_Y ), mask=paste_mask)
return 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)
原图:
水印图:
去水印图:
原图:
水印图:
去水印图:
原图:
水印图:
去水印图:
第三张羊驼图去除的比较干净。是因为我用的数据集中存在大量的草地相似图。