目录
选题意义背景
血液系统疾病是当今世界上最常见的疾病类型之一,据世界卫生组织(WHO)统计,全球每年有数以百万计的人受到各类血液疾病的影响。血细胞作为血液的重要组成部分,其数量和形态特征是医生诊断血液疾病的重要依据。传统的血细胞分析主要依靠人工在显微镜下进行观察和计数,这一过程耗时耗力,且容易受到主观因素的影响,导致结果不够准确和一致。
随着医学技术的发展,自动化血液分析仪器逐渐应用于临床实践,如血细胞分析仪、流式细胞仪等。这些仪器虽然大大提高了血液检测的效率,但在面对复杂的血细胞图像,特别是当血细胞存在重叠、变形或异常时,其检测准确率往往难以满足临床需求。此外,高端血液分析仪器价格昂贵,维护成本高,在基层医疗机构的普及程度有限。

近年来,深度学习技术在计算机视觉领域取得了突破性进展,为医学图像分析提供了新的思路和方法。卷积神经网络(CNN)在图像分类、目标检测和语义分割等任务中展现出优异的性能,为实现血细胞的自动分析提供了可能。然而,血细胞分析仍面临诸多挑战:
-
血细胞分布复杂性:在显微镜下的血细胞图像中,细胞分布密集且不规则,背景噪声较多,这增加了图像分割和目标检测的难度。
-
红细胞高度重叠:红细胞在血液样本中数量最多,且常常出现高度重叠的情况,这使得传统的计数方法容易出现漏检或重复计数。
-
白细胞形态多样性:白细胞分为多种类型,如中性粒细胞、淋巴细胞、单核细胞、嗜酸性粒细胞和嗜碱性粒细胞等,它们在形态上存在一定差异,但也有相似之处,给分类识别带来困难。
-
图像质量影响因素多:血细胞图像的质量受多种因素影响,如染色方法、显微镜分辨率、样本制备等,这些因素可能导致图像对比度低、细节模糊等问题。
面对这些挑战,如何设计高效、准确的血细胞分析算法成为研究热点。本项目旨在探索基于深度学习的血细胞分析新方法,通过结合最新的分割和检测技术,解决传统方法在处理复杂血细胞图像时的局限性,为临床血液检测提供更加可靠的自动化工具。

本研究的成功不仅有助于提高血液检测的效率和准确性,还可以降低医疗成本,使自动化血液分析技术在基层医疗机构得到更广泛的应用。同时,本研究中提出的针对重叠目标检测的优化策略,也为其他领域的密集目标检测问题提供了参考和借鉴。
数据集
本项目使用的数据集主要来源于BCCD数据集。该数据集包含364张分辨率为640×480的血细胞显微镜图像,涵盖了红细胞和多种类型的白细胞。BCCD数据集是一个公开的血细胞图像数据集,由研究人员通过标准的血液涂片制备方法和光学显微镜拍摄获得。每张图像都是经过瑞特-吉姆萨染色处理的外周血涂片样本,这种染色方法可以清晰地区分红细胞和白细胞的不同结构,便于后续的分析和处理。

原始数据集以JPEG格式存储,每张图像的分辨率为640×480像素。为了满足深度学习模型的训练需求,研究人员将原始图像裁剪为512×512像素的子图像,以便更好地适应模型的输入要求。经过裁剪后的数据集规模有所增加,但保留了原始血细胞图像的关键特征。
在数据集中,血细胞主要分为两大类:
-
红细胞(RBC):数量最多,呈双凹圆盘状,无细胞核。在本研究中,为了提高检测准确率,我们将红细胞进一步细分为三个子类:
- 圆形红细胞:形状规则,呈标准圆形
- 椭圆形红细胞:形状略有变形,呈椭圆形
- 隐藏红细胞:由于高度重叠而被部分遮挡的红细胞
-
白细胞(WBC):根据形态特征分为五种类型:
- 中性粒细胞:细胞核呈分叶状,细胞质中有中性颗粒
- 淋巴细胞:细胞核大而圆,细胞质少
- 单核细胞:细胞核呈肾形或马蹄形,细胞质丰富
- 嗜酸性粒细胞:细胞质中有粗大的嗜酸性颗粒
- 嗜碱性粒细胞:细胞质中有嗜碱性颗粒,数量最少
表1展示了各类血细胞的形态特征概述:
| 细胞类型 | 形态特征 | 细胞核特征 | 细胞质特征 |
|---|---|---|---|
| 中性粒细胞 | 圆形 | 分叶状(2-5叶) | 含细小中性颗粒 |
| 淋巴细胞 | 圆形 | 大而圆,占细胞大部分 | 少,薄环状围绕核 |
| 单核细胞 | 圆形或不规则 | 肾形、马蹄形或扭曲折叠 | 丰富,灰蓝色 |
| 嗜酸性粒细胞 | 圆形 | 常分2叶 | 含粗大嗜酸性颗粒 |
| 嗜碱性粒细胞 | 圆形 | 不规则,常被颗粒掩盖 | 含粗大嗜碱性颗粒 |
数据标注
为了训练和评估模型,研究人员使用专业的图像标注工具对数据集进行了详细标注。具体标注过程如下:

