参考文档:
https://docs.ultralytics.com/modes/predict/#working-with-results
https://zhuanlan.zhihu.com/p/655162922
https://thinkinfi.com/motorcycle-helmet-detection-using-deep-learning/
示例说明
- 关于 yolo runtime settings.yaml 对训练过程的干扰
yolo settings.yaml文件路径为: C:\Users\MY_USER\AppData\Roaming\Ultralytics\settings.yaml, 该文件保存着上次训练时的runtime 设置, 其中有一个 datasets_dir 设置在特定条件下会导致train报错.
干扰的条件是: 使用Python API训练, 并且data yaml文件中的path变量使用的相对路径.
报错的信息为: images not found
修复方式为: 如果 data yaml 中的path变量使用的相对路径, 需要更新yolo settings.yaml中的datasets_dir成我们真实存放图片dataset的父目录, 如果不更新settings.yaml将保留上次训练的图像路径,会导致报 images not found 错误 ; 如果 data yaml 中的path变量使用的绝对路径, 则不需更新yolo settings.yaml中的datasets_dir. - 构建线程安全的predict, 可参考 ultralytics 官方文档 https://docs.ultralytics.com/modes/predict
- predict() 返回类型为 Results list , 官方文档写的是 Results, 这一点是错误的.
示例代码
from IPython import display
import ultralytics
from ultralytics import YOLO, settings
from os import path
def train():
# ==========================
# 如果 data yaml 中的path变量使用的相对路径, 需要更新yolo settings.yaml中的datasets_dir成我们真实存放图片dataset的父目录, 如果不更新settings.yaml将保留上次训练的图像路径,会导致报 images not found 错误
# 如果 data yaml 中的path变量使用的绝对路径, 则不需更新yolo settings.yaml中的datasets_dir.
# yolo settings.yaml文件路径为: C:\Users\MY_USER\AppData\Roaming\Ultralytics\settings.yaml
# ==========================
image_path = r'''C:\Users\dorothy\AppData\Roaming\Python\Python311\Scripts\datasets'''
settings.update({"datasets_dir": image_path})
# 设置训练data yaml文件
dataset_yaml = r"C:\Users\dorothy\AppData\Roaming\Python\Python311\site-packages\ultralytics\cfg\datasets\coco8.yaml"
# 可提前将预训练的olov8n.pt文件下载到本脚本同一目录下,地址 https://github.com/ultralytics/assets/releases
model = YOLO("yolov8n.pt")
# 在本脚本同一目录下, 会自动生成 runs 结果目录
results = model.train(data=dataset_yaml, epochs=2, imgsz=640, device="cpu", batch=8)
def predict():
model = YOLO(r"D:\my_workspace\source\yolo8\runs\detect\train9\weights\last.pt")
image_file1 = r"D:\my_workspace\py_code\yolo8\Lib\site-packages\ultralytics\assets\bus.jpg"
image_file2 = r"D:\my_workspace\py_code\yolo8\Lib\site-packages\ultralytics\assets\zidane.jpg"
results_list = model.predict(source=[image_file1, image_file2], show=False, save=True, save_conf=True,
save_txt=True)
for results in results_list:
boxes = results.boxes
speed = results.speed
names = results.names
json = results.tojson()
image_path = results.path
print("====")
print(image_path)
print(names)
print(json)
if __name__ == '__main__':
display.clear_output()
ultralytics.checks()
# train()
predict()
标签:settings,Python,image,ultralytics,results,YoloV8,yaml,API,path
From: https://www.cnblogs.com/harrychinese/p/18016202