Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

给各位省点时间,看到我这条issue就不要继续折腾这个repo了 #81

Open
SalenGit opened this issue Jun 2, 2024 · 2 comments

Comments

@SalenGit
Copy link

SalenGit commented Jun 2, 2024

因为一个项目的需求从pwc上找到了这个项目,通读他们的论文和code之后发表一下自己的浅薄看法,如果有误轻喷。

这文章的噱头是非常足的,用匈牙利匹配来做点之间的一对一匹配,用类似DETR的思路直接回归每个点的坐标。但是点之间没有检测任务里的iou作为cost,所以只能采用distance和class作为cost。这听起来似乎是比较合理的。
那么这套代码是怎么实现的呢,他没有像DETR一样随机初始化一个Transformer Deocder,而是直接用了VGG的特征图,并且给每个坐标都预设了一个anchor,也就是说每个像素的坐标实际上已经预知了。同时,他的Matcher里给point的cost用的是坐标距离的MSE,而class的cost是概率的差值,实际上point那部分的数值已经完全盖过class了。同时因为anchor已经预设了每个像素的坐标,那么这个匹配过程实际上是完全固定的,就是匹配坐标最近的一个。实际上如果把训练过程中的匹配结果打印出来也会发现这个过程是固定的,而且总cost没有下降过。因此这个任务实际上已经完全退化为了一个像素级的二分类任务,关于点 偏移 匈牙利匹配这些东西已经完全成了摆设。
这也许也能解释为什么官方代码里故意少些一个s让point loss不参与训练,一个可以学习的坐标偏移肯定比不上预设的真实像素坐标来的准确。况且实测就算把那个loss加入训练,对结果也没有任何影响,依然不能改变那个固定的匹配过程。
而关于性能,在这么小的数据集上valid性能完全是抖出来的,所以直接拿人头的点坐标做一个二分类语义分割的unet,只要抖的够久,也能实现基本一样的性能。

这个项目初期给了我很大希望,也浪费了大量时间才意识到本质上只是一个像素分类任务。如果你认可我的观点,建议是不要继续折腾这套代码了,正如其它issue提到的,这就是拿DETR魔改来的东西,包袱非常重,debug也很困难,况且效果也不尽如人意...

@xcaizewu
Copy link

我不认同你的部分观点,虽然点偏移、匈牙利匹配是个摆设,但不能否定它的价值,你不能在今年2024年的角度去看待2021的论文。在2021年之前,都在all in 密度图去解决统计问题,虽然有像LSC-CNN用检测方法去解决统计问题,但效果是有限的,P2PNet是第一个尝试用点回归+点分类的方式去解决统计问题,输出的不在是看不到位置信息的密度图,而且在这之后,像CLTR、OT-M才在点回归上更深入的去研究。

从代码本身去讲,不管是ECCV2018的LCFCN、CVPR 2022的MAN、ECCV 2022的CLTR、CVPR2024的DiffuseDenoiseCount等算法都是在前人的基础上加了新的idea,使统计效果越来越好,这本身也是一种创新。

大部分人群统计算法为了公平的验证算法本身的效果,backbone都会采用VGG16或19,并不是想用什么backbone就上什么,P2PNet算法相对于其他算法,收敛速度是最快的,也可以很方便的移植到其他国产芯片上去做工程,既能得到人数也能看到人群的定位信息。

@SalenGit
Copy link
Author

SalenGit commented Jul 21, 2024 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants