VDIGPKU / T-SEA

[CVPR 2023] T-SEA: Transfer-based Self-Ensemble Attack on Object Detection
93 stars 10 forks source link

ground truth label生成问题 #27

Open arcus99 opened 2 months ago

arcus99 commented 2 months ago

我在实验中注意到,如果使用您提供的gt label,得到的测试结果与论文中较为接近;但如果使用您所提供的预训练模型自行生成gt label,测试结果会有比较大的下降,得到的数值与此前的issue中比较接近,与论文中差距较大。

想请问下您所提供的ground truth label是如何生成的?如果我想要使用其他模型进行测试,该如何正确获取gt label呢?

ziyannchen commented 2 months ago

这边提供的generated labels就是利用目标模型检测输出的结果,如果模型generated label输出设置的置信度和测试设置的检测置信度一致,以及最后计算的时候bbox的scale正确的话,应该是可以复现的

arcus99 commented 2 months ago

这边提供的generated labels就是利用目标模型检测输出的结果,如果模型generated label输出设置的置信度和测试设置的检测置信度一致,以及最后计算的时候bbox的scale正确的话,应该是可以复现的

你好,我后续又分析了下出现上面情况的原因:您所提供的generated label对应使用的dataloader中,应该是直接将图像resize到了416*416;但是在所提供的代码中,dataloader对图像载入的处理是先对短边pad再进行resize,即code,因此测试时如果使用gen_det_labels.py生成的标签,会出现偏差。

我分别尝试了不同的组合方式,发现似乎使用pad+resize得到对抗标签,结合干净样本直接resize得到的标签计算mAP更符合论文中的结果。但在我的理解中,在生成干净样本和对抗样本标签时,图像载入的处理方式应该保持一致。不知是否我理解有误?想请问下这样计算的原因是什么?

ziyannchen commented 2 months ago

这边提供的generated labels就是利用目标模型检测输出的结果,如果模型generated label输出设置的置信度和测试设置的检测置信度一致,以及最后计算的时候bbox的scale正确的话,应该是可以复现的

你好,我后续又分析了下出现上面情况的原因:您所提供的generated label对应使用的dataloader中,应该是直接将图像resize到了416*416;但是在所提供的代码中,dataloader对图像载入的处理是先对短边pad再进行resize,即code,因此测试时如果使用gen_det_labels.py生成的标签,会出现偏差。

我分别尝试了不同的组合方式,发现似乎使用pad+resize得到对抗标签,结合干净样本直接resize得到的标签计算mAP更符合论文中的结果。但在我的理解中,在生成干净样本和对抗样本标签时,图像载入的处理方式应该保持一致。不知是否我理解有误?想请问下这样计算的原因是什么?

请问在你的实验里,不同组合方式的结果相差大吗?按道理来说我们的实验使用的应该是保持一致的pad+resize的方式。

arcus99 commented 2 months ago

我用了所提供的v5-demo.png进行测试,下面第一行是都使用pad+resize得到的结果;第二行是都使用resize得到的结果;第三行是生成标签时使用直接resize、测试时使用pad+resize的结果(直接使用源代码和所提供的标签测试)。 目前看后两种设置是比较接近的,但如果都是pad+resize是有比较大的偏差。

Method YOLOv2 YOLOv3 YOLOv3tiny YOLOv4 YOLOv4tiny YOLOv5 Faster RCNN SSD Avg
p-p 27.58 34.19 16.81 54.25 34.04 20.25 36.0 51.92 34.38
s-s 8.72 15.74 5.38 33.6 14.33 12.85 23.59 34.24 18.56
p-s 12.9 19.65 7.86 31.47 17.99 1.2 16.07 31.61 17.34
ziyannchen commented 2 months ago

我用了所提供的v5-demo.png进行测试,下面第一行是都使用pad+resize得到的结果;第二行是都使用resize得到的结果;第三行是生成标签时使用直接resize、测试时使用pad+resize的结果(直接使用源代码和所提供的标签测试)。 目前看后两种设置是比较接近的,但如果都是pad+resize是有比较大的偏差。

Method YOLOv2 YOLOv3 YOLOv3tiny YOLOv4 YOLOv4tiny YOLOv5 Faster RCNN SSD Avg p-p 27.58 34.19 16.81 54.25 34.04 20.25 36.0 51.92 34.38 s-s 8.72 15.74 5.38 33.6 14.33 12.85 23.59 34.24 18.56 p-s 12.9 19.65 7.86 31.47 17.99 1.2 16.07 31.61 17.34

用所提供的标签测试是指? 这里的“都用pad+resize“的实验意思不是指用pad+resize生成generated label,然后用pad+resize进行测试的意思吗?

arcus99 commented 2 months ago
  1. 就是用谷歌云盘提供的标签直接测试;
  2. 是这个意思,但是我用pad+resize生成的标签和云盘里提供的标签有一定差别;直接resize得到的结果更接近云盘里的标签。

    ----------回复的邮件信息---------- Ziyan @.***> 于2024年8月27日(周二) 晚上10:11写道:

我用了所提供的v5-demo.png进行测试,下面第一行是都使用pad+resize得到的结果;第二行是都使用resize得到的结果;第三行是生成标签时使用直接resize、测试时使用pad+resize的结果(直接使用源代码和所提供的标签测试)。 目前看后两种设置是比较接近的,但如果都是pad+resize是有比较大的偏差。

MethodYOLOv2YOLOv3YOLOv3tinyYOLOv4YOLOv4tinyYOLOv5Faster RCNNSSDAvg p-p27.5834.1916.8154.2534.0420.2536.051.9234.38 s-s8.7215.745.3833.614.3312.8523.5934.2418.56 p-s12.919.657.8631.4717.991.216.0731.6117.34

用所提供的标签测试是指? 这里的“都用pad+resize“的实验意思不是指用pad+resize生成generated label,然后用pad+resize进行测试的意思吗?

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>

ziyannchen commented 2 months ago

不好意思,我好像没有太理解你的意思。 如果是直接用提供的标签的话,不是应该只有“provided labels & test with pad+resize”、"provided labels & test with resize"两种组合吗?那这三个组合是什么意思?

arcus99 commented 2 months ago

抱歉我表格中的缩写有一定歧义。 第一行:pad+resize得到的label, 测试时pad+resize; 第二行:resize得到的label,测试时resize; 第三行:provided label,测试时pad+resize。

前两行的label都是我自己本地生成的。目前就我测试的结果来看,provided label似乎不是用pad+resize生成,而是直接resize得到的。

例如以INRIA中crop_00001为干净样本、YOLOv2为检测器,我本地对干净样本直接resize得到的标签是: person 106.4952392578125 30.230440139770508 288.0585632324219 368.8246765136719 pad后resize得到的标签为: person 140.00144958496094 42.30187225341797 260.10504150390625 370.78253173828125 谷歌云盘中所提供的标签为: person 106.49113273620605 30.212624549865723 288.0601119995117 368.83240127563477

ziyannchen commented 2 months ago

抱歉我表格中的缩写有一定歧义。 第一行:pad+resize得到的label, 测试时pad+resize; 第二行:resize得到的label,测试时resize; 第三行:provided label,测试时pad+resize。

前两行的label都是我自己本地生成的。目前就我测试的结果来看,provided label似乎不是用pad+resize生成,而是直接resize得到的。

例如以INRIA中crop_00001为干净样本、YOLOv2为检测器,我本地对干净样本直接resize得到的标签是: person 106.4952392578125 30.230440139770508 288.0585632324219 368.8246765136719 pad后resize得到的标签为: person 140.00144958496094 42.30187225341797 260.10504150390625 370.78253173828125 谷歌云盘中所提供的标签为: person 106.49113273620605 30.212624549865723 288.0601119995117 368.83240127563477

Hello,感谢你对问题详细的解释。看你这个pad+resize的结果似乎有一些问题,我们最后的标签应该是舍弃了pad的部分(减去左/上pad大小)这样才能统一,不然不同的检测器输入大小不同的话,pad可能也会有所不同。 这样的话,载入的时候也需要加上pad的大小。