-
对于分割任务,使用Labelme软件对每张图像中的白细胞和红细胞区域进行多边形标注,生成对应的JSON格式标注文件。
-
对于目标检测任务,使用Labelimg软件对ROI区域内的血细胞进行边界框标注,并指定对应的类别标签。标注格式采用Pascal VOC2007标准,便于后续与YOLOv5等目标检测框架对接。
数据分割策略
为了确保模型的训练效果和泛化能力,研究人员采用了标准的数据分割策略,将数据集按照6:2:2的比例划分为训练集、验证集和测试集。具体来说:
- 训练集:占总数据量的60%,用于模型的参数学习和优化
- 验证集:占总数据量的20%,用于调整模型超参数和监控训练过程中的过拟合情况
- 测试集:占总数据量的20%,用于评估模型的最终性能,确保结果的客观性
数据增强
为了扩充训练数据,提高模型的鲁棒性,研究人员对原始数据集进行了多种数据增强操作:
- 旋转:将图像按照不同角度进行旋转,模拟血细胞在不同方向上的分布情况
- 镜像翻转:对图像进行水平和垂直翻转,增加数据的多样性
- 缩放:对图像进行适当的缩放,使模型能够适应不同大小的血细胞
- 亮度和对比度调整:模拟不同光照条件下的血细胞图像
通过这些数据增强操作,原始数据集的样本数量从364张扩充到1200张,为后续的模型训练提供了充足的数据支持。对于检测任务,研究人员进一步将ROI图像扩充到2000张样本,确保各类血细胞都有足够的训练样本。
数据预处理
在将数据输入到深度学习模型之前,研究人员对图像进行了必要的预处理操作:
- 灰度转换:将彩色图像转换为灰度图像,减少计算量
- 归一化:将像素值归一化到[0,1]区间,加速模型收敛
- 去噪:使用高斯滤波等方法去除图像中的噪声
- 直方图均衡化:增强图像对比度,使血细胞边缘更加清晰
这些预处理操作有助于提高模型的训练效率和检测准确率,为后续的分割和检测任务奠定良好的基础。
项目功能介绍
本项目实现了一套完整的血细胞自动分析系统,主要功能包括图像预处理、区域分割、血细胞检测与分类、统计分析等模块。下面详细介绍各模块的功能:
图像预处理模块
该模块的主要功能是对输入的原始血细胞图像进行初步处理,提高图像质量,为后续的分析任务做准备。具体功能包括:
- 图像读取与格式转换:支持读取各种格式的血细胞图像,并转换为统一的内部表示格式
- 灰度转换与对比度增强:将彩色图像转换为灰度图像,并通过直方图均衡化等方法增强图像对比度
- 去噪处理:使用高斯滤波、中值滤波等方法去除图像中的噪声,使血细胞边缘更加清晰
- 尺寸调整:将图像调整为固定大小,以适应深度学习模型的输入要求
- 归一化:将像素值归一化到特定范围,加速模型训练和推理过程
区域分割模块
该模块是整个系统的关键环节之一,负责将复杂的血细胞图像分割成多个感兴趣区域(ROI)。具体功能包括:
- U-Net++分割网络:使用U-Net++深度学习模型对血细胞图像进行语义分割,区分白细胞、红细胞和背景区域
- 区域提取:根据分割结果,提取包含单个细胞或重叠细胞的感兴趣区域
- 两遍扫描法:采用两遍扫描算法对分割结果进行处理,确保准确提取每个ROI区域
- 区域特征计算:计算每个ROI区域的面积、周长、形状因子等特征,为后续的血细胞分类提供辅助信息
- 区域质量评估:对提取的ROI区域进行质量评估,过滤掉低质量的区域,提高后续检测的准确性
血细胞检测与分类模块
该模块负责对分割后的ROI区域进行血细胞检测和分类,是系统的核心功能模块。具体功能包括:
- YOLOv5检测网络:使用优化后的YOLOv5模型对ROI区域中的血细胞进行检测,输出边界框和类别置信度
- 红细胞精细分类:将红细胞细分为圆形红细胞、椭圆形红细胞和隐藏红细胞三个类别,提高检测准确率
- 白细胞分类识别:识别和分类五种类型的白细胞,包括中性粒细胞、淋巴细胞、单核细胞、嗜酸性粒细胞和嗜碱性粒细胞
- 自适应NMS阈值调节:根据ROI区域内细胞的分布情况,自适应地调整非极大值抑制(NMS)阈值,避免漏检或重复检测
- 形态学约束过滤:根据血细胞的形态学特征,对检测结果进行约束过滤,去除错误的检测框
统计分析模块
该模块对检测和分类结果进行统计分析,生成最终的血细胞分析报告。具体功能包括:
- 红细胞计数:统计图像中红细胞的总数,并区分不同类型红细胞的数量
- 白细胞计数与分类统计:统计各类白细胞的数量,并计算其在总白细胞中的百分比
- 红细胞形态学统计:分析红细胞的面积分布、长宽比分布等形态学特征
- 异常细胞检测:识别可能存在异常的血细胞,如大小异常、形态异常等
- 分析报告生成:生成包含各项统计指标的分析报告,支持导出为不同格式
算法 介绍
本项目的核心是结合了U-Net++分割网络和优化后的YOLOv5检测网络的深度学习算法。下面详细介绍相关算法的理论基础和技术原理。
U-Net++网络原理
U-Net++是在U-Net基础上改进的医学图像分割网络,通过引入深度监督和嵌套的跳跃连接,显著提高了分割精度。其核心原理包括:

U-Net++网络由编码器(下采样路径)和解码器(上采样路径)两部分组成,具有U形结构。编码器部分通过重复应用卷积和池化操作,逐渐减小特征图的空间尺寸,增加特征通道数,捕获图像的上下文信息。解码器部分则通过上采样和跳跃连接,逐渐恢复特征图的空间尺寸,同时融合编码器各层的特征信息,提高分割的准确性。

与U-Net不同的是,U-Net++在编码器和解码器之间引入了密集的嵌套跳跃连接,形成了更复杂的特征融合路径。这些连接允许低级特征和高级特征之间进行更充分的信息交换,有助于提高分割边界的准确性。
U-Net++引入了深度监督机制,即在解码器的不同层级添加分割输出头。这样,网络可以同时从多个尺度学习特征表示,并通过融合不同尺度的分割结果,获得更准确的分割边界。深度监督还有助于缓解梯度消失问题,加速网络收敛。
U-Net++采用了密集的特征融合策略,通过短连接和跳跃连接,将编码器各层的特征信息与解码器对应层的特征信息进行充分融合。这种融合策略不仅可以保留图像的细节信息,还能够结合上下文信息,提高分割的准确性。
YOLOv5检测网络原理
YOLOv5是目标检测领域的最新进展之一,通过一系列创新设计,实现了检测精度和速度的良好平衡。其核心原理包括:

YOLOv5网络主要由四部分组成:
- 输入端:包括Mosaic数据增强、自适应锚框计算等预处理操作
- Backbone:使用CSPDarknet53作为主干网络,提取图像特征
- Neck:采用FPN(特征金字塔网络)+PAN(路径聚合网络)结构,进行多尺度特征融合
- 输出端:生成目标边界框、类别概率和置信度分数

关键技术组件
- Focus结构:在Backbone的最前端,通过切片操作减少计算量,同时保持信息完整性
- CSP模块:跨阶段部分连接网络,通过将特征图分为两部分进行处理,降低计算量,提高特征提取能力
- SPP模块:空间金字塔池化,通过不同尺度的池化操作,增强网络对不同大小目标的适应能力
- BottleNeck层:采用1×1卷积降低通道数,然后通过3×3卷积进行特征提取,最后再通过1×1卷积恢复通道数,减少计算量
- FPN-PAN特征融合:FPN从上到下传递语义特征,PAN从下到上传递定位特征,两者结合提高了多尺度目标检测能力
YOLOv5使用CIoU(Complete IoU)作为边界框回归损失,结合置信度损失和分类损失,形成完整的损失函数。CIoU损失不仅考虑了边界框的重叠度,还考虑了中心点距离和长宽比,能够更准确地反映边界框的回归质量。
为了提高血细胞检测的准确性,特别是解决高度重叠红细胞的检测问题,本项目提出了三种优化策略:
-
根据红细胞的形态特征和分布情况,将红细胞细分为三个独立的类别:圆形红细胞、椭圆形红细胞和隐藏红细胞。这种细分类策略可以使YOLOv5网络更精确地学习不同类型红细胞的特征,提高检测准确率。

-
传统的NMS算法使用固定的阈值,难以适应不同ROI区域内血细胞分布的复杂性。本项目提出了一种自适应的NMS阈值调节算法,根据每个ROI区域内细胞的重叠程度,自动确定最佳的NMS阈值。该算法通过迭代不同的NMS阈值,观察未被检测框覆盖的红细胞区域("e"值)的变化,选择使"e"值趋于平缓的转折点作为最佳阈值。
-
根据血细胞的形态学特征,在面积、长宽比和占空比等方面对检测结果进行约束,过滤掉不符合形态学特征的错误检测框。具体约束条件包括:
-
- 重叠隐藏红细胞的检测框长宽比小于1.5
-
- 椭圆红细胞与圆形红细胞的检测框长宽比小于5.0
-
- 非重叠细胞的检测框面积不超过8800,占空比不大于0.94
这些形态学约束可以有效去除错误的检测框,进一步提高检测的准确性。
核心代码
U-Net++网络实现
U-Net++网络的核心结构,包括编码器、解码器以及密集的嵌套连接。与传统U-Net相比,U-Net++增加了更多的跳跃连接,使低级特征和高级特征能够进行更充分的融合。代码中还实现了深度监督机制,如果deep_supervision参数设置为True,网络会输出多个尺度的分割结果,否则只输出最终的分割结果。这种设计使网络能够从多个尺度学习特征表示,提高分割的准确性。U-Net++网络是本项目中用于血细胞区域分割的核心组件,下面介绍其关键代码实现:
class UNetPlusPlus(nn.Module):
def __init__(self, in_channels=3, out_channels=1, deep_supervision=False):
super(UNetPlusPlus, self).__init__()
self.deep_supervision = deep_supervision
# 编码器部分 - 下采样路径
self.stage1 = ConvBlock(in_channels, 64)
self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
self.stage2 = ConvBlock(64, 128)
self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)
self.stage3 = ConvBlock(128, 256)
self.pool3 = nn.MaxPool2d(kernel_size=2, stride=2)
self.stage4 = ConvBlock(256, 512)
self.pool4 = nn.MaxPool2d(kernel_size=2, stride=2)
# 最底层特征提取
self.stage5 = ConvBlock(512, 1024)
# 解码器部分 - 上采样路径与嵌套连接
self.up5 = UpConv(1024, 512)
self.conv5_1 = ConvBlock(512 + 512, 512)
self.up4_1 = UpConv(512, 256)
self.conv4_1 = ConvBlock(256 + 256, 256)
self.up4_2 = UpConv(512, 256)
self.conv4_2 = ConvBlock(256 + 256 + 256, 256)
self.up3_1 = UpConv(256, 128)
self.conv3_1 = ConvBlock(128 + 128, 128)
self.up3_2 = UpConv(256, 128)
self.conv3_2 = ConvBlock(128 + 128 + 128, 128)
self.up3_3 = UpConv(256, 128)
self.conv3_3 = ConvBlock(128 + 128 + 128 + 128, 128)
# 输出层
if self.deep_supervision:
self.final1 = nn.Conv2d(128, out_channels, kernel_size=1)
self.final2 = nn.Conv2d(128, out_channels, kernel_size=1)
self.final3 = nn.Conv2d(128, out_channels, kernel_size=1)
else:
self.final = nn.Conv2d(128, out_channels, kernel_size=1)
def forward(self, x):
# 编码器路径
x1 = self.stage1(x)
x2 = self.pool1(x1)
x2 = self.stage2(x2)
x3 = self.pool2(x2)
x3 = self.stage3(x3)
x4 = self.pool3(x3)
x4 = self.stage4(x4)
x5 = self.pool4(x4)
x5 = self.stage5(x5)
# 解码器路径与嵌套连接
d5 = self.up5(x5)
d5 = torch.cat((x4, d5), dim=1)
d5 = self.conv5_1(d5)
d4_1 = self.up4_1(d5)
d4_1 = torch.cat((x3, d4_1), dim=1)
d4_1 = self.conv4_1(d4_1)
d4_2 = self.up4_2(d5)
d4_2 = torch.cat((x3, d4_1, d4_2), dim=1)
d4_2 = self.conv4_2(d4_2)
d3_1 = self.up3_1(d4_1)
d3_1 = torch.cat((x2, d3_1), dim=1)
d3_1 = self.conv3_1(d3_1)
d3_2 = self.up3_2(d4_2)
d3_2 = torch.cat((x2, d3_1, d3_2), dim=1)
d3_2 = self.conv3_2(d3_2)
d3_3 = self.up3_3(d4_2)
d3_3 = torch.cat((x2, d3_1, d3_2, d3_3), dim=1)
d3_3 = self.conv3_3(d3_3)
# 深度监督输出
if self.deep_supervision:
out1 = self.final1(d3_1)
out2 = self.final2(d3_2)
out3 = self.final3(d3_3)
return [out1, out2, out3]
else:
out = self.final(d3_3)
return out
自适应NMS算法实现
自适应NMS阈值调节算法的核心逻辑。算法首先设置一个阈值范围(0.1到0.655),然后以0.01的步长迭代不同的NMS阈值。对于每个阈值,算法计算未被检测框覆盖的红细胞区域面积("e"值),并选择使"e"值最小的阈值作为最佳阈值。如果"e"值的变化较小,说明已经达到平缓区域,此时可以提前停止迭代。此外,对于单个红细胞的特殊情况,算法会强制使用较小的阈值(0.1),以避免冗余检测框的出现。为了解决高度重叠红细胞的检测问题,本项目实现了自适应NMS阈值调节算法,下面是其核心代码:
def adaptive_nms(detections, roi_image, min_threshold=0.1, max_threshold=0.655, step=0.01):
"""
自适应NMS阈值调节算法
参数:
detections: 原始检测结果,格式为[bboxes, scores, classes]
roi_image: 感兴趣区域图像
min_threshold: NMS最小阈值
max_threshold: NMS最大阈值
step: 阈值调整步长
返回:
best_detections: 最佳NMS阈值下的检测结果
best_threshold: 最佳NMS阈值
"""
bboxes, scores, classes = detections
# 计算红细胞区域的总面积作为参考
red_cell_area = calculate_red_cell_area(roi_image)
best_threshold = min_threshold
min_e_value = float('inf')
best_detections = None
# 迭代不同的NMS阈值
for threshold in np.arange(min_threshold, max_threshold, step):
# 应用当前阈值的NMS
current_detections = apply_nms(bboxes, scores, classes, threshold)
current_bboxes = current_detections[0]
# 计算未被检测框覆盖的红细胞区域面积(e值)
e_value = calculate_e_value(roi_image, current_bboxes, red_cell_area)
# 寻找使e值最小的阈值
if e_value < min_e_value:
min_e_value = e_value
best_threshold = threshold
best_detections = current_detections
# 检查e值是否趋于平缓
if threshold > min_threshold:
prev_e_value = calculate_e_value(roi_image, prev_bboxes, red_cell_area)
if abs(e_value - prev_e_value) < 0.01 * red_cell_area:
# e值变化较小,认为已经达到最佳阈值
break
prev_bboxes = current_bboxes
# 对于单个红细胞的特殊情况,使用较小的阈值
if len(best_detections[0]) <= 2 and best_threshold > 0.2:
best_threshold = 0.1
best_detections = apply_nms(bboxes, scores, classes, best_threshold)
return best_detections, best_threshold
def calculate_e_value(roi_image, bboxes, red_cell_area):
"""
计算未被检测框覆盖的红细胞区域面积(e值)
参数:
roi_image: 感兴趣区域图像
bboxes: 检测框坐标
red_cell_area: 红细胞区域总面积
返回:
e_value: 未被覆盖的区域面积
"""
# 创建检测框掩码
mask = np.zeros(roi_image.shape[:2], dtype=np.uint8)
for bbox in bboxes:
x1, y1, x2, y2 = map(int, bbox)
mask[y1:y2, x1:x2] = 1
# 计算红细胞区域的掩码
red_mask = create_red_cell_mask(roi_image)
# 计算未被覆盖的区域面积
covered_area = np.sum(red_mask * mask)
e_value = red_cell_area - covered_area
return e_value
形态学约束过滤实现
基于形态学特征的约束过滤算法。算法首先计算每个检测框的长宽比、面积和占空比等形态学特征,然后根据细胞类型应用不同的约束条件:
- 对于重叠隐藏红细胞,要求长宽比小于1.5
- 对于椭圆红细胞和圆形红细胞,要求长宽比小于5.0
- 对于非重叠细胞,要求面积不超过8800,且占空比不大于0.94
这些约束条件是基于大量血细胞样本的形态学统计分析得出的,可以有效过滤掉那些不符合血细胞形态学特征的错误检测框,进一步提高检测的准确性。为了进一步提高检测结果的准确性,本项目实现了基于形态学特征的约束过滤算法,下面是其核心代码:
def morphology_constraint_filter(detections, roi_image):
"""
基于形态学特征的检测结果约束过滤
参数:
detections: 原始检测结果,格式为[bboxes, scores, classes]
roi_image: 感兴趣区域图像
返回:
filtered_detections: 过滤后的检测结果
"""
bboxes, scores, classes = detections
filtered_bboxes = []
filtered_scores = []
filtered_classes = []
# 遍历每个检测框
for i, (bbox, score, cls) in enumerate(zip(bboxes, scores, classes)):
x1, y1, x2, y2 = map(int, bbox)
width = x2 - x1
height = y2 - y1
aspect_ratio = max(width, height) / min(width, height)
area = width * height
# 计算检测框的占空比
occupancy_ratio = calculate_occupancy_ratio(roi_image, bbox, cls)
# 根据细胞类型应用不同的约束条件
valid = True
if cls == 'hidden_red_cell': # 隐藏红细胞(重叠红细胞)
# 重叠红细胞的长宽比约束
if aspect_ratio > 1.5:
valid = False
elif cls == 'elliptical_red_cell' or cls == 'circular_red_cell': # 椭圆或圆形红细胞
# 非重叠红细胞的长宽比约束
if aspect_ratio > 5.0:
valid = False
# 非重叠红细胞的面积和占空比约束
if area > 8800 or occupancy_ratio > 0.94:
valid = False
# 检查是否满足所有约束条件
if valid:
filtered_bboxes.append(bbox)
filtered_scores.append(score)
filtered_classes.append(cls)
filtered_detections = [np.array(filtered_bboxes), np.array(filtered_scores), np.array(filtered_classes)]
return filtered_detections
def calculate_occupancy_ratio(roi_image, bbox, cls):
"""
计算检测框的占空比
参数:
roi_image: 感兴趣区域图像
bbox: 检测框坐标
cls: 细胞类别
返回:
occupancy_ratio: 占空比
"""
x1, y1, x2, y2 = map(int, bbox)
# 裁剪检测框区域
roi = roi_image[y1:y2, x1:x2]
# 转换为灰度图像
if len(roi.shape) == 3:
gray_roi = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
else:
gray_roi = roi
# 二值化图像
_, binary_roi = cv2.threshold(gray_roi, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)
# 计算前景像素比例(占空比)
total_pixels = binary_roi.size
foreground_pixels = np.sum(binary_roi > 0)
occupancy_ratio = foreground_pixels / total_pixels
return occupancy_ratio
重难点和创新点
研究难点
血细胞分布复杂性问题
血细胞在显微镜图像中分布密集且不规则,背景噪声较多,这给图像分割和目标检测带来了巨大挑战。传统的图像处理方法往往难以准确区分血细胞和背景,特别是当血细胞之间存在粘连或重叠时,分割效果更不理想。
解决方案:本项目采用U-Net++深度学习网络进行血细胞图像的语义分割,通过密集的嵌套跳跃连接和深度监督机制,有效提高了分割的准确性。U-Net++能够充分融合低级特征和高级特征,保留图像的细节信息,同时结合上下文信息,准确区分血细胞和背景区域。
红细胞高度重叠检测问题
红细胞在血液样本中数量最多,且常常出现高度重叠的情况,这使得传统的计数方法容易出现漏检或重复计数。高度重叠的红细胞在形态上与单个红细胞有很大差异,难以用统一的特征进行描述和识别。
解决方案:本项目提出了红细胞精细分类策略,将红细胞分为圆形红细胞、椭圆形红细胞和隐藏红细胞三个类别。这种细分类策略使YOLOv5网络能够更精确地学习不同类型红细胞的特征,特别是那些由于高度重叠而被部分遮挡的红细胞。同时,结合自适应NMS阈值调节算法,根据每个ROI区域内细胞的重叠程度,自动确定最佳的NMS阈值,避免漏检或重复检测。
白细胞分类识别问题
白细胞分为五种类型,它们在形态上存在一定差异,但也有相似之处,特别是在染色效果不佳或图像质量较差的情况下,分类识别更加困难。传统的机器学习方法通常需要手动设计特征,难以捕捉白细胞的复杂形态特征。
解决方案:本项目使用YOLOv5深度学习网络进行白细胞的检测和分类。YOLOv5通过多层卷积神经网络自动学习白细胞的深度特征表示,能够有效区分不同类型的白细胞。同时,通过数据增强和迁移学习等技术,进一步提高了模型的泛化能力和分类准确性。
检测框质量控制问题
在目标检测过程中,常常会出现一些错误的检测框,它们可能将多个重叠的红细胞识别为一个细胞,或者不能准确地标记细胞位置。这些错误的检测框具有较高的置信度,难以被传统的NMS算法排除。
解决方案:本项目提出了基于形态学特征的约束过滤算法,根据血细胞的形态学特征,在面积、长宽比和占空比等方面对检测结果进行约束,过滤掉不符合形态学特征的错误检测框。这种方法能够有效提高检测结果的准确性和可靠性。
创新点
两阶段分析架构
本项目提出了一种两阶段的血细胞分析架构,将复杂的血细胞分析任务分解为区域分割和目标检测两个相对简单的子任务。第一阶段使用U-Net++对血细胞图像进行分割,提取包含单个细胞或重叠细胞的ROI区域;第二阶段使用优化后的YOLOv5对ROI区域中的血细胞进行检测和分类。这种两阶段架构有效降低了问题的复杂度,提高了分析的准确性。
与传统的端到端方法相比,两阶段架构具有以下优势:
- 可以更好地处理血细胞分布复杂的情况
- 通过ROI提取,将复杂的血细胞图像简单化,便于后续检测
- 两个阶段可以独立优化,提高整体性能
红细胞精细分类策略
传统的血细胞检测方法通常将所有红细胞视为同一类别,难以处理形态多样的红细胞,特别是那些由于高度重叠而形态发生变化的红细胞。本项目提出了红细胞精细分类策略,根据红细胞的形态特征和分布情况,将其细分为圆形红细胞、椭圆形红细胞和隐藏红细胞三个类别。
这种细分类策略的创新之处在于:
- 充分考虑了红细胞形态的多样性
- 特别关注了由于高度重叠而被部分遮挡的红细胞
- 使YOLOv5网络能够更精确地学习不同类型红细胞的特征
- 显著提高了红细胞检测的准确率,特别是对于高度重叠的红细胞
自适应NMS阈值调节算法
传统的NMS算法使用固定的阈值,难以适应不同ROI区域内血细胞分布的复杂性。对于单个红细胞,较低的阈值可以去除重复的检测框;而对于高度重叠的红细胞,较高的阈值则可以避免血细胞的漏检。
本项目提出的自适应NMS阈值调节算法具有以下创新点:
- 动态调整NMS阈值,适应不同ROI区域内血细胞分布的复杂性
- 通过迭代不同的阈值,观察未被检测框覆盖的红细胞区域("e"值)的变化,自动确定最佳阈值
- 对于不同类型的ROI区域,能够选择最适合的NMS阈值
- 有效解决了高度重叠红细胞的检测问题,同时避免了冗余检测框的出现
形态学约束过滤方法
为了解决错误检测框的问题,本项目提出了基于形态学特征的约束过滤方法,根据血细胞的形态学特征,在面积、长宽比和占空比等方面对检测结果进行约束。
这种方法的创新之处在于:
- 结合了血细胞的先验形态学知识
- 能够有效过滤掉那些具有很高置信分数但检测错误的检测框
- 针对不同类型的血细胞,应用不同的约束条件
- 进一步提高了检测结果的准确性和可靠性
总结
本项目成功实现了一种基于U-Net++和YOLOv5的血细胞自动分析算法,通过创新的两阶段架构和多种优化策略,有效解决了血细胞分析中的关键挑战。
-
通过U-Net++网络对血细胞图像进行分割,提取包含单个细胞或重叠细胞的ROI区域,有效解决了血细胞分布复杂的问题。U-Net++的密集嵌套跳跃连接和深度监督机制,使其能够准确区分血细胞和背景区域,为后续的检测任务奠定了良好的基础。
-
对YOLOv5检测网络进行了多项优化,包括红细胞精细分类、自适应NMS阈值调节和形态学约束。这些优化策略有效提高了高度重叠红细胞的检测准确率,解决了传统方法在处理重叠目标时的局限性。红细胞精细分类使网络能够更精确地学习不同类型红细胞的特征;自适应NMS阈值调节根据每个ROI区域的特点动态调整参数;形态学约束则进一步过滤了错误的检测框。
当然,本研究还存在一些局限性和可以改进的地方。例如,我们只对正常的血细胞进行了检测,没有考虑在临床上因病变而产生形态变化的变异细胞;我们的模型主要适用于特定类型的血细胞图像,还需要进一步提高其泛化能力;在医学领域,任何的误差都可能会影响医生对患者病情的判断与治疗,因此如何进一步提高模型的准确率仍是一个重要的研究方向。
参考文献
[1] Dong N, Feng Q, Zhai M, et al. A novel feature fusion based deep learning framework for white blood cell classification[J]. Journal of Ambient Intelligence and Humanized Computing, 2022, 13(6): 2731-2743.
[2] Wang G, Zhao T, Fang Z, et al. Experimental evaluation of deep learning method in reticulocyte enumeration in peripheral blood[J]. International Journal of Laboratory Hematology, 2021, 43(4): 597-601.
[3] Nardo-Marino A, Braunstein T H, Petersen J, et al. Automating pitted red blood cell counts using deep neural network analysis: a new method for measuring splenic function in sickle cell anaemia[J]. Frontiers in Physiology, 2022, 13: 828324.
[4] Zhou Y, Wang Y, Wu J, et al. ErythroidCounter: an automatic pipeline for erythroid cell detection, identification and counting based on deep learning[J]. Multimedia Tools and Applications, 2022, 81(21): 30337-30353.
[5] Tessema A W, Mohammed M A, Simegn G L, et al. Quantitative analysis of blood cells from microscopic images using convolutional neural network[J]. Medical & Biological Engineering & Computing, 2021, 59(1): 143-152.
[6] Jiang N, Yu F. A cell counting framework based on random forest and density map[J]. Applied Sciences, 2020, 10(23): 8346.
[7] Chowdhury A B, Roberson J, Hukkoo A, et al. Automated complete blood cell count and malaria pathogen detection using convolution neural network[J]. IEEE Robotics and Automation Letters, 2020, 5(2): 1047-1054.
252



被折叠的 条评论
为什么被折叠?



