首页 > 其他分享 >如何使用一个包含8000多张图像的鸟类数据集进行YOLOv8目标检测训练。这个数据集已经按照YOLO格式进行了标注,并且分为训练集、验证集和测试集,共有六类鸟类

如何使用一个包含8000多张图像的鸟类数据集进行YOLOv8目标检测训练。这个数据集已经按照YOLO格式进行了标注,并且分为训练集、验证集和测试集,共有六类鸟类

时间:2024-11-10 21:18:47浏览次数:6  
标签:xml 鸟类 训练 image YOLO json file class dir

在这里插入图片描述
在这里插入图片描述
如何使用一个包含8000多张图像的鸟类数据集进行YOLOv8目标检测训练。这个数据集已经按照YOLO格式进行了标注,并且分为训练集、验证集和测试集,共有六类鸟类。

数据集介绍
数据集描述
数据量:8000多张图像
类别数量:6类
数据格式:YOLO格式
数据集划分:
训练集:约6000张
验证集:约1000张
测试集:约1000张
数据集目录结构
假设你的数据集目录结构如下:

深色版本
dataset/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
└── labels/
├── train/
├── val/
└── test/

  1. 创建数据集配置文件
    创建一个名为 birds_dataset.yaml 的文件,内容如下:

yaml
深色版本

数据集路径

train: ./dataset/images/train/
val: ./dataset/images/val/
test: ./dataset/images/test/

类别数量

nc: 6

类别名称

names: [‘sparrow’, ‘robin’, ‘pigeon’, ‘eagle’, ‘owl’, ‘duck’]
2. 安装必要的库
确保已经安装了 ultralytics 库和其他依赖项:

bash
深色版本
pip install ultralytics
3. 编写训练脚本
以下是一个详细的训练脚本:

python
深色版本
import os
from ultralytics import YOLO

1. 加载预训练模型

model = YOLO(‘yolov8n.yaml’) # 你可以选择不同的预训练权重,如’yolov8s’, 'yolov8m’等

2. 设置数据集路径

data_yaml_path = ‘birds_dataset.yaml’

3. 配置训练参数

training_config = {
‘data’: data_yaml_path, # 数据集配置文件路径
‘epochs’: 100, # 训练轮次
‘imgsz’: 640, # 输入图像大小
‘batch’: 16, # 批量大小
‘name’: ‘bird_detection’, # 日志保存名称
‘patience’: 50, # 如果验证集上的性能没有提升,等待多少个epoch后停止训练
‘device’: ‘cuda’, # 使用GPU进行训练
‘cache’: False, # 是否缓存数据
‘project’: ‘runs/train’, # 项目保存路径
‘exist_ok’: False, # 如果项目已存在是否覆盖
‘save_period’: -1, # 每隔多少个epoch保存一次模型
‘rect’: False, # 是否使用矩形训练
‘cos_lr’: False, # 是否使用余弦退火学习率
‘label_smoothing’: 0.0, # 标签平滑
‘upload_dataset’: False, # 是否上传数据集到HUB
‘bbox_interval’: -1, # 每隔多少个epoch保存一次bbox
‘artifact_alias’: ‘latest’ # 保存的模型别名
}

4. 开始训练

results = model.train(**training_config)

5. 模型评估

metrics = model.val()

6. 保存模型

model.save(‘bird_detection_model.pt’)

7. 可视化训练结果

if results:
print(“Training completed successfully!”)
print(f"Final validation metrics: {metrics}")
else:
print(“Training failed.”)

8. 清理临时文件

if training_config[‘cache’]:
os.system(‘rm -rf runs/dataset_cache’)

print(“Training and evaluation complete.”)
4. 运行训练脚本
将上述脚本保存为 train_bird_detection.py,然后在终端中运行:

bash
深色版本
python train_bird_detection.py
5. 监控训练过程
训练过程中,你可以在 runs/train/bird_detection 目录下找到训练日志和模型保存文件。你可以使用TensorBoard等工具来监控训练过程:

bash
深色版本
tensorboard --logdir runs/train
6. 测试模型
训练完成后,你可以使用以下代码测试模型:

python
深色版本
from ultralytics import YOLO
import cv2

加载训练好的模型

model = YOLO(‘bird_detection_model.pt’)

加载测试图像

test_image_path = ‘path/to/test/image.jpg’
image = cv2.imread(test_image_path)

进行推理

results = model(image)

显示结果

