三个函数分别是__init__、forward和_make_grid,其中forward函数和_make_grid函数代码暂时省略,在下文详细列出。 classDetect(nn.Module):stride=None# strides computed during buildonnx_dynamic=False# ONNX export parameterexport=False# export modedef__init__(self,nc=80,anchors=(),ch=(),inplace=True)...
self.grid[i] = self._make_grid(nx, ny).to(x[i].device) y = x[i].sigmoid() y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i].to(x[i].device)) * self.stride[i] # xy y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # wh ...
(1, 3, 16, 20, 85))) print(x[2][0, :, 0]) z = [] grid = [torch.zeros(1)] * 3 for i in range(3): # x[i] = x[i].permute(0, 3, 1, 2) bs, _, ny, nx, _ = x[i].shape grid[i] = _make_grid(nx, ny) y = x[i].sigmoid() y[..., 0:2] = (y[...
self.grid[i], self.anchor_grid[i]=self._make_grid(nx, ny, i)#制作第几预测层的网格y=x[i].sigmoid()#激活函数,完成逻辑回归的软判决,变量映射到0,1之间的S型函数,所以最后的y就是相对于网格占了几分之几的意思(对center的x,y,w,h都做了归一化处理)ifself.inplace: y[..., 0:2] = (y...
self.grid[i] = self._make_grid(nx, ny).to(x[i].device) y = x[i].sigmoid() y[..., 0:2] = (y[..., 0:2] * 2. - 0.5 + self.grid[i].to(x[i].device)) * self.stride[i] # xy y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] ...
self.grid:初始化为[[0],[0],[0]],然后会调用_make_grid(nx,ny)函数创建三个与三个检测头输出同尺寸的网格,例如:当检测头输出为1*3*48*80*85(B*na*H*W*no)时,创建的网格为1*1*48*80*2(2=x,y),self.grid作用是将xy输出定位到具体的网格,如下图: self.anchors和self.anchor_grid:表示小中...
grid = _make_grid(nx, ny).to(x[i].device) y = x[i].sigmoid() y[..., 0:2]=(y[..., 0:2] * 2. - 0.5 + grid) * stride[i]# xy y[..., 2:4]=(y[..., 2:4] * 2) ** 2 * anchor[i]# wh z.append(y.view(bs, -1, no)) ...
if self.onnx_dynamic or self.grid[i].shape[2:4] != x[i].shape[2:4]: # 向前传播时需要将相对坐标转换到grid绝对坐标系中 self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i) y = x[i].sigmoid() if self.inplace: ...
make_divisible代码如下: 2.4使用当前层的参数搭建当前层 这段代码主要是使用当前层的参数搭建当前层。 经过以上处理,args里面保存的前两个参数就是module的输入通道数、输出通道数。只有BottleneckCSP和C3这两种module会根据深度参数n调整该模块的重复迭加次数 ...
def _make_grid(self, nx=20, ny=20): xv, yv = np.meshgrid(np.arange(ny), np.arange(nx))returnnp.stack((xv, yv),2).reshape((-1,2)).astype(np.float32) def postprocess(self, frame, outs, pad_hw): newh, neww, padh, padw = pad_hw ...