【问题标题】:Error with Detectron2 : RuntimeError: Input type (torch.cuda.DoubleTensor) and weight type (torch.cuda.FloatTensor) should be the sameDetectron2 出错:RuntimeError:输入类型 (torch.cuda.DoubleTensor) 和权重类型 (torch.cuda.FloatTensor) 应该相同
【发布时间】:2022-08-10 05:53:50
【问题描述】:

我遇到了这个相当烦人的错误,我不知道如何纠正:RuntimeError: Input type (torch.cuda.DoubleTensor) 和 weight type (torch.cuda.FloatTensor) 应该是一样的。

我在支持 Cuda 的笔记本电脑 (Ubuntu) 上的 Jupyter Notebook 上本地运行图像检测代码。输入只有 14 张带有 COCO 格式注释文件的 JPG 图片。数据集的注册似乎不是问题。

dataset_dicts = load_coco_json("../Downsampled/Train/annotations.json", "../Downsampled/Train", dataset_name="Seals", extra_annotation_keys=None)
register_coco_instances("seal", {}, "../Downsampled/Train/annotations.json", "../Downsampled/Train")

cfg = get_cfg()
cfg.merge_from_file(model_zoo.get_config_file("COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml"))
#cfg.merge_from_file(model_zoo.get_config_file("COCO-Detection/retinanet_R_50_FPN_3x.yaml"))
cfg.INPUT.MAX_SIZE_TRAIN = 2000
cfg.INPUT.MIN_SIZE_TRAIN = 800
cfg.INPUT.MAX_SIZE_TEST = 5000
cfg.INPUT.MIN_SIZE_TEST = 1000
cfg.DATASETS.TRAIN = ("seal",)
cfg.MODEL.PIXEL_MEAN = [mean_pixel_values[2], mean_pixel_values[1], mean_pixel_values[0]]
cfg.MODEL.PIXEL_STD = [std_pixel_values[2], std_pixel_values[1], std_pixel_values[0]]
cfg.DATASETS.TEST = ()  # no metrics implemented for this dataset
#cfg.DATALOADER.NUM_WORKERS = 4
cfg.MODEL.DEVICE="cuda"
cfg.MODEL.WEIGHTS = "detectron2://ImageNetPretrained/MSRA/R-50.pkl"  # initialize from model zoo
cfg.SOLVER.IMS_PER_BATCH = 2
cfg.SOLVER.BASE_LR = 0.01
cfg.MODEL.ANCHOR_GENERATOR.SIZES = [[8,16,32]]
cfg.MODEL.ANCHOR_GENERATOR.ANGLES = [[0,90]]
cfg.SOLVER.MAX_ITER = (
    300
)  # 300 iterations seems good enough, but you can certainly train longer
cfg.MODEL.ROI_HEADS.BATCH_SIZE_PER_IMAGE = (
    16
)  # faster, and good enough for this toy dataset
cfg.MODEL.ROI_HEADS.NUM_CLASSES = 4  # 7 classes (none, error, pup, adult male, subadult male, female, juvenile)

print("Start training")
os.makedirs(cfg.OUTPUT_DIR, exist_ok=True)
trainer = DefaultTrainer(cfg)
trainer.resume_or_load(resume=False)
trainer.train()

完整的错误是

ERROR [08/09 01:39:54 d2.engine.train_loop]: Exception during training:
Traceback (most recent call last):
  File "/home/hysterio/.pyenv/versions/3.7.6/envs/vivadata/lib/python3.7/site-packages/detectron2/engine/train_loop.py", line 149, in train
    self.run_step()
  File "/home/hysterio/.pyenv/versions/3.7.6/envs/vivadata/lib/python3.7/site-packages/detectron2/engine/defaults.py", line 494, in run_step
    self._trainer.run_step()
  File "/home/hysterio/.pyenv/versions/3.7.6/envs/vivadata/lib/python3.7/site-packages/detectron2/engine/train_loop.py", line 274, in run_step
    loss_dict = self.model(data)
  File "/home/hysterio/.pyenv/versions/3.7.6/envs/vivadata/lib/python3.7/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/home/hysterio/.pyenv/versions/3.7.6/envs/vivadata/lib/python3.7/site-packages/detectron2/modeling/meta_arch/rcnn.py", line 158, in forward
    features = self.backbone(images.tensor)
  File "/home/hysterio/.pyenv/versions/3.7.6/envs/vivadata/lib/python3.7/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/home/hysterio/.pyenv/versions/3.7.6/envs/vivadata/lib/python3.7/site-packages/detectron2/modeling/backbone/fpn.py", line 139, in forward
    bottom_up_features = self.bottom_up(x)
  File "/home/hysterio/.pyenv/versions/3.7.6/envs/vivadata/lib/python3.7/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/home/hysterio/.pyenv/versions/3.7.6/envs/vivadata/lib/python3.7/site-packages/detectron2/modeling/backbone/resnet.py", line 445, in forward
    x = self.stem(x)
  File "/home/hysterio/.pyenv/versions/3.7.6/envs/vivadata/lib/python3.7/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/home/hysterio/.pyenv/versions/3.7.6/envs/vivadata/lib/python3.7/site-packages/detectron2/modeling/backbone/resnet.py", line 356, in forward
    x = self.conv1(x)
  File "/home/hysterio/.pyenv/versions/3.7.6/envs/vivadata/lib/python3.7/site-packages/torch/nn/modules/module.py", line 889, in _call_impl
    result = self.forward(*input, **kwargs)
  File "/home/hysterio/.pyenv/versions/3.7.6/envs/vivadata/lib/python3.7/site-packages/detectron2/layers/wrappers.py", line 114, in forward
    x, self.weight, self.bias, self.stride, self.padding, self.dilation, self.groups
RuntimeError: Input type (torch.cuda.DoubleTensor) and weight type (torch.cuda.FloatTensor) should be the same
[08/09 01:39:54 d2.engine.hooks]: Total training time: 0:00:00 (0:00:00 on hooks)
[08/09 01:39:55 d2.utils.events]:  iter: 0    lr: N/A  max_mem: 249M

【问题讨论】:

    标签: python pytorch detectron


    【解决方案1】:

    这很简单,请仔细理解错误。输入和权重数据类型应该相同。将您的输入转换为浮点数据类型。

    【讨论】:

    • 谢谢,您能否也指出如何做到这一点?我在也处理数据加载的 Detectron2 框架中找不到这样做的方法。是数据加载器、模型配置还是数据预处理?
    【解决方案2】:

    因此,通过提供的配置,提供的实际输入(图像)不是问题,但归一化手段和标准偏差是:

    cfg.MODEL.PIXEL_MEAN = [mean_pixel_values[2], mean_pixel_values[1], mean_pixel_values[0]]
    cfg.MODEL.PIXEL_STD = [std_pixel_values[2], std_pixel_values[1], std_pixel_values[0]]
    

    解决方案:将 mean_pixel_values 和 std_pixel_values 转换为 np.float32 并且效果很好。

    【讨论】:

      猜你喜欢
      • 2023-03-27
      • 2021-07-18
      • 2021-03-20
      • 2021-07-19
      • 1970-01-01
      • 2020-09-29
      • 2021-01-03
      • 2021-12-30
      • 2021-12-06
      相关资源
      最近更新 更多