dk-liang / TransCrowd

[SCIS] TransCrowd: Weakly-Supervised Crowd Counting with Transformers

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

关于参数设置问题

AF2O opened this issue · comments

commented

你好,我正在复现你的代码。有两点疑问:

  1. batch_size 为多少?原文中并未提到
  2. 文中提到,regression token 有两个线性层,请问第一个线性层采用的权重维度是VIT的code中的representation_size吗?具体是多少呢?另外,连个线性层之间的activate function 用的是‘tanh’还是‘gelu’?预训练模型的head中的参数需要load进来吗?

Batch size 为24,激活函数为Relu,需要load pretrained

commented

谢谢

Batch size 为24,激活函数为Relu,需要load pretrained

你好,请问一下线性层的隐层大小设置的是多少呀?是N->N->1, N->2N->1, N->1/2*N->1,还是别的设置呢?
另外,GAP的话的output_size设置的是多少呢?

我目前复现下来的结果MAE在73左右,希望得到您的解答,谢谢。

commented

Batch size 为24,激活函数为Relu,需要load pretrained

你好,请问一下线性层的隐层大小设置的是多少呀?是N->N->1, N->2N->1, N->1/2*N->1,还是别的设置呢?
另外,GAP的话的output_size设置的是多少呢?

我目前复现下来的结果MAE在73左右,希望得到您的解答,谢谢。

@bridgeqiqi 同有疑问,预训练模型给的head的维度是21843, 不然跑不通,于是我设的是线性层是N->21843->1,前面一层Load的预训练模型,后面一层就是直接训,也不知道对不对,总感觉这样的维度骤降有点问题......
希望得到作者的解答。

Batch size 为24,激活函数为Relu,需要load pretrained

你好,请问一下线性层的隐层大小设置的是多少呀?是N->N->1, N->2N->1, N->1/2*N->1,还是别的设置呢?
另外,GAP的话的output_size设置的是多少呢?
我目前复现下来的结果MAE在73左右,希望得到您的解答,谢谢。

@bridgeqiqi 同有疑问,预训练模型给的head的维度是21843, 不然跑不通,于是我设的是线性层是N->21843->1,前面一层Load的预训练模型,后面一层就是直接训,也不知道对不对,总感觉这样的维度骤降有点问题......
希望得到作者的解答。

我的理解可能regression_head应该不是用的pretrained model里的,可能是重新写的?论文里这一块好像没有讲的很清楚?不知道对不对。。。

Batch size 为24,激活函数为Relu,需要load pretrained

你好,请问一下线性层的隐层大小设置的是多少呀?是N->N->1, N->2N->1, N->1/2*N->1,还是别的设置呢?
另外,GAP的话的output_size设置的是多少呢?
我目前复现下来的结果MAE在73左右,希望得到您的解答,谢谢。

@bridgeqiqi 同有疑问,预训练模型给的head的维度是21843, 不然跑不通,于是我设的是线性层是N->21843->1,前面一层Load的预训练模型,后面一层就是直接训,也不知道对不对,总感觉这样的维度骤降有点问题......
希望得到作者的解答。

朋友留个联系方式交流一波

commented

Batch size 为24,激活函数为Relu,需要load pretrained

你好,请问一下线性层的隐层大小设置的是多少呀?是N->N->1, N->2N->1, N->1/2*N->1,还是别的设置呢?
另外,GAP的话的output_size设置的是多少呢?
我目前复现下来的结果MAE在73左右,希望得到您的解答,谢谢。

@bridgeqiqi 同有疑问,预训练模型给的head的维度是21843, 不然跑不通,于是我设的是线性层是N->21843->1,前面一层Load的预训练模型,后面一层就是直接训,也不知道对不对,总感觉这样的维度骤降有点问题......
希望得到作者的解答。

朋友留个联系方式交流一波

caijiatong@buaa.edu.cn

We have released the code.

