从零构建4K低光增强数据集:数据采集、标注与增强实战指南

1次阅读
没有评论

共计 2241 个字符,预计需要花费 6 分钟才能阅读完成。

image.webp

背景与痛点

低光环境下的计算机视觉任务(如目标检测、图像分割)常因光照不足导致性能骤降。主流数据集(如 COCO、Cityscapes)的样本多在正常光照下采集,模型直接迁移到低光场景时会出现:

  • 暗区细节丢失(信噪比降低)
  • 色彩失真(白平衡失效)
  • 运动模糊(长曝光导致)

构建专用低光数据集的核心价值在于:

  1. 提供真实的光照退化模式
  2. 覆盖不同色温 / 光源类型(LED、自然光等)
  3. 保留 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')

多光源合成

模拟不同光源混合效果:

  1. 提取场景光照图(通过低通滤波)
  2. 叠加点光源 / 面光源(物理渲染器如 Blender)
  3. 色温扰动(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%

可视化对比

从零构建 4K 低光增强数据集:数据采集、标注与增强实战指南

延伸阅读

  • 论文推荐:
  • 《Learning to See in the Dark》(CVPR 2018)
  • 《Low-Light Image and Video Enhancement》(Springer 2022)
  • 开源项目:
  • See-in-the-Dark(Sony 官方实现)
  • EnlightenGAN(基于对抗生成)

实践建议

  1. 优先采集真实低光数据,合成数据仅作补充
  2. 标注时保留部分困难样本(如极暗场景)用于模型鲁棒性测试
  3. 在验证集包含不同 ISO 级别的样本
  4. 定期用新数据迭代更新数据集(光照条件会随季节变化)
正文完
 0
评论(没有评论)