4 head
4.1 cls分类信息
4.2 reg位置回归信息
重点是边框回归的位置信息,这里和常规的Anchor box的回归方式不一样。采用的是Generalized Focal Loss 中的概率分布形式。
head_reg = self.add_sublayer(
"head_reg" + str(i),
nn.Conv2D(
in_channels=self.feat_in_chan,
out_channels=4 * (self.reg_max + 1),
kernel_size=1,
stride=1,
padding=0,
weight_attr=ParamAttr(initializer=Normal(
mean=0., std=0.01)),
bias_attr=ParamAttr(initializer=Constant(value=0))))
可以看到,输出的通道数是 4 * (self.reg_max + 1),这个是怎么来的呢,reg_max又是什么意思?
直观的理解:预测的并不是一个固定的值,而是一段概率分布,以4点坐标边框形式(h,w,c_x,c_y)中的c_x为例,我将可能的预设的中心x的坐标范围 假设是 0-18 中插入reg_max个分割点,假设是8个,那么x的预设范围就被划分为9段了 [x0,x1,x2...x8], X0 = 0.0-2.0, x1 = 2.0-4.0 依次类推。每段的预测概率是P,最后的实际预测值就是sum (pi*xi) 。 单个坐标需要的输出值就是 reg_max + 1, 4个坐标总的就是4 * (self.reg_max + 1)。这么做的好处详情可以查阅论文。
如果是cls和reg共用前面的卷积的话,最后的输出就是 两边的输出通道数相加。
out_channels=self.cls_out_channels + 4 * (self.reg_max + 1)
参考: