VOC格式标注转为yolov5格式
- 原数据格式是xml文件对目标细胞注释,现在需要将这种注释转换为yolov5所需的格式。即每个图像对应一个txt文件,文件中存储该图像中全部细胞的类别和坐标,一行存储一个细胞的信息,如下图
- 编写脚本进行注释格式转换
#获取在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)
- 转换结果
在数据集路径创建数据配置文件
- 在项目平级路径下创建数据集存储路径,路径内创建训练集,验证集路径和配置文件data.yaml
- train和valid内分别创建图像数据路径和标注文件路径
- images内存储图像数据,labels存储标注数据,文件名称对应相同
- 设置数据集配置文件如下图
- train 指定训练集图像路径
- val 指定验证集图像路径
- nc 指定目标类别数量 这里为血小板,红细胞,白细胞共3种
- 目标对应类别名称
训练模型
- 配置项目路径内的train.py的相关参数
- 配置参数
- 指定模型文件和数据配置文件
- 指定训练轮数,批量大小和输入图像分辨率
运行train.py
- 训练结束
结果显示,训练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 - 训练结果可视化
进行细胞检测
-
指定训练好的权值文件,检测数据路径,检测结果输出路径
-
指定置信度阈值和IOU阈值
-
更改图形绘制方法
将检测结果全部保存
-
计算全部检测图像种预测出的各种细胞数量(最后评估计数效果用)
-
计算全部检测图像的真实标注细胞数量(最后评估计数效果用)
-
根据检测结果在原图上绘制标注框且打印计数信息保存到输出路径
-
待检测图像
-
检测结果