Ling-Bao
Ling-Bao
抱歉,我的训练数据集采用的是将图像resize为720x720, 然后再制作密度标签。 如果你需要自己制作密度标签,可以参考以下代码: https://github.com/Ling-Bao/ACSCP_cGAN/blob/master/data_maker/step3/acscp.m 或者这位作者的代码 https://github.com/leeyeehoo/CSRNet-pytorch/blob/master/make_dataset.ipynb ``` % 读取图片/密度预标签 Line 66 image = imread(img_path); image_out = imresize(image, [720,720]); % Line 97 I = imresize(I, [720,720]); gt(:,1) = ceil(gt(:,1) * j_scale);...
被我记混了,训练时的输入是从720x720原始图像中crop 240 × 240的图像作为输入(可以看做增广);测试的时候我将模型输入尺寸进行了修改,可以估计720x720原始图像的密度图(修改为其它尺寸也是可以的) 训练代码: https://github.com/Ling-Bao/ACSCP_cGAN/blob/master/model.py ``` # Line 42 def __init__(self, sess, image_size=240, batch_size=16, sample_size=1, output_size=240, df_dim=48, input_c_dim=3, output_c_dim=3, data_set_name='facades', checkpoint_dir=None, lambda_e=150, ambda_p=150, lambda_c=10): ``` 测试代码: https://github.com/Ling-Bao/ACSCP_cGAN/blob/master/product.py ``` #...
在实现过程中,并非完全参照论文进行实现,增加了一些技巧。 (1)针对问题1,在进行模型训练过程中,采用relu(sigmoid(x))可以将输出的密度值限制在(0, 1)之间,能加速模型训练收敛;见Readme的Details小节 (2)此部分的U-Net可能没有完全参照论文进行实现; (3)训练时的超参数设置与论文相同; (4)IMG_173_A gt值可能我还需要确认下; (5)因为我将网络设计成了全卷积模型,可以适应任意图像大小的输入,但目前代码不是特别完善,需要人为设定输入图像大小;具体请参考https://github.com/Ling-Bao/ACSCP_cGAN/tree/master/release (6)对密度图的值进行加总即为估计的人数。
(1)其实密度图的每个像素值只能从(0,1)取值(由高斯核性质决定f(x, y)大于等于0);如果密度图输出有值取到负值,将不合理。感觉这是论文没有考虑到的,我在另一个项目MSCNN(https://github.com/Ling-Bao/mscnn) 中也使用了相同的技巧,效果提升明显; (2)同第一次回答,在复现过程中,模型结构可能有细微差别;同时,在实现Cross-Scale Consistency Pursuit Loss的时候难度比较大,需要concat四个小块的密度估计值与整图估计值进行loss计算,这也是论文实现最难的地方,有多种实现方案,我选了一种我认为好实现的方法; (3)条纹其实是cancat的结果,在训练时,需要将图像分割为四个部分,那么每个部分均需要进行密度估计;第一版的时候我将四个块直接concat,这样切割线上会不平滑出现条纹;第二版我将其输入改为了700x700(图像需要resize为700x700,其实也可以自适应图像大小,但需要修改网络);这里有一个优化点你可以进行尝试,目前作者在分割时是硬分割,因此分割线附近的人群密度可能估计不好,我的想法是将分割线做成叠合的分割方法,这样效果应该会好一些,限于时间有限没有进行实验; (4)实际使用时,需要加上dropout,不然估计值将偏大,实验结果显示,加dropout效果要好一些;结果不稳定是没有问题的,本来一张图像的人数就是进行估计,你可以多计算几次取平均(模型运行效率非常高,甚至在cpu上也能很快计算出结果),或者直接将输出作为估计值(实验表明同一张图多次估计偏差不会太大); (5)对抗损失的实现方法你可以参考WassersteinGAN(https://github.com/shekkizh/WassersteinGAN.tensorflow/blob/master/models/GAN_models.py) 或其它GAN、cGAN实现代码。
时间有限并没有在验证集上做与论文相同实验条件下的评估, 目前提供的模型仅针对A部分数据集进行训练, 对人群稀疏的B部分数据集需要重新训练模型