SLBR-Visible-Watermark-Removal icon indicating copy to clipboard operation
SLBR-Visible-Watermark-Removal copied to clipboard

自定义CLWD训练集

Open luliloveshe opened this issue 2 years ago • 16 comments

使用预训练模型去水印,发现没有透明度的水印,完全没有去除效果。打算自己加入图片到训练集中来训练模型,请问CLWD训练集打水印的图片和mask是怎样生成的呢,能否提供下代码呢

luliloveshe avatar Mar 16 '22 09:03 luliloveshe

找些没有水印的图片,按照水印公式:J = I * (1-alpha) + W * alpha 生成, I为原始图片,alpha为alpha map, W为水印。mask可以自己找纯水印图片生成。

jimleungjing avatar Mar 20 '22 02:03 jimleungjing

假如我的水印没有透明度, 也就是alpha=1, 那么公式就是 J = W * alpha, 效果体现就是w在I上的一片遮挡。这样训练出来的模型,能够去除没有透明度的水印吗?不知道您尝试过没有

luliloveshe avatar Mar 22 '22 01:03 luliloveshe

“找1000张图片,打上不透明的水印,加入训练集训练, 然后测试去水印“,我正在尝试,有结果发上来

luliloveshe avatar Mar 22 '22 01:03 luliloveshe

假如我的水印没有透明度, 也就是alpha=1, 那么公式就是 J = W * alpha, 效果体现就是w在I上的一片遮挡。这样训练出来的模型,能够去除没有透明度的水印吗?不知道您尝试过没有

取png图像的alpha通道,随机生成alpha值,乘以原始的alpha通道即可

jimleungjing avatar Mar 22 '22 02:03 jimleungjing

请问 CLWD/train/Alpha 目录中的图片是怎样生成的?因为我不知道 Alpha里图片怎么生成的,所以我修改代码,不使用alpha目录里的数据来训练模型,有用吗?

luliloveshe avatar Mar 23 '22 01:03 luliloveshe

请问 CLWD/train/Alpha 目录中的图片是怎样生成的?因为我不知道 Alpha里图片怎么生成的,所以我修改代码,不使用alpha目录里的数据来训练模型,有用吗?

  1. 这个是CLWD数据集作者制作数据集时对mask乘以随机alpha值获得的;
  2. 我们的模型不依赖alpha数据

jimleungjing avatar Mar 27 '22 10:03 jimleungjing

但是我跑train.py时 如果alpha为空 会报错。可能算法里面没有用到Alpha数据吧,只是外围读取了。

luliloveshe avatar Mar 28 '22 02:03 luliloveshe

这里说明下模型训练步骤、测试效果以及问题。希望能对本项目改进有帮助。 1、各目录图片生成方式 watermark_logo 透明背景, 256x256 1648435035(1) Watermark_free_image clwd数据集选取, 256x256 1648435227 Watermark watermark_logo图 随机位置旋转角度,尺寸固定, 叠加到黑色纯色图片上生成 1648435301(1) Mask 由Watermark 二值化生成 1648435301(1) Watermarked_image watermark_logo 图叠加Watermark_free_image 图上生成, 叠加时没有给透明度,因为测试图片水印是没有透明度的,后面会说明 1648435364(1) Alpha 直接拷贝的Watermark

train和test目录 数量上1:1, 比如2000张图片,按上面的方式生成好各目录图片,然后对半切分成train和test

训练参数 两次训练都如下,只是--dataset_dir不同,一个2000张 一个4000张

--epochs 100 --schedule 65 --lr 1e-3 --gpu_id 0 --checkpoint C:/luli/slbr/slbr_checkpoint --dataset_dir C:/luli/slbr/CLWD_2000_256_256 --nets slbr --sltype vggx --mask_mode res --lambda_content 2.5e-1 --lambda_style 2.5e-1 --lambda_iou 0.25 --lambda_l1 1 --lambda_primary 0.01 --masked True --loss-type hybrid --models slbr --preprocess resize --name slbr_v1 --k_center 2 --dataset CLWD --use_refine --k_refine 3 --k_skip_stage 3 --input-size 256 --crop_size 256 --train-batch 10 --test-batch 10

2、两次训练模型和测试效果 2-1、第一次选取clwd2000张,按“1、各目录图片生成方式”生成数据集,训练模型,测试。 总的来说,识别的效果还不错

