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

Open
#333 0 comments 1 reaction 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
3/5
Estimated time
1-2 days
Newbie friendliness
35/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Stale
Tech stack
python

Research direction

Start with the data.yaml paths and the train_custom_dataset_yolo entry point, then reproduce training with the shown relative paths and compare the resolved path with the absolute-path case. Trace why the dataset path is repeated and verify that training can find the train and val directories using relative paths on another machine.

Written by the indexing model from the issue text.

Description

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.

Dominant language
Python
Stars
642
Forks
146
Avg merge
1d 10h
Merged PRs (30d)
13

Getting set up

Open in Codespaces

Starts the project's dev container in your browser, under your own GitHub account.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from roboflow/roboflow-python

All issues in roboflow/roboflow-python

Similar issues

More Python issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.