一直没有出结果:d2l.torch.set_figsize() bbox_scale = torch.tensor((w, h, w, h)) fig = d2l.torch.plt.imshow(img) show_bboxes(axes=fig.axes, bboxs=boxes[250, 250, :, :] * bbox_scale, labels=['s=0.75, r=1', 's=0.5, r=1', 's=0.25, r=1', 's=0.75, r=2', 's=0.75, r=0.5'])
时间: 2024-04-22 17:27:17 浏览: 158
这段代码是用来展示图片和其对应的边框框出目标物体的位置,其中`d2l.torch.set_figsize()`设置了图片大小,`bbox_scale`是用来缩放边框坐标的比例,`fig = d2l.torch.plt.imshow(img)`将图片展示出来,`show_bboxes()`则是在展示的图片上画出边框并标注标签。具体代码实现需要引入一些库和变量,上下文不清楚,我无法给出更详细的解释。请提供更多上下文信息或者具体的问题。
相关问题
from d2l import torch as d2l img = d2l.plt.imread("D:/VOC/1.png") height, width = img.shape[:2] def display_anchors(fmap_width, fmap_height, s): d2l.set_figsize() fmap = d2l.zeros((1, 10, fmap_height, fmap_width)) anchors = d2l.multibox_prior(fmap, sizes=s, ratios=[1, 2, 0.5]) bbox_scale = d2l.tensor((width, height, width, height)) d2l.show_bboxes(d2l.plt.imshow(img).axes, anchors[0] * bbox_scale) display_anchors(fmap_width=4, fmap_height=4, s=[0.15])报错UserWarning: torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument. (Triggered internally at C:\cb\pytorch_1000000000000\work\aten\src\ATen\native\TensorShape.cpp:3484.) return _VF.meshgrid(tensors, **kwargs) # type: ignore[attr-defined]怎么修改
要解决这个警告,你可以使用`torch.meshgrid`函数,并显式传递索引参数。根据警告信息,索引参数是在`TensorShape.cpp`文件的第3484行触发的。
在你的代码中,你使用了库`d2l`,所以需要检查这个库是否提供了一个与警告相对应的函数,并且是否需要传递索引参数。
如果库`d2l`没有提供相应的函数,你可以尝试手动调用`torch.meshgrid`函数,并传递适当的索引参数。根据你的具体需求,索引参数的选择可能会有所不同。你可以查阅PyTorch文档来了解更多关于`torch.meshgrid`函数和索引参数的信息。
如果你无法确定如何传递索引参数,你可以尝试使用旧版本的PyTorch,因为在旧版本中可能不会触发这个警告。然而,这也意味着你可能无法使用最新版本的功能和修复程序。
请注意,这个警告是由PyTorch库内部触发的,因此我们无法直接控制或解决它。我们只能尝试根据警告信息和相关文档来调整代码,以适应即将发布的版本。
def forward(self, samples: NestedTensor): """ The forward expects a NestedTensor, which consists of: - samples.tensor: batched images, of shape [batch_size x 3 x H x W] - samples.mask: a binary mask of shape [batch_size x H x W], containing 1 on padded pixels It returns a dict with the following elements: - "pred_logits": the classification logits (including no-object) for all queries. Shape= [batch_size x num_queries x (num_classes + 1)] - "pred_boxes": The normalized boxes coordinates for all queries, represented as (center_x, center_y, height, width). These values are normalized in [0, 1], relative to the size of each individual image (disregarding possible padding). See PostProcess for information on how to retrieve the unnormalized bounding box. - "aux_outputs": Optional, only returned when auxilary losses are activated. It is a list of dictionnaries containing the two above keys for each decoder layer. """ if isinstance(samples, (list, torch.Tensor)): samples = nested_tensor_from_tensor_list(samples) features, pos = self.backbone(samples) src, mask = features[-1].decompose() assert mask is not None hs = self.transformer(self.input_proj(src), mask, self.query_embed.weight, pos[-1])[0] outputs_class = self.class_embed(hs) outputs_coord = self.bbox_embed(hs).sigmoid() out = {'pred_logits': outputs_class[-1], 'pred_boxes': outputs_coord[-1]} if self.aux_loss: out['aux_outputs'] = self._set_aux_loss(outputs_class, outputs_coord) return out
这是一个模型的前向传播函数,它接受一个NestedTensor作为输入,并返回一个包含预测结果的字典。
输入的NestedTensor包含两个部分:
- `samples.tensor`:批次图像,形状为[batch_size x 3 x H x W]
- `samples.mask`:形状为[batch_size x H x W]的二进制掩码,其中填充像素为1
返回的字典包含以下元素:
- `"pred_logits"`:所有查询的分类logits(包括无对象)。形状为[batch_size x num_queries x (num_classes + 1)]
- `"pred_boxes"`:所有查询的标准化框坐标,表示为(中心x,中心y,高度,宽度)。这些值在[0, 1]范围内进行了归一化,相对于每个单独图像的大小(不考虑可能的填充)。有关如何获取非标准化边界框的信息,请参见PostProcess。
- `"aux_outputs"`:可选项,在激活辅助损失时返回。它是一个包含每个解码器层的上述两个键的字典列表。
这个函数首先将输入的samples转换为NestedTensor类型,然后使用backbone模型提取特征和位置信息。
接下来,它将最后一个特征图分解为源特征和掩码,并使用transformer模型对其进行处理。
然后,通过类别嵌入层和边界框嵌入层对处理后的特征进行分类和边界框预测。
最后,将预测的结果以字典的形式返回,并根据需要添加辅助损失。
阅读全文