原图1 6 原图1去除后和Mask 6c922e1bb62aa87c4b5758f76f67c380_d6088a00-8899-43f8-ad5e-a2da867530d3

原图2 12 原图2去除后和Mask 99d827272aa7755e5f0acd9a065176db_a65114e9-fd06-431d-917b-6caf3cd7da96

原图3 14 原图3去除后和Mask 852d686bea17f62a7e12399da9ea856b_6974fada-2223-431e-a9ed-29fc0b508ec5

2-2、第二次选取clwd4000张,按“1、各目录图片生成方式”生成数据集,训练模型,测试 总的来说,本次识别效果反而不如2000张时 原图1去除后和Mask e3a46b7d2af8ed5d4475b3819255dc16_f48f282a-3edc-4f82-8283-b4aab803fae9

原图2去除后和Mask b832380a1d044d789fdc56abb24affd8_81da43e7-7de8-4492-8a9f-5a46fb25b896

原图3去除后和Mask 097ec942e0af89ebb3537f6ccdb7b296_27f0fa8b-5afb-4745-b920-1db76d6df19d

3、问题 3-1、为什么训练规模变大了,反而识别效果变差了呢?4000张不如2000张 3-2、整个生成训练集和训练过程中有什么错误和改进的地方呢? 3-3、我测试的水印是不带透明度的,本项目怎样改进可以支持去掉或者识别出来呢?还是说不支持不带透明度的水印?

luliloveshe avatar Mar 28 '22 03:03 luliloveshe

3、问题

  1. 训练与测试所用的水印最好没有交集,不然你相当于训练时见过测试集的水印了,测试的识别肯定很好;训练所用图片为256x256,测试图片1尺度达到1200x900,分辨率不匹配;最好训练与测试的分辨率大致匹配;训练与测试的数据分布需要一致。
  2. 不带透明度的就用该模型识别也可以,去除可以使用inpainting模型;

jimleungjing avatar Mar 29 '22 03:03 jimleungjing

按您说的进行新一次模型训练、测试去水印,本次数据集train和test彼此独立。用来去水印的图和logo也不在train和test中。 识别的效果很差, 详细说明如下:

1、各目录图片生成方式 watermark_logo 透明背景,文字不透明, 256x256, 注:红框处是windows资源管理器显示问题,实际和其他logo一样都是透明背景 65b119949d1d09b2541fdbc36351a6f5_64b197fe-1cc9-4dfc-a144-5167e87d80b5

Watermark_free_image clwd数据集选取, 256x256 b0a8932868d4fb29a8b9030f982b5f0d_2bab20ab-a477-41b5-962c-f464272112c7

Watermark watermark_logo图 位置、旋转、尺寸随机, 叠加到黑色纯色图片上生成 29864d447f3cd14191ab492f2f1cdb6e_4a68b7a3-92bb-4bff-a53b-abef1794ead3

Mask 由Watermark 二值化生成 463eee8a01c57756ec092b8efb0fbd4e_e16342c2-71ac-411a-a15a-d8ad0f19a40a

Watermarked_image watermark_logo 图叠加Watermark_free_image 图上生成, 叠加时没有给透明度 b335e19ce4dd83e39ab37b85070bbcd1_78133766-e216-48b0-9536-b79a12543e9b

Alpha 直接拷贝的Watermark train和test目录 1-1、logo30张, train:20张,test:10张,train和test彼此独立 1-2、clwd数据集 2000张, train:1000张,test:1000张 256x256,train和test彼此独立 1-3、按上面的方式生成好各目录图片

2、去水印效果

1200x900 6f461ee22d0f7931629730a010a110d0_c914cf2c-d8b5-4907-96e4-b167338f994a

330x589 c47225b2c347fdfc124992c4b7a4d367_93b68d38-c90a-4dd2-b090-68b71ea106f3

1920x2037 7c8c4eb18f2e75aa09c5d7f84db9ac81_f201344f-980f-41b4-bc40-d90e3695bf59

3、问题 3-1、这一次测试train、test、要去水印的图3者彼此独立,但是效果反而最差,我推测的原因可能有:Mask生成,二值化处理过于粗糙,有些连在了一起。请问哪里需要改进? 3-2、之前您说过训练数据集图片尺寸最好和去水印的图尺寸差不多,那是不是意味着,我来了一批尺寸和训练模型尺寸差别很大的图片,那么就需要重新训练对应尺寸的模型?如果这样的话,那收集对应尺寸图片集就是一个不小的工作量

