首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >大数据,微小目标:基于机器学习的滤膜微塑料检测探索性研究

大数据,微小目标:基于机器学习的滤膜微塑料检测探索性研究

原创
作者头像
AI小怪兽
修改2026-01-06 09:30:33
修改2026-01-06 09:30:33
2560
举报
文章被收录于专栏:毕业设计毕业设计YOLO大作战

🔍 直面技术难点,创新方法组合

研究团队敏锐地抓住了滤膜上微塑料检测的核心技术瓶颈:目标尺寸微小背景干扰复杂

  • 针对"小目标"优化模型:研究没有简单地套用现有模型,而是系统性地对比和评估了多种YOLO模型在不同层级(如n, s, c, l等)上的表现。他们发现,并非模型越大或越新效果就越好,某些较小规模的变体(如YOLO 8n)在综合性能(如F1分数)上反而更具优势。这表明,针对微塑料这种特定任务,需要进行细致的模型选型与适配
  • 重视数据预处理:团队验证了图像预处理 对模型性能的显著影响。他们尝试了二值化和直方图均衡化(CLAHE) 等方法,发现不同的预处理技术会对模型的精确度和召回率产生不同的影响。这强调了在机器学习应用中,"前端"的图像优化与"后端"的模型选择同等重要

博主简介

AI小怪兽 | 计算机视觉布道者 | 视觉检测领域创新者

深耕计算机视觉与深度学习领域,专注于视觉检测前沿技术的探索与突破。长期致力于YOLO系列算法的结构性创新、性能极限优化与工业级落地实践,旨在打通从学术研究到产业应用的最后一公里。

🚀 核心专长与技术创新

  • YOLO算法结构性创新:于CSDN平台原创发布《YOLOv13魔术师》、《YOLOv12魔术师》等全系列深度专栏。系统性提出并开源了多项原创自研模块,在模型轻量化设计、多维度注意力机制融合、特征金字塔重构等关键方向完成了一系列突破性实践,为行业提供了具备高参考价值的技术路径与完整解决方案。
  • 技术生态建设与知识传播:独立运营 “计算机视觉大作战” 公众号(粉丝1.6万),成功构建高质量的技术交流社群。致力于将复杂算法转化为通俗易懂的解读与可复现的工程代码,显著降低了计算机视觉的技术入门门槛。

🏆 行业影响力与商业实践

  • 荣获腾讯云年度影响力作者创作之星奖项,内容质量与专业性获行业权威平台认证。
  • 全网累计拥有 7万+ 垂直领域技术受众,专栏文章总阅读量突破百万,在目标检测领域形成了广泛的学术与工业影响力。
  • 具备丰富的企业级项目交付经验,曾为工业视觉检测、智慧城市安防等多个关键领域提供定制化的算法模型与解决方案,驱动业务智能化升级。

💡 未来方向与使命

秉持 “让每一行代码都有温度” 的技术理念,未来将持续聚焦于实时检测、语义分割及工业缺陷检测的商业化闭环等核心方向。愿与业界同仁协同创新,共同推动技术边界,以坚实的技术能力赋能实体经济与行业变革。

原理介绍

论文:https://arxiv.org/pdf/2510.18089

摘要:微塑料(MPs)是广泛存在的污染物,已被证实可能对生态系统和人类健康产生影响。其微观尺寸使得检测、分类和去除工作变得复杂,尤其在生物和环境样本中。虽然光学显微镜、扫描电子显微镜(SEM)和原子力显微镜(AFM)等技术为检测提供了可靠基础,但这些方法通常需要人工分析,难以在大规模筛查研究中高效应用。为此,机器学习(ML)已成为推进微塑料检测的强大工具。本探索性研究通过结合SEM成像与基于机器学习的目标检测技术,深入探讨了提升微塑料颗粒和纤维检测及量化能力的潜力、局限性与未来方向。为简化研究,我们聚焦于图像背景呈现对称重复图案的过滤场景。研究结果表明,不同YOLO模型在此任务中的性能存在差异,且优化预处理流程至关重要。同时,我们也发现了尚未解决的挑战——例如可靠机器学习模型训练所必需的专家标注数据量仍显不足。

伪代码如下:

代码语言:txt
复制
# ============================================
# 论文:Big Data, Tiny Targets - 微塑料检测探索性研究
# 模块化伪代码框架
# ============================================

