From ea72b84f5e690cb516642ce2d9ae200145b0af34 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Sun, 3 Apr 2022 23:40:23 +0200 Subject: [PATCH] Integrate offset into grid (#7262) Eliminate 1 op during training and inference. --- models/yolo.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/models/yolo.py b/models/yolo.py index fee5e932fd4d..d6f5c0961e0d 100644 --- a/models/yolo.py +++ b/models/yolo.py @@ -64,11 +64,11 @@ def forward(self, x): y = x[i].sigmoid() if self.inplace: - y[..., 0:2] = (y[..., 0:2] * 2 - 0.5 + self.grid[i]) * self.stride[i] # xy + y[..., 0:2] = (y[..., 0:2] * 2 + self.grid[i]) * self.stride[i] # xy y[..., 2:4] = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i] # wh else: # for YOLOv5 on AWS Inferentia https://github.com/ultralytics/yolov5/pull/2953 xy, wh, conf = y.split((2, 2, self.nc + 1), 4) # y.tensor_split((2, 4, 5), 4) # torch 1.8.0 - xy = (xy * 2 + (self.grid[i] - 0.5)) * self.stride[i] # xy + xy = (xy * 2 + self.grid[i]) * self.stride[i] # xy wh = (wh * 2) ** 2 * self.anchor_grid[i] # wh y = torch.cat((xy, wh, conf), 4) z.append(y.view(bs, -1, self.no)) @@ -82,7 +82,7 @@ def _make_grid(self, nx=20, ny=20, i=0): yv, xv = torch.meshgrid(torch.arange(ny, device=d), torch.arange(nx, device=d), indexing='ij') else: yv, xv = torch.meshgrid(torch.arange(ny, device=d), torch.arange(nx, device=d)) - grid = torch.stack((xv, yv), 2).expand(shape).float() + grid = torch.stack((xv, yv), 2).expand(shape).float() - 0.5 # add grid offset, i.e. y = 2.0 * x - 0.5 anchor_grid = (self.anchors[i] * self.stride[i]).view((1, self.na, 1, 1, 2)).expand(shape).float() return grid, anchor_grid