复现YOLOv8语义分割和目标检测训练自己的数据集

复现YOLOv8语义分割训练自己的数据集

一、YOLOv8源码下载:https://github.com/ultralytics/ultralytics/tree/v8.2.76

我下载的是最新版本8.2.76

接着下载权重

下载源码后解压

二、配置虚拟环境

创建虚拟环境

conda create -n yolov8 python==3.9

激活环境

conda activate yolov8

下载pytorch,官网地址:PyTorch

出现以下内容就是已经装好了pytorch

接着在虚拟环境中得先安装项目所需的包,例如pip install tensorboard(只有安装了这个包,在训练的时候才会在runs/segment/train里面看到events.out.tfevents.1727158710.DESKTOP-H801G65.38592.0,可以用于tensorboard --logdir runs/segment查看训练的指标曲线), pip install seaborn ,pip install scipy, pip install pandas,pip install tqdm ,pip install matplotlib ,pip install psutil , pip install opencv-python等等。

用pycharm打开源代码工程文件,虚拟环境选择yolov8

虚拟环境中装ultralytics,安装该包是为了用指令训练测试的时候识别yolo这个指令,如果没装这个包就不能用yolo segment train data=ultralytics/cfg/datasets/coco128-seg-0812.yaml model=yu/segmentation/yolov8s-seg.pt epochs=100 imgsz=640 batch=2 workers=0 device=0这种指令了,但可以用seg_train.py,seg_predict.py脚本

pip install ultralytics

进入项目路径下运行测试代码,cd ultralytics-8.2.76,然后预测目标检测

 yolo predict model=yu/detection/yolov8n.pt source='ultralytics/assets/bus.jpg'

也可预测实例分割功能

yolo predict model=yu/segmentation/yolov8n-seg.pt source='ultralytics/assets/bus.jpg' 

三、训练自己的数据集,segment数据集是用labelme标注的,所以是json格式的,但yolov8训练需要用txt后缀的数据集,所以需要将json格式转成txt格式

(1)labelme标注后的json格式文件

json2txt代码

# -*- coding: utf-8 -*-
import json
import os
import argparse
from tqdm import tqdm


def convert_label_json(json_dir, save_dir, classes):
    json_paths = os.listdir(json_dir)
    classes = classes.split(',')

    for json_path in tqdm(json_paths):
        # for json_path in json_paths:
        path = os.path.join(json_dir, json_path)
        with open(path, 'r') as load_f:
            json_dict = json.load(load_f)
        h, w = json_dict['imageHeight'], json_dict['imageWidth']

        # save txt path
        txt_path = os.path.join(save_dir, json_path.replace('json', 'txt'))
        txt_file = open(txt_path, 'w')

        for shape_dict in json_dict['shapes']:
            label = shape_dict['label']
            label_index = classes.index(label)
            points = shape_dict['points']

            points_nor_list = []

            for point in points:
                points_nor_list.append(point[0] / w)
                points_nor_list.append(point[1] / h)

            points_nor_list = list(map(lambda x: str(x), points_nor_list))
            points_nor_str = ' '.join(points_nor_list)

            label_str = str(label_index) + ' ' + points_nor_str + '\n'
            txt_file.writelines(label_str)


if __name__ == "__main__":
    parser = argparse.ArgumentParser(description='json convert to txt params')
    parser.add_argument('--json-dir', type=str,default='./json', help='json path dir')
    parser.add_argument('--save-dir', type=str,default='./txt' ,help='txt save dir')
    parser.add_argument('--classes', type=str, default='spring_water',help='classes')  
    args = parser.parse_args()
    json_dir = args.json_dir
    save_dir = args.save_dir
    classes = args.classes
    convert_label_json(json_dir, save_dir, classes)

改后的txt文件

(2)修改数据加载配置文件,在E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\ultralytics\cfg\datasets,选择coco128-seg.yaml

我图片较少,没分训练集验证集。

(3)修改模型配置文件,在E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\ultralytics\cfg\models\v8

选择yolov8-seg.yaml,修改nc为自己数据集所需检测类别的个数

至此,所有的配置已经完成。

四、训练自己的数据集

