1.在官网或网盘下载yolov5源码以及预训练权重官网地址如下GitHub - ultralytics/yolov5: YOLOv5 in PyTorch ONNX CoreML TFLite通过网盘分享的文件yolov5源码及预训练权重文件链接: https://pan.baidu.com/s/1sn9a8qFi3uGFC-_kemMOiA?pwdyov5 提取码: yov52.准备好自己的数据集图片及对应的标签进行数据集划分使用如下程序划分数据集生成的VOCdevkit文件夹可直接复制到yolov5源码文件夹下VOCdevkit里会有训练集、验证集和测试集子文件夹包含各自的图片及标签便捷省事若不需要测试集可与验证集合并 划分数据集输入图片和标签路径以及需要生成的文件夹路径 第85行更改训练集、验证集、测试机的比例 import os import shutil import random from sklearn.model_selection import train_test_split # 图片和标签文件夹路径 images_dir rD:\images labels_dir rD:\labels # 输出文件夹路径 output_dir rD:\yolov5-master\VOCdevkit # 创建输出文件夹 if not os.path.exists(output_dir): os.makedirs(output_dir) train_dir os.path.join(output_dir, train) val_dir os.path.join(output_dir, val) test_dir os.path.join(output_dir, test) if not os.path.exists(train_dir): os.makedirs(train_dir) if not os.path.exists(val_dir): os.makedirs(val_dir) if not os.path.exists(test_dir): os.makedirs(test_dir) train_images_dir os.path.join(train_dir, images) train_labels_dir os.path.join(train_dir, labels) val_images_dir os.path.join(val_dir, images) val_labels_dir os.path.join(val_dir, labels) test_images_dir os.path.join(test_dir, images) test_labels_dir os.path.join(test_dir, labels) if not os.path.exists(train_images_dir): os.makedirs(train_images_dir) if not os.path.exists(train_labels_dir): os.makedirs(train_labels_dir) if not os.path.exists(val_images_dir): os.makedirs(val_images_dir) if not os.path.exists(val_labels_dir): os.makedirs(val_labels_dir) if not os.path.exists(test_images_dir): os.makedirs(test_images_dir) if not os.path.exists(test_labels_dir): os.makedirs(test_labels_dir) # 获取所有图片和标签文件 image_files [f for f in os.listdir(images_dir) if os.path.isfile(os.path.join(images_dir, f))] label_files [f for f in os.listdir(labels_dir) if os.path.isfile(os.path.join(labels_dir, f))] # 检查文件名匹配 def check_filename_match(image_files, label_files): image_names {os.path.splitext(file)[0] for file in image_files} label_names {os.path.splitext(file)[0] for file in label_files} mismatched image_names.symmetric_difference(label_names) if mismatched: print(fFilename mismatch: {mismatched}) else: print(All filenames match.) check_filename_match(image_files, label_files) # 组合图片和标签文件 matched_files [] for image_file in image_files: image_name os.path.splitext(image_file)[0] label_file image_name .txt # 假设标签文件扩展名为.txt if label_file in label_files: matched_files.append((image_file, label_file)) else: print(fWarning: No matching label file for {image_file}) # 确保所有图片和标签文件都匹配 assert len(matched_files) len(image_files), Some images do not have matching labels random.shuffle(matched_files) # 随机打乱文件 # 划分数据集 train_files, temp_files train_test_split(matched_files, test_size0.1, random_state42) # 90% 训练集10% 验证集和测试集 val_files, test_files train_test_split(temp_files, test_size0.5, random_state42) # 50% 验证集50% 测试集 # 定义划分比例 train_ratio len(train_files) / len(matched_files) val_ratio len(val_files) / len(matched_files) test_ratio len(test_files) / len(matched_files) print(fTraining set ratio: {train_ratio:.2f}) print(fValidation set ratio: {val_ratio:.2f}) print(fTest set ratio: {test_ratio:.2f}) # 复制文件到相应的文件夹 def copy_files(files, image_dir, label_dir): for image_file, label_file in files: shutil.copy(os.path.join(images_dir, image_file), os.path.join(image_dir, image_file)) shutil.copy(os.path.join(labels_dir, label_file), os.path.join(label_dir, label_file)) copy_files(train_files, train_images_dir, train_labels_dir) copy_files(val_files, val_images_dir, val_labels_dir) copy_files(test_files, test_images_dir, test_labels_dir)3.在data文件夹下创建xxx.yaml名称可随意起若要识别汽车可命名为car.yamlyaml文件中需更改训练集、验证集路径以及识别的类型数量与对应名称。train: D:/yolov5-master/VOCdevkit/train/images #训练集路径 val: D://yolov5-master/VOCdevkit/val/images # 验证集路径 nc: 2 # 识别的类型数量 # Classes names: [car,cat]4.训练模型修改train.py文件中的相关参数第一次训练修改红色框中部分参数即可如何修改已在注释中说明。运行train.py即可看到模型开始训练在根目录下会生成runs文件夹runs\train\exp里包含有训练保存的相关信息以及权重文件。5.训练过程可视化在终端输入如下命令点击链接即可在浏览器中查看训练过程中的指标变化tensorboard --logdirruns6.模型推理将要推理的图片放到data/images文件夹里修改detect.py程序里的如下部分即可进行推理。运行detect.py程序推理结果路径为yolov5-master\runs\detect\exp。至此模型训练完成