我正在尝试创建一个训练管道来使用用户输入的标记图像来训练自定义 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']
培训工作没有问题。使用绝对路径对我来说不是一个选择,因为这个应用程序需要在其他机器上重现。
在 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