xiyang1012 / Local-Crowd-Counting

Adaptive Mixture Regression Network with Local Counting Map for Crowd Counting (ECCV2020)
MIT License
75 stars 17 forks source link

关于在SHPartA中复现论文的问题 #6

Open knightyxp opened 4 years ago

knightyxp commented 4 years ago

大佬好,因为看到这篇是基于C3框架的论文,我就把C3中的train.py和train-config搬过来了,参数都是按照论文中设置Epoch=400,lr=1e-5,bz=1, 问题一:然后训练后发现一百多个epoch就MAE最低到214(Adam),200(SGD),之后就一直在MAE200到300间浮动,怎么也降不下来,我改动了您SHHA.py中加了一个 den = den.transpose() def read_image_and_gt(self, fname): img = Image.open(os.path.join(self.img_path, fname)) if img.mode == 'L': img = img.convert('RGB')

    den = pd.read_csv(os.path.join(self.gt_path,os.path.splitext(fname)[0] + '.csv'), sep=',',header=None).values
    den = den.astype(np.float32, copy=False)
    den = den.transpose()
    den = Image.fromarray(den)

    return img, den

因为发现Image.fromarray读进来后会使得HW相反,但是这样改动之后可以训练了,但是就会出现前面说的mae降不下来的问题,想问问具体原因在哪呢,Adam 优化的时候MAE最低214 val loss 4.16左右 问题二:最好的表现模型VGG16_LCM_Regression在定义 #SAM scale-aware-module模块中的Maxout函数似乎与原文中的以四个膨胀卷纪率1234卷积再concat得操作好像不太一样,我将您注释的代码concat的还原了一下好像size无法匹配,还是太菜了,没理解这块的原理,球球大佬解释一下呀!! def Maxout(x1, x2, x3, x4): mask_1 = torch.ge(x1, x2) mask_1 = mask_1.float() x = mask_1 x1 + (1-mask_1) x2

mask_2 = torch.ge(x, x3)
mask_2 = mask_2.float()
x = mask_2 * x + (1-mask_2) * x3

mask_3 = torch.ge(x, x4)
mask_3 = mask_3.float()
x = mask_3 * x + (1-mask_3) * x4
return x

想问下这里的troch.ge比较前后两个变量的大小输出0/1,没想明白具体是啥意思,大佬可以解释下吗 最后大佬可以加一波微信或者qq或者邮件私聊我吗,最近一直在想复现这篇论文问题具体出在那里了,实在是找不到问题,很着急,像热锅上的蚂蚁,拜托大佬可以赐教一波!! 我的微信:knightyxp qq:377525381 email:v5262135@qq.com