1. 课程导入与任务总览
矿山机器人(如掘进机、采煤机、巡检机器人)在井下作业时,首先需要“看清”自己面对的是煤还是岩。煤岩识别不是单纯的图像分类练习,它直接决定截割头是否继续推进、是否需要调整截割高度、是否触发停机保护。若把岩石误判为煤,截割齿可能快速磨损甚至打断;若把煤误判为岩,则会造成资源浪费与效率下降。因此,煤岩识别模型的评价不能只看“准确率”一个数字,而要看它在两类错误上的具体分布——这正是混淆矩阵要解决的问题。
本课程围绕一条完整的数据链路展开:传感器采集 → 样本筛选与标注 → 标注质量核验 → 模型训练 → 混淆矩阵评估 → 错误归因与迭代。其中“数据标注”决定了监督学习的天花板,“混淆矩阵”则决定了我们能否读懂模型在煤、岩两类上的真实表现。二者一头一尾,共同构成煤岩识别工程可落地的基础。
本节核心对象与任务定位
先明确本课程使用的参照约定:以掘进工作面为例,机器人沿巷道推进方向为正前方,截割头位于前端,视觉/红外传感器朝向掌子面。样本标签只取两类:coal(煤)与 rock(岩)。混淆矩阵按“行=真实类别、列=预测类别”组织,即第 i 行第 j 列表示真实为 i、被预测为 j 的样本数。这一约定在后续所有章节与图示中保持一致。
下图给出本课程的任务全景:左侧是数据与标注输入,中部是模型与评估,右侧是由混淆矩阵驱动的决策与迭代,底部标出四个关键错误类型的位置。
为什么标注质量决定混淆矩阵的可信度
混淆矩阵的每个格子都来自“真实标签”与“预测标签”的比对。如果真实标签本身有误,矩阵就会失真。例如掌子面上煤岩交界处常出现“半煤半岩”的过渡带,标注员若把过渡带整体标为 coal,模型学到的边界就会偏移,测试时大量岩石被判为煤,FP 虚高。因此标注环节必须明确规则:以截割面中心区域的主导材质为准,过渡带单独标记为 boundary 并在训练中降权或剔除,而不是强行二选一。
一个可执行的标注核验做法是:每批样本抽取 10% 由第二名标注员独立复标,计算两人标签一致率;一致率低于 90% 的批次退回重标,并针对分歧样本开短会统一判据。这一步看似繁琐,却能把后续混淆矩阵中的“假错误”压下去。
实战项目与学习路径
本课程的实战项目设定为:某掘进工作面机器人采集的 2400 张掌子面图像(示例数据,非实测),按 7:1.5:1.5 划分为训练、验证、测试集,类别大致均衡。学员需要完成标注规范制定、标注文件整理、模型训练脚本运行、混淆矩阵计算与可视化,并针对 FN、FP 两类错误提出至少一条改进措施。
学习路径按“先懂指标、再动手、后归因”推进:先掌握 TP/FN/FP/TN 与召回率、精确率的换算;再完成一次端到端的标注—训练—评估;最后学会从混淆矩阵反推数据问题。下面给出一个最小可用的混淆矩阵计算示例,帮助建立数值直觉:
import numpy as np
from sklearn.metrics import confusion_matrix, recall_score, precision_score
# 示例:测试集 300 个样本的真实标签与预测标签(0=coal, 1=rock)
y_true = np.array([0]*150 + [1]*150)
y_pred = np.array([0]*132 + [1]*18 + [0]*27 + [1]*123)
cm = confusion_matrix(y_true, y_pred, labels=[0, 1])
print(cm)
# [[132 18] -> 真实煤:132 判煤(TP),18 判岩(FN)
# [ 27 123]] -> 真实岩:27 判煤(FP),123 判岩(TN)
print("煤召回率:", recall_score(y_true, y_pred, pos_label=0)) # 132/150 = 0.880
print("煤精确率:", precision_score(y_true, y_pred, pos_label=0)) # 132/159 ≈ 0.830
从这组示例结果可以读出:煤的召回率 0.880,意味着约 12% 的真实煤被误判为岩(FN=18);同时 FP=27 说明有 27 个岩石样本被当成煤。两类错误数量接近,但工程代价不同——FN 导致漏割、效率损失,FP 导致截齿损耗。后续章节会引入代价加权与阈值调整来平衡二者。
本课程后续将依次展开标注工具与规范、数据增强、模型选型、混淆矩阵可视化、错误样本回溯等内容。请记住本节的定位:混淆矩阵不是训练结束后的一个装饰性图表,而是连接“数据质量”与“现场决策”的诊断工具。读懂它,才能让矿山机器人在煤岩界面前做出更稳妥的判断。