如何使用YOLOv8 训练使用 大量松材线虫病分类 松材线虫病分类数据集,使用这些数据进行二分类任务,并使用YOLOv8进行训练、评估和可视化预测结果,样本采集自固定翼无人机拍摄图像

在这里插入图片描述
超大规模松材线虫分类数据集
构建了超大规模的松材线虫病分类数据集,正样本100000张,负样本150000张,样本采集自固定翼无人机拍摄图像。在这里插入图片描述
YOLOv8 松材线虫病分类

import os
import glob
import shutil
import yaml
from pathlib import Path
import numpy as np
import torch
from IPython.display import Image, clear_output
from ultralytics import YOLO

# 设置随机种子以保证可重复性
torch.manual_seed(42)

# 定义数据集路径
dataset_dir = 'path/to/dataset'
images_dir = os.path.join(dataset_dir, 'images')
annotations_dir = os.path.join(dataset_dir, 'annotations')

# 创建YOLOv5的数据集配置文件
data_config = {
    'train': os.path.join(dataset_dir, 'train/images'),
    'val': os.path.join(dataset_dir, 'val/images'),
    'test': os.path.join(dataset_dir, 'test/images'),
    'nc': 2,  # 类别数量
    'names': ['negative', 'positive']  # 类别名称
}

with open(os.path.join(dataset_dir, 'data.yaml'), 'w') as f:
    yaml.dump(data_config, f)

# 划分训练集、验证集和测试集
def split_dataset(images_dir, annotations_dir):
    image_files = [os.path.basename(f) for f in glob.glob(os.path.join(images_dir, '*.jpg'))]
    np.random.shuffle(image_files)
    
    train_files = image_files[:int(len(image_files) * 0.8)]
    val_files = image_files[int(len(image_files) * 0.8):int(len(image_files) * 0.9)]
    test_files = image_files[int(len(image_files) * 0.9):]
    
    def create_folder_and_write_files(folder_name, files):
        folder_path = os.path.join(dataset_dir, folder_name)
        images_folder = os.path.join(folder_path, 'images')
        
        if not os.path.exists(images_folder):
            os.makedirs(images_folder)
        
        with open(os.path.join(folder_path, 'images.txt'), 'w') as f:
            for img in files:
                src_img_path = os.path.join(images_dir, img)
                dst_img_path = os.path.join(images_folder, img)
                shutil.copy(src_img_path, dst_img_path)
                f.write(dst_img_path + '\n')

    create_folder_and_write_files('train', train_files)
    create_folder_and_write_files('val', val_files)
    create_folder_and_write_files('test', test_files)

split_dataset(images_dir, annotations_dir)

# 训练模型
model = YOLO('yolov8n.pt')  # 加载预训练的YOLOv8n模型

results = model.train(
    data=os.path.join(dataset_dir, 'data.yaml'),
    epochs=100,
    imgsz=640,
    batch=16,
    name='pine_wilt_classification',
    project='runs/train'
)

# 评估模型
metrics = model.val()

# 可视化预测结果
source_image = '../path/to/dataset/test/sample.jpg'  # 替换为你要测试的图片路径
results = model.predict(source=source_image, conf=0.25, iou=0.45, save=True, save_txt=True)

# 显示预测结果
Image(filename='runs/detect/predict/sample.jpg')




在这里插入图片描述
在这里插入图片描述
如果i有一个超大规模的松材线虫病分类数据集,包含100,000张正样本和150,000张负样本,这些图像是通过固定翼无人机拍摄的。你需要使用这些数据进行二分类任务,并使用YOLOv8进行训练、评估和可视化预测结果。

项目介绍

数据准备
  • 数据集: 包含250,000张图像(100,000张正样本和150,000张负样本),这些图像是通过固定翼无人机拍摄的。
  • 类别:
    • positive: 正样本(松材线虫病)
    • negative: 负样本(无松材线虫病)
模型选择
  • YOLOv8: 使用YOLOv8进行目标检测。虽然YOLOv8主要用于目标检测,但我们可以通过调整模型结构来进行二分类任务。
