too many indices for tensor of d

982 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

参考

Pytorch笔记:诡异的索引操作 + too many indices for tensor of dimension 1的一种解决方法_Activewaste的博客-CSDN博客

完整错误

pxy = ps[:, :2].sigmoid() * 2 - 0.5 
IndexError: too many indices for tensor of dimension 1

解决办法

我主要是修改了Detect函数, 将里面的x[i]用另外一个变量表示, train训练的时候没有报错, 但是在val验证的时候报错, 我把原先的x[i]改回来, 使用一个list对x[i]进行深度拷贝,来进行其他的操作。

深度拷贝:

zz = []
for bb in x:
    zz.append(bb.clone())
# 就是修改的下面x[i]才报错的
x[i] = self.m[i](x[i])  # conv
bs, _, ny, nx = x[i].shape  # x(bs,255,20,20) to x(bs,3,20,20,85)
x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()

if not self.training:  # inference
    if self.onnx_dynamic or self.grid[i].shape[2:4] != x[i].shape[2:4]:
        self.grid[i], self.anchor_grid[i] = self._make_grid(nx, ny, i)

    y = x[i].sigmoid()
    if self.inplace:
        y[..., 0:2] = (y[..., 0:2] * 2 - 0.5 + 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 = (y[..., 0:2] * 2 - 0.5 + self.grid[i]) * self.stride[i]  # xy
        wh = (y[..., 2:4] * 2) ** 2 * self.anchor_grid[i]  # wh
        y = torch.cat((xy, wh, y[..., 4:]), -1)
    z.append(y.view(bs, -1, self.no))

其他错误

我记得存在float16不是float32导致的错误, 可能是因为混合精度训练的原因

去除混合精度训练的方法直接将val.py中的half=True的参数改为False。

#########################################################无用 哦勒莫单例模式的法律什么地方来的麻烦,塑料袋密封,拍摄的浪费,受到大量分泌数量的美丽的客观描述了快递马上离开对方可免费苏联单方面立方米地面防空善良的父母开始了打发士大夫