机雾天航拍挑战:11,600张雾霾场景目标检测数据集全解析

发布时间:2026/7/8 12:52:06
机雾天航拍挑战:11,600张雾霾场景目标检测数据集全解析 无人机雾天航拍挑战11,600张雾霾场景目标检测数据集全解析雾霾天气下无人机视觉系统常面临“看不清、测不准”的困境——图像对比度骤降、目标纹理模糊导致检测模型性能断崖式下跌。学术界与工业界亟需能覆盖合成雾与真实雾的多样化基准数据集。本文深度解读一个包含11,600张图像、38万标注实例的雾霾场景目标检测数据集并提供基于Detectron2和YOLOv8的鲁棒性训练代码与域适应策略助力复杂天气下的无人机智能感知。 数据集核心档案属性详情数据集名称无人机雾霾场景目标检测数据集数据总量11,600张图像 (约33.5 GB)标注实例数约383,689个边界框数据模态清晰图像、合成雾霾图像、真实雾霾图像主要目标车辆低空遥感视角标注格式COCO JSON (水平矩形框)推荐输入尺寸1333×800 (训练时Resize)任务类型目标检测 (Object Detection) 数据集深度剖析️ 三重模态覆盖从实验室到真实场景该数据集的最大特色在于三模态共存设计清晰图像 (Clear)作为基础参考提供无退化条件下的目标特征。合成雾霾图像 (Synthetic Fog)基于物理大气散射模型对清晰图像叠加不同浓度、均匀性的雾效。优点是可批量生成、雾浓度可控便于进行鲁棒性预训练和消融实验。真实雾霾图像 (Real Fog)在实际雾霾天气下由无人机采集包含真实环境中雾气浓度不均、光照复杂等特性是验证模型实际泛化能力的试金石。这种设计支持丰富的实验范式清晰→合成雾(模拟退化)、合成雾→真实雾(域适应)、以及清晰合成雾真实雾联合训练 (数据增广)。 专注低空车辆检测任务聚焦数据集专注于车辆这一单一类别但视角为低空遥感俯视图车辆呈现尺度小、密度高、方向各异的特点对检测器的细粒度特征提取和抗干扰能力提出更高要求。标注采用COCO格式的矩形框便于接入主流检测框架。 实战代码鲁棒性检测训练与域适应以下提供基于Detectron2(Faster R-CNN) 和YOLOv8的训练配置与核心代码重点展示如何处理多模态数据、评估雾天鲁棒性。1. 环境准备# 安装Detectron2 (PyTorch 1.8)pipinstalldetectron2-fhttps://dl.fbaipublicfiles.com/detectron2/wheels/cu113/torch1.10/index.html# 或安装YOLOv8pipinstallultralytics2. 数据准备与COCO格式转换假设原始数据按以下结构存放data/ ├── clear/ # 清晰图 ├── synthetic_fog/ # 合成雾图 ├── real_fog/ # 真实雾图 └── annotations/ # 对应的三个COCO JSON文件编写脚本将三个子集合并或分别生成train/val的JSON文件。关键代码为每个标注添加fog_type字段便于分析。importjsondefadd_fog_type_to_json(json_path,fog_type):withopen(json_path,r)asf:datajson.load(f)# 为每张图像添加自定义字段可选forimgindata[images]:img[fog_type]fog_type# 保存新JSONwithopen(f{fog_type}_annotations.json,w)asf:json.dump(data,f)# 调用示例add_fog_type_to_json(annotations/clear.json,clear)3. Detectron2 训练配置 (支持多模态混合训练)以下配置展示如何加载包含清晰和合成雾的混合数据集并引入数据增强中的合成雾模拟进一步提升鲁棒性。# # 场景无人机雾霾场景车辆检测 - 基于Detectron2 (Faster R-CNN)# 功能支持多模态数据加载、雾天鲁棒性评估# 依赖detectron2, torch, opencv-python# fromdetectron2.engineimportDefaultTrainerfromdetectron2.configimportget_cfgfromdetectron2importmodel_zoofromdetectron2.dataimportDatasetCatalog,MetadataCatalogfromdetectron2.dataimporttransformsasTfromdetectron2.dataimportdetection_utilsasutilsfromdetectron2.dataimportbuild_detection_train_loaderimportdetectron2.data.transformsasTimportos,json,cv2importnumpyasnp# -------------------- 1. 注册数据集 --------------------defget_fog_dicts(json_file,img_dir):读取COCO格式JSON返回Detectron2所需的list of dictwithopen(json_file,r)asf:datajson.load(f)dataset_dicts[]forimg_infoindata[images]:record{}record[file_name]os.path.join(img_dir,img_info[file_name])record[image_id]img_info[id]record[height]img_info[height]record[width]img_info[width]# 获取标注annos[annoforannoindata[annotations]ifanno[image_id]img_info[id]]objs[]forannoinannos:bboxanno[bbox]# [x, y, w, h]bbox[bbox[0],bbox[1],bbox[0]bbox[2],bbox[1]bbox[3]]# 转为[x1,y1,x2,y2]objs.append({bbox:bbox,bbox_mode:BoxMode.XYXY_ABS,category_id:0,# 仅车辆一类iscrowd:0})record[annotations]objs dataset_dicts.append(record)returndataset_dicts# 注册训练集混合清晰合成雾fordin[train,val]:DatasetCatalog.register(ffog_{d},lambdadd:get_fog_dicts(fdata/annotations/{d}.json,fdata/{d}_images))MetadataCatalog.get(ffog_{d}).set(thing_classes[vehicle])# -------------------- 2. 自定义增强在线合成雾 (关键鲁棒性策略) --------------------classRandomSyntheticFog(T.Transform):在训练时随机对清晰图像叠加物理雾效模拟域随机化def__init__(self,img,beta_range(0.5,2.0),A0.8):self.betanp.random.uniform(*beta_range)# 散射系数self.AA# 大气光强度defapply_image(self,img):# 实现大气散射模型: I(x) J(x)*t(x) A*(1-t(x)), texp(-beta*depth)# 需要深度图此处简化假设深度与像素位置相关底部近、顶部远h,wimg.shape[:2]depthnp.linspace(0,1,h).reshape(h,1)# 简单垂直深度分布depthnp.tile(depth,(1,w))tnp.exp(-self.beta*depth)tnp.clip(t,0.2,1.0)# 防止透射率过小# 雾化foggyimg*t[...,np.newaxis]self.A*(1-t[...,np.newaxis])*255returnfoggy.astype(np.uint8)defapply_coords(self,coords):returncoordsclassMyMapper:自定义数据映射器在标准增强后添加合成雾def__init__(self,cfg,is_trainTrue):self.cfgcfg self.is_trainis_train# 标准增强: 随机翻转、缩放、裁剪等self.tfm_gensutils.build_transform_gen(cfg,is_train)def__call__(self,dataset_dict):# 读取图像imgcv2.imread(dataset_dict[file_name])imgcv2.cvtColor(img,cv2.COLOR_BGR2RGB)# 应用标准增强aug_inputT.AugInput(img)transformsT.TransformList(self.tfm_gens)imgtransforms(aug_input).image# 以50%概率添加合成雾 (仅训练时)ifself.is_trainandnp.random.rand()0.5:fog_transformRandomSyntheticFog(img,beta_range(0.3,1.8))imgfog_transform.apply_image(img)# 转换格式imagetorch.as_tensor(np.ascontiguousarray(img.transpose(2,0,1)))dataset_dict[image]image# 更新标注坐标 (略需根据transforms调整)returndataset_dict# 在Trainer中替换loaderclassFogTrainer(DefaultTrainer):classmethoddefbuild_train_loader(cls,cfg):returnbuild_detection_train_loader(cfg,mapperMyMapper(cfg,is_trainTrue))# -------------------- 3. 模型训练 --------------------cfgget_cfg()cfg.merge_from_file(model_zoo.get_config_file(COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml))cfg.DATASETS.TRAIN(fog_train,)cfg.DATASETS.TEST(fog_val,)cfg.DATALOADER.NUM_WORKERS4cfg.MODEL.WEIGHTSmodel_zoo.get_checkpoint_url(COCO-Detection/faster_rcnn_R_50_FPN_3x.yaml)cfg.SOLVER.IMS_PER_BATCH8cfg.SOLVER.BASE_LR0.0025cfg.SOLVER.MAX_ITER6000cfg.MODEL.ROI_HEADS.NUM_CLASSES1cfg.TEST.EVAL_PERIOD1000os.makedirs(./output,exist_okTrue)trainerFogTrainer(cfg)trainer.resume_or_load(resumeFalse)trainer.train()# -------------------- 4. 评估雾天泛化性 --------------------# 在真实雾天测试集上评估cfg.DATASETS.TEST(fog_real_val,)cfg.MODEL.WEIGHTSos.path.join(./output,model_final.pth)evaluatorCOCOEvaluator(fog_real_val,cfg,False,output_dir./eval_real_fog/)val_loaderbuild_detection_test_loader(cfg,fog_real_val)print(inference_on_dataset(trainer.model,val_loader,evaluator))# 结束 4. YOLOv8 快速训练与域适应对于YOLOv8可使用其原生支持的多数据集训练并引入域适应损失如通过对抗训练。此处给出训练脚本与评估命令。# train_yolov8_fog.pyfromultralyticsimportYOLO# 加载预训练模型modelYOLO(yolov8x.pt)# 数据配置文件 (定义清晰、合成雾、真实雾三个数据集)data_yaml path: ./data train: - clear/images/train - synthetic_fog/images/train val: real_fog/images/val nc: 1 names: [vehicle] # 训练 (使用多尺度、Mosaic增强)resultsmodel.train(datadata_yaml,epochs30,imgsz1333,batch16,device0,augmentTrue,mosaic1.0,mixup0.2,copy_paste0.3,# 关键保留训练日志projectfoggy_detection,nameyolov8_fog_mix)# 评估模型在真实雾上的表现metricsmodel.val(data./data/real_fog/test.yaml,splittest)print(fReal Fog mAP0.5:{metrics.box.map50:.4f}) 关键注释与优化建议域适应策略若真实雾数据稀少可采用无监督域适应 (UDA)。在Detectron2中可尝试引入DAFaster通过梯度反转层 (GRL) 对齐清晰域与雾域的特征分布。小目标检测优化无人机视角车辆多为小目标。可在训练时使用切块检测 (SAHI)策略或在数据加载中增加随机裁剪放大(RandomCrop with resize) 增强。去雾预处理作为对比实验可加载预训练的去雾网络(如AOD-Net) 对输入图像进行复原再送入检测器观察mAP提升。评估指标细化务必分别报告模型在清晰、合成雾、真实雾三个子集上的mAP以量化鲁棒性。真实雾上的性能下降幅度 (Drop) 是衡量模型实用性的核心指标。️ 拓展思考与行业趋势物理模型与数据驱动结合未来方向是将大气散射模型作为可微分模块嵌入网络实现端到端的去雾检测联合优化。多传感器融合雾天时可见光受限融合红外或毫米波雷达数据是提升系统鲁棒性的重要路径多模态数据集将成为新热点。边缘端部署将训练好的模型通过TensorRT或NCNN部署到无人机机载计算单元 (如Jetson Orin)需进行量化与剪枝并测试实际雾天环境下的推理帧率。 文章标签#无人机巡检 #雾天数据集 #目标检测 #域适应 #Detectron2 #YOLOv8 #低照度图像 #鲁棒性评估 #复杂天气感知 #自动驾驶