功能
  • 数据加载: 自动从指定目录加载图像和标注文件。
  • 数据转换: 确保数据格式正确。
  • 模型训练: 使用YOLOv8进行训练。
  • 模型评估: 在验证集上评估模型性能。
  • 结果保存: 保存训练日志和最佳模型权重。
  • 可视化预测结果: 可视化预测结果以进行验证。

代码实现

由于YOLOv8主要用于目标检测,对于二分类任务,我们可以将每个图像视为一个整体,而不是具体的边界框。我们将使用YOLOv8的分类功能来进行二分类任务。

首先,确保你已经安装了YOLOv8库和其他必要的依赖项。你可以通过以下命令安装YOLOv8:

pip install ultralytics

接下来,我们编写代码来组织数据集并训练YOLOv8模型。

如何使用这些代码

  1. 准备数据

    • 确保你的数据集格式正确,包含图像文件夹。
    • 示例数据结构如下:
      path/to/dataset/
      ├── images/
      │   ├── positive/
      │   │   ├── image1.jpg
      │   │   ├── image2.jpg
      │   │   └── ...
      │   ├── negative/
      │   │   ├── image1.jpg
      │   │   ├── image2.jpg
      │   │   └── ...
      
  2. 替换数据路径

    • 在代码中,将 'path/to/dataset' 替换为你的数据集路径。
    dataset_dir = 'your_dataset_directory'
    
  3. 运行代码

    • 将上述代码复制到你的Python脚本中,并运行该脚本。
    • 确保你已经安装了所需的库:
      pip install ultralytics
      

示例:使用自定义数据集

假设你有一个新的数据集 my_pine_wilt_classification_dataset,其内容如下:

my_pine_wilt_classification_dataset/
├── images/
│   ├── positive/
│   │   ├── image1.jpg
│   │   ├── image2.jpg
│   │   └── ...
│   ├── negative/
│   │   ├── image1.jpg
│   │   ├── image2.jpg
│   │   └── ...

你可以按照以下步骤进行替换:

  1. 修改数据路径

    dataset_dir = 'my_pine_wilt_classification_dataset'
    
  2. 运行完整的代码

    • 将所有代码整合到一个Python脚本中,并运行该脚本。

注释说明

代码中包含了详细的注释,帮助你理解每个部分的功能。以下是关键部分的注释:

  • 数据准备

    • data_config: 定义训练集、验证集和测试集的路径,以及类别信息。
  • 数据划分

    • split_dataset: 根据给定的比例划分训练集、验证集和测试集。
  • 模型训练

    • model.train: 使用YOLOv8进行训练。
  • 模型评估

    • model.val: 在验证集上评估模型性能。
  • 可视化预测结果

    • model.predict: 进行推理并显示预测结果。

结果

运行代码后,你将得到以下结果:

  1. 控制台输出

    • 训练过程中每个epoch的日志信息。
    • 验证集上的评价指标(如准确率、精确率、召回率等)。
  2. 文件输出

    • runs/train/pine_wilt_classification/weights/best.pt: 最佳模型权重。
    • runs/val/exp/results.txt: 验证结果。
  3. 图像输出

    • runs/detect/predict/sample.jpg: 带有预测边界的图像。

希望这些详细的信息和代码能够帮助你顺利实施和优化你的项目。如果你有任何进一步的问题或需要更多帮助,请随时提问!

运行步骤总结

  1. 安装YOLOv8

    pip install ultralytics
    
  2. 准备数据集

    • 确保数据集路径正确,并且包含训练集、验证集和测试集文件夹,以及对应的图像文件。
  3. 运行训练脚本

    python your_script_name.py
    
  4. 评估模型

    • 评估结果会在训练结束后自动输出在控制台和文件中。
  5. 可视化预测结果

    • 测试图像的结果会保存在 runs/detect/predict/ 文件夹中,可以直接查看带有预测边界的图像。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值