煤矿井下智能监控、打钻过程自动化监测、安全行为识别、灾害防治辅助系统 检测工人是否佩戴安全帽 推动煤矿智能化发展 智能矿山、工业AI、安全生产,煤矿井下钻场目标检测数据集
煤矿井下智能监控、打钻过程自动化监测、安全行为识别、灾害防治辅助系统 检测工人是否佩戴安全帽 推动煤矿智能化发展 智能矿山、工业AI、安全生产,煤矿井下钻场目标检测数据集
文章目录

煤矿井下钻场目标检测数据集信息表
| 项目 | 内容 |
|---|---|
| 数据集名称 | 煤矿井下钻场目标检测数据集 |
| 总图像数量 | 70,948 张 |
| 数据大小 | 8.8 GB |
| 标注格式 | PASCAL VOC(.xml)、YOLO(.txt)双格式提供 |
| 目标类别数 | 5 类 |
| 应用场景 | 煤矿井下智能监控、打钻过程自动化监测、安全行为识别、灾害防治辅助系统 |
| 数据来源 | 煤矿用本安型执法记录仪实地拍摄 |
| 构建流程 | 数据采集 → 数据清洗 → 人工标注 → 专家抽检核查 → 标准化发布 |
类别标签和标注数量信息整理的表格:
类别标签及标注数量统计表
| 类别编号 | 英文标签 | 中文名称 | 标注数量(实例数) |
|---|---|---|---|
| 0 | chuck | 夹持器 | 54,207 |
| 1 | coal_miner | 煤矿工人 | 39,482 |
| 2 | drill_pipe | 钻杆 | 67,284 |
| 3 | gripper | 卡盘 | 70,253 |
| 4 | mine_safety_helmet | 矿井安全帽 | 31,119 |
| 总计 | —— | —— | 262,345 |

类别标签及目标分布统计表
| 类别编号 | 英文标签 | 中文名称 | 描述 |
|---|---|---|---|
| 0 | clamp | 夹持器 | 钻机中用于固定钻杆的机械装置 |
| 1 | drill_chuck | 钻机卡盘 | 控制钻杆旋转的核心部件 |
| 2 | miner | 煤矿工人 | 井下作业人员 |
| 3 | safety_helmet | 矿井安全帽 | 工人佩戴的安全防护装备(常作为独立目标检测) |
| 4 | drill_rod | 钻杆 | 打钻过程中使用的长条形金属杆件 |
✅ 注:安全帽与工人可分别检测,支持个体防护装备(PPE)合规性分析。

数据集特点总结
| 特点 | 说明 |
|---|---|
| ✅ 超大规模数据集 | 包含 70,948 张真实井下图像,是目前公开中规模领先的煤矿专用目标检测数据集。 |
| ✅ 多目标覆盖 | 涵盖打钻作业中的关键设备与人员,支持全流程智能监控。 |
| ✅ 双标注格式支持 | PASCAL VOC(XML) 和 YOLO(TXT) 格式,兼容主流深度学习框架(如 YOLOv5/v8、Faster R-CNN、SSD 等)。 |
| ✅ 高质量标注 | 经过专业数据清洗与专家抽检核查,确保标注准确性与一致性。 |
| ✅ 多样化场景 | 来自多个不同钻场,涵盖不同光照、烟尘、遮挡、角度等复杂井下环境,提升模型鲁棒性。 |
| ✅ 高应用价值 | 支持打钻过程自动化监控、人员行为分析、设备状态识别、安全隐患预警等智能化应用。 |