for result in results:
boxes = result.boxes # 获取检测框
for box in boxes:
x1, y1, x2, y2 = box.xyxy[0] # 获取边界框坐标
conf = box.conf # 获取置信度
cls = int(box.cls) # 获取类别
label = model.names[cls] # 获取类别名称
color = (0, 255, 0) # 绿色框
thickness = 2
cv2.rectangle(image, (int(x1), int(y1)), (int(x2), int(y2)), color, thickness)
cv2.putText(image, f’{label} {conf:.2f}', (int(x1), int(y1) - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, color, 2)

显示图像

cv2.imshow(‘Result’, image)
cv2.waitKey(0)
cv2.destroyAllWindows()
7. 模型优化
如果你发现模型性能不佳,可以尝试以下方法进行优化:

数据增强:增加数据增强策略,如随机裁剪、翻转等。
调整超参数:调整学习率、批量大小、训练轮次等。
使用更强大的模型:尝试使用更大的YOLOv8模型,如yolov8l或yolov8x。
增加训练数据:如果可能,增加更多标注数据以提高模型泛化能力。
类别平衡:如果某些类别的标注数量较少,可以使用数据增强或重采样技术来平衡类别分布。
8. 处理不同格式的数据
如果你的数据集提供多种格式(如XML、TXT、JSON),你需要将它们转换为YOLO格式。以下是一些常用的转换工具和脚本:

XML to YOLO
python
深色版本
import xml.etree.ElementTree as ET
import os

def convert_xml_to_yolo(xml_file, output_dir, class_names):
tree = ET.parse(xml_file)
root = tree.getroot()
image_width = int(root.find(‘size/width’).text)
image_height = int(root.find(‘size/height’).text)

with open(output_dir + '/' + os.path.basename(xml_file).replace('.xml', '.txt'), 'w') as out_file:
    for obj in root.findall('object'):
        class_name = obj.find('name').text
        if class_name not in class_names:
            continue
        class_id = class_names.index(class_name)
        bndbox = obj.find('bndbox')
        x_min = int(bndbox.find('xmin').text)
        y_min = int(bndbox.find('ymin').text)
        x_max = int(bndbox.find('xmax').text)
        y_max = int(bndbox.find('ymax').text)

        x_center = (x_min + x_max) / 2.0 / image_width
        y_center = (y_min + y_max) / 2.0 / image_height
        width = (x_max - x_min) / image_width
        height = (y_max - y_min) / image_height

        out_file.write(f"{class_id} {x_center} {y_center} {width} {height}\n")

示例调用

xml_dir = ‘path/to/xml/files’
output_dir = ‘path/to/output/yolo/labels’
class_names = [‘sparrow’, ‘robin’, ‘pigeon’, ‘eagle’, ‘owl’, ‘duck’]

os.makedirs(output_dir, exist_ok=True)

for xml_file in os.listdir(xml_dir):
if xml_file.endswith(‘.xml’):
convert_xml_to_yolo(os.path.join(xml_dir, xml_file), output_dir, class_names)
JSON to YOLO
python
深色版本
import json
import os

def convert_json_to_yolo(json_file, output_dir, class_names):
with open(json_file, ‘r’) as f:
data = json.load(f)

image_width = data['imageWidth']
image_height = data['imageHeight']

with open(output_dir + '/' + os.path.basename(json_file).replace('.json', '.txt'), 'w') as out_file:
    for shape in data['shapes']:
        class_name = shape['label']
        if class_name not in class_names:
            continue
        class_id = class_names.index(class_name)
        points = shape['points']
        x_min = min(points[0][0], points[1][0])
        y_min = min(points[0][1], points[1][1])
        x_max = max(points[0][0], points[1][0])
        y_max = max(points[0][1], points[1][1])

        x_center = (x_min + x_max) / 2.0 / image_width
        y_center = (y_min + y_max) / 2.0 / image_height
        width = (x_max - x_min) / image_width
        height = (y_max - y_min) / image_height

        out_file.write(f"{class_id} {x_center} {y_center} {width} {height}\n")

示例调用

json_dir = ‘path/to/json/files’
output_dir = ‘path/to/output/yolo/labels’
class_names = [‘sparrow’, ‘robin’, ‘pigeon’, ‘eagle’, ‘owl’, ‘duck’]

os.makedirs(output_dir, exist_ok=True)

for json_file in os.listdir(json_dir):
if json_file.endswith(‘.json’):
convert_json_to_yolo(os.path.join(json_dir, json_file), output_dir, class_names)
希望这些详细的步骤能帮助你成功训练鸟类目标检测模型。

标签:xml,鸟类,训练,image,YOLO,json,file,class,dir
From: https://blog.csdn.net/2401_88441190/article/details/143611775

相关文章