尝试训练 yolo 自定义模型时,data.yaml 文件中的相对路径出现问题

问题描述 投票:0回答:1

我正在尝试创建一个训练管道来使用用户输入的标记图像来训练自定义 yolov9 模型。

我遇到一个问题,如果我让 data.yaml 文件使用相对路径,则会收到错误:

    RuntimeError: Dataset 'OIT_model/customOIT/customdatasetyolo/data.yaml' error
    Dataset 'OIT_model/customOIT/customdatasetyolo/data.yaml' images not found , missing path 'C:\GitHub\Anomaly_detection_combine\OIT_model\Anomaly_detection_combine\OIT_model\customOIT\customdatasetyolo\Anomaly_detection_combine\OIT_model\customOIT\customdatasetyolo\val'

更奇怪的是错误提到的路径,

'C:\\GitHub\\Anomaly_detection_combine\\OIT_model\\Anomaly_detection_combine\\OIT_model\\customOIT\\customdatasetyolo\\Anomaly_detection_combine\\OIT_model\\customOIT\\customdatasetyolo\\val'

不是任何地方都存在或正在请求的路径。实际路径是

'C:\\GitHub\\Anomaly_detection_combine\\OIT_model\\customOIT\\customdatasetyolo\\val'

由于某种原因,它重复路径的第一部分 3 次。

这是 data.yaml 文件:

    path: OIT_model/customOIT/customdatasetyolo
    train: OIT_model/customOIT/customdatasetyolo/train
    val: OIT_model/customOIT/customdatasetyolo/val
    nc: 1
    names: ['5']

这是开始训练的代码:


    def train_custom_dataset_yolo(data_path, epochs=100, imgsz=64, verbose=True):
        model = YOLO("OIT_model/yolov9c.pt")
        # Specify the save directory for training runs
        save_dir = 'OIT_model/customOIT/yolocustomtrainoutput'
        if os.path.exists(save_dir):
            for file in os.listdir(save_dir):
                file_path = os.path.join(save_dir, file)
                if os.path.isfile(file_path) or os.path.islink(file_path):
                    os.unlink(file_path)
                elif os.path.isdir(file_path):
                    shutil.rmtree(file_path)
        os.makedirs(save_dir, exist_ok=True)
        model.train(data=data_path, epochs=epochs, imgsz=imgsz, verbose=verbose, save_dir=save_dir)
        return
    train_custom_dataset_yolo('OIT_model/customOIT/customdatasetyolo/data.yaml', epochs=1,imgsz=64, verbose=True)

然而,非常奇怪的是,当我用绝对路径替换相对路径时,如下所示:

    path: C:/GitHub/fix/Anomaly_detection_combine/OIT_model/customOIT/customdatasetyolo
    train: C:/GitHub/fix/Anomaly_detection_combine/OIT_model/customOIT/customdatasetyolo/train
    val: C:/GitHub/fix/Anomaly_detection_combine/OIT_model/customOIT/customdatasetyolo/val
    nc: 1
    names: ['5']

培训工作没有问题。使用绝对路径对我来说不是一个选择,因为这个应用程序需要在其他机器上重现。

python machine-learning neural-network yolo ultralytics
1个回答
0
投票

data.yaml 文件中尝试以下内容:

    path: OIT_model/customOIT/customdatasetyolo
    train: train
    val: val
    nc: 1
    names: ['5']

train
val
路径应该相对于一般的
path
,因此例如完整的火车路径将类似于
os.path.join(path, train)
。对象检测任务 dataset.yaml 示例:https://docs.ultralytics.com/datasets/detect/#supported-dataset-formats

© www.soinside.com 2019 - 2024. All rights reserved.