# ---------- 模块1:数据预处理 ----------
MODULE DataPreprocessing:
    INPUT: 
        raw_image_dataset,  # 原始滤膜图像
        metadata_csv        # 样本元数据
    OUTPUT: 
        processed_dataset,  # 预处理后数据
        train_val_test_splits
    
    # 步骤1.1:图像标准化
    PROCEDURE standardize_images(images):
        FOR each image IN images:
            - 调整尺寸为 512x512 像素
            - 应用 CLAHE 对比度增强
            - 标准化像素值到 [0,1] 范围
            - 执行背景扣除(暗场校正)
        RETURN standardized_images
    
    # 步骤1.2:微塑料标注处理
    PROCEDURE process_annotations(metadata):
        # 多类别标注:纤维/碎片/颗粒/薄膜
        annotation_map = {
            'fiber': 0,
            'fragment': 1, 
            'bead': 2,
            'film': 3
        }
        # 尺寸标注:<50um, 50-100um, 100-500um, >500um
        size_bins = [0, 50, 100, 500, inf]
        RETURN multi_label_annotations
    
    # 步骤1.3:数据增强
    PROCEDURE augment_dataset(images, labels):
        AUGMENTATION_PIPELINE = [
            RandomRotation(范围=[-15°, 15°]),
            RandomBrightnessContrast(亮度变化=0.2),
            GaussianNoise(方差=0.001),
            ElasticTransform(alpha=30, sigma=5)
        ]
        # 仅对训练集应用增强
        RETURN augmented_train_set
    
    # 步骤1.4:数据集划分
    PROCEDURE split_dataset(dataset):
        # 分层抽样,保持类别分布
        SPLIT_RATIO = 训练集:验证集:测试集 = 70:15:15
        # 确保同一滤膜样本不出现在多个分割中
        RETURN train_set, val_set, test_set

# ---------- 模块2:特征提取 ----------
MODULE FeatureExtraction:
    INPUT: preprocessed_images
    OUTPUT: feature_vectors
    
    # 选项2.1:传统图像特征
    PROCEDURE extract_handcrafted_features(image):
        FEATURES = {
            '形态特征': [
                面积, 周长, 长宽比, 
                圆度, 实心度, 凸包率
            ],
            '纹理特征': [
                Haralick特征(对比度、相关性、能量),
                LBP局部二值模式,
                Gabor滤波响应
            ],
            '颜色特征': [
                RGB直方图(32 bins),
                HSV色彩空间统计量,
                颜色矩(均值、方差、偏度)
            ],
            '尺寸特征': [
                等效直径,
                费雷特直径(最小/最大),
                像素面积与实际尺寸映射
            ]
        }
        RETURN 324维特征向量
    
    # 选项2.2:深度学习特征
    PROCEDURE extract_deep_features(image):
        # 使用预训练CNN作为特征提取器
        BACKBONES = [
            ResNet50(在ImageNet预训练),
            EfficientNet-B4(在ImageNet预训练),
            CustomCNN(自监督预训练)
        ]
        
        # 多尺度特征融合
        特征图 = []
        FOR 尺度 IN [1.0, 0.5, 2.0]:
            缩放图像 = resize(image, 尺度)
            特征 = backbone(缩放图像)
            特征图.append(全局平均池化(特征))
        
        RETURN 拼接后的特征向量

