yolov5显卡运算用不了

我写了一个锁人的代码,但是gpu算不了。
尝试安装过,安装cuda成功了
但是没效果
代码如下

FILE = Path(__file__).resolve()
ROOT = FILE.parents[0]  # YOLOv5 root directory
if str(ROOT) not in sys.path:
    sys.path.append(str(ROOT))  # add ROOT to PATH
ROOT = Path(os.path.relpath(ROOT, Path.cwd()))  # relative

from models.common import DetectMultiBackend
from utils.dataloaders import IMG_FORMATS, VID_FORMATS, LoadImages, LoadScreenshots, LoadStreams
from utils.general import (LOGGER, Profile, check_file, check_img_size, check_imshow, check_requirements, colorstr, cv2,
                           increment_path, non_max_suppression, print_args, scale_boxes, strip_optimizer, xyxy2xywh)
from utils.plots import Annotator, colors, save_one_box
from utils.torch_utils import select_device, smart_inference_mode
from ScreenShot import screenshot

is_left_pressed = False

end = 'end'
lock = 'lock'
init = {
    end: False,
    lock: False,
}


def mouse(data):
    def down(x, y, button, pressed):
        if button == pynput.mouse.Button.left:
            data[lock] = pressed

    with pynput.mouse.Listener(on_click=down) as m:
        m.join()


def keyboard(data):
    def press(key):
        if key == pynput.keyboard.KeyCode.from_char('v'):
            data[lock] = True

    def release(key):
        if key == pynput.keyboard.Key.end:
            # 结束程序
            data[end] = True
            winsound.Beep(400, 200)
            return False
        elif key == pynput.keyboard.KeyCode.from_char('v'):
            data[lock] = False

    with pynput.keyboard.Listener(on_release=release) as k:
        k.join()


@smart_inference_mode()
def run(data):
    try:
        driver = ctypes.CDLL(r"D:\an\logitech.driver.dll")
        ok = driver.device_open() == 1
        if not ok:
            print('初始化失败, 未安装罗技驱动')
    except FileNotFoundError:
        print('初始化失败, 缺少文件')

    def move(x, y):
        if (x == 0) & (y == 0):
            return
        driver.moveR(x, y, True)

    # Load model
    device = select_device('code:0')  # cpu 或者code:0(n卡用), 你这边 cuda 环境装好了吗
    model = DetectMultiBackend(weights='./look png/best.pt', device=device, dnn=False, data=False, fp16=False)

    winsound.Beep(400, 200)  # 响了就是可以使用了

    while True:
        if data[end]:
            break
        t1 = time.time()
        im = screenshot()
        im0 = im
        im = letterbox(im, (640, 640), stride=32, auto=True)[0]  # padded resize
        im = im.transpose((2, 0, 1))[::-1]  # HWC to CHW, BGR to RGB
        im = np.ascontiguousarray(im)  # contiguous
        im = torch.from_numpy(im).to(model.device)
        im = im.half() if model.fp16 else im.float()  # uint8 to fp16/32
        im /= 255  # 0 - 255 to 0.0 - 1.0
        if len(im.shape) == 3:
            im = im[None]  # expand for batch dim

        # 推理

        pred = model(im, augment=False, visualize=False)
        # 非极大值抑制
        pred = non_max_suppression(pred, conf_thres=0.7, iou_thres=0.7, classes=0, max_det=1000)

        # Second-stage classifier (optional)
        # pred = utils.general.apply_classifier(pred, classifier_model, im, im0s)

        # Process predictions
        for i, det in enumerate(pred):  # per image
            annotator = Annotator(im0, line_width=1)
            # gn = torch.tensor(im0.shape)[[1, 0, 1, 0]]  # normalization gain whwh 实验

            if len(det):
                distance_list = []
                target_list = []
                # Rescale boxes from img_size to im0 size
                det[:, :4] = scale_boxes(im.shape[2:], det[:, :4], im0.shape).round()
                # Write results
                for *xyxy, conf, cls in reversed(det):
                    # 此处为(conf)就是置信度,如果是(int(cls))就是物体数字
                    xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4))).view(-1).tolist()
                    # normalized xywh  把xywh变成列表

                    # print(xywh, line)

                    X = xywh[0] - 180
                    Y = xywh[1] - 180

                    distance = math.sqrt(X ** 2 + Y ** 2)
                    xywh.append(distance)
                    annotator.box_label(xyxy, label=f'[{int(cls)}Distance:{round(distance, 2)}]', color=(34, 139, 34),
                                        txt_color=(0, 191, 255))

                    distance_list.append(distance)
                    target_list.append(xywh)

                target_info = target_list[distance_list.index(min(distance_list))]
                if data[lock]:
                    move(int(target_info[0] - 180), int(target_info[1] - 180))
                    print(f'移动鼠标: {int(target_info[0] - 180)}, {int(target_info[1] - 180)}')
                # print('目标信息', target_list)
                # print('距离', distance_list)
                # print(target_info)

                # print(X, Y)
                # mouse_xy(int(X), int(Y))

                # xywh.append(distance)

                # print(distance)
                # print(X, Y)

            im0 = annotator.result()

            cv2.imshow('QQ', im0)  # w
            cv2.waitKey(1)
        # print(f'一个循环耗时: {time.time() - t1}')


if __name__ == "__main__":
    print("作者anrr")
    multiprocessing.freeze_support()  # windows 平台使用 multiprocessing 必须在 main 中第一行写这个
    manager = multiprocessing.Manager()
    data = manager.dict()  # 创建进程安全的共享变量
    data.update(init)  # 将初始数据导入到共享变量
    pm = Process(target=mouse, args=(data,), name='Mouse')  # 鼠标监听进程
    pk = Process(target=keyboard, args=(data,), name='Keyboard')  # 键盘监听进程
    pa = Process(target=run, args=(data,), name='Aim')  # 瞄准进程
    pm.start()
    pk.start()
    pa.start()
    pk.join()  # 不写 join 的话, 使用 dict 的地方就会报错 conn = self._tls.connection, AttributeError: 'ForkAwareLocal' object has no attribute 'connection'
    pm.terminate()  # 鼠标进程无法主动监听到终止信号, 所以需强制结束


报错代码如下:


  assert torch.cuda.is_available() and torch.cuda.device_count() >= len(device.replace(',', '')), \
AssertionError: Invalid CUDA '--device code:0' requested, use '--device cpu' or pass valid CUDA device(s)