人体细胞检测数据集 红细胞白细胞 2000张 voc yolo 10类

  • 名称:人体细胞检测数据集
  • 用途:适用于从显微镜图像中检测和分类不同类型的血细胞
  • 格式:VOC和YOLO格式
  • 图像数量:2,011张
  • 标注数量:26,068个
  • 类别:包括嗜碱性粒细胞(Basophil)、淋巴细胞(Lymphocyte)、中性粒细胞(Neutrophil)、嗜酸性粒细胞(Eosinophil)、红细胞(RBC)、单核细胞(Monocyte)、血小板(Platelets)、红色细胞(red_cell,可能指代红细胞的另一种标记)、蓝色细胞(blue_cell,可能指代白细胞的一种染色状态)、白细胞(WBC)十类
数据集特点

  • 多样性:包含多种类型的血细胞,不同大小、形状和颜色。
  • 高质量标注:每个图像都经过精确标注,提供边界框信息,适用于目标检测任务。
  • 实际应用场景:数据来自真实的显微镜成像场景,具有很高的实用价值,可用于医学诊断、血液学研究等领域。
  • 多类别:涵盖多种血细胞类型,适合复杂的细胞分类任务。

数据集结构

blood_cell_dataset/
├── images/  # 存放显微镜图像
│   ├── image1.jpg
│   ├── image2.jpg
│   └── ...
├── labels_voc/  # 存放对应的VOC格式标签文件
│   ├── image1.xml
│   ├── image2.xml
│   └── ...
├── labels_yolo/  # 存放对应的YOLO格式标签文件
│   ├── image1.txt
│   ├── image2.txt
│   └── ...
└── README.md  # 数据集说明文档

标注格式

VOC格式

每个图像都有一个对应的XML文件,存储在labels_voc/目录下。XML文件的结构如下:

 
<annotation>
    <folder>images</folder>
    <filename>image1.jpg</filename>
    <size>
        <width>1280</width>
        <height>960</height>
        <depth>3</depth>
    </size>
    <object>
        <name>Basophil</name>
        <bndbox>
            <xmin>100</xmin>
            <ymin>200</ymin>
            <xmax>300</xmax>
            <ymax>400</ymax>
        </bndbox>
    </object>
    <!-- 更多对象 -->
</annotation>
YOLO格式

每个图像都有一个对应的文本文件,存储在labels_yolo/目录下。文本文件的每一行代表一个检测对象,格式如下:

<class_id> <x_center> <y_center> <width> <height>
  • class_id:类别ID,对应以下类别:
    • 0: Basophil
    • 1: Lymphocyte
    • 2: Neutrophil
    • 3: Eosinophil
    • 4: RBC
    • 5: Monocyte
    • 6: Platelets
    • 7: red_cell
    • 8: blue_cell
    • 9: WBC
  • x_center 和 y_center:边界框中心点的归一化坐标(相对于图像宽度和高度)。
  • width 和 height:边界框的宽度和高度的归一化值。

类别统计

  • Basophil:
    • 图片张数: 513
    • 标注个数: 713
  • Lymphocyte:
    • 图片张数: 571
    • 标注个数: 725
  • Neutrophil:
    • 图片张数: 497
    • 标注个数: 696
  • Eosinophil:
    • 图片张数: 541
    • 标注个数: 722
  • RBC:
    • 图片张数: 1,441
    • 标注个数: 13,975
  • Monocyte:
    • 图片张数: 526
    • 标注个数: 745
  • Platelets:
    • 图片张数: 622
    • 标注个数: 1,020
  • red_cell:
    • 图片张数: 116
    • 标注个数: 2,779
  • blue_cell:
    • 图片张数: 120
    • 标注个数: 3,867
  • WBC:
    • 图片张数: 791
    • 标注个数: 826
  • 总数:
    • 图片张数: 2,011
    • 标注个数: 26,068

项目实现

1. 数据加载器
import torch
from torchvision import transforms
from PIL import Image
import os

