牛羊检测数据集 3700张 牛羊检测平视 带标注 voc yolo 2类

devtools/2024/10/9 11:22:32/

 

牛羊检测数据集 3700张 牛羊检测平视 带标注 voc yolo

分类名: (图片张数,标注个数)
cattle: (1395, 4309)
sheep: (2393, 11205)
总数:(3791,15514)
总类(nc): 2类 

牛羊检测数据集介绍

数据集名称

牛羊检测数据集 (Cattle and Sheep Detection Dataset)

数据集概述

数据集是一个专门用于训练和评估牛羊检测模型的数据集数据集包含3700张图像,每张图像都带有详细的标注信息,标注格式包括VOC(Pascal VOC)和YOLO格式。这些图像涵盖了两种不同的动物:牛和羊,并且是从平视角度拍摄的,适用于基于深度学习的目标检测任务。通过这个数据集,可以训练出能够准确检测和分类牛羊的模型,从而帮助进行畜牧业管理、野生动物监测等应用。

数据集特点
  • 高质量图像数据集中的图像具有高分辨率,能够提供丰富的细节信息,特别适合动物特征分析。
  • 带标注:每张图像都有详细的标注信息,包括牛羊的位置和大小。
  • 多格式标注:标注信息同时以VOC和YOLO格式提供,方便不同框架的使用。
  • 实际应用场景:适用于需要精确检测牛羊的场景,如畜牧业管理、野生动物监测系统等。
数据集结构
cattle_and_sheep_detection_dataset/
├── images/                            # 图像文件
│   ├── 00001.jpg                      # 示例图像
│   ├── 00002.jpg
│   └── ...
├── annotations/                       # 标注文件
│   ├── VOC/                           # Pascal VOC格式标注
│   │   ├── 00001.xml                  # 示例VOC标注文件
│   │   ├── 00002.xml
│   │   └── ...
│   ├── YOLO/                          # YOLO格式标注
│   │   ├── 00001.txt                  # 示例YOLO标注文件
│   │   ├── 00002.txt
│   │   └── ...
├── data.yaml                          # 类别描述文件
├── README.md                          # 数据集说明
数据集内容
  1. images/

    • 功能:存放图像文件。
    • 内容
      • 00001.jpg:示例图像。
      • 00002.jpg:另一张图像。
      • ...
  2. annotations/

    • 功能:存放标注文件。
    • 内容
      • VOC/:存放Pascal VOC格式的标注文件。
        • 00001.xml:示例VOC标注文件。
        • 00002.xml:另一张图像的VOC标注文件。
        • ...
      • YOLO/:存放YOLO格式的标注文件。
        • 00001.txt:示例YOLO标注文件。
        • 00002.txt:另一张图像的YOLO标注文件。
        • ...
  3. data.yaml

    • 功能:定义数据集的类别和其他相关信息。
    • 内容
       yaml 

      深色版本

      train: cattle_and_sheep_detection_dataset/images
      val: cattle_and_sheep_detection_dataset/images
      nc: 2
      names: ['cattle', 'sheep']
  4. README.md

    • 功能数据集的详细说明文档。
    • 内容
      • 数据集的来源和用途。
      • 数据集的结构和内容。
      • 如何使用数据集进行模型训练和评估。
      • 其他注意事项和建议。
数据集统计
  • 总图像数量:3700张
  • 总标注框数量:15514个
  • 类别:2类
  • 平均每张图像的标注框数量:约4.19个

具体类别及其统计如下:

  • cattle(牛):(1395张图像, 4309个标注)
  • sheep(羊):(2393张图像, 11205个标注)
使用说明
  • 环境准备:确保安装了常用的深度学习库,例如torchtorchvisionnumpy等。
  • 数据集路径设置:将数据集解压到项目目录下,并确保路径正确。
  • 训练模型:可以使用预训练的目标检测模型(如Faster R-CNN、YOLOv5等),并对其进行微调以适应当前数据集
  • 数据增强:可以通过随机翻转、旋转等方法增加数据多样性,提高模型鲁棒性。
  • 超参数调整:根据实际情况调整学习率、批大小等超参数,以获得最佳训练效果。
  • 硬件要求:建议使用GPU进行训练和推理,以加快处理速度。如果没有足够的计算资源,可以考虑使用云服务提供商的GPU实例。
  • 类别平衡:虽然数据集中各类别的样本数量相对均衡,但在实际应用中可能需要进一步检查并处理类别不平衡问题,例如通过过采样或欠采样方法。

