
简介一份关于CNN卷积神经网络在煤矸石自动分选中的学术论文PDF面向深度学习、机器视觉及矿业智能化方向的研究者与工程师。论文以山西焦煤和肥煤为研究对象针对传统灰度特征受清洗条件和光照环境影响的问题提出基于卷积神经网络的自动分选系统通过多层次提取煤块和矸石的图像纹理特征完成分类实验准确率达92%。压缩包内含1个PDF文件整体大小约1.98MB包含完整论文正文、图表及参考文献排版清晰适合直接阅读或打印留存。目前已有338人学习下载。读者可从中获取CNN模型架构、实验数据集处理方式以及煤矸石分选的具体实现思路既可作为相关课题的参考范本也能帮助快速理解卷积神经网络在工业视觉识别中的落地应用。1. 煤和矸石在皮带上是肉眼可分、机器难分的典型场景CNN 把老师傅的眼神固化成模型煤炭从井下提升到地面后第一道要过的关口就是把混在煤流里的矸石挑出去。矸石是采煤过程中夹带的岩石含碳量低如果不拣出来进洗选系统会浪费重介密度、磨损设备还会拉低商品煤的热值。过去这道工序靠人工在胶带旁手选劳动强度大、环境粉尘重近年用工成本越来越高自动分选成了选煤厂和矿山设备商的刚需。所谓“基于CNN卷积神经网络的煤矸石自动分选”就是让工业相机对准输送带上的块煤用卷积神经网络判断当前石块是煤还是矸石再把分类结果传给高压气阀或机械臂在物料下落瞬间把它吹走。这套方案能解决人工拣矸效率不稳定、招工难的问题适合做块煤干选、原煤预排矸以及旧产线自动化改造。对算法工程师来说它又是一个典型的工业图像分类落地场景硬件环境恶劣、推理延迟敏感、误判代价不对称比实验室里的 benchmark 麻烦得多。2. 为什么要用 CNN 做煤矸石分选图像特征、传统方案对比与网络选型依据2.1 煤和矸石在可见光图像上到底差在哪先搞清楚一个最基本的问题图像里的煤和矸石凭什么区分从视觉上看新鲜煤块表面是黑色或深灰黑色的带有油脂光泽块体表面常常能看到裂隙和层理矸石则复杂得多常见的有灰白色的砂岩、灰黑色的泥岩、黄褐色的页岩表面粗糙、光泽弱。问题恰恰在于矸石的种类多而且井下采出来的矸石表面往往裹着一层煤粉让浅色矸石也变成了黑色。所以用“黑就是煤、灰就是矸石”这种简单规则在现场一定会翻车。真正稳定可用的特征有三个维度一是表面纹理的粗糙度煤块裂隙发育但整体纹理均匀矸石表面颗粒感强、矿物颗粒边界明显二是反光特性煤在合适光照下有明显镜面反射矸石多为漫反射三是形状轮廓块煤破碎后呈多面体矸石板状、片状比例更高。这些特征在单张图片里都是存在的但用传统算法去逐条描述阈值很难定。CNN 的优势在于它不要求你手工把“纹理粗糙”写成数学公式。前面几层卷积核自动学会边缘和灰度突变中间层学会纹理组合后面全连接层把局部特征汇总成类别判断。只要数据覆盖足够广网络能学到比人眼规则更鲁棒的判别方式。2.2 灰度阈值和 SVM手工特征为什么在煤矸石场景站不住脚选煤厂早期做图像分选最常用的就是灰度阈值分割。做法是在固定光照下拍皮带图像矸石的平均灰度高煤块的平均灰度低取一个灰度值 T小于 T 判煤大于 T 判矸石。这套逻辑在实验室里能跑通到井下或筛分楼就出问题光源老化导致整体亮度漂移、煤尘落在镜头表面造成局部暗角、水雾让煤块反光变成白色高光。灰度阈值本质是在做“全局亮度比拟”它假设场景光照恒定这个假设在现场基本不成立。比阈值高一级的做法是手工特征加传统分类器这里就要提到 SVM 和 CNN 原理上的差别。SVM 的思路是你先用 LBP、HOG 或灰度共生矩阵把图像纹理转成几百维特征向量再找一个超平面把两类分开。这个方案对单块物料的孤立图像是有效的模型训练速度快早期很多论文都是这么做的。但到了实际皮带场景煤流是连续运动的石块互相遮挡、角度随机、携带煤泥手工特征的分布会被这些干扰直接拉宽SVM 的决策边界需要频繁重新标定维护成本极高。CNN 走的路线完全不同。它把“特征设计”这一步也变成了可学习的目标输入是原始像素矩阵输出是类别概率。卷积操作天然具备平移不变性石块在皮带哪个位置出现都不影响判断同时多层卷积叠加出的感受野能综合局部纹理和整体形状。对煤矸石分选这种类别少、但外观扰动大的任务端到端的表示学习比手工特征现实得多这也是我在实际项目里放弃 SVM 路线的直接原因。2.3 CNN 基本结构和煤矸石分选场景下的网络选型CNN 基本结构无非四件事卷积层、激活函数、池化层、全连接层。卷积层用一组可学习的核在图像上滑动每个核负责检测一种局部模式比如水平边缘、颗粒边界、块状纹理激活函数一般用 ReLU给网络引入非线性避免多层卷积退化成单层线性变换池化层做下采样把特征图缩小一方面减少计算量另一方面让网络对微小位移更不敏感最后的全连接层把特征向量映射到类别数输出煤和矸石各自的概率。在主干网络选型上我的经验是小模型优先别一上来就套 ResNet50。分选现场用的推理设备一般是工控机配显卡或者 Jetson 这类边缘盒子运行环境对功耗和散热都有限制。煤矸石是二分类、输入图像内容相对简单不需要 ImageNet 那种 1000 类复杂语义的建模能力。我自己惯用的方案是三层卷积加两个全连接的小网络参数量控制在 50 万以下如果要求更高精度用 MobileNetV3 或 ResNet18 做 backbone不推荐更大的模型。网络方案参数量级单张 224x224 推理耗时RTX 3060适用场景自建 3 层卷积小网络约 20-50 万约 1-2 ms高速皮带、边缘盒子、低成本方案ResNet18约 1100 万约 3-4 ms矸石种类杂、需要迁移学习MobileNetV3-Small约 250 万约 2-3 ms平衡精度与速度这里补充一个选型原则煤矸石分选不是序列问题不需要像 RNN 或 Transformer 那样建模时序依赖。单帧图像就足够判断一块石头的属性皮带速度的影响通过触发时机解决而不是通过网络结构解决。3. 从矿场到数据集图像采集、标注规范和预处理代码3.1 相机选型和现场采集参数必须先定硬件再定算法很多团队把精力全花在模型上相机随便买个工业相机就往皮带上架这是最典型的翻车起点。煤矸石分选对图像质量有硬性要求一是分辨率要保证小块矸石在图像里足够清晰二是快门速度要快到能凝固运动中的石块否则全是运动模糊三是补光要稳定现场不能拉一根日光灯了事。我的经验参数如下实际以现场带速和物料粒度换算。物料运动方向的分辨率决定了空间采样精度通常要求一个像素对应的实际尺寸不超过 1mm选 500 万像素面阵相机配合 8mm 镜头在 1 米宽的皮带上勉强够用如果皮带更宽优先用线阵相机。快门速度按公式算曝光时间内物料位移不超过 1 个像素。带速 1.5m/s 时曝光时间要压到 0.6ms 以内所以必须用带全局快门的工业相机不能用卷帘快门的民用摄像头否则石块在高速运动下会倾斜变形。参数项建议值说明相机类型面阵全局快门 / 线阵相机卷帘快门会产生运动畸变分辨率单像素映射尺寸 ≤ 1mm保证 30mm 以下小块矸石可辨曝光时间≤ 0.6ms带速 1.5m/s 时以物料位移不超过 1 像素计算镜头定焦工业镜头光圈 F4-F8不要自动光圈避免亮度漂移补光白色 LED 条形光源恒流驱动频闪光源会引入条纹伪影触发方式编码器脉冲触发 / 软触发保证石块图像位置与后续阀门位置对应光源布局上我一般用两侧 45 度照射加顶部漫射光的组合减少煤块表面的镜面反射直射进镜头。煤本身就是高反光物体正面强光打上去会形成大片白色光斑把纹理细节完全淹掉。如果现场粉尘特别大还要给镜头加压缩空气吹扫这个细节直接影响长周期运行的稳定性。3.2 标注规范和数据集划分单类别分类即可不需要画框煤矸石分选的标注比目标检测简单。物料在输送带上基本是单层、离散分布的算法只需要判断“这一块煤区域是煤还是矸石”不需要定位所以标注按图像分类做就行每张图一个标签文件夹结构就是标签。dataset/ ├── train/ │ ├── coal/ # 精煤或原煤块约 8000 张 │ ├── gangue/ # 矸石约 8000 张 │ └── other/ # 木板、锚杆、铁丝、塑料等杂物约 500 张 ├── val/ │ ├── coal/ # 约 1000 张 │ ├── gangue/ # 约 1000 张 │ └── other/ # 约 100 张 └── test/ ├── coal/ # 独立时间批次采样不与 train/val 同批 ├── gangue/ └── other/这里要重点说明“other”类。实际皮带上的干扰物远超煤和矸石两种拉架用的木板、锚杆托盘、剥落的铁丝网、煤泥团甚至工人扔掉的矿泉水瓶都会进入视野。我见过很多项目只分两类结果是木板被误判成矸石被吹掉、铁丝误判成煤放进精煤。加一个杂物类别模型才有机会把背景支撑区域和真正的煤矸石分开。数据集的规模没有绝对下限我的建议是每类干净样本至少 3000 张起步宁可比这个多不要少。采集时注意覆盖不同班次、不同天气、不同煤质。如果只有白天采的样本到了夜间灯光下模型效果就会打折。更关键的是验证集和测试集不能随机混分煤矿是一个连续生产过程同一批次采集的照片高度相关随机划分会让模型“偷看”到测试集信息。正确做法是按采集时间切分比如前三天的数据做训练集第四天做验证集再往后独立几天做测试集用数据时间分布模拟真实部署后的分布漂移。3.3 数据预处理与增强代码让模型见够现场的脏和乱图片采集回来是 1920x1080 或更高分辨率不能直接喂给网络。第一步是裁剪出皮带区域把托辊、机架这些无关背景裁掉既减少计算量又避免模型学到“皮带边缘矸石”这种假特征。第二步是缩放到固定尺寸同时保持煤块比例不变形。第三步是归一化把像素值从 0-255 缩放到网络容易优化的范围。数据增强是煤矸石项目的命脉。这里的增强不是为了凑数量而是为了模拟真实环境的干扰照明波动、传感器噪声、石块姿态变化。import albumentations as A from albumentations.pytorch import ToTensorV2 # 训练集增强 train_transform A.Compose([ A.Resize(height224, width224), A.HorizontalFlip(p0.5), # 石块姿态随机翻转 A.Rotate(limit15, border_mode0, p0.8), # 模拟输送带上角度变化 A.RandomBrightnessContrast( brightness_limit0.2, contrast_limit0.2, p0.8 # 模拟现场光照漂移 ), A.GaussNoise(var_limit(5.0, 30.0), p0.5), # 模拟低照度下传感器噪声 A.CLAHE(clip_limit2.0, tile_grid_size(8, 8), p0.3), # 增强局部纹理细节 A.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), ToTensorV2(), ]) # 验证集只做尺寸调整和归一化不做随机增强 val_transform A.Compose([ A.Resize(height224, width224), A.Normalize(mean[0.485, 0.456, 0.406], std[0.229, 0.224, 0.225]), ToTensorV2(), ])这套增强策略有明确的针对性。水平翻转模拟石块在皮带上的朝向不定旋转角度只给 15 度而不是 90 度因为大角度旋转会让煤块的长宽比失真反而引入错误样本。亮度对比度扰动是最重要的一个现场灯光老化或换灯泡都会造成整体亮度偏移不加这个增强模型遇到稍微暗一点的图就会误判。高斯噪声模拟的是暗光环境下的 CMOS 噪声低到中等强度即可噪声过强会破坏纹理结构。值得注意的一个细节是预应力煤矸石分类本质是纹理判别CLAHE 增强能放大矸石表面的颗粒边界与煤块裂隙之间的差异对提高小模型表现有明显帮助。但 CLAHE 不能加在验证集上否则你评估的是增强后的效果而不是模型在原始采集图上的真实能力。4. 用 PyTorch 训练一个可用的煤矸石 CNN 分类器网络结构、训练参数和评估指标4.1 搭建轻量 CNN 模型给边缘设备留足推理余量训练框架我选 PyTorch生态成熟、部署到 ONNX 方便。模型的搭建遵循“前段卷积提特征、后段分类出概率”的标准套路重点在控制参数量和计算量。import torch import torch.nn as nn class CoalGangueNet(nn.Module): 轻量级 CNN3 个卷积块 自适应池化 两层全连接 输入: (batch, 3, 224, 224) RGB 图像 输出: (batch, 3) 煤 / 矸石 / 杂物 三分类 logits def __init__(self, num_classes3): super().__init__() self.features nn.Sequential( # 第一层: 提取低级边缘和灰度突变特征 nn.Conv2d(3, 32, kernel_size3, stride1, padding1), nn.BatchNorm2d(32), nn.ReLU(inplaceTrue), nn.MaxPool2d(kernel_size2, stride2), # 112x112 # 第二层: 组合纹理模式 nn.Conv2d(32, 64, kernel_size3, stride1, padding1), nn.BatchNorm2d(64), nn.ReLU(inplaceTrue), nn.MaxPool2d(kernel_size2, stride2), # 56x56 # 第三层: 高阶局部特征 nn.Conv2d(64, 128, kernel_size3, stride1, padding1), nn.BatchNorm2d(128), nn.ReLU(inplaceTrue), nn.MaxPool2d(kernel_size2, stride2), # 28x28 ) self.classifier nn.Sequential( nn.AdaptiveAvgPool2d(1), # 全局池化不限制输入尺寸 nn.Flatten(), nn.Linear(128, 64), nn.ReLU(inplaceTrue), nn.Dropout(0.3), # 防止过拟合 nn.Linear(64, num_classes), ) def forward(self, x): x self.features(x) x self.classifier(x) return x这个结构的设计逻辑是每经过一个卷积块通道数翻倍32→64→128空间尺寸减半224→112→56→28在信息提取和计算代价之间取平衡。卷积核全部用 3x3这是 VGG 证明过的组合两个 3x3 堆叠等价于一个 5x5 的感受野但参数量更少。BatchNorm 在这个任务里很重要煤矸石图像的光照波动大输入分布不稳定BN 能缓解内部协变量偏移让训练收敛更快。最后用 AdaptiveAvgPool2d 把 28x28 的特征图压缩成 128 维向量好处是模型对输入尺寸不敏感部署时即使把分辨率降到 160x160网络结构也不用改。Dropout 放在全连接前配合后续的数据增强能压一压训练集噪声带来的过拟合。因为类别是 3 个输出层的神经元数量就是 3。4.2 训练循环和关键超参数类别不平衡是第一个要解决的问题煤矸石现场占比经常是煤多矸石少如果直接用原始分布训练模型会趋向于把一切预测成煤因为这样能拿到很高的整体准确率。处理办法是给损失函数加类别权重让少数类被误分时产生更大的惩罚。import torch.optim as optim from torch.utils.data import DataLoader # 假设 train_loader 返回 (images, labels) # labels: 0煤, 1矸石, 2杂物 # 统计训练集中各类样本占比后设置权重 class_counts torch.tensor([8000, 8000, 500], dtypetorch.float) total_count class_counts.sum() # 权重与样本数成反比同时做归一化 class_weights total_count / class_counts class_weights class_weights / class_weights.sum() * 3 device torch.device(cuda if torch.cuda.is_available() else cpu) model CoalGangueNet(num_classes3).to(device) criterion nn.CrossEntropyLoss(weightclass_weights.to(device)) optimizer optim.AdamW(model.parameters(), lr1e-3, weight_decay5e-4) scheduler optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max30, eta_min1e-5) num_epochs 30 best_val_acc 0.0 for epoch in range(num_epochs): model.train() running_loss 0.0 for images, labels in train_loader: images, labels images.to(device), labels.to(device) optimizer.zero_grad() outputs model(images) loss criterion(outputs, labels) loss.backward() optimizer.step() running_loss loss.item() * images.size(0) # 每个 epoch 结束后在验证集上评估 model.eval() correct, total 0, 0 with torch.no_grad(): for images, labels in val_loader: images, labels images.to(device), labels.to(device) outputs model(images) _, predicted torch.max(outputs, dim1) total labels.size(0) correct (predicted labels).sum().item() val_acc correct / total print(fEpoch {epoch1:02d} | Loss {running_loss/len(train_loader.dataset):.4f} | Val Acc {val_acc:.4f}) if val_acc best_val_acc: best_val_acc val_acc torch.save(model.state_dict(), coal_gangue_best.pth) scheduler.step()超参数不是拍脑袋定的。学习率 1e-3 搭配 AdamW 是工业项目的常用起点weight_decay 设 5e-4 防止大模型权重过大CosineAnnealing 让学习率在后半段平滑降低帮助收敛到更平坦的极小值。类别权重的计算逻辑在上面代码里写得很清楚用总数除以各类数量得到反比权重再归一化到均值为 1这样整体损失量级不会因为权重调整而大幅变化。训练轮数 30 是基于数据量在万张级别、网络只有几十万参数的判断。如果你的数据量只有两三千张可能 15 轮就过拟合了这时候要盯着验证集准确率来早停不要机械地跑满 30 轮。保存模型时用验证集准确率最高的那一轮而不是最后一轮这是防止训练尾部过拟合的标准操作。4.3 评估指标选煤厂不关心准确率关心“矸石带出率”和“精煤回收率”模型训练完打印一个整体准确率是很自然的事但到现场汇报时选煤厂的技术负责人追问的往往是两个问题矸石有没有被大比例挑走精煤有没有被误吹掉。这两个需求对应的是召回率和精确率。指标计算方式在这个场景的含义矸石带出率召回率被正确识别的矸石数 / 实际矸石总数越高越好漏掉的矸石会混入精煤精煤回收率1 - 误吹率被保留的精煤数 / 实际精煤总数越高越好误吹一吨精煤是直接经济损失F1 分数精确率与召回率的调和平均综合衡量两类错误适合调阈值混叠矩阵每类真实标签 vs 预测标签定位是哪一类在混淆在代码里实现这些指标不复杂关键是理解一个点softmax 输出的类别概率本身不代表最优决策。模型输出煤的概率 0.51、矸石概率 0.49默认取最大概率会判成煤但在现场你可能更希望把阈值提高到 0.7只有概率超过 0.7 才送气阀吹除。这就是阈值偏好问题提高吹除阈值会减少误吹但增加漏选降低阈值则反过来。我一般会在验证集上扫一遍 0.5 到 0.9 的阈值把精确率-召回率曲线画出来让选煤厂根据煤价和矸石处理成本自己选工作点。5. 煤矸石分选训练与部署避坑记录五个真实场景的排查思路5.1 训练 Loss 降得很快一到现场识别率就崩现象在实验室整理的数据集上训练验证集准确率能做到 97%模型装到现场后在皮带上实际测试只有 70% 出头的准确率矸石漏报一大堆。原因训练集是“干净”的静态石块照片现场是运动中的、带粉尘的、伴随强烈震动和光斑的连续图像。实验室采集时石块是摆拍的表面清洁现场石块从筛分机落下扬起煤尘甚至表面沾着水雾。模型学到的特征分布和现场分布不一致准确率自然跳水。解决最有效的办法是训练集里必须混入现场图像。设备安装后用正式相机在运行皮带上采集连续图像按帧切成训练样本重新微调模型。这里有一个经验比例现场数据至少要占训练集的三分之一否则分布偏移依然压不住。在预处理里做标准化用的均值和方差也应改成现场图像的统计数据而不是直接用 ImageNet 的默认值。5.2 煤和矸石外观接近时模型准确率卡在 60% 上不去现象遇到底层煤炭矸石中含碳量偏高炭质泥岩、炭质页岩矸石表面发黑和煤块几乎看不出区别模型再怎么调参准确率都在 60%-65% 之间挣扎。原因可见光图像本身携带的判别信息不足。当矸石表面被煤粉覆盖且自身灰分较低时两者在 RGB 空间的距离很小卷积网络提取的纹理特征也无法可靠区分因为它们在图像上真的长得像。解决如果换硬件来得及优先换短波红外相机或双光谱相机。煤和矸石在短波红外波段900-1700nm的吸收特性差异明显这个差异是基于物质成分的不受表面颜色影响。如果硬件不能换只能退而求其次用多张不同角度补光图像合成光照归一化特征或者对图像做边缘增强放大裂隙差异再配合现场抽检人工复核本质上治标不治本。5.3 验证集 98%测试集 85%差出了“隐藏的 13 个点”现象训练完成后划分出来的验证集准确率亮眼但当用另一批从现场新采集的图像测试时性能明显衰减衰减幅度不是一个点两个点而是十几个点。原因验证集和训练集来自同一时间段、同一批煤质的照片。这些照片在背景、光照、煤质上高度相似模型等效于已经看过验证集的“近似副本”。随机划分让这种情况尤其严重因为同一块煤的不同角度照片可能分别进了训练集和验证集。解决数据集划分必须按时间批次和矿点分组。比如一号煤矿连续三天采集的数据统一进训练集二号煤矿同三天采集的数据进验证集后面再攒一周数据做测试集。这样评估的是模型面对不同煤层、不同开采条件下的真实泛化能力。划分方案定下来后整个项目周期内不要频繁调整否则你优化的其实是验证集本身。5.4 模型识别延迟 5ms但执行机构总是吹偏现象网络推理速度快得惊人单张图片只有几毫秒但实际分选时气阀启动位置总是差一截要么提前吹掉前一块煤要么吹空现场看起来是“瞎吹”。原因只优化了模型延迟忽略了整个系统的链路时序。相机曝光、图像传输、预处理、推理、结果写入缓存、串口通信、阀组响应每一步都有耗时。更麻烦的是物料在相机视野中心和阀组执行位置之间有物理距离物料以带速在运动信号到达阀门时目标石块已经不在原来的位置了。解决建一张时间预算表把每个环节的耗时折算成物料位移。带速 1.5m/s若总延迟 30ms物料已经向前走了 45mm。第一步是尽量压缩各环节延迟第二步是让相机触发信号与皮带编码器同步用脉冲计数确定每个石块的物理位置第三步是把软定时参数做成可调在现场用已知颜色的试验块反复校准“触发提前量”。这一步做不好模型再准都没有意义。5.5 标注错误太多模型学到的是标注员的“个人习惯”现象训练过程中损失能收敛但混淆矩阵里煤和矸石的错误分布很不均衡而且更换标注人员后模型的性能会突然变化。原因煤矸石边界本身存在模糊地带。含碳量低的煤和含碳量高的矸石在外观上是一条连续过渡标注时如果标准不统一不同的人对同一张图会给出不同标签。模型会去拟合标注员的个人倾向而不是客观的煤矸分类边界。解决提前写清楚标注细则不能只给“煤”“矸石”两个词。细则要定义表面可见明显矿物颗粒但整体呈黑色的石头怎么标带煤皮包裹的矸石怎么标水湿导致反光的煤块怎么标我建议把所有边界案例收集出来做成一份示例图集标注员先看示例图再开工。训练过程中还要定期抽检标注质量用模型预测结果和人工标签对比把差异大的图挑出来重新核验这种方法能一次性发现大量系统性错标。6. 从“能识别”到“能分选”在线联动验证和持续迭代的正确姿势6.1 算清“识别到执行”的时序账这是现场能否落地的分水岭模型在服务器上推理准确率再高如果联动时序不对分选效果依旧是零。我习惯在安装调试阶段就把整条信号链路的延迟量一遍写成一张明确的表格贴在配电柜里相机曝光时间、图像数据传输耗时、预处理耗时、网络推理耗时、控制指令下发耗时、气阀电磁阀启动时间。每个环节都按最坏情况估然后加总。举例来说带速 1.5m/s相机视野中心到阀组吹嘴的安装距离是 1.2 米物料从被拍到到达阀组的时间是 800ms减去总链路延迟 50ms还剩 750ms 的可控窗口。这 750ms 就是触发提前量的设定基础。如果皮带速度波动大必须接编码器做动态补偿不能按固定延时处理。现场验证方法很简单往皮带上放几个特定颜色的矸石样本观察吹嘴位置和实际落点是否一致来回调整提前量直到命中率稳定在可用水平。6.2 周期性掺配测试用“已知答案”检验模型衰减模型上线后不是一劳永逸。煤质随着采掘工作面推进在变化镜头会脏光源会衰减这些都会导致模型性能缓慢下滑。我养成的习惯是每月做一次掺配测试准备 50 块已知矸石和 50 块已知精煤按固定比例均匀混入生产皮带统计分选系统实际吹出的矸石数量和误吹的精煤数量记录成一张趋势表。连续几个月数据对比就能清晰看到模型是否在退化提前安排重新训练和数据采集而不是等现场反馈“最近选不干净了”。这种做法相当于给模型建立了一道定期的“体检”掺配样比例是已知答案系统的实际输出与理论期望的偏差就是模型和机械整体的健康度指标。部署一年以上的系统我见过很多都是靠这个办法维持性能长稳的。最后说一个我做煤矸石项目的习惯现场测试只信皮带上的实测数据不信机房的验证集准确率。每次调整完模型我都会先跑一轮掺配测试确认误吹率没有上升再继续下一步优化。分选系统的成本结构里误吹一吨精煤比漏选一吨矸石要亏得多这个优先级在调参时要时刻拎清。这条路我从模型搭建一直走到联动调试希望你走的时候能少绕几个我当年绕过的弯。希望帮到你。本文还有配套的精品资源点击获取