Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 调整位置编码形状(DETR模型)以支持batchsize>;1._Python_Pytorch - Fatal编程技术网

Python 调整位置编码形状(DETR模型)以支持batchsize>;1.

Python 调整位置编码形状(DETR模型)以支持batchsize>;1.,python,pytorch,Python,Pytorch,从中引用,并希望将其缩放以支持批次大小>1,因为它在注释中声明“仅支持批次大小1”。。我在调整forward()中的pos语句时遇到问题。怎么做呢?任何提示都会非常有用 这是从笔记本中提取的原始代码](): 导入火炬 从火炬进口 从torchvision.models导入resnet50 将torchvision.transforms导入为T torch.set\U grad\U enabled(错误); 类DETRdemo(nn.模块): """ 演示DETR实现。 用最少的行数演示DETR的

从中引用,并希望将其缩放以支持批次大小>1,因为它在注释中声明“仅支持批次大小1”。。我在调整
forward()
中的
pos
语句时遇到问题。怎么做呢?任何提示都会非常有用

这是从笔记本中提取的原始代码]():

导入火炬
从火炬进口
从torchvision.models导入resnet50
将torchvision.transforms导入为T
torch.set\U grad\U enabled(错误);
类DETRdemo(nn.模块):
"""
演示DETR实现。
用最少的行数演示DETR的实现
论文中有以下不同之处:
*学习的位置编码(代替正弦)
*位置编码在输入时传递(而不是注意)
*fc bbox预测器(代替MLP)
该型号在COCO val5k上可达到约40 AP,在特斯拉V100上以约28 FPS的速度运行。
仅支持批量大小1。
"""
def uu init uu(self,num_类,hidden_dim=256,nheads=8,
num_编码器_层=6,num_解码器_层=6):
super()。\uuuu init\uuuuu()
#创建ResNet-50主干网
self.backbone=resnet50()
del self.backbone.fc
#创建转换层
self.conv=nn.Conv2d(2048,隐藏尺寸,1)
#创建默认的PyTorch转换器
self.transformer=nn.transformer(
隐藏的\u dim、nheads、num\u编码器\u层、num\u解码器\u层)
#预测头,一个用于预测非空插槽的额外类
#请注意,在基线DETR中,线性_bbox层为3层MLP
self.linear\u class=nn.linear(隐藏的\u dim,num\u class+1)
self.linear_bbox=nn.linear(隐藏尺寸,4)
#输出位置编码(对象查询)
self.query\u pos=nn.参数(torch.rand(100,隐藏尺寸))
#空间位置编码
#注意,在基线DETR中,我们使用正弦位置编码
self.row_embed=nn.参数(torch.rand(50,隐藏尺寸//2))
self.col\u embed=nn.参数(torch.rand(50,隐藏尺寸//2))
def前进档(自身,输入):
#通过ResNet-50将输入传播到平均池层
x=self.backbone.conv1(输入)
x=自主干.bn1(x)
x=自主干网relu(x)
x=self.backbone.maxpool(x)
x=自主干层1(x)
x=自主干层2(x)
x=自主干层3(x)
x=自主干层4(x)
#将变压器的要素平面从2048转换为256
h=自转换(x)
#构造位置编码
H、 W=H.形状[-2:]
pos=手电筒。cat([##1
self.col_embed[:W]。取消查询(0)。重复(H,1,1),
self.row_embed[:H]。取消查询(1)。重复(1,W,1),
],dim=-1)。展平(0,1)。取消queze(1)
#通过变压器传播
h=自变压器(位置+0.1*h.扁平化(2).置换(2,0,1),
self.query_pos.unsqueze(1)).transpose(0,1)
#最后,将transformer输出投影到类标签和边界框
返回{'pred_logits':自线性类(h),
'pred_box':self.linear_bbox(h).sigmoid()}
促进发展:

model = DETRdemo(num_classes=10)
x = torch.ones((1,3,128,128)) # <-- this is ok
y = model(x)

model = DETRdemo(num_classes=10)
x = torch.ones((2,3,128,128)) # <-- this is NOT ok
y = model(x)
model=DETRdemo(num\u classes=10)

x=torch.one((1,3128128))#看看他们在github上的代码:

那里的代码允许任意批量大小,例如,请参见自述文件中的评估部分