网站备案ip,小程序企业网站开发,wordpress交易平台主题,深圳设计网站培训无人机图像航拍灾后洪水房屋检测数据集训练集6462张#xff0c;验证集318张#xff0c;测试集325张#xff5e;
train: …/train/images
val: …/valid/images
test: …/test/images
nc: 3
names: [‘Flooded’, ‘Not-Flooded’, ‘Partially-Flooded’]无人机航拍灾后洪水…无人机图像航拍灾后洪水房屋检测数据集训练集6462张验证集318张测试集325张train: …/train/imagesval: …/valid/imagestest: …/test/imagesnc: 3names: [‘Flooded’, ‘Not-Flooded’, ‘Partially-Flooded’]无人机航拍灾后洪水房屋检测数据集 数据集总体概览项目内容总图像数量7,105 张图像来源无人机航拍灾后场景含城市/乡村区域图像分辨率多尺寸典型为 1920×1080 或 1080×1920取决于飞行姿态类别数量3 类标注格式YOLO 格式每张图像对应一个.txt标注文件含归一化边界框与类别 ID任务类型目标检测每栋房屋作为一个检测目标标注其洪水状态️ 数据划分详情数据集图像数量占比路径训练集6,462~91.0%../train/images验证集318~4.5%../valid/images测试集325~4.6%../test/images总计7,105100%—✅ 对应的标签路径通常为../train/labels../valid/labels../test/labels 类别定义与语义说明类别 ID类别名称英文类别名称中文语义说明0Flooded完全淹没房屋主体被洪水完全覆盖或水位高于门窗无法正常居住1Not-Flooded未被淹没房屋周围无积水或仅有轻微地面积水结构完好2Partially-Flooded部分淹没房屋部分区域如底层、庭院被淹但上层仍可见 YOLO 配置文件dataset.yaml示例# dataset.yamltrain:../train/imagesval:../valid/imagestest:../test/imagesnc:3names:[Flooded,Not-Flooded,Partially-Flooded]✅ 典型应用场景灾情快速评估通过无人机自动识别受灾房屋比例应急资源调度优先救援“完全淹没”区域居民保险理赔支持提供客观房屋损毁状态证据重建规划辅助统计不同淹没程度房屋分布基于 YOLOv8 的无人机航拍灾后洪水房屋检测智能灾害响应系统的完整代码方案涵盖✅ 数据配置✅ 模型训练含类别不平衡优化✅ 图像/视频/实时流推理✅ 可视化与灾情统计✅ 部署建议 一、项目结构flood_house_detection/ ├── data/ │ ├── train/ │ │ ├── images/# 6462 张│ │ └── labels/# YOLO .txt│ ├── valid/ │ │ ├── images/ │ │ └── labels/ │ ├── test/ │ │ ├── images/ │ │ └── labels/ │ └── dataset.yaml ├── models/# 训练输出├── outputs/# 推理结果├── weights/# 预训练模型可选├── train.py# 训练脚本├── detect.py# 推理核心├── report.py# 灾情统计报告├── utils/ │ └── visualize.py# 标注可视化└── requirements.txt 二、环境依赖requirements.txtultralytics8.2.0 opencv-python4.8.0 numpy1.24.3 matplotlib pandas tqdm scikit-learn安装pipinstall-r requirements.txt 三、数据配置文件dataset.yaml# data/dataset.yamltrain:../train/imagesval:../valid/imagestest:../test/imagesnc:3names:[Flooded,Not-Flooded,Partially-Flooded]✅ 确保labels/文件夹与images/同级且.txt文件名一致。 四、模型训练train.py— 针对类别不平衡优化# train.pyfromultralyticsimportYOLOdeftrain_flood_detector():# 使用 yolov8s平衡精度与速度modelYOLO(yolov8s.pt)resultsmodel.train(datadata/dataset.yaml,imgsz640,epochs100,batch32,device0,# GPU ID无 GPU 改为 cpunameflood_house_yolov8s,projectmodels,patience30,saveTrue,augmentTrue,# 增强策略提升小目标 鲁棒性hsv_h0.015,hsv_s0.7,hsv_v0.4,degrees10.0,translate0.1,scale0.5,fliplr0.5,mosaic1.0,mixup0.1,# 关键启用类别平衡Ultralytics 内部自动处理样本权重# 注YOLOv8 默认在损失函数中使用 class weights基于标签频率)print(f✅ 训练完成最佳模型路径:{results.save_dir}/weights/best.pt)if__name____main__:train_flood_detector()说明YOLOv8 在训练时会自动根据各类标注数量计算类别权重class weights缓解“Flooded”样本少的问题。 五、推理检测detect.py# detect.pyimportcv2importosfromultralyticsimportYOLOimportnumpyasnpclassFloodHouseDetector:def__init__(self,model_pathmodels/flood_house_yolov8s/weights/best.pt):self.modelYOLO(model_path)self.class_names[Flooded,Not-Flooded,Partially-Flooded]self.colors[(0,0,255),(0,255,0),(255,165,0)]# BGR: Red, Green, Orangedefdetect_image(self,image_path,conf0.3,save_diroutputs):imagecv2.imread(image_path)resultsself.model(image,confconf)annotatedresults[0].plot()# 自动使用内置颜色os.makedirs(save_dir,exist_okTrue)out_pathos.path.join(save_dir,os.path.basename(image_path))cv2.imwrite(out_path,annotated)# 统计结果boxesresults[0].boxes counts{name:0fornameinself.class_names}forclsinboxes.cls:counts[self.class_names[int(cls)]]1print(f 检测结果:{counts})returnannotated,countsdefdetect_video(self,video_path,conf0.3):capcv2.VideoCapture(video_path)fpsint(cap.get(cv2.CAP_PROP_FPS))wint(cap.get(cv2.CAP_PROP_FRAME_WIDTH))hint(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))out_pathoutputs/detected_os.path.basename(video_path)outcv2.VideoWriter(out_path,cv2.VideoWriter_fourcc(*mp4v),fps,(w,h))total_counts{name:0fornameinself.class_names}frame_id0whilecap.isOpened():ret,framecap.read()ifnotret:breakresultsself.model(frame,confconf)[0]out.write(results.plot())# 累计每帧检测数可选仅关键帧统计ifframe_id%300:# 每秒统计一次假设30fpsforclsinresults.boxes.cls:total_counts[self.class_names[int(cls)]]1frame_id1cap.release()out.release()print(f✅ 视频检测完成 →{out_path})print(f 累计检测:{total_counts})returntotal_counts 六、灾情统计报告report.py# report.pyimportosfromdetectimportFloodHouseDetectorimportpandasaspddefgenerate_disaster_report(test_dirdata/test/images,output_csvoutputs/disaster_report.csv):detectorFloodHouseDetector()report_data[]forimg_nameinos.listdir(test_dir):ifimg_name.lower().endswith((.jpg,.png,.jpeg)):img_pathos.path.join(test_dir,img_name)_,countsdetector.detect_image(img_path,conf0.3,save_diroutputs/test_results)row{image:img_name,**counts}report_data.append(row)dfpd.DataFrame(report_data)df.to_csv(output_csv,indexFalse)print(f✅ 灾情报告已保存至:{output_csv})# 打印汇总totaldf.sum(numeric_onlyTrue)print(\n 灾情总览:)forcls,numintotal.items():print(f -{cls}:{int(num)}栋)if__name____main__:generate_disaster_report()▶️ 七、使用示例1. 训练模型python train.py2. 检测单张图像fromdetectimportFloodHouseDetector detectorFloodHouseDetector()img,statsdetector.detect_image(test_images/flood_area.jpg)3. 生成灾情报告python report.py4. 检测视频用于无人机回传视频流detectorFloodHouseDetector()detector.detect_video(drone_footage.mp4)️ 八、部署与工程化建议场景方案应急指挥中心部署 Web 系统前端上传图像 → 后端 YOLOv8 推理 → 返回热力图统计无人机端侧导出 TensorRT 引擎yolo export modelbest.pt formatengine批量灾评使用report.py对整个测试集生成 CSV导入 GIS 系统低资源设备使用yolov8nimgsz480加速推理防汛抗旱指挥部、应急管理局、保险公司、测绘单位等场景实现“空天地一体化”智能灾评。