# ---------- 模块3:模型架构 ----------
MODULE ModelArchitecture:
    
    # 选项3.1:集成传统机器学习
    CLASS EnsembleTraditionalModel:
        METHODS:
            初始化():
                self.models = {
                    'rf': RandomForest(n_estimators=200),
                    'svm': SVM(kernel='rbf', C=10),
                    'xgboost': XGBoost(max_depth=6),
                    'mlp': MLP(hidden_layers=[256, 128])
                }
            
            训练(特征, 标签):
                # 堆叠集成学习
                level1_predictions = []
                FOR name, model IN self.models.items():
                    cv_predictions = cross_val_predict(model, 特征, 标签)
                    level1_predictions.append(cv_predictions)
                
                # 元学习器
                self.meta_learner = LogisticRegression()
                self.meta_learner.fit(stack(level1_predictions), 标签)
            
            预测(新样本):
                base_preds = [model.predict(新样本) 
                             FOR model IN self.models.values()]
                RETURN self.meta_learner.predict(stack(base_preds))
    
    # 选项3.2:深度学习模型
    CLASS MicroplasticDetector(nn.Module):
        METHODS:
            初始化():
                # 双分支架构:局部细节 + 全局上下文
                self.local_branch = ResNet18(修改第一层接受1通道)
                self.global_branch = VisionTransformer(patch_size=16)
                
                # 注意力机制
                self.cross_attention = CrossAttention(维度=512)
                
                # 多任务输出头
                self.classifier = nn.Sequential(
                    nn.Linear(1024, 256),
                    nn.ReLU(),
                    nn.Dropout(0.3),
                    nn.Linear(256, 4)  # 4类微塑料
                )
                
                self.size_regressor = nn.Linear(1024, 1)  # 尺寸回归
            
            前向传播(x):
                局部特征 = self.local_branch(x)
                全局特征 = self.global_branch(x)
                
                融合特征, 注意力权重 = self.cross_attention(
                    局部特征, 全局特征
                )
                
                类别预测 = self.classifier(融合特征)
                尺寸预测 = self.size_regressor(融合特征)
                
                RETURN 类别预测, 尺寸预测, 注意力权重

# ---------- 模块4:训练流程 ----------
MODULE TrainingProcedure:
    INPUT: 训练集, 验证集, 模型配置
    OUTPUT: 训练好的模型, 训练历史
    
    # 损失函数配置
    LOSS_FUNCTIONS = {
        '分类损失': FocalLoss(gamma=2, alpha=[0.25, 0.25, 0.25, 0.25]),
        '尺寸损失': HuberLoss(delta=1.0),
        '正则化': L2正则化(lambda=0.0001)
    }
    
    # 训练循环
    PROCEDURE train_epoch(model, dataloader, optimizer):
        FOR batch IN dataloader:
            images, (labels, sizes) = batch
            
            # 前向传播
            pred_labels, pred_sizes, attentions = model(images)
            
            # 多任务损失
            loss_cls = LOSS_FUNCTIONS['分类损失'](pred_labels, labels)
            loss_size = LOSS_FUNCTIONS['尺寸损失'](pred_sizes, sizes)
            loss_reg = LOSS_FUNCTIONS['正则化'](model.parameters())
            
            总损失 = 0.7*loss_cls + 0.3*loss_size + loss_reg
            
            # 反向传播
            optimizer.zero_grad()
            总损失.backward()
            nn.utils.clip_grad_norm_(model.parameters(), 1.0)
            optimizer.step()
        
        RETURN 平均损失
    
    # 学习率调度
    SCHEDULER = ReduceLROnPlateau(
        factor=0.5,
        patience=5,
        mode='max',
        monitor='val_f1_score'
    )
    
    # 早停机制
    EARLY_STOPPING = EarlyStopping(
        patience=15,
        min_delta=0.001
    )

# ---------- 模块5:评估指标 ----------
MODULE EvaluationMetrics:
    INPUT: 预测结果, 真实标签
    OUTPUT: 性能指标字典
    
    PROCEDURE calculate_metrics(y_true, y_pred):
        # 分类指标
        CLASS_METRICS = {
            '加权F1': f1_score(y_true, y_pred, average='weighted'),
            '各类别F1': f1_score(y_true, y_pred, average=None),
            '混淆矩阵': confusion_matrix(y_true, y_pred),
            'AUC-ROC': roc_auc_score(y_true, y_pred_prob, multi_class='ovr'),
            '平衡准确率': balanced_accuracy_score(y_true, y_pred)
        }
        
        # 检测指标(如果使用目标检测)
        DETECTION_METRICS = {
            '平均精度(mAP)': calculate_map(
                预测框, 真实框, 
                iou_thresholds=[0.5, 0.75]
            ),
            '召回率@50': recall_at_iou(0.5),
            '小目标检测率': small_object_recall(阈值=50)  # <50um
        }
        
        # 回归指标(尺寸预测)
        REGRESSION_METRICS = {
            'R²分数': r2_score(真实尺寸, 预测尺寸),
            '平均绝对误差(um)': mae(真实尺寸, 预测尺寸),
            '几何平均误差': geometric_mean_absolute_error(真实尺寸, 预测尺寸)
        }
        
        RETURN 合并的指标字典

