1. 项目背景与核心需求
煤矿井下作业环境具有光照条件差、粉尘浓度高、能见度低等特点,这对基于视觉的安全生产监控系统提出了严峻挑战。传统监控摄像头在低照度环境下采集的图像存在严重噪声、细节丢失和色彩失真问题,直接影响后续人员检测算法的准确率。
这个毕设项目的核心目标,是构建一套融合低光照图像增强与深度学习目标检测的完整系统。系统需要实现两个关键功能:
- 对井下监控视频流进行实时图像质量增强
- 在增强后的图像上准确识别作业人员位置
2. 技术架构设计
2.1 整体技术路线
系统采用"预处理+检测"的级联架构:
原始视频流 → 低光增强模块 → 目标检测模块 → 报警/可视化2.2 关键技术选型
图像增强方案对比
| 方法类型 | 代表算法 | 适用场景 | 计算开销 |
|---|---|---|---|
| 传统方法 | Retinex/直方图均衡 | 轻度噪声 | 低 |
| 深度学习 | U-Net/Zero-DCE | 复杂噪声 | 中高 |
| 混合方法 | 传统+深度学习 | 平衡效果与速度 | 中等 |
最终选择基于U-Net的改进方案,因其在边缘保持和噪声抑制方面表现突出。
目标检测模型选型
考虑YOLOv5s、Faster R-CNN和SSD三种架构:
- YOLOv5s:推理速度最快(井下设备算力有限)
- Faster R-CNN:精度最高但速度慢
- SSD:平衡型但小目标检测差
选择YOLOv5s并进行轻量化改造,满足实时性要求。
3. 核心模块实现
3.1 低光照增强模块
采用改进的U-Shape网络结构:
class EnhanceNet(nn.Module): def __init__(self): super().__init__() # 编码器部分 self.encoder = nn.Sequential( ConvBlock(3, 64), Downsample(), ConvBlock(64, 128), Downsample(), ConvBlock(128, 256) ) # 解码器部分 self.decoder = nn.Sequential( Upsample(256, 128), ConvBlock(128, 128), Upsample(128, 64), ConvBlock(64, 64), nn.Conv2d(64, 3, kernel_size=3, padding=1) ) def forward(self, x): feats = self.encoder(x) return torch.sigmoid(self.decoder(feats))关键改进点:
- 引入注意力机制增强重要区域
- 添加多尺度特征融合
- 使用感知损失+SSIM的混合损失函数
3.2 人员检测模块
YOLOv5s的优化策略:
- 通道剪枝:移除冗余卷积通道
- 知识蒸馏:用大模型指导小模型
- 量化感知训练:准备后续INT8量化
# 模型轻量化示例 def prune_model(model, prune_ratio=0.3): for name, module in model.named_modules(): if isinstance(module, nn.Conv2d): # 计算通道重要性 importance = compute_channel_importance(module) # 按重要性排序并剪枝 sorted_idx = importance.argsort() keep_idx = sorted_idx[int(prune_ratio*len(sorted_idx)):] new_conv = nn.Conv2d( in_channels=module.in_channels, out_channels=len(keep_idx), kernel_size=module.kernel_size, stride=module.stride, padding=module.padding ) # 复制保留的权重 new_conv.weight.data = module.weight.data[keep_idx] setattr(model, name, new_conv) return model4. 系统集成与优化
4.1 数据处理流程
数据采集:
- 使用工业防爆摄像头获取原始视频
- 模拟数据:SID数据集+自制井下数据集
数据增强策略:
- 随机调整亮度/对比度
- 添加粉尘雾化效果
- 运动模糊模拟
标注规范:
- 人员边界框标注
- 危险行为标注(可选)
4.2 性能优化技巧
- 视频流处理流水线:
帧捕获 → 队列缓冲 → 增强处理 → 检测处理 → 结果融合- 多线程加速方案:
import threading from queue import Queue class ProcessingPipeline: def __init__(self): self.frame_queue = Queue(maxsize=10) self.result_queue = Queue(maxsize=10) def capture_thread(self): while True: frame = camera.read() self.frame_queue.put(frame) def enhance_thread(self): while True: frame = self.frame_queue.get() enhanced = enhance_model(frame) self.result_queue.put(enhanced) def start(self): threading.Thread(target=self.capture_thread).start() threading.Thread(target=self.enhance_thread).start()5. 实测效果与调优
5.1 评估指标
| 模块 | 评估指标 | 目标值 | 实测值 |
|---|---|---|---|
| 增强模块 | PSNR | >28dB | 29.2dB |
| 检测模块 | mAP@0.5 | >0.85 | 0.87 |
| 系统整体 | 延迟 | <200ms | 180ms |
5.2 典型问题排查
边缘伪影问题:
- 现象:增强后图像边缘出现光晕
- 解决方案:调整损失函数权重,增加边缘约束项
小目标漏检:
- 现象:远处人员检测不到
- 解决方案:添加特征金字塔网络(FPN)
实时性不达标:
- 现象:处理帧率低于15fps
- 优化:模型量化+TensorRT加速
6. 部署方案
6.1 硬件配置建议
| 组件 | 最低配置 | 推荐配置 |
|---|---|---|
| 处理器 | Intel i5 | Xeon E5 |
| GPU | GTX 1060 | RTX 2080Ti |
| 内存 | 8GB | 16GB |
| 存储 | 256GB SSD | 512GB NVMe |
6.2 软件依赖
# 基础环境 conda create -n mine python=3.8 conda install pytorch==1.10 torchvision cudatoolkit=11.3 # 项目依赖 pip install opencv-python tensorboard scikit-image7. 扩展方向
- 多模态融合:结合红外摄像头数据
- 行为分析:识别违规操作行为
- 端侧部署:开发矿用本安型设备
关键提示:在实际部署时,务必考虑井下设备的防爆认证要求,所有电子设备必须符合GB3836标准。