关键训练代码

以下是一个使用PyTorch和torchvision库进行牛羊检测的示例代码。我们将使用预训练的Faster R-CNN模型,并对其进行微调以适应我们的数据集

import torch
import torchvision
from torchvision.models.detection.faster_rcnn import FastRCNNPredictor
from torchvision.transforms import functional as F
from torch.utils.data import DataLoader, Dataset
from PIL import Image
import os
import xml.etree.ElementTree as ET# 自定义数据集类
class CattleAndSheepDetectionDataset(Dataset):def __init__(self, root, transforms=None):self.root = rootself.transforms = transformsself.imgs = list(sorted(os.listdir(os.path.join(root, "images"))))self.annotations = list(sorted(os.listdir(os.path.join(root, "annotations", "VOC"))))def __getitem__(self, idx):img_path = os.path.join(self.root, "images", self.imgs[idx])annotation_path = os.path.join(self.root, "annotations", "VOC", self.annotations[idx])img = Image.open(img_path).convert("RGB")annotation_root = ET.parse(annotation_path).getroot()boxes = []labels = []for obj in annotation_root.findall('object'):xmin, ymin, xmax, ymax = [int(obj.find('bndbox').find(tag).text) for tag in ('xmin', 'ymin', 'xmax', 'ymax')]label = obj.find('name').textlabel_id = 1 if label == 'cattle' else 2  # 1代表牛,2代表羊boxes.append([xmin, ymin, xmax, ymax])labels.append(label_id)boxes = torch.as_tensor(boxes, dtype=torch.float32)labels = torch.as_tensor(labels, dtype=torch.int64)target = {}target["boxes"] = boxestarget["labels"] = labelstarget["image_id"] = torch.tensor([idx])if self.transforms is not None:img, target = self.transforms(img, target)return F.to_tensor(img), targetdef __len__(self):return len(self.imgs)# 数据预处理
def get_transform(train):transforms = []if train:transforms.append(torchvision.transforms.RandomHorizontalFlip(0.5))return torchvision.transforms.Compose(transforms)# 加载数据集
dataset = CattleAndSheepDetectionDataset(root='cattle_and_sheep_detection_dataset', transforms=get_transform(train=True))
dataset_test = CattleAndSheepDetectionDataset(root='cattle_and_sheep_detection_dataset', transforms=get_transform(train=False))indices = torch.randperm(len(dataset)).tolist()
dataset = torch.utils.data.Subset(dataset, indices[:-370])
dataset_test = torch.utils.data.Subset(dataset_test, indices[-370:])data_loader = DataLoader(dataset, batch_size=2, shuffle=True, num_workers=4, collate_fn=lambda x: tuple(zip(*x)))
data_loader_test = DataLoader(dataset_test, batch_size=1, shuffle=False, num_workers=4, collate_fn=lambda x: tuple(zip(*x)))# 定义模型
model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True)
num_classes = 3  # 2类目标 + 背景
in_features = model.roi_heads.box_predictor.cls_score.in_features
model.roi_heads.box_predictor = FastRCNNPredictor(in_features, num_classes)# 设置设备
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)# 定义优化器
params = [p for p in model.parameters() if p.requires_grad]
optimizer = torch.optim.SGD(params, lr=0.005, momentum=0.9, weight_decay=0.0005)# 训练模型
num_epochs = 10
for epoch in range(num_epochs):model.train()for images, targets in data_loader:images = list(image.to(device) for image in images)targets = [{k: v.to(device) for k, v in t.items()} for t in targets]loss_dict = model(images, targets)losses = sum(loss for loss in loss_dict.values())optimizer.zero_grad()losses.backward()optimizer.step()print(f'Epoch {epoch+1}/{num_epochs}, Loss: {losses.item()}')# 验证模型model.eval()with torch.no_grad():for images, targets in data_loader_test:images = list(image.to(device) for image in images)targets = [{k: v.to(device) for k, v in t.items()} for t in targets]outputs = model(images)# 保存模型
torch.save(model.state_dict(), 'cattle_and_sheep_detection_model.pth')

