脑部CT检测数据集

脑部CT检测数据集
最新回答
口吻生花

2026-07-12 04:15:55

脑部CT检测数据集是一个包含2,615张图像和2,643个标注,适用于脑部肿瘤检测和分类任务的数据集,支持VOC和YOLO两种标注格式。以下是详细介绍:

数据集概述
  • 名称:脑部CT检测数据集
  • 用途:从脑部CT图像中检测和分类肿瘤
  • 格式:提供VOC和YOLO两种标注格式
  • 图像数量:2,615张
  • 标注数量:2,643个
  • 类别:主要包含肿瘤(tumor)这一类别
数据集特点
  • 多样性:包含不同类型的脑部肿瘤,肿瘤的大小、形状和位置各异。
  • 高质量标注:每个图像都经过精确标注,提供边界框信息,适用于目标检测任务。
  • 医学影像:基于CT扫描图像,具有高分辨率和详细的解剖结构信息。
  • 专注性:专注于脑部肿瘤的检测,适合特定领域的研究和应用。
数据集结构

数据集目录结构如下:

brain_ct_dataset/├── images/ # 存放CT图像│ ├── 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>512</width> <height>512</height> <depth>3</depth> </size> <object> <name>tumor</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代表tumor)。

    x_center 和 y_center:边界框中心点的归一化坐标(相对于图像宽度和高度)。

    width 和 height:边界框的宽度和高度的归一化值。

类别统计
  • Tumor:

    图片张数:2,615

    标注个数:2,643

  • 总数:

    图片张数:2,615

    标注个数:2,643

项目实现1. 数据加载器

使用PyTorch实现数据加载器,支持VOC和YOLO格式的标签读取:

import torchfrom torchvision import transformsfrom PIL import Imageimport osclass BrainCTDataset(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((512, 512)), transforms.ToTensor(),])dataset = BrainCTDataset(img_dir='brain_ct_dataset/images', label_dir='brain_ct_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为例展示模型定义和训练过程:

  • 安装依赖:
pip install -r requirements.txt
  • 训练脚本:
import torchfrom yolov5.models.yolo import Modelfrom yolov5.utils.loss import ComputeLossfrom yolov5.utils.general import non_max_suppressionfrom utils.datasets import create_dataloaderdef 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('brain_ct_dataset/images', 'brain_ct_dataset/labels_yolo', batch_size=4, img_size=512)# 训练num_epochs = 10for epoch in range(num_epochs): train_one_epoch(model, optimizer, dataloader, device) torch.save(model.state_dict(), f'models/brain_yolov5_epoch_{epoch}.pt')3. 模型测试import torchimport cv2from yolov5.models.yolo import Modelfrom yolov5.utils.general import non_max_suppressiondef detect_brain_tumors(image_path, model, device): model.eval() image = cv2.imread(image_path) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) image = cv2.resize(image, (512, 512)) 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/brain_yolov5_best.pt'))model.to(device)# 预测predictions = detect_brain_tumors('path/to/brain_ct_image.jpg', model, device)print(predictions)项目总结

本项目利用脑部CT检测数据集,通过脑部CT图像实现了对脑部肿瘤的自动检测。数据集支持VOC和YOLO格式,可直接用于模型训练。实验结果表明,模型在脑部肿瘤检测任务上表现良好,能够辅助医生进行诊断和治疗决策。

未来研究方向
  • 进一步优化模型:探索更高效的网络结构和训练策略,提高检测精度和速度。
  • 扩展应用场景:将该方法应用于其他类型的医学影像数据(如MRI)。
  • 实时检测系统:开发实时检测系统,实现在线监测和预警功能。
  • 多模态融合:结合多种医学影像数据(如CT和MRI),提高检测的准确性和鲁棒性。