目标检测中生成锚框函数详解

python 复制代码
%matplotlib inline
import torch
from d2l import torch as d2l
torch.set_printoptions(2) # 让pytorch打印张量时,只打印到小数点后两位

将设一张图片,宽和高为2,2

python 复制代码
X = torch.rand(size=(1,3,2,2))
Y = generate_anchors(X,sizes=[0.75,0.5,0.25],ratios=[1,2,0.5])

锚框中心点的设置

python 复制代码
# 为每个像素可以生成 n+m-1个锚框,整个图像生成 wh(n+m-1)
def generate_anchors(data,sizes,ratios): # 书上的名字是 multibox_prior
    '''
    data:输入图像,sizes:缩放比 rations:宽高比
    :return: (批量数,锚框数量,4)
    '''
    '''1.数据准备'''
    # 图片的shape为(样本数,h,w),取出图片的h,w
    in_height,in_width = data.shape[-2:]
    # 取出数据的设备,缩放比的数量,宽高比的数量
    device,num_sizes,num_ratios = data.device,len(sizes),len(ratios)
    # 每个像素的锚框数
    boxes_per_pixel = (num_sizes+num_ratios-1)
    # 把缩放列表和宽高比列表转换为tensor格式
    size_tensor = torch.tensor(sizes,device=device)
    ratio_tensor = torch.tensor(ratios,device=device)

    '''设置锚框中心坐标 和 步长'''
    # 因为1像素的宽和高都是1,所以1像素的中心点是(0.5,0.5)
    offset_h,offset_w=0.5,0.5
    # 缩放步长
    steps_h = 1/in_height
    steps_w = 1/in_width
python 复制代码
	# 不乘以步长,垂直方向上锚框的中心点
	center_h = (torch.arange(in_height,device=device) + offset_h)
	print(center_h)

tensor([0.50, 1.50])

python 复制代码
    # 乘以步长时,垂直方向上锚框的中心点。
    center_h = (torch.arange(in_height,device=device) + offset_h) * steps_h
    print(center_h)

tensor([0.25, 0.75])

python 复制代码
	# 不乘以步长,水平方向上锚框的中心点
	center_w = (torch.arange(in_width,device=device) + offset_w)
	print(center_w)

tensor([0.50, 1.50])

python 复制代码
	# 乘以步长,水平方向上锚框的中心点
	center_w = (torch.arange(in_width,device=device) + offset_w) * steps_w
	print(center_w)

tensor([0.25, 0.75])

乘以步长和不乘步长,锚框中心点的区别

之所以要乘以步长,是为了对应/w,/h归一化后的锚框形状。


python 复制代码
	# 生成锚框的所有中心点
	shift_y,shift_x = torch.meshgrid(center_h,center_w)
	print(f'shift_y = {shift_y}')
	print(f'shift_x = {shift_x}')

shift_y = tensor([[0.25, 0.25], [0.75, 0.75]])

shift_x = tensor([[0.25, 0.75], [0.25, 0.75]])

python 复制代码
 #把tensor变成一维
	shift_y,shift_x = shift_y.reshape(-1),shift_x.reshape(-1)
	print(shift_y, shift_x)

tensor([0.25, 0.25, 0.75, 0.75]) tensor([0.25, 0.75, 0.25, 0.75])

参考链接

https://zhuanlan.zhihu.com/p/455807888

相关推荐
AIGC_ZY几秒前
使用 MediaPipe 和 OpenCV 快速生成人脸掩膜(Face Mask)
人工智能·opencv·计算机视觉
说私域15 分钟前
基于开源AI智能名片链动2+1模式S2B2C商城小程序的IP开发泡沫破局与价值重构研究
人工智能·小程序·开源·零售
JOYCE_Leo1634 分钟前
深度学习框架:PyTorch使用教程 !!
图像处理·人工智能·pytorch·深度学习·计算机视觉
嘉图明35 分钟前
《技术驯化情感:AI伴侣、监控与伦理框架的重构挑战》
人工智能·重构
Jamence42 分钟前
多模态大语言模型arxiv论文略读(五十二)
人工智能·语言模型·自然语言处理
PowerBI学谦1 小时前
Copilot 祝你走在AI前沿:2025 年 4 月动态
人工智能·copilot
陈苏同学2 小时前
[论文梳理] 足式机器人规划&控制流程 - 接触&碰撞的控制 - 模型误差 - 自动驾驶车的安全&合规(4个课堂讨论问题)
人工智能·安全·机器学习·机器人·自动驾驶·汽车
jndingxin2 小时前
OpenCV 图形API(74)图像与通道拼接函数-----合并三个单通道图像(GMat)为一个多通道图像的函数merge3()
人工智能·opencv
大霸王龙2 小时前
智能检索革命全景透视——基于《搜索引擎信息检索困境破解体系》深度拆解
人工智能·python·搜索引擎·语言模型·自然语言处理
Jamence3 小时前
多模态大语言模型arxiv论文略读(四十八)
人工智能·语言模型·自然语言处理