共计 2241 个字符,预计需要花费 6 分钟才能阅读完成。
背景与痛点
低光环境下的计算机视觉任务(如目标检测、图像分割)常因光照不足导致性能骤降。主流数据集(如 COCO、Cityscapes)的样本多在正常光照下采集,模型直接迁移到低光场景时会出现:
- 暗区细节丢失(信噪比降低)
- 色彩失真(白平衡失效)
- 运动模糊(长曝光导致)
构建专用低光数据集的核心价值在于:
- 提供真实的光照退化模式
- 覆盖不同色温 / 光源类型(LED、自然光等)
- 保留 4K 分辨率下的纹理细节
数据采集方案
设备选型
优先选择大传感器相机(全画幅>APS-C):
- 推荐机型:Sony A7S III(高感光性能)、Canon EOS R5(8K 超采样)
- 关键参数:
- ISO 1600-12800(根据噪点程度动态调整)
- 快门速度≤1/30s(避免运动模糊)
- 关闭自动白平衡(固定 5500K 色温)
拍摄技巧
- 室内低光:
- 使用单一光源(如台灯)制造渐变阴影
- 拍摄时关闭其他环境光干扰
- 夜间室外:
- 选择混合光源场景(路灯 + 车灯)
- 保留部分过曝区域(模拟真实动态范围)
- 逆光场景:
- 对焦暗部区域
- 使用 RAW 格式保留高光细节
存储与处理
- 单张 4K RAW 文件约 50MB,建议配备:
- 高速 SD 卡(UHS-II V90 规格)
- NAS 存储系统(RAID5 阵列)
- 预处理脚本示例(批量转 PNG):
import rawpy
import cv2
for raw_path in Path('raw_files').glob('*.ARW'):
with rawpy.imread(str(raw_path)) as raw:
rgb = raw.postprocess(use_camera_wb=True) # 保留原始白平衡
cv2.imwrite(f'png_export/{raw_path.stem}.png', cv2.cvtColor(rgb, cv2.COLOR_RGB2BGR))
数据标注实践
低光标注难点
- 目标边界模糊(需结合上下文推断)
- 暗色物体易漏标(如黑色车辆)
- 反光区域误标(如车窗倒影)
工具与技巧
- LabelImg++(改进版支持亮度调节):
- 快捷键
Ctrl+L调高局部亮度 - 开启边缘增强辅助模式
- 半自动标注流程:
- 先用正常光照预标注
- 通过风格迁移映射到低光图像
- 人工修正差异区域
质量控制
- 设置标注验收标准:
- IOU≥0.7(与验证集对比)
- 暗区漏标率<5%
- 使用一致性检查工具:
def check_annotation(img, xml):
ann = parse_xml(xml)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dark_mask = gray < 30 # 识别暗区
missed = [obj for obj in ann if np.mean(dark_mask[obj.bbox]) > 0.8]
return len(missed) / len(ann)
数据增强技术
物理模拟增强
基于 Retinex 理论实现光照分解:
def retinex_enhance(image, sigma=128):
"""
image: 输入 BGR 图像
sigma: 高斯核大小(控制光照分量平滑度)返回: 增强后的图像
"""
kernel = cv2.getGaussianKernel(sigma, 0)
illumination = cv2.sepFilter2D(image, -1, kernel, kernel)
reflectance = np.log(image + 1e-6) - np.log(illumination + 1e-6)
enhanced = np.exp(reflectance * 1.2) * 255 # 1.2 为增强系数
return np.clip(enhanced, 0, 255).astype('uint8')
多光源合成
模拟不同光源混合效果:
- 提取场景光照图(通过低通滤波)
- 叠加点光源 / 面光源(物理渲染器如 Blender)
- 色温扰动(2500K-6500K 随机变化)
失真控制策略
- 监控指标:
- 自然图像质量评估(NIQE)<4.5
- 局部对比度标准差(保持原始图像的 1.2 倍内)
- 动态调整增强强度:
while True:
enhanced = enhance(img)
niqe = calculate_niqe(enhanced)
if niqe < 4.5:
break
else:
reduce_enhance_strength()
避坑指南
常见误区
- ❌ 仅用伽马校正增强(破坏线性光照关系)
- ❌ 全局直方图均衡化(导致局部过曝)
- ❌ 忽略 EXIF 信息(丢失原始拍摄参数)
一致性保障
- 建立标注参考手册:
- 包含 20 种典型低光案例
- 标注员每月一致性测试
- 使用主动学习:
- 训练初始模型筛选争议样本
- 重点复核低置信度标注
参数调优
- 增强强度与 ISO 的关系:
- ISO1600 → 增强系数 1.2x
- ISO6400 → 增强系数 1.0x(防止噪点放大)
- 动态范围补偿公式:
DR_compensation = log2(原始动态范围 / 目标动态范围)
效果验证
目标检测对比
| 数据集 | mAP@0.5(暗区) | 误检率(反光区域) |
|---|---|---|
| COCO | 31.2% | 18.7% |
| 自制低光数据集 | 54.6% | 9.3% |
可视化对比

延伸阅读
- 论文推荐:
- 《Learning to See in the Dark》(CVPR 2018)
- 《Low-Light Image and Video Enhancement》(Springer 2022)
- 开源项目:
- See-in-the-Dark(Sony 官方实现)
- EnlightenGAN(基于对抗生成)
实践建议
- 优先采集真实低光数据,合成数据仅作补充
- 标注时保留部分困难样本(如极暗场景)用于模型鲁棒性测试
- 在验证集包含不同 ISO 级别的样本
- 定期用新数据迭代更新数据集(光照条件会随季节变化)
正文完
发表至: 未分类
四天前
