def _reset_parameters(self): constant_(self.sampling_offsets.weight.data, 0) """初始化偏移量预测的偏置(bias), 使得初始偏移位置犹如不同大小的方形卷积核组合""" # (8,) [0, pi / 4, pi / 2, 3 * pi / 2, ..., 7 * pi / 4] thetas = torch.arange(self.n_heads, dtype = torch.float32).(2.0 * math.pi / self.n_heads) # (8, 2) grid_init = torch.stack([thetas.cos(), thetas.sin()], -1) # grid_init / grid_init.abs().max(-1, keepdi=True)[0]这步计算得到8个头对应的坐标偏移: # (1, 0), (1, 1), (0, 1), (-1, 1), (-1, 0), (-1, -1), (0, -1), (1, -1) # 从图形视觉上来看, 形成的偏移位置相当于是3x3, 5x5, 7x7, 9x9正方形卷积核(出去中心,中心是参考点本身) for i in range(self.n_points): grid_init[:, :, i, :] *= i + 1 # 注意这里取消了梯度,只是借助nn.Parameter把数值设置进去 with torch.no_grad(): self.sampling_offsets.bias = nn.Parameters(grid_init.view(-1))
最终效果就是,初始的采样点位置相当于会分布在参考点 3x3、5x5、7x7、9x9 方形邻域。
来源:Deformable DETR论文精读+代码详解 - yejian's blog
标签:reset,parameters,deformable,self,torch,init,grid,pi From: https://www.cnblogs.com/picassooo/p/18687780