梁师兄好:       恭喜师兄论文Accepted!       我是重庆大学研究人群计数的师弟,也经常听导师说白老师团队十分厉害,看完你的code后有一些问题想请教一下:      1、文中提到对于尺寸不一致的图片均resize至 1152x768,再将其crop成6个 384x384的patch作为VIT的输入,这就带来一个问题,Transformer的输入为图像patch(384x384),这样的话弱监督标签就需要这个patch的总人数。 而传统意义的弱监督计数即只有图片的总人数和,而并不能获得patch的人数。 请问大佬对这个问题怎么看呢?            2、我用CNN在SHT-A做过直接回归,结果不是很理想;但transformer又十分依赖数据集数量,想咨询一下,对于人群计数直接回归方法,你们对 CNN和Transformer的理解      3、实际上问题1并不是只有Transformer存在,即使使用CNN进行直接回归计数,对于变化的数据集(仅持有计数label,无位置label)将无法进行裁剪后多batch训练,放缩到统一尺寸的话也将会显著影响精度。

------------------ 原始邮件 ------------------ 发件人: "dk-liang/TransCrowd" @.>; 发送时间: 2021年6月26日(星期六) 晚上8:40 @.>; @.@.>; 主题: Re: [dk-liang/TransCrowd] 关于参数设置问题 (#1) We have released the code. — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

你好,论文还没中,感谢关注。
(1)由于当前数据集都是point-level的标注,确实需要对每个image/patch进行sum,才能作为弱监督的GT,这也是之前弱监督方法普遍的操作。本文只是在去探究Transformer在weakly-supervised counting的可行性。实际上,可以重新收集一个新的弱监督数据集,通过一种更廉价的方式,然后只有count-level的标注,不需要point-level的标注。例如,方法【1】就制作了一个count-level的数据集,不需要point标注,不过还没开源。
(2)我自己实验也发现,CNN对弱监督计数表现不佳,即便是按patch输入形式,性能也远差于Transformer。另外,我个人觉得Transformer只是在pretrained阶段依赖大量数据,下游任务并不需要太多数据的,比如我用的TransCrowd,其实也只是在ImageNet上进行了pretrained,这和大多数CNN的backbone (VGG,ResNet)是一样的,然后相当于在counting dataset上finetune,收敛速度还更快。
(3)除此之外,还有一种可行的操作,既然Transformer是输入固定大小,例如384 x 384, 假设原图1024 x 768,那么可以先用一个CNN来提取图片的feature map,再global pooling到384 x 384,然后就可以作为Transformer 的输入,这样的好处是可以处理任意大小的图片,这是可以尝试的方向。
(4)当离线把图片切成6个patch然后保存,这是弱监督,因为训练过程并不依赖于point-level,只有count作为GT。但如果在线训练的时候随机crop,这才叫全监督,因为随机crop是需要每次都知道当前patch的point-level标注的。我自己实验发现,全监督(在线crop)性能能得到3-4个点的提升。

【1】Towards using count-level weak supervision for crowd counting. PR 2021.

梁师兄你好:      打扰你了,我是上次咨询过TransCrowd一些问题的重庆大学的学弟,由于毕业论文需要补实验,所以想跑一个基于transformer的全监督实验补到毕设中,但是对于 577768的输出,无论我是把576768的输出经过linear+reshape成1384384还是在transformer后面加上一个基于CNN的回归模块,网络始终无法拟合,想请教一下师兄有什么见解嘛     另外,看了您的TransCrowd-Token/GAP, 分别使用的是1768和576768的token,两者进行通道融合后再进行弱监督效果会提升一点儿。

------------------ 原始邮件 ------------------ 发件人: "dk-liang/TransCrowd" @.>; 发送时间: 2021年6月27日(星期天) 上午10:54 @.>; @.@.>; 主题: Re: [dk-liang/TransCrowd] 关于参数设置问题 (#1) 梁师兄好:       恭喜师兄论文Accepted!       我是重庆大学研究人群计数的师弟,也经常听导师说白老师团队十分厉害,看完你的code后有一些问题想请教一下:      1、文中提到对于尺寸不一致的图片均resize至 1152x768,再将其crop成6个 384x384的patch作为VIT的输入,这就带来一个问题,Transformer的输入为图像patch(384x384),这样的话弱监督标签就需要这个patch的总人数。 而传统意义的弱监督计数即只有图片的总人数和,而并不能获得patch的人数。 请问大佬对这个问题怎么看呢?            2、我用CNN在SHT-A做过直接回归,结果不是很理想;但transformer又十分依赖数据集数量,想咨询一下,对于人群计数直接回归方法,你们对 CNN和Transformer的理解      3、实际上问题1并不是只有Transformer存在,即使使用CNN进行直接回归计数,对于变化的数据集(仅持有计数label,无位置label)将无法进行裁剪后多batch训练,放缩到统一尺寸的话也将会显著影响精度。 … ------------------ 原始邮件 ------------------ 发件人: "dk-liang/TransCrowd" @.>; 发送时间: 2021年6月26日(星期六) 晚上8:40 @.>; @.@.>; 主题: Re: [dk-liang/TransCrowd] 关于参数设置问题 (#1) We have released the code. — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe. 你好,论文还没中,感谢关注。 (1)由于当前数据集都是point-level的标注,确实需要对每个image/patch进行sum,才能作为弱监督的GT,这也是之前弱监督方法普遍的操作。本文只是在去探究Transformer在weakly-supervised counting的可行性。实际上,可以重新收集一个新的弱监督数据集,通过一种更廉价的方式,然后只有count-level的标注,不需要point-level的标注。例如,方法【1】就制作了一个count-level的数据集,不需要point标注,不过还没开源。 (2)我自己实验也发现,CNN对弱监督计数表现不佳,即便是按patch输入形式,性能也远差于Transformer。另外,我个人觉得Transformer只是在pretrained阶段依赖大量数据,下游任务并不需要太多数据的,比如我用的TransCrowd,其实也只是在ImageNet上进行了pretrained,这和大多数CNN的backbone (VGG,ResNet)是一样的,然后相当于在counting dataset上finetune,收敛速度还更快。 (3)除此之外,还有一种可行的操作,既然Transformer是输入固定大小,例如384 x 384, 假设原图1024 x 768,那么可以先用一个CNN来提取图片的feature map,再global pooling到384 x 384,然后就可以作为Transformer 的输入,这样的好处是可以处理任意大小的图片,这是可以尝试的方向。 (4)当离线把图片切成6个patch然后保存,这是弱监督,因为训练过程并不依赖于point-level,只有count作为GT。但如果在线训练的时候随机crop,这才叫全监督,因为随机crop是需要每次都知道当前patch的point-level标注的。我自己实验发现,全监督(在线crop)性能能得到3-4个点的提升。 【1】Towards using count-level weak supervision for crowd counting. PR 2021. — You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe.

  1. 你的transformer部分有load ImageNet的预训练模型吗
  2. 其次是你的CNN是怎样的CNN,可以先用通用的backbone试试,比如VGG16,再就是可以直接把你的图片(无论多大)直接resize成384x384,直接回归也许能得到不错的结果

梁师兄好,我是上次咨询问题的重大师弟,想和师兄探讨一些问题,方便的话可以留个微信或者qq嘛 之前在你github上看到了美团的一篇文章,CCTrans以及BCCT。最近着手对CCTrans进行了复现,效果比原论文好0.5个点,进而有些问题想和师兄交流一下。 1.  复现过程中,transformer一般限制输入,对于测试集的输入,应该从上到下从左到右裁剪分块测试,对于重叠区域取平均值即可; 如果resize测试会有很大误差; 两种方式大概差5-8个点。 2. BCCT与CCTrans中对于全监督学习均采用DM-Count中的loss,而非传统的MSEloss;这点儿我做完实验发现MSELoss确实无法让网络收敛,结果非常差; 对于CNN来说,不同的loss一般只是起到锦上添花的作用;而Transformer简直天差地别,这是否说明Transformer对于人群计数任务比较看重loss的采纳; 我的看法是,有没有可能,CNN学习的特征与标签高斯平滑(MCNN)后的监督密度图更相似,而Transformer学到的序列特征与标签密度图 gap太大 导致无法收敛。 而DM-Count中除了OT-Loss与TV-Loss,起较大作用的还是在于count-loss,这一点儿也在师兄的文章Transcrowd与CCTrans中的弱监督训练中似乎也能得到验证, 即对于计数弱监督方式,Transformer会比CNN结果好得多! 所以transformer采用DM-count的loss进行全监督的学习,效果好很大可能也是由于其中count-loss的缘故。 不知道师兄如何看待这个问题,想听听师兄的看法😬 You are receiving this because you commented. Reply to this email directly, view it on GitHub, or unsubscribe. Triage notifications on the go with GitHub Mobile for iOS or Android.

加我微信吧:liangdingkang