【细胞识别】YOLOv8实现CBC细胞检测

简介: 【细胞识别】YOLOv8实现CBC细胞检测

数据集地址

数据集包含 360 张红血细胞图像及其注释文件,分为训练集与验证集。训练文件夹包含 300 张带有注释的图像。测试和验证文件夹都包含 60 张带有注释的图像。我们对原始数据集进行了一些修改以准备此 CBC 数据集,并将数据集分成三部分。在360张涂片图像中,首先使用300张带注释的血细胞图像作为训练集,然后将其余60张带有注释的图像用作测试集。CBC数据集地址如下:


https://github.com/MahmudulAlam/Complete-Blood-Cell-Count-Dataset

模型训练

准备好数据集以后,直接按下面的命令行运行即可:

yolo train model=yolov8n.pt data=cbc_dataset.yaml epochs=25 imgsz=640 batch=1

导出与测试

模型导出与测试

yolo export model=cbc _best.pt format=onnx
yolo predict model=cbc_best.pt source=D:\cbc_analysis\data\image_001.jpg

部署推理

转成ONNX格式文件以后,基于OpenVINO-Python部署推理,模型结构如下:

模型支持识别两类细胞分别是:

红细胞 - RBC

白细胞 - WBC

模型推理的代码如下:

ie = Core()
for device in ie.available_devices:
    print(device)

# Read IR
model = ie.read_model(model="cbc_best.onnx")
compiled_model = ie.compile_model(model=model, device_name="CPU")
output_layer = compiled_model.output(0)

frame = cv.imread("D:/cbc_analysis/data/image_002.jpg")
bgr = format_yolov8(frame)
img_h, img_w, img_c = bgr.shape

start = time.time()
image = cv.dnn.blobFromImage(bgr, 1 / 255.0, (640, 640), swapRB=True, crop=False)

res = compiled_model([image])[output_layer] # 1x84x8400
rows = np.squeeze(res, 0).T
class_ids = []
confidences = []
boxes = []
x_factor = img_w / 640
y_factor = img_h / 640

for r in range(rows.shape[0]):
    row = rows[r]
    classes_scores = row[4:]
    _, _, _, max_indx = cv.minMaxLoc(classes_scores)
    class_id = max_indx[1]
    if (classes_scores[class_id] > .25):
        confidences.append(classes_scores[class_id])
        class_ids.append(class_id)
        x, y, w, h = row[0].item(), row[1].item(), row[2].item(), row[3].item()
        left = int((x - 0.5 * w) * x_factor)
        top = int((y - 0.5 * h) * y_factor)
        width = int(w * x_factor)
        height = int(h * y_factor)
        box = np.array([left, top, width, height])
        boxes.append(box)

indexes = cv.dnn.NMSBoxes(boxes, confidences, 0.25, 0.45)
for index in indexes:
    box = boxes[index]
    color = colors[int(class_ids[index]) % len(colors)]
    rr = int((box[2] + box[3])/4)
    cv.circle(frame, (box[0]+int(box[2]/2), box[1]+int(box[3]/2)), rr-4, color, 2)
    cv.putText(frame, class_list[class_ids[index]], (box[0] + int(box[2] / 2), box[1] + int(box[3] / 2)),
               cv.FONT_HERSHEY_SIMPLEX, .5, (0, 0, 0))
cv.putText(frame, "gloomyfish@2024", (20, 45), cv.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

cv.imshow("YOLOv8+OpenVINO2023 RBC(Red Blood Cell) Count", frame)
cv.waitKey(0)
cv.destroyAllWindows()

相关文章
|
7月前
|
算法 Java API
细胞识别图像处理项目总结
细胞识别图像处理项目总结
30 0
|
机器学习/深度学习 传感器 算法
【图像分割】图像检测(分割、特征提取)、各种特征(面积等)的测量和过滤(Matlab代码实现)
【图像分割】图像检测(分割、特征提取)、各种特征(面积等)的测量和过滤(Matlab代码实现)
|
机器学习/深度学习 数据采集 算法
BP神经网络数据分类——语音特征信号分类(Matlab代码实现)
BP神经网络数据分类——语音特征信号分类(Matlab代码实现)
142 0
|
机器学习/深度学习 文字识别
基于BP神经网络进行手写体识别(Matlab代码实现)
基于BP神经网络进行手写体识别(Matlab代码实现)
155 0
|
数据采集 存储 机器学习/深度学习
秒懂算法 | 基于朴素贝叶斯算法的垃圾信息的识别
本文将带领大家亲手实现一个垃圾信息过滤的算法。 在正式讲解算法之前,最重要的是对整个任务有一个全面的认识,包括算法的输入和输出、可能会用到的技术,以及技术大致的流程。 本任务的目标是去识别一条短信是否为垃圾信息,即输入为一条文本信息,输出为二分类的分类结果。2002年,Paul Graham提出使用“贝叶斯推断”过滤垃圾邮件。1000封垃圾邮件可以过滤掉995封,且没有一个误判。另外,这种过滤器还具有自我学习的功能,会根据新收到的邮件,不断调整。收到的垃圾邮件越多,它的准确率就越高。 朴素贝叶斯算法是一种有监督的机器学习算法,即算法的实现包含了构建训练集、数据预处理、训练、在测试集上验证
515 0
秒懂算法 | 基于朴素贝叶斯算法的垃圾信息的识别
|
机器学习/深度学习 存储 数据采集
使用深度神经网络对肿瘤图像进行分类
使用 Inception-v3 深度神经网络对可能不适合内存的多分辨率全玻片图像 (WSI) 进行分类。 用于肿瘤分类的深度学习方法依赖于数字病理学,其中整个组织切片被成像和数字化。生成的 WSI 具有高分辨率,大约为 200,000 x 100,000 像素。WSI 通常以多分辨率格式存储,以促进图像的高效显示、导航和处理。
167 0
|
机器学习/深度学习 算法 数据挖掘
基于支持向量机的目标检测与识别
基于支持向量机的目标检测与识别
244 0
|
机器学习/深度学习 编解码 算法
优于GAN、带上口罩都能还原,用去噪扩散概率模型极限修复图像,效果「真」极了
优于GAN、带上口罩都能还原,用去噪扩散概率模型极限修复图像,效果「真」极了
243 0
|
机器学习/深度学习 传感器 算法
【图像检测】基于CNN深度学习实现图像视网膜病变检测附matlab代码
【图像检测】基于CNN深度学习实现图像视网膜病变检测附matlab代码
|
机器学习/深度学习 传感器 算法
【交通标志识别】基于HOG特征结合BP神经网络实现交通标志识别附matlab代码
【交通标志识别】基于HOG特征结合BP神经网络实现交通标志识别附matlab代码

热门文章

最新文章