yolov8 device选择与指定gpu不生效

yolov8在推理阶段,可以通过两种方式调用

model = YOLO('yolov8n.pt')  # pretrained YOLOv8n model
# 方式一
results = model(['im1.jpg', 'im2.jpg']) 
# 方式二
result = model.predict(source, save=True, imgsz=320, conf=0.5)

如果想要指定推理设备或者编号,可以使用方式二。

result = model.predict(source,device='0')

device后面跟’cpu’或者设备编号,编号加不加单引号都可以。
实际测试中发现,模型加载后,只有首次选择设备编号生效,后续修改不生效;且如果首次不指定,后续修改也无效。
测试代码如下,共进行三次推理,分别是预加载、第一次和第二次。
其中预加载和第二次推理中都调使用了device参数,用于控制推理设备。

import time
import torch
from ultralytics import YOLO
yolo = YOLO('weights/yolov8l.pt')
im0='mask.jpg'
image = torch.rand((1, 3, 640, 640))
t0=time.time()
_ = yolo.predict(image,device='cpu')
t1=time.time()
print('--预加载-->',t1-t0)
pred = yolo(im0)[0]
t2=time.time()
print('--第一次-->', t2 - t1)
pred = yolo.predict(im0,device='0')[0]
print('--第二次-->', time.time() - t2)
--预加载--> 0.5764725208282471
--第一次--> 0.17699360847473145
--第二次--> 0.15952658653259277

把预加载和第二次的cpu和0反过来试试。

_ = yolo.predict(image,device='0')
pred = yolo.predict(im0,device='cpu')[0]
--预加载--> 3.803717613220215
--第一次--> 0.03720545768737793
--第二次--> 0.03316307067871094

可以看到只有第一次输入的设备编号起作用,后边的编号不再生效,即便后续输入的编号是不存在的设备编号也不会再校验正确与否。
如果最开始一次推理使用的是以下形式:

pred = yolo(im0)[0]

则会默认选择gpu进行推理,且后续编号不生效。估计是优先寻找可用gpu进行推理。

猜你喜欢

转载自blog.csdn.net/a272881819/article/details/131577801