flyfish
PriorBox(Anchor)的个数是怎么计算的
image_size: (640, 640)
steps: [8, 16, 32]
当step=8时 640/8=80 80×80×2=12800个anchor
当step=16时 640/16=40 40×40×2=3200个anchor
当step=32时 640/32=20 20×20×2=800个anchor
12800 + 3200 +800 = 16800个anchor
feature_maps: [[80, 80], [40, 40], [20, 20]]
所以最后的anchors的形状是 torch.Size([16800, 4])
import torch
from itertools import product as product
import numpy as np
from math import ceilclass PriorBox(object):def __init__(self, cfg, image_size=None, phase='train'):super(PriorBox, self).__init__()self.min_sizes = cfg['min_sizes']self.steps = cfg['steps']self.clip = cfg['clip']self.image_size = image_size#image_size: (640, 640)self.feature_maps = [[ceil(self.image_size[0]/step), ceil(self.image_size[1]/step)] for step in self.steps]#feature_maps: [[80, 80], [40, 40], [20, 20]]self.name = "s"def forward(self):anchors = []for k, f in enumerate(self.feature_maps):min_sizes = self.min_sizes[k]for i, j in product(range(f[0]), range(f[1])):for min_size in min_sizes:s_kx = min_size / self.image_size[1]s_ky = min_size / self.image_size[0]dense_cx = [x * self.steps[k] / self.image_size[1] for x in [j + 0.5]]dense_cy = [y * self.steps[k] / self.image_size[0] for y in [i + 0.5]]for cy, cx in product(dense_cy, dense_cx):anchors += [cx, cy, s_kx, s_ky]# back to torch landoutput = torch.Tensor(anchors).view(-1, 4)#anchors: torch.Size([16800, 4])print("PriorBox:",output.shape)if self.clip:output.clamp_(max=1, min=0)return output
本文发布于:2024-02-02 14:29:23,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170685536344420.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |