首页 > 解决方案 > TypeError: __call__() 接受 2 个位置参数,但给出了 3 个。通过迁移学习使用 FastRCNN 训练 Raccoon 预测模型

问题描述

 from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
 from engine import train_one_epoch, evaluate
 import utils
 import torchvision.transforms as T

 num_epochs = 10
 for epoch in range(num_epochs):
    train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq=10)
    lr_scheduler.step()
    evaluate(model, data_loader_test, device=device)

我使用的代码与此链接Building Raccoon Model中提供的代码相同,但我的代码不起作用。

这是我在 () 中收到 TypeError Traceback (most recent call last) 的错误消息

  2 for epoch in range(num_epochs):

  3    # train for one epoch, printing every 10 iterations

  4   ----> train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq=10)

  5     # update the learning rate

  6   lr_scheduler.step()

7 帧

getitem (self, idx)

 29         target["iscrowd"] = iscrowd

 30         if self.transforms is not None:

 31        ---> img, target = self.transforms(img, target)

 32         return img, target
 33 

TypeError: call () 接受 2 个位置参数,但给出了 3 个

标签: image-processingcomputer-visionpytorch

解决方案


上面的答案是不正确的,我在注意到之前不小心投了赞成票。您使用了错误的 Compose,请注意它说

https://pytorch.org/tutorials/intermediate/torchvision_tutorial.html#putting-everything-together

“在references/detection/中,我们有许多帮助函数来简化训练和评估检测模型。在这里,我们将使用references/detection/engine.py、references/detection/utils.py和references/detection/transforms.py . 只需将它们复制到您的文件夹并在此处使用它们。”

有帮助脚本。他们继承了 compose 和 flip 方法

https://github.com/pytorch/vision/blob/6315358dd06e3a2bcbe9c1e8cdaa10898ac2b308/references/detection/transforms.py#L17

在注意到这一点之前,我做了同样的事情。不要使用 torchvision.transforms 中的 compose 方法,否则会出现上述错误。下载他们的模块并加载它。


推荐阅读