注意事项

  • 数据格式:确保输入的数据格式正确,特别是图像文件和标注文件的格式。
  • 超参数调整:根据实际情况调整学习率、批大小等超参数,以获得最佳训练效果。
  • 硬件要求:建议使用GPU进行训练和推理,以加快处理速度。如果没有足够的计算资源,可以考虑使用云服务提供商的GPU实例。
  • 数据增强:可以通过数据增强技术(如随机翻转、旋转等)来增加模型的鲁棒性。
  • 模型选择:除了Faster R-CNN,还可以尝试其他目标检测模型,如YOLOv5、SSD等,以找到最适合当前任务的模型。
  • 类别平衡:虽然数据集中各类别的样本数量相对均衡,但在实际应用中可能需要进一步检查并处理类别不平衡问题,例如通过过采样或欠采样方法。

通过上述步骤,你可以成功地使用这个高质量的牛羊检测数据集进行模型训练和评估。该数据集不仅适用于学术研究,还可以应用于实际的畜牧业管理、野生动物监测系统等领域,帮助提升对牛羊的检测准确性和效率。希望这个数据集能帮助你更好地理解和应用最新的深度学习技术。


http://www.ppmy.cn/devtools/123348.html

相关文章

计算机视觉硬件知识点整理(五):3CCD彩色相机介绍与成像原理

文章目录 前言一,3CCD彩色相机介绍二,3CCD彩色相机成像流程 前言 在当代影像技术领域,相机的核心组件——图像传感器,经历了从传统的胶片到现代数字化的革命性转变。其中,3CCD(Three-Chip Charge-Coupled …

时间卷积网络(TCN)原理+代码详解

目录 一、TCN原理1.1 因果卷积(Causal Convolution)1.2 扩张卷积(Dilated Convolution) 二、代码实现2.1 Chomp1d 模块2.2 TemporalBlock 模块2.3 TemporalConvNet 模块2.4 完整代码示例 参考文献 在理解 TCN 的原理之前&#xff…

Maven 父子模块的 pom.xml 文件编写

今天在写课内的实验作业的时候&#xff0c;三个内容要使用的依赖是一样的&#xff0c;于是想使用父子模块来玩玩。 父模块 pom.xml 书写 打包方式 <packaging>pom</packaging> 聚合子模块 <!-- 聚合子模块 --> <modules><module>../one</…

C#导出Excel表格,实现跨行/跨列...支持各种组合样式

C#生成Excel跨行/跨列…支持各种样式 效果示例 基本能满足各种样式需求 安装包 首先在项目中安装包&#xff1a;DocumentFormat.OpenXml 使用 部分使用方法 //Cells[3, 1, 3, 2]&#xff1a;这是用于指定 Excel 单元格的范围。//3, 1&#xff1a;表示开始的单元格&#…

【Kubernetes】常见面试题汇总(四十八)

目录 108.考虑一家拥有非常分散的系统的跨国公司&#xff0c;希望解决整体代码库问题。您认为公司如何解决他们的问题&#xff1f; 109.我们所有人都知道从单服务到微服务的转变从开发方面解决了问题&#xff0c;但在部署方面却增加了问题。公司如何解决部署方面的问题&#x…

上海亚商投顾:创业板指大涨超17% 两市成交额超3.45万亿创

上海亚商投顾前言&#xff1a;无惧大盘涨跌&#xff0c;解密龙虎榜资金&#xff0c;跟踪一线游资和机构资金动向&#xff0c;识别短期热点和强势个股。 一.市场情绪 沪指昨日大幅高开后回落&#xff0c;创业板指大涨超17%&#xff0c;续创历史单日最大涨幅。券商股再掀涨停潮&…

java -jar 指定配置 logback.xml

APP_NAMEruoyi-admin.jar APP_CONFIGconfig/application.yml,config/application-druid.yml LOGBACK_CONFIGconfig/logback.xml#启动方法 start(){is_existif [ $? -eq "0" ]; thenecho "${APP_NAME} is already running. pid${pid} ."elsenohup java -Xm…

C#多线程基本使用和探讨

线程是并发编程的基础概念之一。在现代应用程序中&#xff0c;我们通常需要执行多个任务并行处理&#xff0c;以提高性能。C# 提供了多种并发编程工具&#xff0c;如Thread、Task、异步编程和Parallel等。 Thread 类 Thread 类是最基本的线程实现方法。使用Thread类&#xff0…