具体操作:DenseBox训练有点图像分割图像的路子,首先从原图中crop出图像patch,再resize至240 x 240,该图像中心位置包含一个高50 pix左右的人脸gt bbox; 这个操作很容易实现,相当于从原图 + gt的图像中crop出patch,但这个patch必须要保证人脸在patch中心,且resize后gt bbox大小变为50 x 50,那么具体crop多大的patch子区域,就需要做个等比例计算即可;举个栗子:原图中一个人脸gt bbox为80 x 80,我们需要保证resize后该人脸尺度为50 x 50,那么原图中需要crop出的patch子区域为240 x 80 / 50 = 384,也即384 x 384子区域即可。
b. 测试阶段
使用图像金字塔
2)backbone
共16层卷积操作,复用了VGG19的前12层网络参数。
3)neck & head
conv 4-4后接4个1 x 1的conv层;从fig 3中可知,其实又分为两个分支:两个1 x 1的conv层最终输出1通道feature map,用于人脸分类得分的计算;另两个1 x 1的conv层输出4通道feature map,用于人脸bbox回归的计算;
conv 3-4与conv 4-4的feature map特征融合,做的是concate;
作者认为低层feature map上的特征,包含更多目标的局部细节信息,更加方便判断目标的局部区域;
高层feature map上的特征,因为有更大的感受野,包含更多的语音信息和上下文信息,更加易于识别目标的全局信息;
conv 3-4的感受野为48 x 48,几乎与人脸gt bbox尺度相当,conv 4-4的感受野为118 x 118,因此可以融合更多的全局信息 + 上下文信息;此外,conv 4-4 feature map的尺度是conv3-4尺度的一半(多了个pool3操作),因此在做concate之前,需要先对conv 4-4做个双线性上采样,确保二者尺度相同;
因为只做concate,而非element-wise相加,就不需要保证通道数相同了。
正样本:输入的240 x 240 pix patch,且patch中心位置包含一个特定尺度范围(50 x 50 pix附近)内的正样本,每个patch中正样本附近可能包含若干个负样本;
负样本:random patch:从图像中随机尺度上随机crop出patch(randomly crop patches at random scale from training images),再resize至240 x 240 pix patch输入网络;训练时,控制正样本与random patch的负样本比例为1:1;
if a location satisfies max(l∗, t∗, r∗, b∗) > mi or max(l∗, t∗, r∗, b∗) < mi-1, it is set as a negative sample and is thus not required to regress a bounding box anymore. Here mi is the maximum distance that feature level i needs to regress. In this work, m2, m3, m4, m5, m6 and m7 are set as 0, 64, 128, 256, 512 and ∞
a.
Heatmap表示分类信息,每一个类别将会产生一个单独的Heatmap图。对于每张Heatmap图而言,当某个坐标处包含目标的中心点时,则会在该目标处产生一个关键点,我们利用高斯圆(
只要预测的corner点在中心点的某一个半径r内,而且该矩形框与gt_bbox之间的IoU大于0.7时,我们将这些点处的值设置为一个高斯分布的数值,而不是数值0。
)来表示整个关键点,下图展示了具体的细节。