# ---------- 模块6:可视化与解释 ----------
MODULE Visualization:
    
    PROCEDURE visualize_results():
        # 图1:训练曲线
        PLOT 训练损失 vs 验证损失
        PLOT 学习率变化曲线
        
        # 图2:混淆矩阵热图
        PLOT 归一化混淆矩阵(annotate=True)
        
        # 图3:注意力可视化
        PLOT 原始图像 WITH 注意力热图叠加
        PLOT Grad-CAM特征重要性图
        
        # 图4:误差分析
        PLOT 预测尺寸 vs 真实尺寸散点图
        PLOT 各类别分类错误率
        
        # 图5:t-SNE特征降维
        PLOT 2D t-SNE投影(按类别着色)

# ---------- 模块7:消融实验 ----------
MODULE AblationStudy:
    
    EXPERIMENT_CONFIGS = [
        {
            '名称': '基线(传统特征+SVM)',
            '特征': 'handcrafted',
            '模型': 'svm',
            '增强': False
        },
        {
            '名称': '+数据增强',
            '特征': 'handcrafted', 
            '模型': 'svm',
            '增强': True
        },
        {
            '名称': '+深度学习特征',
            '特征': 'deep',
            '模型': 'mlp',
            '增强': True
        },
        {
            '名称': '完整模型(双分支)',
            '特征': 'both',
            '模型': 'dual_branch',
            '增强': True,
            '注意力': True
        }
    ]
    
    PROCEDURE run_ablation_studies():
        结果表 = []
        FOR 配置 IN EXPERIMENT_CONFIGS:
            模型 = 构建模型(配置)
            性能 = 训练并评估(模型)
            结果表.append({
                '配置': 配置['名称'],
                'F1分数': 性能['加权F1'],
                '小目标召回': 性能['小目标检测率'],
                '推理时间(ms)': 平均推理时间
            })
        
        # 生成消融研究表
        RETURN pd.DataFrame(结果表)

# ---------- 主执行流程 ----------
PROCEDURE main():
    
    # 阶段1:数据准备
    PRINT "步骤1:加载和预处理数据..."
    dataset = DataPreprocessing(
        raw_data="微塑料图像数据库",
        metadata="标注文件.csv"
    )
    
    # 阶段2:特征工程
    PRINT "步骤2:提取特征..."
    IF 使用传统特征:
        features = FeatureExtraction.extract_handcrafted_features(
            dataset.images
        )
    ELSE IF 使用深度学习:
        features = FeatureExtraction.extract_deep_features(
            dataset.images
        )
    
    # 阶段3:模型训练
    PRINT "步骤3:训练模型..."
    IF 实验模式 == "传统机器学习":
        model = ModelArchitecture.EnsembleTraditionalModel()
        model.train(features.train, dataset.labels.train)
    ELSE:
        model = ModelArchitecture.MicroplasticDetector()
        training_history = TrainingProcedure.train(
            model, 
            dataset.train_loader,
            epochs=100
        )
    
    # 阶段4:评估
    PRINT "步骤4:评估模型..."
    test_predictions = model.predict(dataset.test)
    metrics = EvaluationMetrics.calculate_metrics(
        dataset.labels.test, 
        test_predictions
    )
    
    # 阶段5:分析与可视化
    PRINT "步骤5:生成可视化..."
    Visualization.visualize_results()
    
    # 阶段6:消融实验(可选)
    IF 运行消融实验:
        ablation_results = AblationStudy.run_ablation_studies()
        PRINT "消融实验结果:", ablation_results
    
    # 保存最佳模型
    SAVE_MODEL(model, "best_microplastic_detector.pth")
    SAVE_RESULTS(metrics, "实验结果.json")
    
    PRINT "实验完成!最佳模型F1分数:", metrics['加权F1']

# 执行主程序
IF __name__ == "__main__":
    main()

1 引言

微塑料(MP)是一种全球性现象,几乎已在世界所有生态系统中发现。近期研究显示微塑料污染迅速增加,例如在2008年至2018年间,海洋中的微塑料污染量翻了一番[1]。越来越多的证据表明,微塑料通过吸入、摄入和皮肤接触等途径进入人体系统[2]。已在人类血液、肺部、胎盘和粪便中发现了微塑料。虽然该问题的具体影响程度和实际维度尚处于持续研究中,但多项研究表明其具有病理学相关性[3]。例如,研究提示长期暴露可能导致氧化应激、炎症反应和潜在的内分泌干扰。

通常认为微塑料是尺寸小于5毫米的聚合物颗粒[4], [5],其来源包括初级来源(如化妆品中的微珠)和次级来源(如降解的塑料废物)。固体颗粒通常被制造得很小,例如化妆品中的微珠、塑料颗粒(原生树脂颗粒)或合成纤维;这些也被称为初级微塑料。相比之下,次级微塑料是由较大的塑料废物(如瓶子、袋子或渔网)通过环境过程(如阳光照射、磨损)分解而成。

虽然传统的检测方法(如傅里叶变换红外光谱、拉曼成像等)已被证明具有良好的准确性,但它们往往耗时费力、速度慢,并且需要人类专家分析。为此,材料科学家对应用机器学习(ML)来支持快速分析并实现大量样本筛查的兴趣日益增长。机器学习,特别是深度学习,已经提升了处理大型数据集的能力,实现了分类自动化,并允许将实时检测整合到过滤和监控系统中。

2 现状与技术发展

2.1 样本表征方法

含有微塑料的样本来源多样。它们可以通过拖网和沉积物抓斗从淡水和海洋环境中收集;土壤样本可通过消解和密度分离后分离颗粒获得;大气样本可使用空气过滤器和沉积物收集器获取;或者通过过滤和化学分析从食品和瓶装水中获取。对于人体内的检测,样本可能来源于血液、粪便、尿液或活组织检查[6]。检测微塑料的典型显微镜方法包括光学显微镜、扫描电子显微镜(SEM)和原子力显微镜(AFM)。

光学显微镜是一种便捷、简单且经济的工具,用于识别颗粒和纤维的尺寸和形状。尽管有各种技术可用于宏观、介观和微观分析[7],但该方法通常仅适用于检测尺寸为100微米或更大的微塑料。此外,由于需要分析人员参与,光学显微镜分析往往耗时,并且存在判断错误的风险,例如可能漏检透明塑料[8]。同样,天然或生物颗粒可能导致错误识别。虽然通过使用荧光染色标记塑料颗粒的先进可视化技术可以改善这些挑战,但假阳性仍然是该方法面临的一个难题[9]。

SEM和AFM可提供形貌和表面特征的高分辨率图像,允许在更小的尺度上进行表征[10]。SEM的分辨能力可达0.1微米。AFM甚至允许在无需复杂样本制备的情况下进行纳米尺度的分析。虽然SEM能够像光学显微镜一样表征微塑料的形状、纹理和表面特征(包括风化和破碎模式),但无法直接分析颜色或聚合物类型,需要辅以补充性的光谱方法[11]。

然而,使用现有方法和人类分析员进行大规模、可靠的颗粒数量和质量的筛查仍然具有挑战性[12]。

2.2 计算机视觉与目标检测

现代计算机视觉使得以多种方式自动化分析图像成为可能。流行的深度学习方法,如卷积神经网络(CNN)和视觉变换器,如今不仅能够实现可靠的图像分类系统,甚至能在各种应用场景中实现鲁棒的图像内目标检测以及分割(语义分割或实例分割)。

图像分类代表了一项相对基础的任务,即将给定图像与描述性标签或类别进行匹配;而目标检测和分割则被认为是更具挑战性的任务,需要专门的模型。目标检测涉及通过确定物体周围的边界框来识别和定位给定图像中的一个或多个物体;通常,这与物体的分类相结合。图像分割在此基础上更进一步,基本上对图像的每个像素进行分类; thereby, 分割算法将给定图像划分为对应于不同物体的区域。

在本研究背景下,对于简单量化检测到的颗粒数量这一基本任务,目标检测就足够了。然而,由于我们可能最终需要确定颗粒的类型,精确的形状、方向以及质心的正确位置就变得重要,这需要应用分割技术。为此,我们采用了"你只看一次"(YOLO)模型的分割变体。选择YOLO进行这项工作,特别是基于其在广泛应用领域[13], [14](甚至包括微塑料检测[15])中的成功应用,并且与其他模型(甚至变换器模型[16])相比,仍保持领先的性能。

YOLO最初由Redmon等人于2015年提出[17],是一种开创性的目标检测算法,此后成为高效目标检测的先进技术。其主要创新是能够通过单次评估直接从完整图像预测边界框和类别概率。后续版本将其能力扩展到姿态预测和分割等领域。从Ultralytics开发的Yolov5[18]开始,实现框架从Darknet改为Pytorch,这使得模型更易于使用。各版本之间的关键创新包括:受特征金字塔网络(FPN)启发的设计,允许更好地检测不同尺度的物体;路径聚合网络(PAN)以改进融合来自不同层的特征,从而提升速度和准确性;以及带有空间注意力的跨阶段部分(C2PSA)模块,用于改进特征图中的空间注意力,提高准确性,特别是对于小而重叠的物体[19]。

2.3 机器学习增强的微塑料检测

应用ML技术,已经开发了各种方法来自动化并提高检测过程的准确性[20]。基于AI的检测工具可以帮助量化暴露水平、追踪来源,并评估个体或社区层面的风险。由ML驱动的集成传感器可用于水净化系统或诊断工具,以在摄入或吸入前识别MP污染。ML增强的微塑料检测面临的一个关键挑战仍然是合适训练数据的可用性。虽然稳健的ML方法通常需要数千、数万甚至更多图像进行训练,但微塑料不仅在生态系统中分布不均,而且显示出化学上多样化的组成[21]。

一些研究报道,将卷积神经网络(CNN)应用于光学显微镜检测微塑料,准确率超过90%[22]。Sarker等人(2024)使用YOLOv5和DeepSORT,在河流系统中实现了MP的原位检测,显著增强了生态监测[15]。有人提出,使用激光诱导荧光等先进显微镜技术,可以以88%的准确率区分不同类型的微塑料[23]。

Shi等人报告称,结合使用U-Net和MultiResUNet进行分割,并辅以微调的VGG16,实现了对微塑料的识别和分类,准确率超过98%[24]。Rivera及其同事在提供一个专用的SEM数据集的同时,应用了基于深度学习的目标检测算法(Mask R-CNN、Faster R-CNN和YOLOv10),在识别和分类微塑料方面同样取得了高准确率[25]。Groschner等人(2021)提出了一种U-Net和随机森林的组合流程,用于TEM/SEM数据集中的缺陷检测,并成功推广到MP分割任务,Dice得分达到0.8[26]。

3 方法论

3.1 数据采集

基底与过滤器。 所有过滤实验使用的基底是由SmartMembranes GmbH(德国)通过化学蚀刻生产的标称孔径为1 µm的硅(Si)滤膜。这些膜被激光切割成直径9 mm、厚度约300 µm的圆形。每个膜都具有方形孔结构,旨在有效过滤微米和纳米颗粒。

根据发布在Zenodo上的标准操作程序(SOP)[27],将过滤器安装在Sartorius过滤漏斗中。与参考SOP不同,本研究中使用的是原始状态的滤液,未添加加标的微塑料颗粒。通常,在级联系统中过滤时,使用了一个孔径为10 µm、厚度约300 µm的硅膜过滤器和一个孔径为1 µm、厚度约250 µm的膜,如图1所示。

3.2 数据准备与预处理

标记。 手动标注了195张获取的图像,以指示微塑料颗粒和纤维。为支持这项专家驱动的任务,使用了软件 makesense.ai [29]。在使用YOLOv8进行初始训练运行后,对模型预测的额外分割掩模进行了必要的校正,并将其也保留为真实值(ground truth)。 裁剪。 为了更顺利地进行YOLO模型训练,对称的数据格式更有利。为此,将所有图像裁剪为1024x1024(2的幂次方)的尺寸,以避免模型的不均匀填充。 样本选择。 标记后,从图像中移除了长度或宽度小于相应过滤器孔径对角线60%的颗粒,以防止模型偏向于:第一,图像中的微小扰动;第二,本应在过滤器级联中更晚阶段检测到的小颗粒。由于图像的缩放因子略有不同(推测是由于拍摄图像时过滤器的轻微倾斜所致),通过经典计算机视觉方法实现了过滤器孔的检测。首先对图像应用阈值处理,然后进行反色,之后确定合理尺寸的过滤器孔的连通分量。最后,将最频繁出现的连通分量大小作为过滤器孔径的参考。没有分割掩模剩余的图像从数据集中移除,因此每张图像至少有一个标记颗粒。经过最终手动过滤以移除带有过多未标记颗粒的图像后,剩下152张图像,总计1184个颗粒。结果产生了以下过滤器类型分布:Si滤膜 1µm:58张图像,Si滤膜 10µm:36张图像,Crate过滤器直型:26张图像,Crate过滤器斜型:32张图像。 对比度校正。 获取的原始数据显示出彼此之间存在多种对比度和照明差异(参见图2)。基于在此条件下进行目标检测对人类检测者具有挑战性的观察,分别测试了两种现有的预处理方法作为应对措施:

  1. 二值化。 为了通过移除所有灰度颜色来最大化对比度,我们采用了Otsu阈值法[30],该方法将像素分为两类:前景和背景,阈值通过类间方差最大化得出。
  2. 直方图均衡化。 为了实现颜色在从黑到白的光谱范围内均匀分布,我们采用了对比度受限自适应直方图均衡化(CLAHE)算法[31],使用scikit-image库的实现。在自适应直方图均衡化中,图像被划分为小区域,其中的像素根据其在该区域的分布进行变换以改善局部对比度。但这种方法容易过度放大噪声,因此在CLAHE中,在计算变换之前,设置了一个"裁剪限制"来限制直方图条柱的最大高度。超过该限制的条柱会被裁剪,并将裁剪部分重新分配到其他条柱中,从而使直方图平坦化并限制陡峭的局部对比度变化。 两种方法在图3中用一个原始照明较低的图像进行了说明。可以看出,二值化增强了对比度,但也可能导致暗区或阴影放大,而直方图均衡化提供了更平滑的对比度增强,甚至提高了纹理的可见性。

3.3 机器学习

任务/模型。 最初数据集包含两个类别:颗粒和纤维。但由于纤维类别由颗粒的长宽比决定,这可以通过后处理中的经典方法确定,因此该方法被简化为一个单类别检测/分割问题。作为分割模型,我们比较了Ultralytics的YOLO 8、9和11。YOLOv10和YOLO12未在本工作中考虑,因为在实验时没有可用的分割版本。 训练-测试分割。 训练数据被手动按80/20的比例划分为训练集/测试集,并将训练集进一步按80/20划分为训练集/验证集,手动按过滤器类型进行分层。因此训练设置为:98张训练图像,24张验证图像和30张测试图像。 超参数。 所有模型都在相同的随机种子下训练,批大小为4,训练250个周期。经过一些初步测试,在给定数据集上,与批大小8或16相比,批大小4是在精确度和召回率最大化之间的一个良好折衷。优化器保持默认值,即AdamW [32],学习率为2e-3,动量为0.9,权重衰减为5e-4。未使用Dropout。所有其他超参数保持Ultralytics训练器配置(截至其GitHub发布版本:v8.3.200)的默认设置。根据模型适应度²衡量,在验证集上表现最佳的模型被用于测试集评估。所有模型均在A100 GPU上训练,训练时间范围约为0.3到1 GPU小时,较大版本的模型,尤其是YOLOv9,处于该范围的高端。 评估。 在相似大小的不同版本之间、同一版本的不同大小之间、以及同一版本和大小下使用二值化或直方图均衡化的模型之间进行了比较。模型在测试集上进行了评估,该测试集包含30张图像,共277个颗粒,评估指标包括精确度、召回率以及交并比阈值为0.5时的平均精度(mAP50)和阈值从0.5到0.95时的平均精度(mAP50-95)。

4 结果

4.1 YOLO变体比较

表1显示了版本和规模的比较结果。总体而言,除了精确度指标外,版本8n表现最佳,紧随其后的是版本8s和11n——这两个版本在精确度方面表现更好,仅在两个mAP分数上略有不足,但在召回率方面落后。版本9c在精确度上表现最佳,但与大多数其他变体相比,其在分割掩模重叠的精度(即mAP分数)和召回率方面明显不足。总的来说,较小规模的模型变体在其F1分数方面表现更好。对于版本8,中等规模变体的精确度有所提高,但只有版本8s的改进足够显著,并且召回率下降的代价足够小,以至于其F1分数超过了8n版本。对于版本9和11,随着参数规模增大,召回率仅有轻微改善。这两个版本的所有其他参数都随着模型规模增大而下降,但有一个例外是11l,其召回率显著高于版本11的所有其他变体,但代价是其精确度是所有变体中最差的。表1:版本8、9和11之间的模型版本与规模比较。模型参数以百万计。加粗表示该指标最佳值,下划线表示次佳值,虚线下划线表示第三佳值。

