首先标注数据使用lebalme 或者 lebalimg
标注的时候选择txt格式就行,yolov8训的时候用这个格式,别的看情况可以写代码转格式
标注完之后要训练之前需要划分数据集,比如7:3 8:2 之类的,这个就看个人了,一般5000张以内基本7:3开就行,大概8千到1万就8:2开,或者8.5:1.5开,看个人。
划分数据集,我上个7:3和8:2开的代码:
8:2开的demo
import os import shutil from sklearn.model_selection import train_test_split def split_dataset(image_dir, label_dir, train_ratio, val_ratio, test_ratio=None): # 获取所有图像文件名(假设图像和标签文件同名) all_images = [f for f in os.listdir(image_dir) if f.endswith('.jpg')] # 创建对应的标签文件名列表,假设标签文件扩展名为 .txt all_labels = [f.replace('.jpg', '.txt') for f in all_images] # 按比例划分训练集和验证集(以及可选的测试集) train_images, temp_images, train_labels, temp_labels = train_test_split( all_images, all_labels, test_size=(1 - train_ratio), random_state=42 ) # 如果指定了测试集比例 if test_ratio: # 调整验证集比例,确保验证集和测试集的比例正确 val_ratio_adjusted = val_ratio / (val_ratio + test_ratio) # 按调整后的比例划分验证集和测试集 val_images, test_images, val_labels, test_labels = train_test_split( temp_images, temp_labels, test_size=(1 - val_ratio_adjusted), random_state=42 ) else: # 如果未指定测试集比例,全部分配给验证集 val_images, test_images, val_labels, test_labels = temp_images, [], temp_labels, [] # 创建目标目录,如果不存在则创建 os.makedirs('datasets/images/train', exist_ok=True) os.makedirs('datasets/images/val', exist_ok=True) os.makedirs('datasets/images/test', exist_ok=True) os.makedirs('datasets/labels/train', exist_ok=True) os.makedirs('datasets/labels/val', exist_ok=True) os.makedirs('datasets/labels/test', exist_ok=True) # 复制训练集文件到目标目录 for img, lbl in zip(train_images, train_labels): shutil.copy(os.path.join(image_dir, img), os.path.join('datasets/images/train', img)) shutil.copy(os.path.join(label_dir, lbl), os.path.join('datasets/labels/train', lbl)) # 复制验证集文件到目标目录 for img, lbl in zip(val_images, val_labels): shutil.copy(os.path.join(image_dir, img), os.path.join('datasets/images/val', img)) shutil.copy(os.path.join(label_dir, lbl), os.path.join('datasets/labels/val', lbl)) # 复制测试集文件到目标目录(如果有测试集) for img, lbl in zip(test_images, test_labels): shutil.copy(os.path.join(image_dir, img), os.path.join('datasets/images/test', img)) shutil.copy(os.path.join(label_dir, lbl), os.path.join('datasets/labels/test', lbl)) # 打印训练集、验证集和测试集的图片数量 print(f"Training images: {len(train_images)}") print(f"Validation images: {len(val_images)}") if test_ratio: print(f"Testing images: {len(test_images)}") # 示例使用 image_dir = 'datasets/images' # 图像文件目录 label_dir = 'datasets/labels' # 标签文件目录 # 按照 80% 训练集,10% 验证集,10% 测试集的比例划分数据集 split_dataset(image_dir, label_dir, train_ratio=0.8, val_ratio=0.1, test_ratio=0.1)
7:3开的demo
import os
import shutil
from sklearn.model_selection import train_test_splitdef split_dataset(image_dir, label_dir, train_ratio):
# 获取所有图像文件名(假设图像和标签文件同名)
all_images = [f for f in os.listdir(image_dir) if f.endswith('.jpg')]
all_labels = [f.replace('.jpg', '.txt') for f in all_images]# 按比例划分训练集和验证集
train_images, val_images, train_labels, val_labels = train_test_split(
all_images, all_labels, test_size=(1 - train_ratio), random_state=42
)# 创建目标目录
train_image_dir = os.path.join(image_dir, 'train')
val_image_dir = os.path.join(image_dir, 'val')
train_label_dir = os.path.join(label_dir, 'train')
val_label_dir = os.path.join(label_dir, 'val')
os.makedirs(train_image_dir, exist_ok=True)
os.makedirs(val_image_dir, exist_ok=True)
os.makedirs(train_label_dir, exist_ok=True)
os.makedirs(val_label_dir, exist_ok=True)# 复制文件到目标目录
for img, lbl in zip(train_images, train_labels):
shutil.copy(os.path.join(image_dir, img), os.path.join(train_image_dir, img))
shutil.copy(os.path.join(label_dir, lbl), os.path.join(train_label_dir, lbl))for img, lbl in zip(val_images, val_labels):
shutil.copy(os.path.join(image_dir, img), os.path.join(val_image_dir, img))
shutil.copy(os.path.join(label_dir, lbl), os.path.join(val_label_dir, lbl))print(f"Training images: {len(train_images)}")
print(f"Validation images: {len(val_images)}")# 示例使用
image_dir = 'datasets/images' # 图像文件目录
label_dir = 'datasets/labels' # 标签文件目录
split_dataset(image_dir, label_dir, train_ratio=0.7) # 按照 70% 训练集和 30% 验证集的比例划分数据集
训练的代码demo
from ultralytics import YOLO def main(): # 加载YOLOv8模型(这里以yolov8s为例) model = YOLO('yolov8s.pt') # 你可以使用预训练的模型权重 # 设置超参数 hyperparameters = { 'epochs': 1, # 训练轮数 'imgsz': 640, # 输入图像大小 'batch': 8, # 批次大小 'device': 0, # 使用的GPU设备编号,-1表示使用CPU 'lr0': 0.01, # 初始学习率 'lrf': 0.01, # 最终学习率 'momentum': 0.937, # 动量 'weight_decay': 0.0005, # 权重衰减 'warmup_epochs': 3.0, # 预热轮数 'warmup_momentum': 0.8, # 预热动量 'warmup_bias_lr': 0.1, # 预热偏置学习率 'box': 7.5, # box 损失增益 'cls': 0.5, # cls 损失增益 'dfl': 1.5, # dfl 损失增益 'hsv_h': 0.015, # HSV 色调增益 'hsv_s': 0.7, # HSV 饱和度增益 'hsv_v': 0.4, # HSV 值增益 'degrees': 0.0, # 旋转度数 'translate': 0.1, # 平移增益 'scale': 0.5, # 尺度增益 'shear': 0.0, # 剪切度数 'perspective': 0.0, # 透视度数 'flipud': 0.0, # 上下翻转概率 'fliplr': 0.5, # 左右翻转概率 'mosaic': 1.0, # 马赛克增强 'mixup': 0.0, # MixUp增强 'copy_paste': 0.0, # 复制粘贴增强 'auto_augment': 'randaugment', # 自动增强策略 'erasing': 0.4, # 随机擦除增强 'crop_fraction': 1.0, # 裁剪比例 'cfg': None, # 模型配置文件 'tracker': 'botsort.yaml', # 跟踪器配置文件 'save_dir': 'runs/train', # 保存目录 'rect': False, # 是否使用矩形训练 'cos_lr': False, # 是否使用余弦学习率 'close_mosaic': 10, # 关闭马赛克增强的epoch 'resume': False, # 是否恢复训练 'amp': True, # 是否使用混合精度 'fraction': 1.0, # 数据集使用比例 'profile': False, # 是否性能分析 'freeze': None, # 冻结层 'multi_scale': False, # 是否使用多尺度训练 'overlap_mask': True, # 是否使用重叠掩码 'mask_ratio': 4, # 掩码比例 'dropout': 0.0, # Dropout 概率 'val': True, # 是否进行验证 'split': 'val', # 验证集拆分 'save_json': False, # 是否保存为JSON 'save_hybrid': False, # 是否保存混合模型 'conf': None, # 置信度阈值 'iou': 0.7, # IOU 阈值 'max_det': 300, # 最大检测数量 'half': False, # 是否使用半精度 'dnn': False, # 是否使用DNN 'plots': True, # 是否绘制图表 'source': None, # 数据源 'vid_stride': 1, # 视频步长 'stream_buffer': False, # 是否使用流缓冲 'visualize': False, # 是否可视化 'augment': False, # 是否数据增强 'agnostic_nms': False, # 是否使用类别无关NMS 'classes': None, # 使用的类别 'retina_masks': False, # 是否使用视网膜掩码 'embed': None, # 嵌入 'show': False, # 是否显示 'save_frames': False, # 是否保存帧 'save_txt': False, # 是否保存为TXT 'save_conf': False, # 是否保存置信度 'save_crop': False, # 是否保存裁剪结果 'show_labels': True, # 是否显示标签 'show_conf': True, # 是否显示置信度 'show_boxes': True, # 是否显示边界框 'line_width': None, # 线宽 'format': 'torchscript', # 格式 'keras': False, # 是否使用Keras 'optimize': False, # 是否优化 'int8': False, # 是否使用int8量化 'dynamic': False, # 是否动态 'simplify': False, # 是否简化 'opset': None, # ONNX opset版本 'workspace': 4, # 工作空间 'nms': False # 是否使用NMS } # 训练模型 model.train( data=r'D:\PycharmProjects\Project\ultralytics-main\datasets\mydata.yaml', # 数据集配置文件 **hyperparameters ) # 评估模型 results = model.val() # 使用模型进行推理 results = model(r'D:\PycharmProjects\Project\ultralytics-main\datasets\images\train\a_1559.jpg') # 输入图片路径 # 打印结果 print(results) if __name__ == "__main__": main()
训练结果出来了出现那个路径就是训练成功了
其中超参数适用的场景,根据所需调整
epochs (训练轮数)
场景:决定模型训练的轮数。较多的轮数可以提高模型的性能,但会增加训练时间。
适用:一般任务,建议从较小的值开始,如 50,然后根据模型收敛情况调整。
imgsz (输入图像大小)场景:决定输入图像的大小。较大的图像大小可以提高检测精度,但会增加计算量。
适用:高分辨率任务,推荐使用 640 或 1024。
batch (批次大小)场景:决定每个批次中处理的图像数量。较大的批次大小可以提高训练稳定性,但需要更多的显存。
适用:显存充足时,可以增大批次大小,如 16 或 32。
device (设备编号)场景:指定训练使用的设备编号。-1 表示使用 CPU,其他数字表示使用对应编号的 GPU。
适用:有多 GPU 环境时,可指定不同设备。
lr0 (初始学习率)场景:控制初始的学习率。较高的学习率可以加速收敛,但可能导致不稳定。
适用:一般从 0.01 开始,根据需要调整。
lrf (最终学习率)场景:训练结束时的学习率。通常设置为初始学习率的一个较小比例。
适用:通常设置为 0.01。
momentum (动量)场景:控制优化器的动量。动量可以帮助模型在梯度下降过程中保持稳定。
适用:一般设置为 0.937。
weight_decay (权重衰减)场景:控制正则化的权重衰减。防止模型过拟合。
适用:一般设置为 0.0005。
warmup_epochs (预热轮数)场景:控制预热阶段的轮数。在预热阶段,学习率逐渐增加到初始学习率。
适用:一般设置为 3.0。
warmup_momentum (预热动量)场景:控制预热阶段的动量。预热阶段,动量逐渐增加到正常动量。
适用:一般设置为 0.8。
warmup_bias_lr (预热偏置学习率)场景:控制预热阶段偏置项的学习率。
适用:一般设置为 0.1。
box (box 损失增益)场景:控制边界框损失的增益。
适用:一般设置为 7.5。
cls (cls 损失增益)场景:控制分类损失的增益。
适用:一般设置为 0.5。
dfl (dfl 损失增益)场景:控制分布焦点损失的增益。
适用:一般设置为 1.5。
hsv_h (HSV 色调增益)场景:数据增强时的色调增益。
适用:一般设置为 0.015。
hsv_s (HSV 饱和度增益)场景:数据增强时的饱和度增益。
适用:一般设置为 0.7。
hsv_v (HSV 值增益)场景:数据增强时的值增益。
适用:一般设置为 0.4。
degrees (旋转度数)场景:数据增强时的图像旋转度数。
适用:一般设置为 0.0。
translate (平移增益)场景:数据增强时的图像平移增益。
适用:一般设置为 0.1。
scale (尺度增益)场景:数据增强时的图像尺度增益。
适用:一般设置为 0.5。
shear (剪切度数)场景:数据增强时的图像剪切度数。
适用:一般设置为 0.0。
perspective (透视度数)场景:数据增强时的图像透视度数。
适用:一般设置为 0.0。
flipud (上下翻转概率)场景:数据增强时的图像上下翻转概率。
适用:一般设置为 0.0。
fliplr (左右翻转概率)场景:数据增强时的图像左右翻转概率。
适用:一般设置为 0.5。
mosaic (马赛克增强)场景:数据增强时的马赛克增强概率。
适用:一般设置为 1.0。
mixup (MixUp增强)场景:数据增强时的 MixUp 增强概率。
适用:一般设置为 0.0。
copy_paste (复制粘贴增强)场景:数据增强时的复制粘贴增强概率。
适用:一般设置为 0.0。
auto_augment (自动增强策略)场景:选择自动增强策略。
适用:一般设置为 'randaugment'。
erasing (随机擦除增强)场景:数据增强时的随机擦除增强概率。
适用:一般设置为 0.4。
crop_fraction (裁剪比例)场景:数据增强时的裁剪比例。
适用:一般设置为 1.0。
cfg (模型配置文件)场景:指定自定义的模型配置文件。
适用:根据具体需求设置。
tracker (跟踪器配置文件)场景:指定跟踪器配置文件。
适用:一般设置为 'botsort.yaml'。
save_dir (保存目录)场景:指定训练结果的保存目录。
适用:一般设置为 'runs/train'。
rect (是否使用矩形训练)场景:决定是否使用矩形训练。
适用:一般设置为 False。
cos_lr (是否使用余弦学习率)场景:决定是否使用余弦学习率调度。
适用:一般设置为 False。
close_mosaic (关闭马赛克增强的 epoch)场景:指定在训练多少个 epoch 后关闭马赛克增强。
适用:一般设置为 10。
resume (是否恢复训练)场景:决定是否从上次中断的地方恢复训练。
适用:一般设置为 False。
amp (是否使用混合精度)场景:决定是否使用混合精度训练。
适用:一般设置为 True。
fraction (数据集使用比例)场景:指定使用的数据集比例。
适用:一般设置为 1.0。
profile (是否性能分析)场景:决定是否进行性能分析。
适用:一般设置为 False。
freeze (冻结层)场景:指定要冻结的模型层。
适用:根据需要设置。
multi_scale (是否使用多尺度训练)场景:决定是否使用多尺度训练。
适用:一般设置为 False。
overlap_mask (是否使用重叠掩码)场景:决定是否使用重叠掩码。
适用:一般设置为 True。
mask_ratio (掩码比例)场景:指定掩码比例。
适用:一般设置为 4。
dropout (Dropout 概率)场景:指定 Dropout 概率。
适用:一般设置为 0.0。
val (是否进行验证)场景:决定是否在训练期间进行验证。
适用:一般设置为 True。
split (验证集拆分)场景:指定验证集拆分方式。
适用:一般设置为 'val'。
save_json (是否保存为 JSON)场景:决定是否保存验证结果为 JSON 格式。
适用:一般设置为 False。
save_hybrid (是否保存混合模型)场景:决定是否保存混合模型。
适用:一般设置为 False。
conf (置信度阈值)场景:指定置信度阈值。
适用:根据需要设置。
iou (IOU 阈值)场景:指定 IOU 阈值。
适用:一般设置为 0.7。
max_det (最大检测数量)场景:指定最大检测数量。
适用:一般设置为 300。
half (是否使用半精度)场景:决定是否使用半精度训练。
适用:一般设置为 False。
dnn (是否使用 DNN)场景:决定是否使用 DNN 进行推理。
适用:一般设置为 False。
plots (是否绘制图表)场景:决定是否在训练期间绘制图表。
适用:一般设置为 True。
source (数据源)场景:指定数据源路径。
适用:根据需要设置。
vid_stride (视频步长)场景:指定视频步长。
适用:一般设置为 1。
stream_buffer (是否使用流缓冲)场景:决定是否使用流缓冲。
适用:一般设置为 False。
visualize (是否可视化)场景:决定是否在训练过程中进行可视化。
适用:一般设置为 False。
augment (是否数据增强)场景:决定是否进行数据增强。
适用:一般设置为 False。
agnostic_nms (是否使用类别无关 NMS)场景:决定是否使用类别无关的 NMS。
适用:一般设置为 False。
classes (使用的类别)场景:指定需要检测的类别。
适用:根据需要设置。
retina_masks (是否使用视网膜掩码)场景:决定是否使用视网膜掩码。
适用:一般设置为 False。
embed (嵌入)场景:指定嵌入类型。
适用:根据需要设置。
show (是否显示)场景:决定是否在推理时显示图像。
适用:一般设置为 False。
save_frames (是否保存帧)场景:决定是否保存推理时的帧。
适用:一般设置为 False。
save_txt (是否保存为 TXT)场景:决定是否保存推理结果为 TXT 格式。
适用:一般设置为 False。
save_conf (是否保存置信度)场景:决定是否保存推理结果中的置信度。
适用:一般设置为 False。
save_crop (是否保存裁剪结果)场景:决定是否保存裁剪后的图像。
适用:一般设置为 False。
show_labels (是否显示标签)场景:决定是否在推理结果中显示标签。
适用:一般设置为 True。
show_conf (是否显示置信度)场景:决定是否在推理结果中显示置信度。
适用:一般设置为 True。
show_boxes (是否显示边界框)场景:决定是否在推理结果中显示边界框。
适用:一般设置为 True。
line_width (线宽)场景:指定绘制边界框的线宽。
适用:根据需要设置。
format (格式)场景:指定模型保存的格式。
适用:一般设置为 'torchscript'。
keras (是否使用 Keras)场景:决定是否使用 Keras 进行训练。
适用:一般设置为 False。
optimize (是否优化)场景:决定是否在保存模型时进行优化。
适用:一般设置为 False。
int8 (是否使用 int8 量化)场景:决定是否使用 int8 量化。
适用:一般设置为 False。
dynamic (是否动态)场景:决定是否使用动态图形。
适用:一般设置为 False。
simplify (是否简化)场景:决定是否在保存模型时进行简化。
适用:一般设置为 False。
opset (ONNX opset 版本)场景:指定 ONNX opset 版本。
适用:根据需要设置。
workspace (工作空间)场景:指定工作空间大小。
适用:一般设置为 4。
nms (是否使用 NMS)场景:决定是否在推理时使用 NMS。
适用:一般设置为 False。
模型推理demo(就是相当于yolov5的detect)
from ultralytics import YOLO
def main():
# 加载训练好的 YOLOv8 模型
model = YOLO('runs/train/exp/weights/best.pt') # 替换为你训练好的模型路径# 对单张图像进行推理
results = model.predict('path/to/your/image.jpg', save=True, conf=0.25) # 替换为你要测试的图像路径
# 打印推理结果
print(results)# 对文件夹中的图像进行批量推理
results = model.predict('path/to/your/image_folder', save=True, conf=0.25) # 替换为你要测试的图像文件夹路径
# 打印推理结果
print(results)# 对视频进行推理
video_results = model.predict('path/to/your/video.mp4', save=True, conf=0.25) # 替换为你要测试的视频路径
# 打印推理结果
print(video_results)if __name__ == "__main__":
main()
验证demo==val
from ultralytics import YOLO
def main():
# 加载训练好的 YOLOv8 模型
model = YOLO('runs/train/exp/weights/best.pt') # 替换为你训练好的模型路径# 进行验证
results = model.val(data='path/to/your/data.yaml') # 替换为你的数据配置文件路径# 打印验证结果
print(results)if __name__ == "__main__":
main()
超参数路径:
ultralytics-main\ultralytics\cfg (下载得项目可能存在差异,找不着直接搜default.yaml)
类型/模式参数
1.task: detect
指定Yolov8的任务类型,默认为detect,您也可根据实际应用场景设置为segment、classify、pose等。
2. mode: train
指定Yolov8的运行模式,默认为train,您也可根据实际操作设置为val、predict、export、track、benchmark等。
训练参数
1. model
模型文件的路径,可以是预训练的模型权重文件(如yolov8n.pt)或模型配置文件(如yolov8n.yaml)。
2. data
数据集配置文件的路径,指定用于训练的数据集配置文件(如coco128.yaml)。
3. epochs: 100
训练过程中整个数据集将被迭代多少次。
4. patience: 50
用于控制训练过程中的停止机制,当模型在一定数量的轮次内没有观察到适应性的改善时,训练将被提前停止。
这个参数默认设置为50,即在训练过程中,如果模型在连续的50个轮次内没有发现适应性的改善,训练将被提前停止,并且不会再继续进行下去。
5. batch: 16
每个批次中的图像数量。
6. imgsz: 640
用于设置输入图像尺寸。
对于训练(train)和验证(val)模式,您可以使用一个整数来指定输入图像的尺寸大小。例如,imgsz: 416 表示将输入图像调整为 416x416 的尺寸。
对于预测(predict)和导出(export)模式,您可以使用一个包含两个整数的列表来指定输入图像的尺寸大小。例如,imgsz: [640, 480] 表示将输入图像调整为宽度为640、高度为480的尺寸。
通过调整输入图像的尺寸,进而可控制模型的输入大小,从而优化模型的准确性和速度。较大的输入图像尺寸可能会提高模型的准确性,但会增加计算量和内存消耗。较小的输入图像尺寸可能会降低模型的准确性,但会提高计算速度和内存效率。
您可以根据实际场景需求及硬件资源限制,设置合适的输入图像尺寸。
7. save: True
指定是否保存训练过程中的**模型检查点(即模型的权重和参数)**以及预测结果。
- 训练模式下,设置save: True,训练过程中的模型检查点将被保存,以便在训练完成后进行模型的加载和继续训练。
- 预测模型下,设置save: True将保存预测结果。
8. save_period: -1
用于指定训练过程中模型检查点的保存周期。
- 当 save_period 设置为大于等于 1 的整数时,模型检查点将每隔指定的epochs保存一次。例如,save_period: 10 表示每隔 10 个epochs保存一次模型检查点。
- 当 save_period 设置为小于1的值(如 -1)时,模型检查点的保存功能将被禁用,不会在训练过程中自动保存。
9. cache: False
用于设置数据加载时是否使用缓存。默认不使用。
- 当设置为 True 时,表示使用缓存来加速数据加载。数据将被缓存到RAM或磁盘上,以便在训练过程中快速读取。
- 当设置为 False 时,表示禁用缓存,数据将每次从原始数据源重新加载。
10. device
device是一个可选参数,用于指定模型运行的设备。
- 如果设置为整数(如 device: 0),表示将模型加载到指定的CUDA设备上进行训练或推理。例如,device: 0表示将模型加载到第一个CUDA设备上运行。
- 如果设置为列表(如 device: 0,1,2,3),表示将模型加载到多个CUDA设备上并行运行。
- 如果设置为字符串(如 device: cuda),表示将模型加载到可用的CUDA设备上运行,如果没有可用的CUDA设备,则会自动切换到CPU运行。
- 如果设置为字符串(如device: cpu),表示将模型加载到CPU上进行训练或推理。
11. workers: 8
用于设置数据加载过程中的线程数。
- 在训练过程中,数据加载是一个耗时的操作,特别是对于大型数据集。为了加快数据加载速度,可以使用多个线程并行地加载数据。
- workers参数指定了用于数据加载的线程数量。默认为 8,表示使用8个线程来加载数据。
12. project
可选参数,用于指定项目的名称。
13. name
可选参数,用于指定实验的名称。
在设置了project参数的前提下,name 参数将用于创建实验结果保存的目录结构。结果将保存在 project/name 的文件夹中,其中 project 是项目名称,name 是实验名称。
14. exist_ok: False
用于指定是否覆盖已存在的实验结果。
15. pretrained: True
用于指定是否使用预训练模型。
- 当设置为True时,表示使用预训练模型。预训练模型是在大规模数据集上进行训练的模型,通常具有良好的特征表示能力和泛化能力。
- 当设置为False时,表示不使用预训练模型,将随机初始化模型的权重。此时,模型将从头开始进行训练。
另外,pretrained 参数还可以是一个字符串(例如 pretrained: ‘model_weights.pt’),用于指定要加载权重的模型文件。
16. optimizer: auto
用于指定要使用的优化器。
- 当设置为 auto 时,系统会根据模型和训练任务的特性自动选择最适合的优化器。
- 另外,您还可以从以下选项中选择手动指定的优化器:SGD、Adam、Adamax、AdamW、NAdam、RAdam 或 RMSProp。
17. verbose: True
用于指定是否打印详细的输出信息。
18. seed: 0
用于设置随机种子(random seed)以实现结果的可重现性。
通过设置随机种子,可以固定随机数生成器的初始状态,从而使得随机过程在不同的运行中产生相同的随机序列。
19. deterministic: True
用于启用确定性模式。
- 当设置为 True 时,启用确定性模式,以确保在相同的输入和相同的参数设置下,模型的输出结果始终保持一致。
- 当设置为 False 时,禁用确定性模式,模型的输出结果可能会在不同的运行中有所变化。
20. single_cls: False
用于指定是否将多类别数据集作为单类别进行训练。
- 当设置为 False 时,模型将按照数据集中的实际类别进行训练,每个类别都有一个独立的标签。
- 当设置为 True 时,模型将将多类别数据集视为单个类别进行训练,将所有目标物体都归为同一类别。
21. rect: False
用于确定在train/test模式下是否使用矩形训练数据。
- 设置为True,则在train/test模式下,使用矩形的train/test数据进行train/test。模型会对输入进行相应的调整以适应不同的尺寸和宽高比。
- 设置为False,则在train/test模式下,使用非矩形的train/test数据进行train/test。模型将仅接受具有相同尺寸和宽高比的输入。
22. cos_lr: False
用于确定是否使用余弦学习率调度器(cosine learning rate scheduler)。
- 设置为True时,将使用余弦学习率调度器来调整模型的学习率。余弦学习率调度器可以帮助模型在训练过程中按照余弦函数的形状调整学习率,从而在训练初期使用较高的学习率,有助于快速收敛,而在训练后期逐渐降低学习率,有助于细致调整模型参数。
- 设置为False时,将不使用余弦学习率调度器,而使用其他的学习率调度器(如常数学习率、指数衰减学习率等)来调整模型的学习率。
23. close_mosaic: 10
用于确定是否在最后几个训练周期中禁用马赛克数据增强(mosaic augmentation)。
当设置为0时,禁用马赛克数据增强,即在最后几个训练周期中不使用马赛克技术来扰乱图像。马赛克数据增强是一种常用的数据增强技术,通过将图像分割成小块并重新组合,以增加模型对图像局部特征的学习能力。
当设置为其他正整数时,表示在最后几个训练周期中禁用马赛克数据增强的次数。例如,如果设置为10,则表示在最后10个训练周期中的每个周期中禁用一次马赛克数据增强。
选择是否禁用马赛克数据增强取决于你的训练需求和模型性能。马赛克数据增强可以增加模型对图像的鲁棒性和泛化能力,但在一些情况下,禁用马赛克数据增强可能有助于更好地调整模型参数。
24. resume: False
用于确定是否从上一个checkpoint继续训练模型。
- 设置为True时,将从上一个checkpoint处恢复训练。这意味着模型将加载上一个保存的参数,并继续训练过程,以便在之前的训练基础上继续优化模型。
- 设置为False时,将不从上一个checkpoint处恢复训练。这意味着模型将从头开始训练,不考虑之前的训练状态和参数。
25. amp: True
用于确定是否使用自动混合精度(Automatic Mixed Precision,AMP)进行训练。
- 设置为True时,将启用AMP训练。AMP是一种深度学习训练技术,可以在保持模型精度的同时,提高训练速度和内存利用率。
- 设置为False时,将不使用AMP,即使用常规的精度进行训练,通常是使用单精度浮点数(single-precision floating-point)。
26. fraction: 1.0
用于确定训练时要使用的数据集比例。
- 设置为1.0时,表示使用完整的训练数据集进行训练,即训练集中的所有图像都会被用于训练。
- 设置为小于1.0的值时,表示仅使用训练数据集的一部分图像进行训练。具体来说,设置为0.8表示使用训练集中80%的图像进行训练,剩下的20%将不参与训练。
27. profile: False
用于确定是否在训练过程中启动性能分析,并将结果记录到日志中。
- 设置为True时,在训练过程中将启用性能分析。
- 设置为False时,将禁用性能分析。
28. freeze: None
用于确定在训练过程中是否冻结模型的某些层。
- 设置为一个整数n,表示冻结前n层。这意味着在训练过程中,前n层的权重将保持不变,不会被更新。
- 设置为一个列表,列表中的元素是要冻结的层的索引。这意味着在训练过程中,指定索引的层的权重将保持不变,不会被更新。
29. overlap_mask: True
通常用在目标分割场景。用于确定在训练过程中的遮罩(masks)是否应该重叠。
- 设置为True时,在训练过程中的遮罩可以重叠。这意味着在进行分割训练时,多个遮罩可以同时存在并重叠在一起。
- 设置为False时,遮罩将不重叠。这意味着每个遮罩将被视为独立的对象,不会与其他遮罩重叠。
30. mask_ratio
用于确定遮罩(masks)的下采样比例。
当设置为4时,表示进行4倍下采样。这意味着遮罩的尺寸将缩小为原来的1/4。
31. dropout
用于确定是否在分类训练中使用dropout正则化。dropout正则化是一种常用的正则化技术,通过在训练过程中随机丢弃一部分神经元的输出,以减少过拟合的风险。
- 当设置为0.0时,表示不使用dropout正则化。
- 当设置为介于0.0到1.0之间的值时,表示使用dropout正则化,并指定了要丢弃的神经元输出的比例。例如,设置为0.5表示在训练过程中随机丢弃50%的神经元输出。
验证/测试参数
1. val: True
用于确定在训练过程中是否进行验证或测试。
- 设置为True时,在训练过程中会进行验证或测试。这意味着会使用验证或测试数据集对模型进行评估,以了解模型在未见过的数据上的性能表现。
- 设置为False时,将不进行验证或测试。这意味着训练过程中只会进行模型的训练,而不会对模型进行评估。
2. split: val
用于确定用于验证的数据集划分类型。
- 设置为’val’时,表示使用验证集进行模型的验证。
- 设置为’test’时,表示使用测试集进行模型的验证。
- 设置为’train’时,表示使用训练集的一部分作为验证集。
3. save_json: False
用于确定是否将结果(可能包括训练损失、验证准确率、模型权重等信息)保存到JSON文件中。
- 设置为True时,将保存训练过程中的结果到JSON文件中。
- 设置为False时,将不保存结果到JSON文件中。
4. save_hybrid: False
用于确定是否保存标签的混合版本(hybrid version)。
- 设置为True时,将保存标签的混合版本,即包括原始标签和额外的预测结果。
- 设置为False时,将不保存标签的混合版本,只保存原始的标签。
5. conf
用于确定目标检测中的目标置信度阈值。
- 当用于预测时,默认的目标置信度阈值为0.25。即是指只有目标的置信度高于0.25的检测结果才会被视为有效的目标。
- 当用于验证时,默认的目标置信度阈值为0.001。
6. iou: 0.7
用于确定非最大值抑制(NMS)中的交并比(IoU)阈值。
非最大值抑制是一种常用的目标检测后处理技术,用于去除重叠的检测框,只保留具有最高置信度的框。交并比阈值是用于判断两个框是否重叠的条件之一,即两个框的交集部分与并集部分的比值。
当设置的交并比阈值高于0.7时,意味着只有当两个框的交并比大于0.7时,才认为它们重叠。
7. max_det: 300
用于确定每张图像的最大检测数量。当设置为300时,表示每张图像最多允许300个检测结果。
8. half: False
用于确定是否使用半精度(FP16)进行训练。半精度是一种较低精度的浮点数表示,可以减少模型的内存占用和计算开销。使用半精度可以加快训练速度,但可能会导致一些精度损失。
- 设置为True时,将使用半精度(FP16)进行训练。
- 设置为False时,将使用常规的精度(通常是单精度浮点数)进行训练。
9. dnn: False
用于确定是否在模型推理中使用OpenCV DNN。OpenCV DNN提供了一个快速和轻量级的推理引擎,可以在多种硬件平台上进行高效的推理。
设置为True时,将使用OpenCV DNN库进行模型的推理。
设置为False时,将不使用OpenCV DNN,可能使用其他推理引擎或框架进行模型的推理。
10. plots: True
用于确定在训练和验证过程中是否保存图表。
- 设置为True时,将保存训练和验证过程中的图表。
- 设置为False时,将不保存训练和验证过程中的图表。
预测参数
1. source
用于指定图像或视频的源目录。
2. show: False
是否在可能的情况下显示结果。设置为True时,将显示结果。
3. save_txt: False
是否将结果保存为.txt文件。设置为True时,结果将保存为.txt文件。
4. save_conf: False
是否将结果保存为带有置信度分数的文件。设置为True时,结果将保存为带有置信度分数的文件。
5. save_crop: False
是否保存带有结果的裁剪图像。设置为True时,将保存带有结果的裁剪图像。
6. show_labels: True
是否在图表中显示目标标签。设置为True时,目标标签将显示在图表中。
7. show_conf: True
是否在图表中显示目标置信度分数。设置为True时,目标置信度分数将显示在图表中。
8. vid_stride: 1
视频帧率步长。用于控制在视频中选择的帧的频率。设置为1时,表示使用所有帧进行处理。
9. stream_buffer: False
是否缓冲所有的流式帧(True),或仅返回最近的帧(False)。
10. line_width
边界框的线宽。如果缺失,则自动设置线宽。
11. visualize: False
是否可视化模型特征。
12. augment: False
是否对预测源应用图像增强。
13. agnostic_nms: False
是否进行类别无关的非最大值抑制。
14. classes
通过类别进行结果过滤,可以设置为一个整数或整数列表,例如classes=0或classes=[0,2,3]。
15. retina_masks: False
是否使用高分辨率的分割遮罩。设置为True时,将使用高分辨率的分割遮罩。
16. boxes: True
是否在分割预测中显示边界框。设置为True时,边界框将显示在分割预测中。
模型导出参数
1. format: torchscript
导出模型的格式,可以选择将模型导出为TorchScript格式。
2. keras: False
是否使用Keras。设置为True时,将使用Keras库。
3. optimize: False
是否对TorchScript进行优化。
4. int8: False
是否进行CoreML或TensorFlow的INT8量化。
5. dynamic: False
是否使用动态轴(dynamic axes)。
6. simplify: False
是否简化ONNX模型。
7. opset
ONNX的opset版本号,为整数类型,可选择性设置。
8. workspace: 4
TensorRT的工作空间大小,以GB为单位。
9. nms: False
是否在CoreML中添加非最大抑制(NMS)。
超参数
1. lr0: 0.01
初始学习率。初始学习率用于优化算法中的学习率参数,例如SGD和Adam。这个参数决定了优化算法在训练开始时的学习速率。
2. lrf: 0.01
最终学习率。最终学习率是初始学习率乘以lrf的值,用于指定在训练过程中学习率逐渐减小的速率。
3. momentum: 0.937
学习率动量。
4. weight_decay: 0.0005
权重衰减系数。
5. warmup_epochs: 3.0
预热学习轮数。
6. warmup_momentum: 0.8
预热学习初始动量。
7. warmup_bias_lr: 0.1
预热学习初始偏置。
8. box: 7.5
giou损失的系数。
9. cls: 0.5
分类损失的系数。
10. dfl: 1.5
dfl损失的系数。
11. pose: 12.0
姿态损失的系数。
12. kobj: 1.0
关键点目标损失的系数。
13. label_smoothing: 0.0
标签平滑化(label smoothing)的比例。
14. nbs: 64
标准批次大小(nominal batch size)。
15. hsv_h: 0.015
标准批次大小(nominal batch size)。
16. hsv_s: 0.7
图像HSV-Saturation饱和度增强的比例。
17. hsv_v: 0.4
图像HSV-Saturation饱和度增强的比例。
18. degrees: 0.0
图像旋转的角度(+/-度)。
19. translate: 0.1
图像平移的比例(+/-比例)。
20. scale: 0.5
图像缩放的比例(+/-增益)。
21. shear: 0.0
图像缩放的比例(+/-增益)。
22. perspective: 0.0
图像透视变换的比例(+/-比例),范围为0-0.001。
23. flipud: 0.0
图像上下翻转的概率。
24. fliplr: 0.5
图像左右翻转的概率。
25. mosaic: 1.0
图像马赛克(mosaic)的概率。
26. mixup: 0.0
图像混合(mixup)的概率。
27. copy_paste: 0.0
分割图像的复制粘贴概率(copy-paste probability)。
自定义配置文件
1. cfg:
覆盖默认的配置文件"default.yaml"。
跟踪器设置
1. tracker: botsort.yaml
设置跟踪器的类型。可以选择的选项有"botsort.yaml"和"bytetrack.yaml"。