Neural network AssertionError:Torch未在启用CUDA的情况下编译(Torch vision中存在问题)

Neural network AssertionError:Torch未在启用CUDA的情况下编译(Torch vision中存在问题),neural-network,pytorch,object-detection,torchvision,Neural Network,Pytorch,Object Detection,Torchvision,因此,我尝试运行我的目标检测程序,并不断收到以下错误消息: AssertionError:Torch未在启用CUDA的情况下编译 我不明白为什么会发生这种情况,因为我有一个2017年的MacBook Pro和AMD GPU,所以我没有支持CUDA的GPU 我在代码中添加了这条语句,以确保设备设置为“cpu”,然而,看起来程序似乎一直试图通过GPU运行它,即使它不存在 if torch.cuda.is_available(): device = torch.device('cuda')

因此,我尝试运行我的目标检测程序,并不断收到以下错误消息:

AssertionError:Torch未在启用CUDA的情况下编译

我不明白为什么会发生这种情况,因为我有一个2017年的MacBook Pro和AMD GPU,所以我没有支持CUDA的GPU

我在代码中添加了这条语句,以确保设备设置为“cpu”,然而,看起来程序似乎一直试图通过GPU运行它,即使它不存在

if torch.cuda.is_available():
    device = torch.device('cuda')
    
else:
    device = torch.device('cpu')
这是发生错误的地方(第4行):

如果有人能帮我解决这个问题,那就太好了

提前谢谢大家

PS:我已经尝试过更新Pytorch版本,但仍然存在同样的问题

错误输出:


事实证明,我必须重新安装火炬和火炬愿景,才能让一切正常运行

什么是
训练一个新纪元
?函数定义是什么?嗨,对不起,train_one_epoch是从库“引擎”以及“评估”中导入的函数。我不想把整个代码都放进去,因为上次我的另一个问题被删除了:)那么这些库可能只在GPU上运行?至少要把他们和他们的文档联系起来。我遵循了这一页上的教程:在B部分:PyTorch中,他们编写了所有库。我还将用代码更新这个问题,这样您可以更好地查看。您还应该知道断言失败的确切位置。请澄清您安装的软件包的版本?
    for epoch in range(num_epochs):
        # train for one epoch, printing every 10 iterations
        print("Hey")
        train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq=10)
        print("Hey")
        # update the learning rate
        lr_scheduler.step()
        # evaluate on the test dataset
        evaluate(model, data_loader_test, device=device)
import os
import pandas as pd
import torch
import torch.utils.data
import torchvision
from PIL import Image
import utils
from engine import train_one_epoch, evaluate
import transforms as T
from torchvision.models.detection.faster_rcnn import FastRCNNPredictor


def parse_one_annot(path_to_data_file, filename):
    data = pd.read_csv(path_to_data_file)
    boxes_array = data[data["filename"] == filename][["xmin", "ymin", "xmax", "ymax"]].values

    return boxes_array


class RaccoonDataset(torch.utils.data.Dataset):

    def __init__(self, root, data_file, transforms=None):
        self.root = root
        self.transforms = transforms
        self.imgs = sorted(os.listdir(os.path.join(root, "images")))
        self.path_to_data_file = data_file

    def __getitem__(self, idx):
        # load images and bounding boxes
        img_path = os.path.join(self.root, "images", self.imgs[idx])
        img = Image.open(img_path).convert("RGB")
        box_list = parse_one_annot(self.path_to_data_file,
                                   self.imgs[idx])
        boxes = torch.as_tensor(box_list, dtype=torch.float32)

        num_objs = len(box_list)
        # there is only one class
        labels = torch.ones((num_objs,), dtype=torch.int64)
        image_id = torch.tensor([idx])
        area = (boxes[:, 3] - boxes[:, 1]) * (boxes[:, 2] - boxes[:, 0])
        # suppose all instances are not crowd
        iscrowd = torch.zeros((num_objs,), dtype=torch.int64)
        target = {}
        target["boxes"] = boxes
        target["labels"] = labels
        target["image_id"] = image_id
        target["area"] = area
        target["iscrowd"] = iscrowd

        if self.transforms is not None:
            img, target = self.transforms(img, target)
            return img, target

    def __len__(self):
        return len(self.imgs)


dataset = RaccoonDataset(root="./raccoon_dataset", data_file="./raccoon_dataset/data/raccoon_labels.csv")

dataset.__getitem__(0)


def get_model(num_classes):
    model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)

    in_features = model.roi_heads.box_predictor.cls_score.in_features
    # replace the pre-trained head with a new on
    model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes)

    return model


def get_transform(train):
    transforms = []
    # converts the image, a PIL image, into a PyTorch Tensor
    transforms.append(T.ToTensor())

    if train:
        # during training, randomly flip the training images
        # and ground-truth for data augmentation
        transforms.append(T.RandomHorizontalFlip(0.5))
    return T.Compose(transforms)


def main():

    dataset = RaccoonDataset(root="./raccoon_dataset",
                             data_file="raccoon_dataset/data/raccoon_labels.csv",
                             transforms=get_transform(train=True))

    dataset_test = RaccoonDataset(root="./raccoon_dataset",
                                  data_file="raccoon_dataset/data/raccoon_labels.csv",
                                  transforms=get_transform(train=False))

    torch.manual_seed(1)
    indices = torch.randperm(len(dataset)).tolist()
    dataset = torch.utils.data.Subset(dataset, indices[:-40])
    dataset_test = torch.utils.data.Subset(dataset_test, indices[-40:])

    # define training and validation data loaders
    data_loader = torch.utils.data.DataLoader(dataset, batch_size=2, shuffle=True, num_workers=4,
                                              collate_fn=utils.collate_fn)
    data_loader_test = torch.utils.data.DataLoader(dataset_test, batch_size=1, shuffle=False, num_workers=4,
                                                   collate_fn=utils.collate_fn)

    print("We have: {} examples, {} are training and {} testing".format(len(indices), len(dataset), len(dataset_test)))

    if torch.cuda.is_available():
        device = torch.device('cuda')
    else:
        device = torch.device('cpu')

    num_classes = 2
    model = get_model(num_classes)

    # construct an optimizer
    params = [p for p in model.parameters() if p.requires_grad]
    optimizer = torch.optim.SGD(params, lr=0.005, momentum=0.9, weight_decay=0.0005)

    # and a learning rate scheduler which decreases the learning rate by
    # 10x every 3 epochs

    lr_scheduler = torch.optim.lr_scheduler.StepLR(optimizer, step_size=3, gamma=0.1)

    # let's train it for 10 epochs

    num_epochs = 10

    for epoch in range(num_epochs):
        # train for one epoch, printing every 10 iterations
        train_one_epoch(model, optimizer, data_loader, device, epoch, print_freq=10)
        # update the learning rate
        lr_scheduler.step()
        # evaluate on the test dataset
        evaluate(model, data_loader_test, device=device)


    os.mkdir("pytorch object detection/raccoon/")
    torch.save(model.state_dict(), "pytorch object detection/raccoon/model")


if __name__ == '__main__':
    main()