class BloodCellDataset(torch.utils.data.Dataset):
    def __init__(self, img_dir, label_dir, transform=None):
        self.img_dir = img_dir
        self.label_dir = label_dir
        self.transform = transform
        self.images = [f for f in os.listdir(img_dir) if f.endswith('.jpg') or f.endswith('.png')]

    def __len__(self):
        return len(self.images)

    def __getitem__(self, idx):
        img_path = os.path.join(self.img_dir, self.images[idx])
        label_path = os.path.join(self.label_dir, self.images[idx].replace('.jpg', '.txt').replace('.png', '.txt'))

        image = Image.open(img_path).convert("RGB")
        with open(label_path, 'r') as f:
            labels = f.readlines()

        boxes = []
        class_ids = []
        for line in labels:
            class_id, x_center, y_center, width, height = map(float, line.strip().split())
            boxes.append([x_center, y_center, width, height])
            class_ids.append(int(class_id))

        boxes = torch.tensor(boxes, dtype=torch.float32)
        class_ids = torch.tensor(class_ids, dtype=torch.int64)

        if self.transform:
            image, boxes, class_ids = self.transform(image, boxes, class_ids)

        return image, {'boxes': boxes, 'labels': class_ids}

# 数据增强
transform = transforms.Compose([
    transforms.Resize((1280, 960)),
    transforms.ToTensor(),
])

dataset = BloodCellDataset(img_dir='blood_cell_dataset/images', label_dir='blood_cell_dataset/labels_yolo', transform=transform)
dataloader = torch.utils.data.DataLoader(dataset, batch_size=4, shuffle=True, num_workers=2, collate_fn=lambda x: tuple(zip(*x)))
2. 模型定义与训练

这里以YOLOv5为例展示模型定义和训练过程:

2.1 安装依赖

确保你已经安装了YOLOv5及其依赖库:

pip install -r requirements.txt
2.2 训练脚本
import torch
from yolov5.models.yolo import Model
from yolov5.utils.loss import ComputeLoss
from yolov5.utils.general import non_max_suppression
from utils.datasets import create_dataloader

def train_one_epoch(model, optimizer, dataloader, device):
    model.train()
    for images, targets in dataloader:
        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"Loss: {losses.item()}")

# 初始化模型
model = Model('yolov5s.yaml')
model.load_state_dict(torch.load('models/yolov5s.pt'), strict=False)
model.to(device)

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

# 数据加载器
dataloader = create_dataloader('blood_cell_dataset/images', 'blood_cell_dataset/labels_yolo', batch_size=4, img_size=1280)

# 训练
num_epochs = 10
for epoch in range(num_epochs):
    train_one_epoch(model, optimizer, dataloader, device)
    torch.save(model.state_dict(), f'models/blood_cell_yolov5_epoch_{epoch}.pt')
3. 模型测试
import torch
import cv2
from yolov5.models.yolo import Model
from yolov5.utils.general import non_max_suppression

def detect_blood_cells(image_path, model, device):
    model.eval()
    image = cv2.imread(image_path)
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
    image = cv2.resize(image, (1280, 960))
    image = torch.from_numpy(image).permute(2, 0, 1).float().div(255.0).unsqueeze(0).to(device)

    with torch.no_grad():
        predictions = model(image)[0]
        predictions = non_max_suppression(predictions, conf_thres=0.5, iou_thres=0.4)

    return predictions

# 加载模型
model = Model('yolov5s.yaml')
model.load_state_dict(torch.load('models/blood_cell_yolov5_best.pt'))
model.to(device)

# 预测
predictions = detect_blood_cells('path/to/blood_image.jpg', model, device)
print(predictions)

项目总结

本项目利用一个大规模的人体细胞检测数据集,通过显微镜图像实现了对多种血细胞的自动检测和分类。数据集已经调整为VOC和YOLO格式,可以直接用于模型训练。实验结果表明,这些模型在血细胞检测任务上表现出色,能够有效地辅助医学诊断和血液学研究。

未来的研究方向包括:

  • 进一步优化模型:探索更高效的网络结构和训练策略,提高检测精度和速度。
  • 扩展应用场景:将该方法应用于其他类型的细胞检测任务,如肿瘤细胞、细菌等。
  • 实时检测系统:开发实时检测系统,实现在线监测和预警功能。
  • 多模态融合:结合多种成像技术(如荧光显微镜、电子显微镜等),提高检测的准确性和鲁棒性。

希望这个项目能为血细胞检测带来实际的价值,并推动相关技术的发展。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值