在Terminal下输入指令:yolo train data=你的配置文件(xx.yaml)的绝对路径 model=yolov8s.pt epochs=300 imgsz=640 batch=8 workers=0 device=0  这是用的yolov8s-seg.pt当作预训练模型

 yolo segment train data=ultralytics\cfg\datasets\coco128-seg-0812.yaml model=yu\segmentation\yolov8s-seg.pt epochs=100 imgsz=640 batch=2 workers=0 device=0

linux下训练的指令: yolo segment train data=ultralytics/cfg/datasets/coco128-seg-0812.yaml model=yu/segmentation/yolov8s-seg.pt epochs=100 imgsz=640 batch=2 workers=0 device=0  注意Linux下用正斜杠/,而不是反斜杠\

yolo segment train data=ultralytics/cfg/datasets/coco128-seg-0812.yaml model=yu/segmentation/yolov8s-seg.pt epochs=100 imgsz=640 batch=2 workers=0 device=0


也可用改好的模型配置文件训练

yolo segment train data=ultralytics\cfg\datasets\coco128-seg-0812.yaml model=ultralytics\cfg\models\v8\yolov8-seg-0812.yaml epochs=100 imgsz=640 batch=2 workers=0 device=0

注意Linux下用正斜杠/,指令是yolo segment train data=ultralytics/cfg/datasets/coco128-seg-0812.yaml model=ultralytics/cfg/models/v8/yolov8-seg-0812.yaml epochs=100 imgsz=640 batch=2 workers=0 device=0

yolo segment train data=ultralytics/cfg/datasets/coco128-seg-0812.yaml model=ultralytics/cfg/models/v8/yolov8-seg-0812.yaml epochs=100 imgsz=640 batch=2 workers=0 device=0

如果想使用多卡训练,device='\0,1,2,xxx\'

训练过程首先会显示你所使用的训练的硬件设备信息,然后下一段话则是你的参数配置,紧接着是backbone信息,最后是加载信息,并告知你训练的结果会保存在runs\segment\trainxx。

如果不想用指令训练,也可以写一个脚本seg_train.py:

from ultralytics import YOLO

# Load a pretrained YOLOv8 segment model  加载预训练的YOLOv8段模型
# model = YOLO("yolov8n-seg.yaml")  # build a new model from YAML        从YAML构建一个新模型
model = YOLO(r"E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\yu\segmentation\yolov8n-seg.pt")  # load a pretrained model (recommended for training)     加载预训练模型(推荐用于训练)
# model = YOLO("yolov8n-seg.yaml").load("yolov8n.pt")  # build from YAML and transfer weights       从YAML构建并转移权重

# Train the model
results = model.train(data="E:/project/MODEL/YOLO/yolov8-8.2.76/ultralytics-8.2.76/ultralytics/cfg/datasets/coco128-seg-0826.yaml", epochs=100, imgsz=640, batch=2, device=0, workers=0)  #hsv_h=0.025

以下是运行上述脚本输出参数的值,大部分是默认值,可以结合实际项目调超参

task=segment, mode=train, model=E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\yu\segmentation\yolov8n-seg.pt, data=E:/project/MODEL/YOLO/yolov8-8.2.76/ultralytics-8.2.76/ultralytics/cfg/datasets/coco128-seg-0826.yaml, epochs=100, time=None, patience=100, batch=2, imgsz=640, save=True, save_period=-1, cache=False, device=0, workers=0, project=None, name=train15, exist_ok=False, pretrained=True, optimizer=auto, verbose=True, seed=0, deterministic=True, single_cls=False, rect=False, cos_lr=False, close_mosaic=10, resume=False, amp=True, fraction=1.0, profile=False, freeze=None, multi_scale=False, overlap_mask=True, mask_ratio=4, dropout=0.0, val=True, split=val, save_json=False, save_hybrid=False, conf=None, iou=0.7, max_det=300, half=False, dnn=False, plots=True, source=None, vid_stride=1, stream_buffer=False, visualize=False, augment=False, agnostic_nms=False, classes=None, retina_masks=False, embed=None, show=False, save_frames=False, save_txt=False, save_conf=False, save_crop=False, show_labels=True, show_conf=True, show_boxes=True, line_width=None, format=torchscript, keras=False, optimize=False, int8=False, dynamic=False, simplify=False, opset=None, workspace=4, nms=False, 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, cls=0.5, dfl=1.5, pose=12.0, kobj=1.0, label_smoothing=0.0, nbs=64, hsv_h=0.015, hsv_s=0.7, hsv_v=0.4, degrees=0.0, translate=0.1, scale=0.5, shear=0.0, perspective=0.0, flipud=0.0, fliplr=0.5, bgr=0.0, mosaic=1.0, mixup=0.0, copy_paste=0.0, auto_augment=randaugment, erasing=0.4, crop_fraction=1.0, cfg=None, tracker=botsort.yaml, save_dir=runs\segment\train15
Overriding model.yaml nc=80 with nc=1