4.2 对比度校正方法比较 随后选取了版本和规模比较中表现最佳的两个模型,与使用预处理图像进行训练和评估的自身版本进行了比较,结果如表2所示。综合考虑F1分数以及精确度、召回率和mAP分数,模型8n和11n表现出最佳性能并被选中。这两个模型在每种预处理方法上训练时反应不同。对于版本8n,两种方法都导致精确度提高而召回率下降,同时二值化处理使得mAP分数下降,但直方图均衡化则几乎不变。另一方面,版本11n在所有方法中均显示出两个模型版本中最高的精确度,其召回率与未经预处理的版本相似。对于版本11n,二值化法显示出比直方图均衡化法更好的召回率,但在精确度和mAP分数上有所不足。

​表2:预处理方法之间的模型比较:二值化(B)和直方图均衡化(H)。加粗表示两个版本中该指标的最佳值,下划线表示次佳值。

5 讨论

5.1 模型比较

总体而言,YOLO 8n和YOLO 11n模型在测试数据上似乎都表现良好。与8n模型相比,11n模型倾向于过度关注某些区域,并将较大的物体分割成较小的部分,如图4a所示。另一方面,对于存在颗粒重叠或大量颗粒聚集在狭小空间的图像,11n模型具有更好的召回率,图5展示了一个例子。总体而言,11n模型还存在分割掩模不准确的问题,并且容易遗漏颗粒的细小部分,这些遗漏在所有图像中累积起来。但它遗漏的部分常常与8n模型遗漏的部分不同,因此没有明显的趋势可见。

5.2 预处理方法的影响

考虑在经过预处理的测试方法上获得的F1分数,二值化法通常似乎是以召回率换取精确度,总体上带来的益处不大。对于直方图均衡化,模型版本的不同会产生影响:虽然两个版本的精确度都有所提高,但只有版本8n的召回率显著下降。然而,即使是版本11n在某些图像中也会遗漏部分较大的颗粒区域,但纵观所有图像,其召回率分数最终与在未处理图像上训练的版本相近。其中一个遗漏示例如图4a所示。由于已知卷积神经网络专注于局部特征,因此可能难以识别大尺寸物体,一种可能的解释是,预处理过度强调了颗粒的纹理,导致其局部看起来与过滤器的金属结构非常相似,因此被误分类为背景。

5.3 挑战与当前局限性

我们的探索性研究为该特定领域提供了初步见解,并揭示了领域特有的挑战。当SEM图像非常杂乱或单个颗粒占据图像大部分区域时,通常会出现局限性。特别是在这些情况下,分割掩模的轮廓小于颗粒本身,或者遗漏了颗粒的部分区域。如果图像边缘显示了部分颗粒(其潜在的质心不可见)且这些部分未包含在真实值标注中,则误检率往往更高。未来的工作可能会从将这些部分颗粒标注为单独类别中受益,以减少模型对有效颗粒判断的混淆。

6 结论与展望

在本探索性研究中,我们结合使用SEM和基于机器学习的目标检测,深入探讨了在推进MP颗粒和纤维检测与量化方面的潜力、局限性和未来方向。我们特别证明了检测模型的选择以及预处理方式都直接影响检测结果。

在未来的工作中,我们将扩展当前研究并应对已识别的挑战,特别是在训练数据的数量和质量方面。此外,我们将研究方法论的扩展,例如整合额外数据源的多模态方法。同时,我们计划为给定任务评估更先进的ML模型,例如视觉变换器模型。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 博主简介
  • 原理介绍
  • 1 引言
  • 2 现状与技术发展
    • 2.1 样本表征方法
    • 2.2 计算机视觉与目标检测
    • 2.3 机器学习增强的微塑料检测
  • 3 方法论
    • 3.1 数据采集
    • 3.2 数据准备与预处理
    • 3.3 机器学习
  • 4 结果
    • 4.1 YOLO变体比较
  • 5 讨论
    • 5.1 模型比较
    • 5.2 预处理方法的影响
    • 5.3 挑战与当前局限性
  • 6 结论与展望
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档