人群密度估计总结

VGG 16 是有16个系数层


1: 如果输入图片大小是 256x256,那么前面
256 -> conv3:64 x 2 (max pooling) - > 128 -> conv3:128 x 2 (max pooling) - > 64 - > conv3:256 x 3 + conv3:512 x 3 -> 56 (512,64,64) - > conv11:1 -> (1,64,64)
(1)其中前面7层Conv使用的是VGG的参数, 全部是conv3,filter 个数从64-128-512, 图像尺寸是256-128-64-64
(2)最后一个输入输出是(512,64,64)->(1,64,64)的数据,通过1x1的卷积,一个filter


2: 对于feature map (64x64)去拟合人的密度图, 核心的是密度图的生成
在生成密度图的时候,首先是对每个人头画一个点,组成gt图像,由gt图像生成密度图有两种方法
(1)对gt图像进行一个固定5x5的平滑滤波,得到一个密度图.输入的是有些位置为1的数据
(2)对每个点进行遍历,为每个点生成一个密度图,只有在有值的位置上为1,其他位置为0, 然后对这个密度图进行高斯滤波,滤波器的标准差是点到其他所有点的距离.
然后将这些所有的密度图进行累加,组成最终的密度图
在找出一个点与其他点的最近距离的时候,是使用的是KDtree query函数,
首先是用所有的点构建一个KDtree, 然后用query把自己点集合作为参数输入,最后返回的是每个点距离最近点的距离值和索引
https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.spatial.KDTree.query.html

(3)在生成256x256的密度图以后,需要缩放成训练使用的密度图(64,64),需要将图的长宽各变为原来的1/4,调用的是opencv的函数
def density_resize(density, fx, fy):
    return cv2.resize(density, None, fx=fx, fy=fy, interpolation=cv2.INTER_CUBIC) / (fx * fy)

这里的fx fy应该都是1/4,那么在缩小以后,相当于有的像素点被舍弃了,会导致整体求和结果变低,所以需要对整体的像素值乘以一个缩放的值
cv2.resize(src,dsize,dst=None,fx=None,fy=None,interpolation=None)
scr:原图
dsize:输出图像尺寸
fx:沿水平轴的比例因子
fy:沿垂直轴的比例因子
interpolation:插值方法


猜你喜欢

转载自blog.csdn.net/hnshahao/article/details/80842284