xdFai / SCTransNet

[IEEE TGRS 2024] SCTransNet: Spatial-channel Cross Transformer Network for Infrared Small Target Detection
88 stars 1 forks source link

一些关于代码的问题 #14

Open lxproot opened 1 month ago

lxproot commented 1 month ago

作者你好,有两个问题。

1.感觉PD_FA的指标的计算有问题,用面积值当索引来检查有没有匹配,但是会出现一种情况就是比如两个区域的面积都是2,一个是匹配的 一个是不匹配的,但是因为用面积当索引,所以只要面积为2的有一个匹配,另一个不匹配的也没办法发现

505f0c794c320f3bff708af996ad2c2

2.F1的输出结果一直为0

xdFai commented 1 month ago

感谢你的指正~

  1. 指标计算没有问题,请查看我论文中对FA的定义,代码中的计算方式与论文保持一直。 我之所以选择这种计算方式是为了和ROC曲线匹配,事实上也可以使用DNANet中的Fa计算方式:对于三个像素条件下,目标级别Pd没有匹配上的目标都算做虚警,且虚警目标按照整个像素数/图像像素去计算。这两种计算方式都是OK的。
  2. 我也发现了F1这里没有传回函数的返回数值,我会重新上传一下改好的文件。
xdFai commented 1 month ago

如果你想计算目标级别的虚警,请参考我另外的工作 EDGSP,那里面我用的就是纯目标级别的虚警。

lxproot commented 1 month ago

感谢您的回复。 1.对于F1没有计算结果,我排查后发现是在test的时候没有做 update 操作。 2.test.py文件存在多处BUG,具体我修改了什么地方我忘了,只记得有①img = Variable(img)在test中被注释,导致GPU好像无法运行。②dataset_names的传参,好像使用type=list的话,会导致我传入 NUAA 被解析成 ['N','U','A','A']这样的形式,这一步也需要修改。

3.对于PDFA的问题,可能我描述的不太清楚?你好像误解了我的意思,我举个例子重新表述一遍。 代码中是使用 image_area_total 这个列表存放了 image(预测图)的识别区域面积,然后用 image_area_match 列表存放能被 label(标签)匹配的识别面积,但这就有一个问题,如下。 例如我的 image_area_total = [5,5,5],也就是三个面积相同大小的区域。 那么如果只有第一个面积[5]匹配到(剩下的 [5,5] 没有匹配到),由于 image_area_match = [5] 在代码 self.dismatch = [x for x in self.image_area_total if x not in self.image_area_match] 我们不难发现 dismatch的结果会=[],但实际上我们期望的结果是 [5,5] 不知道这么说你有没有发现这个代码的不合理,也就是说 相同面积大小的区域,只要有一个被匹配了,其他没有匹配的块也被认为了匹配。

xdFai commented 1 month ago

1.F1那个的确是没有给update,是我上传之前不小心删注释的时候删掉了,测试代码当时上传的确实比较马虎。 2.因为在上传代码前我是在cpu上调整的,因此想在GPU运行需要自己做一下调整;dataset这个我也是自己随手调试了下,后续就没有在git上更新。 3.我明白你说的意思了,感谢你的指出,确实存在这种比较特殊的情况。 test文件在Pd 和Fa的判定上需要进一步优化,我看BasicIRSTD工具包“[https://github.com/XinyiYing/BasicIRSTD”]里面的计算方式似乎更合理一些。 你可以参考这个工具包做测试,不过我相信这并不会影响SCTransNet与其他IRSTD算法的相对性能。

lxproot commented 1 month ago

感谢您的回复。

确实这种特殊的情况很少出现,并且可能是因为SCTransNet比较优秀,目前我用的数据测试识别基本正确,所以没有这种漏判,对数值影响不大。

但我认为还是有必要指出这个BUG,这可能使得PDFA虚高,若有其他同学参考了您的代码,可能就会错误预估了自己模型的性能,同时也可能使得参考的baseline指标虚高。

我没有疑问了,最后感谢您对这个问题的跟进。