python中forward的参数_forward()中的Pytorch错误需要2个位置参数,但是给出了3个...

在尝试使用Detectron2训练苹果检测网络并加载到Pytorch时,作者遇到了一个错误:在调用`forward()`函数时,出现TypeError,提示`forward()`需要2个位置参数,但提供了3个。问题出现在`train_one_epoch`函数的第30行,即`loss_dict = model(images, targets)`。代码中包含了数据预处理、模型定义、数据加载、训练和评估的流程。" 105465823,9432289,Servlet实现登录页面,"['Web开发', 'Java', 'Servlet', 'HTTP']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我正在尝试训练从Detectron2获取的对象检测网络,并将其加载到Pytorch中。它必须检测苹果。问题是,当我使用forward()函数时,在功能中会出现以下错误:

train_one_epoch(py_model,优化器,data_loader,设备,纪元,args.print_freq)

在train_one_epoch的第30行中,文件“ /home/felipevw/MyAppleDetector/utility/engine.py”

loss_dict =模型(图像,目标)

在调用中,文件“ /home/felipevw/anaconda3/envs/pytorch/lib/python3.6/site-packages/torch/nn/modules/module.py”,第532行

结果= self.forward(* input,** kwargs)

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

如果有人可以帮助我,我将不胜感激。我的代码是:

import datetime

import os

import time

import torch

import torch.utils.data

import torchvision

from torchvision.models.detection.faster_rcnn import FastRCNNPredictor

from torchvision.models.detection.mask_rcnn import MaskRCNNPredictor

from data.apple_dataset import AppleDataset

from utility.engine import train_one_epoch, evaluate

import utility.utils as utils

import utility.transforms as T

from detectron2.utils.logger import setup_logger

setup_logger()

from detectron2 import model_zoo

from detectron2.engine import DefaultPredictor

from detectron2.config import get_cfg

from detectron2.utils.visualizer import Visualizer

from detectron2.data import MetadataCatalog

from detectron2.modeling import build_model

import matplotlib.pyplot as plt

def get_transform(train):

transforms = []

transforms.append(T.ToTensor())

if train:

transforms.append(T.RandomHorizontalFlip(0.5))

return T.Compose(transforms)

def get_R50_model(num_classes):

# Get the model from detectron2

model = get_cfg()

model.merge_from_file(model_zoo.get_config_file("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml"))

model.DATALOADER.NUM_WORKERS = args.workers

model.MODEL.WEIGHTS = model_zoo.get_checkpoint_url("COCO-InstanceSegmentation/mask_rcnn_R_50_FPN_3x.yaml")

model.MODEL.ROI_HEADS.NUM_CLASSES = 1

py_model = build_model(model)

return py_model

def get_R101_model(num_classes):

return 1

def main(args):

print(args)

device = args.device

# Data loading code

print("Loading data")

num_classes = 2

dataset = AppleDataset(os.path.join(args.data_path, 'train'), get_transform(train=True))

dataset_test = AppleDataset(os.path.join(args.data_path, 'test'), get_transform(train=False))

print("Creating data loaders")

data_loader = torch.utils.data.DataLoader(dataset, batch_size=args.batch_size, shuffle=True,

num_workers=args.workers, collate_fn=utils.collate_fn)

data_loader_test = torch.utils.data.DataLoader(dataset_test, batch_size=1,

shuffle=False, num_workers=args.workers,

collate_fn=utils.collate_fn)

print("Creating model")

# Create the correct model type

if args.model == 'R50_fpn':

py_model = get_R50_model(num_classes)

else:

model = get_R101_model(num_classes)

# Move model to the right device

py_model.to(device)

print(py_model)

params = [p for p in py_model.parameters() if p.requires_grad]

optimizer = torch.optim.SGD(params, lr=args.lr, momentum=args.momentum, weight_decay=args.weight_decay)

# lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=args.lr_step_size, gamma=args.lr_gamma)

lr_scheduler = torch.optim.lr_scheduler.MultiStepLR(optimizer, milestones=args.lr_steps, gamma=args.lr_gamma)

if args.resume:

checkpoint = torch.load(args.resume, map_location='cpu')

model.load_state_dict(checkpoint['model'])

optimizer.load_state_dict(checkpoint['optimizer'])

lr_scheduler.load_state_dict(checkpoint['lr_scheduler'])

print("Start training")

start_time = time.time()

for epoch in range(args.epochs):

train_one_epoch(py_model, optimizer, data_loader, device, epoch, args.print_freq)

lr_scheduler.step()

if args.output_dir:

torch.save(model.state_dict(), os.path.join(args.output_dir, 'model_{}.pth'.format(epoch)))

# evaluate after every epoch

evaluate(py_model, data_loader_test, device=device)

total_time = time.time() - start_time

total_time_str = str(datetime.timedelta(seconds=int(total_time)))

print('Training time {}'.format(total_time_str))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值