yolov8训练记录

github项目链接:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > CoreML > TFLite

跑通训练代码:

我新建了一个python3.8的环境,然后安装torch,torchvision等包

torch                    1.13.1
torchsummary             1.5.1
torchvision              0.14.1

然后安装ultralytics的包

pip install ultralytics

跑自带的训练集,该代码会自动下载预训练模型yolov8n.pt到工程的根目录下,以及检测的训练集coco128,放到与该工程根目录ultralytics平行的文件夹中,datasets/coco128,就可以开启训练了。

from ultralytics import YOLO

model = YOLO('yolov8n.yaml').load('yolov8n.pt') 
model.train(data='coco128.yaml', epochs=100, imgsz=640)

跑自己的训练集:

制作数据集,格式和yolov5的一样,images文件夹下放图片,labels文件夹下放YOLO格式的.txt的标签文件。

新建一个.yaml放数据集的路径,和yolov5里面一样

train: /home/peng.sheng/****/detect/images
val: /home/peng.sheng/****/detect/images

nc: 1
names: ['solder joint']

ultralytics/ultralytics/cfg/default.yaml,该文件存放的是模型训练的一些配置参数

我在工程根目录下,新建一个文件夹data,然后复制了一份default.yaml的模型配置参数表,放到该目录下,以及数据集的路径定义配置文件,还有一些测试的图片

用python命令开启训练,验证,推理,以及onnx的导出:

from ultralytics import YOLO
import cv2
import os

# 模型训练
model=YOLO('yolov8n.yaml').load('yolov8n.pt')
model.train(cfg='data/cfg_jhx_det.yaml')

# 模型验证
model=YOLO('runs/train/jianhexian_det/weights/best.pt')
metrics = model.val()

# 图片推理1
weights_path='runs/train/jianhexian_det/weights/best.pt'
model=YOLO(weights_path)
source='data/jhx_images/0705_actual_013.jpg'
model.predict(source,save=True)
# 图片推理2
weights_path='runs/train/jianhexian_det/weights/best.pt'
model=YOLO(weights_path)
source='data/jhx_images/0705_actual_013.jpg'
results=model(source)
res_plotted=results[0].plot()
cv2.imwrite('res_plotted.jpg',res_plotted)
# 图片推理3-遍历文件夹推理画框
src_direct='data/jhx_images'
dst_direct='data/jhx_images_rlt'

weights_path='runs/train/jianhexian_det/weights/best.pt'
model=YOLO(weights_path)

imgnames=os.listdir(src_direct)
for imgname in imgnames:
    imgpath=os.path.join(src_direct,imgname)
    img=cv2.imread(imgpath)
    res_plotted=img.copy()
    
    results=model(img)
    for result in results:
        boxes=result.boxes.cpu().numpy()
        for box in boxes:
            rect=box.xyxy[0].astype(int)
            name=result.names[int(box.cls[0])]
            cv2.rectangle(res_plotted, rect[:2], rect[2:], (255, 0, 0), 2)
            
    cv2.imwrite("res_plotted.jpg",res_plotted)
    
#模型导出
weights_path='runs/train/jianhexian_det/weights/best.pt'
model = YOLO(weights_path)  
model.export(format='onnx',simplify=True)

 在推理画框这一步,可以调用yolov8的接口,用自带的方式,存储画框的结果,也可以取出推理的结果,得到[x1,y1,x2,y2]用cv2.rectangle来画框存图。

默认训练的模型读入的是RGB的图像,若想用BGR的图片,进行训练

ultralytics/data/base.py 97行 

BaseDataset(Dataset)的基类定义了transforms的函数

ultralytics/data/dataset.py  146行

YOLODataset(BaseDataset)在该子类中,给出了build_transforms具体的实现

ultralytics/data/augment.py/745行

Format的函数中,默认在处理图片的时候,会转成RGB,修改该行,即可训练出吃BGR图片数据的模型。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,YOLOv8并不是一个已知的目标检测模型,可能是您笔误或者其他原因造成的误解。目前YOLO系列最新的版本是YOLOv5,以下是YOLOv5的训练Python代码介绍。 YOLOv5的训练代码主要包含以下几个部分: 1. 数据准备:准备数据集、标签文件等。 2. 模型定义:定义网络结构,主要包括模型层和损失函数。 3. 训练过程:使用数据集对模型进行训练,并记录训练过程中的损失值和准确率等指标。 4. 模型评估:使用测试集对训练好的模型进行评估,计算mAP等指标。 5. 模型保存:将训练好的模型保存下来,以便后续使用。 以下是一个简单的YOLOv5训练代码示例: ``` import torch from torch.utils.data import DataLoader from models import YOLOv5 from datasets import CustomDataset # 数据准备 train_dataset = CustomDataset(train=True) train_dataloader = DataLoader(train_dataset, batch_size=16, shuffle=True, num_workers=8) # 模型定义 model = YOLOv5(num_classes=10) criterion = torch.nn.CrossEntropyLoss() optimizer = torch.optim.SGD(model.parameters(), lr=0.001) # 训练过程 for epoch in range(10): for images, labels in train_dataloader: optimizer.zero_grad() outputs = model(images) loss = criterion(outputs, labels) loss.backward() optimizer.step() print("Epoch [{}/{}], Step [{}/{}], Loss: {:.4f}" .format(epoch+1, 10, i+1, len(train_dataloader), loss.item())) # 模型评估 test_dataset = CustomDataset(train=False) test_dataloader = DataLoader(test_dataset, batch_size=16, shuffle=False, num_workers=8) model.eval() with torch.no_grad(): total_correct = 0 total_images = 0 for images, labels in test_dataloader: outputs = model(images) _, predicted = torch.max(outputs.data, 1) total_images += labels.size(0) total_correct += (predicted == labels).sum().item() print("Accuracy: {:.2f}".format(100 * total_correct / total_images)) # 模型保存 torch.save(model.state_dict(), "yolov5.pth") ``` 相关问题: 1. YOLOv5是什么? 2. YOLOv5与其他目标检测模型有什么不同? 3. 如何准备目标检测数据集? 4. 深度学习模型中损失函数有哪些常用的类型? 5. 如何评估目标检测模型的性能?

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值