可以根据源码里有调超参的范围

"""5、训练设置
YOLO模型的训练设置涵盖了训练过程中使用的各种超参数和配置。这些设置会影响模型的性能、速度和准确性。关键的训练设置包括批量大小、学习率、动量和权重衰减。此外,优化器的选择、损失函数以及训练数据集的组成也会影响训练过程。通过仔细调整和实验这些设置,对于优化模型性能至关重要。
Argument    Default    Description
model        None       指定用于训练的模型文件。接受.pt预训练模型或.yaml配置文件的路径。对于定义模型结构或初始化权重至关重要。
data         None        数据集配置文件的路径(例如,coco8.yaml)。该文件包含特定于数据集的参数,包括到训练和验证数据的路径、类名和类数。
epochs       100         训练周期总数。每个epoch代表整个数据集的完整传递。调整这个值会影响训练时间和模型性能。
time         None         最大培训时间(以小时为单位)。如果设置,则覆盖epochs参数,允许训练在指定的持续时间后自动停止。对于时间限制的训练场景非常有用。
patience     100          在早期停止训练之前,在验证度量没有改进的情况下等待的epoch数。当表现停滞时,停止训练有助于防止过度拟合。
batch        16           批量大小,有三种模式:设置为整数(例如,Batch =16), GPU内存利用率为60%的自动模式(Batch =-1),或指定利用率分数的自动模式(Batch =0.70)。
imgsz	     640          用于训练的目标图像大小。所有图像在输入到模型之前都会被调整到这个尺寸。影响模型精度和计算复杂度。
save         True         允许保存训练检查点和最终模型权重。用于恢复训练或模型部署。
save_period   -1          保存模型检查点的频率,以epoch指定。值为-1时禁用此特性。用于在长时间的训练期间保存临时模型。
cache         False       启用数据集映像在内存(True/ram)、磁盘(disk)上的缓存,或禁用它(False)。以增加内存使用为代价,通过减少磁盘I/O来提高训练速度。
device        None        指定用于训练的计算设备:单个GPU (device=0)、多个GPU (device=0,1)、CPU (device= CPU)或用于苹果芯片的MPS (device= MPS)。
workers       8           用于数据加载的工作线程数(如果多gpu训练,则按RANK计算)。影响数据预处理和输入模型的速度,在多gpu设置中特别有用。
project      None         保存培训输出的项目目录名称。允许有组织地存储不同的实验。
name         None         训练运行的名称。用于在项目文件夹中创建子目录,用于存储培训日志和输出。
exist_ok     False        如果为True,则允许覆盖现有的项目/名称目录。可用于迭代实验,无需手动清除先前的输出。
pretrained   True         确定是否从预训练的模型开始训练。可以是布尔值或到要从中加载权重的特定模型的字符串路径。提高培训效率和模型性能。
optimizer    'auto'       训练优化器的选择。选项包括SGD, Adam, AdamW, NAdam, RAdam, RMSProp等,或auto根据模型配置自动选择。影响收敛速度和稳定性。
verbose       False       支持训练期间的详细输出,提供详细的日志和进度更新。用于调试和密切监视培训过程。
seed          0            为训练设置随机种子,确保在相同配置的运行中结果的可重复性。
deterministic  True        强制使用确定性算法,确保再现性,但由于对非确定性算法的限制,可能会影响性能和速度。
single_cls     False        在训练期间将多类数据集中的所有类视为单个类。用于二元分类任务或关注对象存在而不是分类时。
rect          False         使矩形训练,优化批量组成最小填充。可以提高效率和速度,但可能会影响模型的准确性。
cos_lr        False        利用余弦学习率调度程序,调整学习率后,余弦曲线的epoch。有助于管理学习率以实现更好的收敛。
close_mosaic  10           在最后N次迭代中禁用马赛克数据增强,以在完成之前稳定训练。设置为0禁用此功能。
resume        False        从上次保存的检查点恢复训练。自动加载模型权重、优化器状态和历元计数,无缝地继续训练。
amp           True         支持自动混合精度(AMP)训练,减少内存使用,并可能在对准确性影响最小的情况下加速训练。
fraction      1.0          指定要用于训练的数据集的部分。允许在完整数据集的子集上进行训练,对于实验或资源有限时非常有用。
profile       False       允许在训练期间对ONNX和TensorRT速度进行分析,有助于优化模型部署。
freeze        None        通过索引冻结模型的前N层或指定层,减少可训练参数的数量。用于微调或迁移学习。
lr0          0.01         初始学习率(即SGD=1E-2, Adam=1E-3)。调整此值对于优化过程至关重要,它会影响模型权重更新的速度。
lrf          0.01         最终学习率作为初始学习率的一部分= (lr0 * lrf),与调度器一起使用以随时间调整学习率。
momentum     0.937	      SGD的动量因子或Adam优化器的beta1,影响当前更新中过去梯度的整合。
weight_decay  0.0005      L2正则化项,惩罚大权重以防止过拟合。
warmup_epochs  3.0          学习率预热的epoch数,从一个较低的学习率逐渐增加到初始学习率,以稳定早期的训练。
warmup_momentum  0.8        热身阶段的初始动量,在热身期间逐渐调整到设定的动量。
warmup_bias_lr   0.1       预热阶段偏差参数的学习率,有助于稳定初始阶段的模型训练。
box              7.5       损失函数中盒损失分量的权重,影响对准确预测边界盒坐标的重视程度。
cls              0.5       总损失函数中分类损失的权重,影响正确分类预测相对于其他成分的重要性。
dfl              1.5       分布焦点损失的权重,在某些YOLO版本中用于细粒度分类。
pose            12.0       姿态估计模型中姿态损失的权重,影响了对准确预测姿态关键点的重视。
kobj            2.0        姿态估计模型中关键点目标损失的权重,平衡检测置信度和姿态精度。
label_smoothing  0.0        应用标签平滑,软化硬标签的混合目标标签和均匀分布的标签,可以提高泛化。
nbs             64         归一化损失的标称批量大小。
overlap_mask    True       确定在训练期间分割掩码是否应该重叠,适用于实例分割任务。
mask_ratio       4         分割蒙版的下采样率,影响训练时使用的蒙版的分辨率。
dropout          0.0       分类任务中正则化的失败率,通过在训练过程中随机省略单元来防止过拟合。
val             True       在训练期间启用验证,允许在单独的数据集上定期评估模型性能。
plots           False      生成并保存训练和验证度量的图,以及预测示例,提供对模型性能和学习进展的可视化洞察。

注意批处理大小设置
batch 参数可以通过三种方式进行配置:

固定批量大小:设置一个整数值(例如,batch=16),直接指定每个批次的图像数量。
自动模式(60% GPU 内存):使用 batch=-1 自动调整批量大小,使 CUDA 内存使用量约为 60%。
自动模式与使用率比例:设置一个比例值(例如,batch=0.70),根据指定的 GPU 内存使用比例调整批量大小。


增强设置和超参数
增强技术通过在训练数据中引入可变性来提高YOLO模型的鲁棒性和性能,帮助模型更好地泛化到不可见的数据。下表概述了每个增强论点的目的和效果:
Argument       Type           Default          Range            Description
hsv_h          float            0.015	        0.0 - 1.0         通过色轮的一小部分来调整图像的色调,从而引入颜色可变性。帮助模型在不同的光照条件下泛化。
hsv_s          float            0.7             0.0 - 1.0         稍微改变图像的饱和度,影响颜色的强度。用于模拟不同的环境条件。
hsv_v          float            0.4             0.0 - 1.0         将图像的值(亮度)修改一个分数,帮助模型在各种光照条件下表现良好。
degrees        float            0.0             -180 - +180       在指定的度范围内随机旋转图像,提高模型对不同方向物体的识别能力。
translate      float            0.1             0.0 - 1.0	      水平和垂直转换图像大小的一小部分,帮助学习检测部分可见的物体。
scale          float            0.5             >=0.0             通过增益因子缩放图像,模拟距离相机不同距离的物体。
shear          float            0.0             -180 - +180       以指定的程度剪切图像,模拟从不同角度观看物体的效果。
perspective    float            0.0             0.0 - 0.001       对图像应用随机透视变换,增强模型在3D空间中理解物体的能力。
flipud         float            0.0             0.0 - 1.0	      以指定的概率将图像颠倒,在不影响对象特征的情况下增加数据可变性。
fliplr         float            0.5             0.0 - 1.0         以指定的概率将图像从左到右翻转,这对于学习对称对象和增加数据集多样性很有用。
bgr            float            0.0             0.0 - 1.0	      以指定的概率将图像通道从RGB翻转到BGR,有助于增加对错误通道排序的鲁棒性。
mosaic         float            1.0             0.0 - 1.0         将四个训练图像合并为一个,模拟不同的场景组成和物体交互。对于复杂场景的理解非常有效。
mixup          float            0.0             0.0 - 1.0         混合两个图像及其标签,创建一个合成图像。通过引入标签噪声和视觉可变性来增强模型的泛化能力。
copy_paste     float            0.0             0.0 - 1.0         从一个图像复制对象并将它们粘贴到另一个图像上,这对于增加对象实例和学习对象遮挡很有用。
auto_augment   str            randaugment          -              自动应用预定义的增强策略(randaugment、autoaugment、augmix),通过多样化视觉特征来优化分类任务。
erasing        float            0.4              0.0 - 0.9	      在分类训练中随机擦除一部分图像,鼓励模型关注不太明显的特征进行识别。
crop_fraction  float            1.0              0.1 - 1.0        将分类图像裁剪为其大小的一小部分,以强调中心特征并适应对象规模,减少背景干扰。

可以调整这些设置以满足手头数据集和任务的特定要求。尝试不同的值可以帮助找到最佳的增强策略,从而获得最佳的模型性能。
有关训练增强操作的更多信息,请参阅参考部分。
"""