luliloveshe avatar Mar 30 '22 08:03 luliloveshe

3-1、这一次测试train、test、要去水印的图3者彼此独立,但是效果反而最差,我推测的原因可能有:Mask生成,二值化处理过于粗糙,有些连在了一起。请问哪里需要改进?

  1. train与test水印独立是为了验证你训练的模型的泛化性,如果你仅针对特定几个水印去除,可以训练集与测试集不独立;效果差大概是因为训练图片数目不够,至少一万张以上;其次训练集与测试集的背景图分布也要一致,不能训练集是clwd的从pascal爬来的数据,测试集是其他cg图片。

3-2、之前您说过训练数据集图片尺寸最好和去水印的图尺寸差不多,那是不是意味着,我来了一批尺寸和训练模型尺寸差别很大的图片,那么就需要重新训练对应尺寸的模型?如果这样的话,那收集对应尺寸图片集就是一个不小的工作量

可以训练多个模型,针对低分辨率,中分辨率,高分辨率分别处理。模型的训练与测试应保持分布一致,否则需要引入迁移学习的内容。

jimleungjing avatar Mar 30 '22 16:03 jimleungjing

感谢赐教,我再试试,晚些发结果上来

luliloveshe avatar Mar 31 '22 09:03 luliloveshe

有几个细节还需要确定一下,麻烦您了 1、针对您说的:训练集与测试集, 指的就是train目录和test目录吧? 2、针对您说的:“如果你仅针对特定几个水印去除,可以训练集与测试集不独立”,以2000张原图和30个Logo为例, 意思是说30个logo打在2000原图上,然后数量1:1随机分成训练集和测试集? 3、针对您说的:“其次训练集与测试集的背景图分布也要一致”,本批次测试,是从clwd选取2000张按数量1:1分成训练集和测试集,这就是“背景图分布也要一致”吧?

luliloveshe avatar Mar 31 '22 09:03 luliloveshe

针对您说的:训练集与测试集, 指的就是train目录和test目录吧?

是的

2、针对您说的:“如果你仅针对特定几个水印去除,可以训练集与测试集不独立”,以2000张原图和30个Logo为例, 意思是说30个logo打在2000原图上,然后数量1:1随机分成训练集和测试集?

是的,数目比例可以是7:3

  1. 这就是“背景图分布也要一致”吧?

对的,如果你要测试cg图的水印去除,训练集需要加入cg图作为背景的水印图。

jimleungjing avatar Apr 02 '22 09:04 jimleungjing

为方便描述,有下面几个概念统一一下: 1、每次训练模型和测试以“日期-序号”作为批次号加以区分, 之前汇报过2次,3个批次,就叫批次1、2、3, 其中批次1效果最好,和批次2对比汇报。 2、train目录:训练集,test目录:测试集, 一般描述时使用"test目录“和"train目录" 3、自定义测试图:独立于test目录和train目录、需使用训练好的模型来去除水印的图片。不是从clwd选取,我自己随便找的。

新的20220405-1批次 这次和批次2所有的操作一样,只是图片数量增加为2w张,但是效果很不理想。有以下几点疑问: 1、本批次test目录、train目录使用的30logo和自定义测试图使用的logo是不同的,之前批次1效果好,是把自定义测试图使用的logo也用来生成test目录、train目录。那就意味着:要去除自定义测试图的水印logo, 训练模型时必须test目录、train目录包含自定义测试图的水印logo? 2、因为2w张图,这次训练耗时28个小时。可以的话,能否具体给出修改点,进行下一次训练,以免因我知识欠缺造成时间浪费,十分感谢

luliloveshe avatar Apr 06 '22 02:04 luliloveshe

  1. 跟之前说的一样,如果你之后的目的只是想去除自定义测试图的水印,那就train可以包含要去除的水印;否则想做通用一点的去除,应该从train训练的水印入手,增加水印的样式,与你的自定义测试图水印类型、风格一致,使得模型更鲁棒;
  2. 数据集大的时候有资源就用多个gpu一起训练,没有的话,先用5000张这样的量级验证可行性。

jimleungjing avatar Apr 09 '22 04:04 jimleungjing