典型应用方向
- ✅ 打钻过程实时监测:自动识别钻杆进给、卡盘动作等关键操作。
- ✅ 安全合规检测:检测工人是否佩戴安全帽,实现PPE自动检查。
- ✅ 设备状态分析:通过夹持器和卡盘位置判断设备运行状态。
- ✅ 智能巡检系统:集成至煤矿AI监控平台,提升井下作业安全性。
- ✅ 科研与算法训练:为深度学习模型提供高质量训练数据,推动煤矿智能化发展。
你提供的 煤矿井下钻场目标检测数据集 是一个极具工业价值和研究意义的高质量数据集,包含 70,948 张图像、5 类关键目标(夹持器、钻机卡盘、煤矿工人、矿井安全帽、钻杆),支持 PASCAL VOC(XML)和 YOLO 格式,总大小 8.8GB。该数据集可用于构建智能打钻监控系统、人员行为识别、设备状态监测、安全预警等智能化煤矿应用。
以下是 从环境搭建 → 数据预处理 → YOLOv8 模型训练 → 推理 → 评估 → 部署 的完整全流程,确保你可以高效利用这个大规模工业数据集。
✅ 一、系统环境搭建(CUDA + Anaconda + Python)
1. 确认 CUDA 驱动(GPU 加速)
nvidia-smi
- 要求:NVIDIA GPU(建议 ≥ RTX 3090 / A100)
- CUDA 版本 ≥ 11.8(推荐 12.1)
如未安装驱动,请前往 NVIDIA 官网 下载。
2. 安装 Anaconda(Python 包管理器)
前往 https://www.anaconda.com/products/distribution 下载并安装。
3. 创建 Python 虚拟环境
# 创建名为 coal_mine_detection 的环境
conda create -n coal_mine_detection python=3.9
# 激活环境
conda activate coal_mine_detection
4. 安装必要依赖
# 安装 PyTorch(以 CUDA 11.8 为例)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 安装 YOLOv8 官方库
pip install ultralytics opencv-python numpy matplotlib tqdm scikit-learn pandas pillow lxml
# 可选:TensorBoard 可视化
pip install tensorboard
# 验证 GPU 是否可用
python -c "import torch; print(torch.cuda.is_available())"
# 应输出 True
✅
lxml用于解析 XML(VOC 格式)
✅ 二、数据集结构与格式转换(VOC → YOLO)
YOLOv8 默认使用 YOLO 格式,因此需要将 VOC XML 转换为 .txt 标注。
目录结构建议
coal_mine_dataset/
├── images/
│ ├── train/
│ ├── val/
│ └── test/
├── labels_voc/ # 原始 XML 文件
├── labels/ # 转换后的 YOLO .txt 文件
└── data.yaml
VOC → YOLO 转换脚本
# convert_voc_to_yolo.py
import os
import xml.etree.ElementTree as ET
from pathlib import Path
# 类别映射(必须与训练一致)
classes = {
'clamp': 0, # 夹持器
'drill_chuck': 1, # 钻机卡盘
'miner': 2, # 煤矿工人
'safety_helmet': 3, # 矿井安全帽
'drill_rod': 4 # 钻杆
}
def convert(size, box):
dw = 1. / size[0]
dh = 1. / size[1]
x = (box[0] + box[1]) / 2.0 - 1
y = (box[2] + box[3]) / 2.0 - 1
w = box[1] - box[0]
h = box[3] - box[2]
return (x * dw, y * dh, w * dw, h * dh)
def convert_annotation(xml_file, output_folder):
tree = ET.parse(xml_file)
root = tree.getroot()
size = root.find('size')
w = int(size.find('width').text)
h = int(size.find('height').text)
txt_file = os.path.join(output_folder, Path(xml_file).stem + '.txt')
with open(txt_file, 'w') as f:
for obj in root.iter('object'):
cls = obj.find('name').text.lower().strip()
if cls not in classes:
continue
cls_id = classes[cls]
xmlbox = obj.find('bndbox')
b = [float(xmlbox.find(x).text) for x in ['xmin', 'xmax', 'ymin', 'ymax']]
bb = convert((w, h), b)
f.write(f"{cls_id} {' '.join(f'{x:.6f}' for x in bb)}\n")
# 执行转换
voc_labels = 'coal_mine_dataset/labels_voc'
yolo_labels = 'coal_mine_dataset/labels'
os.makedirs(yolo_labels, exist_ok=True)
for xml_file in Path(voc_labels).glob('*.xml'):
convert_annotation(xml_file, yolo_labels)
print("VOC to YOLO conversion completed.")
✅ 运行后,所有
.xml将转为.txt存入labels/
✅ 三、数据划分(train/val/test)
# split_data.py
import os
import random
from pathlib import Path
image_dir = 'coal_mine_dataset/images_raw' # 原始图像目录
output_dir = 'coal_mine_dataset/images'
label_dir = 'coal_mine_dataset/labels'
# 创建子集目录
for subset in ['train', 'val', 'test']:
os.makedirs(f'{output_dir}/{subset}', exist_ok=True)
# 获取所有图像文件
images = [f for f in os.listdir(image_dir) if f.endswith(('.jpg', '.jpeg', '.png'))]
random.shuffle(images)
# 划分比例:80% train, 10% val, 10% test
n = len(images)
train_files = images[:int(0.8*n)]
val_files = images[int(0.8*n):int(0.9*n)]
test_files = images[int(0.9*n):]
def copy_files(files, subset):
for img in files:
src_img = os.path.join(image_dir, img)
dst_img = os.path.join(output_dir, subset, img)
os.system(f'cp "{src_img}" "{dst_img}"')
# 同步复制 label
label = Path(img).stem + '.txt'
src_lbl = os.path.join(label_dir, label)
dst_lbl = os.path.join('coal_mine_dataset/labels', subset, label)
if os.path.exists(src_lbl):
os.system(f'cp "{src_lbl}" "{dst_lbl}"')
copy_files(train_files, 'train')
copy_files(val_files, 'val')
copy_files(test_files, 'test')
print("Data split completed: 8:1:1")
✅ 四、data.yaml 配置文件
# data.yaml
train: ./coal_mine_dataset/images/train
val: ./coal_mine_dataset/images/val
test: ./coal_mine_dataset/images/test
# 类别数量
nc: 5
# 类别名称(英文)
names:
- clamp # 夹持器
- drill_chuck # 钻机卡盘
- miner # 煤矿工人
- safety_helmet # 矿井安全帽
- drill_rod # 钻杆
# 中文名称(用于可视化)
names_zh:
- 夹持器
- 钻机卡盘
- 煤矿工人
- 安全帽
- 钻杆
✅ 五、调用 YOLOv8 官方预训练模型进行训练
由于是工业场景,光照差、遮挡多、目标小(如安全帽),建议使用 YOLOv8m 或 YOLOv8l。
from ultralytics import YOLO
# 加载官方预训练模型
model = YOLO('yolov8m.pt') # 推荐使用中等模型
# 开始训练(大规模数据,可训练更久)
results = model.train(
data='data.yaml', # 数据配置文件路径
epochs=200, # 大数据集建议 150~300
batch=32, # 根据显存调整(A100 可用 64)
imgsz=640, # 图像尺寸(提升小目标检测)
optimizer='AdamW', # 更稳定优化器
lr0=0.001,
weight_decay=0.0005,
momentum=0.937,
# 数据增强(关键!提升泛化)
augment=True,
hsv_h=0.015,
hsv_s=0.7,
hsv_v=0.4,
degrees=10.0,
translate=0.1,
scale=0.5,
shear=0.0,
flipud=0.0,
fliplr=0.5,
mosaic=1.0,
mixup=0.1,
copy_paste=0.1, # 对小目标特别有效
# 正则化
dropout=0.2,
label_smoothing=0.05,
# 学习率调度
cos_lr=True, # 余弦退火
# 保存与日志
project='runs/train',
name='coal_mine_yolov8m',
save=True,
save_period=10,
exist_ok=False,
# 缓存(内存充足时开启)
cache=True,
# 分布式训练(多卡)
# device=[0,1] # 多GPU
)
✅ 训练时长:约 12~24 小时(取决于 GPU 数量)
✅ 六、推理代码(单图 / 批量 / 视频)
1. 单张图像推理
from ultralytics import YOLO
from PIL import Image
model = YOLO('runs/train/coal_mine_yolov8m/weights/best.pt')
results = model('underground_scene.jpg', conf=0.3)
for r in results:
im_array = r.plot()
im = Image.fromarray(im_array[..., ::-1])
im.show()
2. 批量图像推理
results = model.predict(
source='coal_mine_dataset/images/test',
save=True,
project='runs/detect',
name='coal_mine_test',
conf=0.3,
imgsz=640
)
3. 视频检测(井下监控视频)
results = model.predict(
source='drilling_process.mp4',
save=True,
project='runs/detect/video',
name='drilling_monitoring',
conf=0.3,
imgsz=640
)
✅ 七、模型评估
1. 在验证集上评估
metrics = model.val(
data='data.yaml',
split='val',
batch=32,
imgsz=640,
save_json=True,
project='runs/val',
name='coal_mine_eval'
)
print(f"mAP@0.5: {metrics.box.map50:.4f}")
print(f"mAP@0.5:0.95: {metrics.box.map:.4f}")
print(f"Precision: {metrics.box.p:.4f}")
print(f"Recall: {metrics.box.r:.4f}")
# 每类 AP
for i, name in enumerate(model.names):
print(f"{name}: AP@0.5 = {metrics.box.ap[i]:.4f}")
2. 在测试集上独立评估(最终性能)
test_metrics = model.val(
data='data.yaml',
split='test',
name='final_test'
)
print(f"Final Test mAP@0.5: {test_metrics.box.map50:.4f}")
✅ 八、模型导出(ONNX / TensorRT / TFLite)
# 导出为 ONNX
model.export(format='onnx', dynamic=True, opset=13, imgsz=640)
# 导出为 TensorRT(NVIDIA Jetson / 工控机)
model.export(format='engine', half=True, dynamic=True)
# 导出为 TFLite(边缘设备)
model.export(format='tflite', int8=True)
# 导出为 CoreML(iOS)
model.export(format='coreml')
✅ 九、工业场景优化建议
| 问题 | 建议 |
|---|---|
| 光照差、对比度低 | 使用 hsv_v, CLAHE, Gamma Correction |
| 小目标(安全帽、钻杆) | 使用 copy_paste, mosaic, imgsz=640 |
| 遮挡严重 | 使用 copy_paste, mixup |
| 实时性要求高 | 使用 yolov8s + TensorRT + FP16 |
| 模型轻量化部署 | 使用 prune 剪枝或 QAT 量化 |
✅ 十、应用场景与拓展
✅ 应用场景:
- 智能打钻监控系统:实时检测设备与人员状态
- 安全行为识别:未戴安全帽报警
- 钻杆计数与长度估算:辅助打钻进度管理
- 设备故障预警:夹持器异常、卡盘松动识别
- 数字孪生系统:构建井下三维可视化场景
✅ 可拓展方向:
- 结合 DeepSORT 实现人员/设备跟踪
- 添加姿态估计(工人动作分析)
- 构建 Web 平台实现远程监控
- 部署到边缘计算盒子(Jetson Orin)
✅ 十一、总结
你已经掌握如何:
- ✅ 搭建大规模工业检测环境
- ✅ 将 VOC 数据转换为 YOLO 格式
- ✅ 划分 train/val/test 数据集
- ✅ 使用 YOLOv8 训练煤矿井下目标检测模型
- ✅ 完成推理、评估、模型导出全流程
🎯 下一步建议:
- 构建 Flask API 提供 REST 接口
- 集成视频流实时分析(RTSP)
- 添加报警模块(未戴安全帽、设备异常)
- 部署到煤矿边缘服务器或工控机
如果你需要我提供:
- Flask API 接口代码
- 视频流实时检测脚本
- 安全帽佩戴检测报警系统
- 多摄像头融合监控方案
欢迎继续提问!祝你在 智能矿山、工业AI、安全生产 领域取得突破!⛏️🤖🛡️
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)