草莓成熟度检测数据集,共800余张大棚内实景拍摄,区分为成熟,未成熟,草莓花梗三类,提供yolo标注 草莓数据集

草莓成熟度检测数据集,共800余张大棚内实景拍摄,区分为成熟,未成熟,草莓花梗三类,提供yolo标注

 

草莓成熟度检测数据集,共800余张大棚内实景拍摄,区分为成熟,未成熟,草莓花梗三类,提供yolo标注

草莓成熟度检测数据集介绍

数据集概览
  • 总图像数量: 800余张
  • 类别数量:
    • 成熟 (Ripe)
    • 未成熟 (Unripe)
    • 草莓花梗 (Strawberry Peduncle)
  • 任务类型: 目标检测
  • 标注格式: YOLO格式
  • 拍摄环境: 大棚内实景拍摄
  • 数据集大小: 根据图像分辨率和数量,估计在几百MB到几GB之间
类别划分
  • 成熟 (Ripe): 完全成熟的草莓。
  • 未成熟 (Unripe): 未完全成熟的草莓。
  • 草莓花梗 (Strawberry Peduncle): 连接草莓果实和植株的花梗。
数据集结构

假设数据集文件夹结构如下:

strawberry_ripeness_dataset/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
├── labels/
│   ├── train/  # YOLO格式
│   ├── val/
│   └── test/
└── README.md
  • images/ 目录下存放图像文件。
  • labels/ 目录下存放YOLO格式的标注文件。
  • README.md 文件包含数据集的使用说明和字段解释。
YOLO标注文件示例

YOLO格式的标注文件是与图像文件同名的.txt文件,每行表示一个目标对象,格式为:

<class_id> <x_center> <y_center> <width> <height>

其中:

  • <class_id> 是类别的索引(从0开始)。
  • <x_center> 和 <y_center> 是边界框中心点相对于图像宽度和高度的比例坐标。
  • <width> 和 <height> 是边界框的宽度和高度相对于图像宽度和高度的比例。

示例:

# 示例:labels/train/00001.txt
0 0.456 0.321 0.123 0.089  # Ripe
1 0.678 0.456 0.154 0.123  # Unripe
2 0.789 0.567 0.189 0.156  # Strawberry Peduncle
使用场景
  • 成熟度检测: 用于自动识别和分类草莓的成熟程度。
  • 智能农业: 结合其他技术如机器人采摘,实现自动化收割和分拣。
  • 质量控制: 帮助农民和食品加工厂快速筛选出不同成熟度的草莓。
Keras 训练代码示例

为了训练一个目标检测模型,我们可以使用预训练的YOLOv5模型。这里我们使用PyTorch和YOLOv5来进行训练。如果你更喜欢使用Keras,可以考虑使用YOLOv3或YOLOv4的Keras实现,但YOLOv5目前主要支持PyTorch。

以下是一个使用YOLOv5进行训练的代码示例。

YOLOv5 训练代码示例

首先,确保你已经安装了YOLOv5所需的依赖项。你可以通过以下命令克隆YOLOv5仓库并安装依赖项:

git clone https://github.com/ultralytics/yolov5
cd yolov5
pip install -r requirements.txt

然后,创建一个配置文件 data/strawberry_ripeness.yaml 来指定数据集路径和类别信息:

train: /path/to/strawberry_ripeness_dataset/images/train
val: /path/to/strawberry_ripeness_dataset/images/val
test: /path/to/strawberry_ripeness_dataset/images/test

nc: 3  # 类别数量
names: ['Ripe', 'Unripe', 'Strawberry_Peduncle']

接下来,使用以下脚本进行训练:

import torch
from pathlib import Path
from models.experimental import attempt_load
from utils.datasets import create_dataloader
from utils.general import check_img_size, non_max_suppression, scale_coords, set_logging
from utils.torch_utils import select_device, time_synchronized

# 设置日志
set_logging()

# 模型配置
weights = 'yolov5s.pt'  # 预训练权重
data = 'data/strawberry_ripeness.yaml'  # 数据集配置文件
imgsz = 640  # 输入图像尺寸
batch_size = 16  # 批处理大小
epochs = 100  # 训练轮数
device = ''  # 设备选择(默认为GPU,如果可用)

# 加载模型
model = attempt_load(weights, map_location=device)  # 加载预训练模型
device = select_device(device, batch_size=batch_size)

# 数据加载器
train_path = data['train']
val_path = data['val']