五、测试:

训练结束后可以测试自己的模型,把结果坐标也保存下来

 yolo segment predict model=runs/segment/train3/weights/best.pt source=datasets/segment/1first_0812/images  save_txt

就可以在runs\segments\predict\看到测试的结果图和labels了。

如果不想用指令测试,也可以写一个脚本seg_predict.py:

from ultralytics import YOLO
import os

# Load a pretrained YOLOv8n-seg Segment model加载预训练的YOLOv8n-seg分段模型
# model = YOLO("yolov8n-seg.pt")
model = YOLO(r"E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\runs\segment\2second_0826\train\weights\best.pt")
source = r"E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\datasets\segment\2"

# 计算 source 文件夹中的图像数量
image_files = [f for f in os.listdir(source) if f.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.tiff'))]
num_images = len(image_files)
# 打印图像数量
print(f"Number of images: {num_images}")
# Run inference on an image对图像运行推理
results = model(source, save=True, save_txt=True,save_crop=True, imgsz=640, conf=0.5)  #默认batch为1,一张一张的测
#results = model(source,batch=2, save=True, save_txt=True,save_crop=True, imgsz=640, conf=0.5)  #有时候项目中会用到多张图一起测,速度快些,直接改batch就行
#results = model(source,batch=num_images, save=True, save_txt=True,save_crop=True, imgsz=640, conf=0.5)   #有时项目中是摄像头实时测试,就先看读过来的图片数量,直接赋值给batch,因为每次图像数量不固定

# View results查看结果
for r in results:
    print(r.masks)  # print the Masks object containing the detected instance masks打印包含检测到的实例掩码的mask对象

六、tensorboard查看

在终端输入tensorboard --logdir ultralytics/runs/segment/可以看到

在浏览器打开这个地址就可以看到

复现YOLOv8目标检测训练自己的数据集,第一步,第二步都是一样的,从第三步训练自己的数据集开始不同。

三、用labelimg的yolo标注自己的数据集,标注的labels是txt后缀,我这里标了六类

(1)可以自己划分好训练集train,验证集val

(2)修改数据加载配置文件,在E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\ultralytics\cfg\datasets,选择coco8.yaml

(3)修改模型配置文件,在E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\ultralytics\cfg\models\v8

选择yolov8.yaml,修改nc为自己数据集所需检测类别的个数

至此,所有的配置已经完成。

四、训练自己的数据集

在Terminal下输入指令:yolo train data=你的配置文件(xx.yaml)的绝对路径 model=yolov8s.pt epochs=300 imgsz=640 batch=8 workers=0 device=0 

yolo detect train data=ultralytics/cfg/datasets/coco8-6-0925.yaml model=yu/detection/yolov8n.pt epochs=100 imgsz=640 batch=2 workers=0 device=0

linux下训练的指令: 

yolo detect train data=ultralytics/cfg/datasets/coco8-6-0925.yaml model=yu/detection/yolov8n.pt epochs=100 imgsz=640 batch=2 workers=0 device=0

  注意Linux下用正斜杠/,而不是反斜杠\

也可用改好的模型配置文件训练

yolo detect train data=ultralytics\cfg\datasets\coco8-6-0925.yaml model=ultralytics\cfg\models\v8\yolov8-0925.yaml epochs=100 imgsz=640 batch=2 workers=0 device=0

注意Linux下用正斜杠/,指令是yolo detect train data=ultralytics/cfg/datasets/coco8-6-0925.yaml model=ultralytics/cfg/models/v8/yolov8-0925.yaml epochs=100 imgsz=640 batch=2 workers=0 device=0

linux下训练的指令:

yolo detectt train data=ultralytics/cfg/datasets/coco8-6-0925.yaml model=ultralytics/cfg/models/v8/yolov8-0925.yaml epochs=100 imgsz=640 batch=2 workers=0 device=0

如果想使用多卡训练,device='\0,1,2,xxx\'

训练过程首先会显示你所使用的训练的硬件设备信息,然后下一段话则是你的参数配置,紧接着是backbone信息,最后是加载信息,并告知你训练的结果会保存在runs\detect\trainxx。

如果不想用指令训练,也可以写一个脚本detect_train.py:

"""1、YOLOv8数据集,如COCO, VOC, ImageNet和许多其他在第一次使用时自动下载,即YOLOv8数据= COCO .yaml
在COCO8数据集上训练YOLOv8n 100次,图像大小为640。可以使用设备参数指定训练设备。如果没有参数传递,则使用可用的GPU device=0,否则将使用device='cpu'。有关训练参数的完整列表,请参阅下面的参数部分。
设备自动确定。如果GPU可用,那么将使用它,否则将在CPU上开始训练。
如何在我的自定义数据集上训练YOLOv8模型?
在自定义数据集上训练YOLOv8模型包括以下几个步骤:
1.准备数据集:确保您的数据集是YOLO格式。有关指导,请参阅我们的数据集指南。
2.加载模型:使用Ultralytics YOLO库加载预训练的模型或从YAML文件创建新模型。
3.训练模型:在Python中执行Train方法或在CLI中执行yolo detect Train命令。
"""
from ultralytics import YOLO

# Load a model加载模型 每次训练的时候只选择下面的某一行,屏蔽其他两行,根据实际情况来选择用yaml自定义模型还是yolov8n.pt预训练模型
# model = YOLO("yolov8n.yaml")  # build a new model from YAML从YAML构建一个新模型,当数据集很多的时候,觉得可以从0开始训练,就使用自定义模型,可以改动yolov8n.yaml里面的类别及网络结构
model = YOLO("yolov8n.pt")  # load a pretrained model (recommended for training)加载预训练模型(推荐用于训练),这是当第一次训练的时候或者数据集较少的时候,需要从预训练模型里学到点东西
#model = YOLO("yolov8n.yaml").load("yolov8n.pt")  # build from YAML and transfer weights从YAML构建并转移权重  这个还没用过,还不知道是什么意思

# Train the model 训练模型 data="coco8.yaml"是数据集存放的路径
results = model.train(data="E:/project/MODEL/YOLO/yolov8-8.2.76/ultralytics-8.2.76/ultralytics/cfg/datasets/coco8 -6- 0925.yaml", epochs=100, imgsz=640,batch=2, device=0, workers=0, hsv_h=0.025) 



源码里有调超参的范围调超参的范围,看上面调超参部分的内容

五、测试

训练结束后可以测试自己的模型,把结果坐标也保存下来

yolo detect predict model=runs/detect/train3/weights/best.pt source=datasets/detect/3third_0909/val/images  save_txt save_crop

就可以在runs\detect\predict\看到测试的结果图和labels了。

如果不想用指令测试,也可以写一个脚本detect_predict.py:

# 5、Predict测试
# 使用经过训练的YOLOv8n模型对图像进行预测。
from ultralytics import YOLO

# Load a model
# model = YOLO("yolov8n.pt")  # load an official model 加载官方模型
# model = YOLO("path/to/best.pt")  # load a custom model  加载自定义模型
model = YOLO(r"E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\code\detect\runs\detect\train6\weights/best.pt")  # load a custom model  加载自定义模型
source = r"E:\project\MODEL\YOLO\yolov8-8.2.76\ultralytics-8.2.76\datasets\detect\3third_0909\val\images"

# Predict with the model
# results = model("https://ultralytics.com/images/bus.jpg")  # predict on an image  对图像进行预测
results = model(source,batch=1, save=True, save_txt=True,save_crop=True, imgsz=640, conf=0.5)  # results list结果列表



# 用指令预测yolo detect predict model=yolov8n.pt source='https://ultralytics.com/images/bus.jpg'  # predict with official model
# yolo detect predict model=path/to/best.pt source='https://ultralytics.com/images/bus.jpg'  # predict with custom model
#

六、tensorboard查看是一样的。​

在终端输入tensorboard --logdir ultralytics/runs/detect可以看到

### 回答1: Yolov8模型本身不支持实例分割,因为它是一个目标检测模型,主要用于检测图像中的物体,并输出它们的位置和类别。如果您需要实现实例分割,可以考虑使用其他模型,如Mask R-CNN或U-Net。 在Mask R-CNN中,可以通过在检测框上应用分割模型来生成每个物体的掩码。而在U-Net中,可以直接输出图像的掩码。 如果您已经有了图像中每个物体的检测框,可以使用各种图像处理技术来生成掩码。例如,可以使用边缘检测算法或分水岭算法来分割物体并生成掩码。 ### 回答2: YOLOv8是一种目标检测模型,用于检测图像中的目标位置和类别。实例分割是一种计算机视觉任务,旨在将图像中的每个像素与特定的目标实例相关联。因此,将YOLOv8与实例分割结合起来可以生成每个目标实例的遮罩,也称为“mask”。 要生成实例分割mask,可以按照以下步骤进行操作: 第一步是目标检测。使用YOLOv8模型对输入图像进行目标检测,识别出图像中的目标位置和类别。YOLOv8基于卷积神经网络,可以高效地检测出不同尺寸和类别的目标。 第二步是生成初始mask。根据目标检测结果,可以为每个检测到的目标实例生成初始的二进制mask。这可以通过在与目标实例相关的像素位置上设置像素值为1,其他位置设置为0来实现。 第三步是mask细化。由于初始mask可能存在一些噪点或不连续的部分,需要对其进行细化处理。可以使用图像处理技术,例如腐蚀和膨胀操作,以去除小的噪点或填充不连续的区域,使得mask更加精确。 第四步是后处理。对于复杂的场景或目标,仅使用目标检测结果生成的mask可能不够准确。可以利用图像分割算法,例如语义分割或实例分割网络,对mask进行进一步优化和修正。 综上所述,利用YOLOv8实例分割生成mask的过程包括目标检测、初始mask生成、mask细化和后处理等步骤。通过这些步骤,我们可以从图像中提取出每个目标实例的准确mask,以便于进一步的图像分析和理解。 ### 回答3: YOLOv8是一种目标检测的算法,可以用于实例分割任务。实例分割是将图像中的每个目标实例分割出来,并为每个实例生成一个mask。YOLOv8目标检测的基础上通过对每个目标的像素属性进行分析,生成对应的mask。 YOLOv8首先使用深度神经网络对图像进行目标检测,识别出图像中的目标物体及其位置信息。然后,对于每个目标,利用像素属性分析的方法生成一个mask。 生成mask的过程主要包括两个步骤。首先,根据目标的位置信息,将目标所在区域的像素提取出来。然后,对于提取出的像素,根据其像素属性进行分类,判定其属于目标的哪个部分,并赋予相应的mask值。 具体而言,YOLOv8通常使用语义分割的方法对目标进行分割。这意味着,它会训练一个神经网络,使其能够对不同目标部分进行分类,例如背景、前景等。然后,在目标检测的基础上,将检测到的每个目标区域的像素输入到语义分割网络中,得到每个像素所属的类别,进而生成相应的mask。 通过使用YOLOv8进行实例分割,可以实现对图像中目标的准确分割,并生成相应的mask。这对于许多应用领域,如图像分割、计算机视觉等,具有重要的意义和应用价值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值