Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Issue with relative paths in data.yaml file when trying to train yolo custom model #333

Open
bruhbot-dev opened this issue Oct 10, 2024 · 0 comments

Comments

@bruhbot-dev
Copy link

I am trying to create a training pipeline to train a custom yolov9 model with user inputted labeled images.

I am having an issue where if I make my data.yaml file use relative paths, I get the error:

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'

What is even more odd, is that the path the error mentions,

'C:\\GitHub\\Anomaly_detection_combine\\OIT_model\\Anomaly_detection_combine\\OIT_model\\customOIT\\customdatasetyolo\\Anomaly_detection_combine\\OIT_model\\customOIT\\customdatasetyolo\\val'
is not a path that exists or is being requested anywhere. The actual path is

'C:\\GitHub\\Anomaly_detection_combine\\OIT_model\\customOIT\\customdatasetyolo\\val'
for some reason it is repeating the first part of the path 3 times.

This is the data.yaml file:

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

and this is the code that is starting training:

    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)

Very strangely however, when I replace the relative paths with absolute paths, like so:

    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']

training works without issue. Using absolute pathing is not an option for me, as this application needs to be reproductible on others machines.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant