基于YOLOv5的血细胞识别和计数

VOC格式标注转为yolov5格式

  • 原数据格式是xml文件对目标细胞注释,现在需要将这种注释转换为yolov5所需的格式。即每个图像对应一个txt文件,文件中存储该图像中全部细胞的类别和坐标,一行存储一个细胞的信息,如下图
    基于YOLOv5的血细胞识别和计数_第1张图片
  • 编写脚本进行注释格式转换
#获取在SSD项目中生成的csv格式的标注数据
with open("test_labels.csv", "r") as fp:
    data = []
    lines = fp.readlines()[1:]
    for line in lines:
        data.append(line.rstrip().split(","))

txt = ""
#遍历全部数据重新写入到txt文件
for line in data:
    title = line[0][:-3] + "txt"
    with open("./valid/labels/" + title, "a", encoding="utf-8") as f:
        map_cls_name = {"WBC":"2", "RBC":"1", "Platelets":"0"}
        cls = map_cls_name[line[3]]
        x_min = float(line[4])
        y_min = float(line[5])
        x_max = float(line[6])
        y_max = float(line[7])
        x = str((x_max+x_min)/2.0/640.0)
        y = str((y_max+y_min)/2.0/480.0)
        w = str((x_max-x_min)/640.0)
        h = str((y_max-y_min)/480.0)
        content_ = [cls, x, y, w, h]
        content = " ".join(content_)
        f.write(content+"\n")
        print(title + "  " + content)
  • 转换结果
    基于YOLOv5的血细胞识别和计数_第2张图片

在数据集路径创建数据配置文件

  • 在项目平级路径下创建数据集存储路径,路径内创建训练集,验证集路径和配置文件data.yaml
    基于YOLOv5的血细胞识别和计数_第3张图片
  • train和valid内分别创建图像数据路径和标注文件路径
    在这里插入图片描述
  • images内存储图像数据,labels存储标注数据,文件名称对应相同
  • 设置数据集配置文件如下图
  • train 指定训练集图像路径
  • val 指定验证集图像路径
  • nc 指定目标类别数量 这里为血小板,红细胞,白细胞共3种
  • 目标对应类别名称
    基于YOLOv5的血细胞识别和计数_第4张图片

训练模型

  • 配置项目路径内的train.py的相关参数
  • 配置参数
  • 指定模型文件和数据配置文件
    在这里插入图片描述
  • 指定训练轮数,批量大小和输入图像分辨率
    在这里插入图片描述
    运行train.py
    基于YOLOv5的血细胞识别和计数_第5张图片
  • 训练结束
    基于YOLOv5的血细胞识别和计数_第6张图片
    结果显示,训练300轮此=次共耗时2.05h
    生成的参数大小为14.8MB
    总损失值降低到0.1314
    在46张验证图象上共689个细胞,检测准确率为0.751,召回率高达0.96,IOU阈值为0.5时mAP高达0.947, IOU在0.5-0.95时,平均mAP为0.636
  • 训练结果可视化
    基于YOLOv5的血细胞识别和计数_第7张图片
    基于YOLOv5的血细胞识别和计数_第8张图片
    基于YOLOv5的血细胞识别和计数_第9张图片

进行细胞检测

  • 指定训练好的权值文件,检测数据路径,检测结果输出路径
    在这里插入图片描述

  • 指定置信度阈值和IOU阈值
    在这里插入图片描述

  • 更改图形绘制方法
    将检测结果全部保存
    基于YOLOv5的血细胞识别和计数_第10张图片

  • 计算全部检测图像种预测出的各种细胞数量(最后评估计数效果用)
    基于YOLOv5的血细胞识别和计数_第11张图片

  • 计算全部检测图像的真实标注细胞数量(最后评估计数效果用)
    基于YOLOv5的血细胞识别和计数_第12张图片

  • 根据检测结果在原图上绘制标注框且打印计数信息保存到输出路径
    基于YOLOv5的血细胞识别和计数_第13张图片

  • 待检测图像
    基于YOLOv5的血细胞识别和计数_第14张图片

  • 检测结果
    基于YOLOv5的血细胞识别和计数_第15张图片
    基于YOLOv5的血细胞识别和计数_第16张图片

你可能感兴趣的:(目标检测,python,深度学习)