train_loader = create_dataloader(train_path, imgsz, batch_size, augment=True, cache=False, rect=False, workers=8)[0]
val_loader = create_dataloader(val_path, imgsz, batch_size, augment=False, cache=False, rect=True, workers=8)[0]

# 优化器
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)

# 训练循环
for epoch in range(epochs):
    model.train()
    for i, (imgs, targets, paths, _) in enumerate(train_loader):
        imgs = imgs.to(device).float() / 255.0  # 归一化
        targets = targets.to(device)
        
        # 前向传播
        pred = model(imgs)
        
        # 计算损失
        loss, _ = compute_loss(pred, targets, model)
        
        # 反向传播
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
    
    # 验证
    with torch.no_grad():
        model.eval()
        for i, (imgs, targets, paths, _) in enumerate(val_loader):
            imgs = imgs.to(device).float() / 255.0  # 归一化
            targets = targets.to(device)
            
            # 前向传播
            pred = model(imgs)
            
            # 计算损失
            loss, _ = compute_loss(pred, targets, model)
            
            # 打印验证损失
            print(f'Epoch {epoch + 1}/{epochs}, Val Loss: {loss.item()}')
    
    # 保存模型
    torch.save(model.state_dict(), f'runs/train/exp{epoch}.pt')

print('Training complete.')

代码说明

  1. 数据加载器:

    • 使用create_dataloader函数加载训练集和验证集的数据。
    • 图像会被归一化,并且标签会被转换为适合YOLOv5的格式。
  2. 模型加载:

    • 使用attempt_load函数加载预训练的YOLOv5模型。
    • 选择设备(CPU或GPU)。
  3. 优化器:

    • 使用Adam优化器进行参数更新。
  4. 训练循环:

    • 对每个批次的数据进行前向传播、计算损失、反向传播和参数更新。
    • 在每个epoch结束时,对验证集进行评估,并打印验证损失。
    • 保存每个epoch的模型权重。
### 回答1: 你可以使用Python的图形库matplotlib来画出一朵红色大花。例如,你可以用matplotlib.pyplot.scatter函数绘制一朵红色大花,使用matplotlib.pyplot.show函数显示出来:import matplotlib.pyplot as pltX = [1,2,3,4,5]Y = [1,2,3,4,5]plt.scatter(X, Y, color='red', s=100)plt.show() ### 回答2: 要用Python绘制一朵红色的大花,我们可以使用turtle模块来实现它。下面是一个可以绘制一朵花的示例代码: ```python import turtle # 设置画布大小 turtle.setup(800, 600) # 创建一个画笔 pen = turtle.Pen() # 设置画笔颜色为红色 pen.color("red") # 设置画笔的宽度 pen.width(5) # 绘制花瓣 for i in range(36): # 绘制一条线段长度为100 pen.forward(100) # 向右转10度 pen.right(10) # 绘制一条线段长度为50 pen.forward(50) # 向右转180度 pen.right(180) # 绘制一条线段长度为50 pen.forward(50) # 向左转80度 pen.left(80) # 隐藏画笔 pen.hideturtle() # 点击关闭窗口时退出程序 turtle.exitonclick() ``` 运行以上代码,你将在一个窗口中看到绘制出一朵红色的大花。你可以根据需要调整画布大小、花瓣的数量和长度,以及花瓣的形状来创建你想要的花朵效果。 ### 回答3: 要用Python画出一朵红色的大花,我们可以使用turtle模块来实现。下面是实现这个过程的代码: ```python import turtle # 设置画布大小和画笔速度 turtle.setup(800, 600) turtle.speed(10) # 设置画笔颜色为红色 turtle.color("red") # 绘制花瓣 for i in range(36): turtle.forward(200) turtle.left(170) # 绘制花蕊 turtle.color("green") turtle.penup() turtle.goto(0, 0) turtle.pendown() turtle.circle(20) # 绘制花梗 turtle.color("brown") turtle.penup() turtle.goto(0, -200) turtle.pendown() turtle.right(90) turtle.forward(200) # 隐藏画笔 turtle.hideturtle() # 结束绘制 turtle.done() ``` 以上代码采用了turtle模块来绘制花朵,通过循环和移动画笔的方式绘制了花瓣。画笔的颜色被设置为红色,花蕊为绿色,花梗为棕色。最后,通过调用turtle.done()结束绘制,并隐藏画笔。运行以上代码,即可在屏幕上看到一朵红色大花的绘制结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值