news 2025/12/30 10:11:00

航拍无人机灾后洪水房屋检测数据集 如何构建基于深度学习灾后无人机YOLOV8房屋检测系统

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
航拍无人机灾后洪水房屋检测数据集 如何构建基于深度学习灾后无人机YOLOV8房屋检测系统

无人机图像航拍灾后洪水房屋检测数据集

训练集6462张,验证集318张,测试集325张~

train: …/train/images
val: …/valid/images
test: …/test/images

nc: 3
names: [‘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.txt

ultralytics==8.2.0 opencv-python==4.8.0 numpy==1.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(平衡精度与速度)model=YOLO("yolov8s.pt")results=model.train(data="data/dataset.yaml",imgsz=640,epochs=100,batch=32,device=0,# GPU ID;无 GPU 改为 "cpu"name="flood_house_yolov8s",project="models",patience=30,save=True,augment=True,# 增强策略:提升小目标 & 鲁棒性hsv_h=0.015,hsv_s=0.7,hsv_v=0.4,degrees=10.0,translate=0.1,scale=0.5,fliplr=0.5,mosaic=1.0,mixup=0.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_path="models/flood_house_yolov8s/weights/best.pt"):self.model=YOLO(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,conf=0.3,save_dir="outputs"):image=cv2.imread(image_path)results=self.model(image,conf=conf)annotated=results[0].plot()# 自动使用内置颜色os.makedirs(save_dir,exist_ok=True)out_path=os.path.join(save_dir,os.path.basename(image_path))cv2.imwrite(out_path,annotated)# 统计结果boxes=results[0].boxes counts={name:0fornameinself.class_names}forclsinboxes.cls:counts[self.class_names[int(cls)]]+=1print(f"📊 检测结果:{counts}")returnannotated,countsdefdetect_video(self,video_path,conf=0.3):cap=cv2.VideoCapture(video_path)fps=int(cap.get(cv2.CAP_PROP_FPS))w=int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))h=int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))out_path="outputs/detected_"+os.path.basename(video_path)out=cv2.VideoWriter(out_path,cv2.VideoWriter_fourcc(*'mp4v'),fps,(w,h))total_counts={name:0fornameinself.class_names}frame_id=0whilecap.isOpened():ret,frame=cap.read()ifnotret:breakresults=self.model(frame,conf=conf)[0]out.write(results.plot())# 累计每帧检测数(可选:仅关键帧统计)ifframe_id%30==0:# 每秒统计一次(假设30fps)forclsinresults.boxes.cls:total_counts[self.class_names[int(cls)]]+=1frame_id+=1cap.release()out.release()print(f"✅ 视频检测完成 →{out_path}")print(f"📈 累计检测:{total_counts}")returntotal_counts

📊 六、灾情统计报告(report.py

# report.pyimportosfromdetectimportFloodHouseDetectorimportpandasaspddefgenerate_disaster_report(test_dir="data/test/images",output_csv="outputs/disaster_report.csv"):detector=FloodHouseDetector()report_data=[]forimg_nameinos.listdir(test_dir):ifimg_name.lower().endswith(('.jpg','.png','.jpeg')):img_path=os.path.join(test_dir,img_name)_,counts=detector.detect_image(img_path,conf=0.3,save_dir="outputs/test_results")row={"image":img_name,**counts}report_data.append(row)df=pd.DataFrame(report_data)df.to_csv(output_csv,index=False)print(f"✅ 灾情报告已保存至:{output_csv}")# 打印汇总total=df.sum(numeric_only=True)print("\n🌍 灾情总览:")forcls,numintotal.items():print(f" -{cls}:{int(num)}栋")if__name__=="__main__":generate_disaster_report()

▶️ 七、使用示例

1. 训练模型

python train.py

2. 检测单张图像

fromdetectimportFloodHouseDetector detector=FloodHouseDetector()img,stats=detector.detect_image("test_images/flood_area.jpg")

3. 生成灾情报告

python report.py

4. 检测视频(用于无人机回传视频流)

detector=FloodHouseDetector()detector.detect_video("drone_footage.mp4")

🛠️ 八、部署与工程化建议

场景方案
应急指挥中心部署 Web 系统:前端上传图像 → 后端 YOLOv8 推理 → 返回热力图+统计
无人机端侧导出 TensorRT 引擎:
yolo export model=best.pt format=engine
批量灾评使用report.py对整个测试集生成 CSV,导入 GIS 系统
低资源设备使用yolov8n+imgsz=480加速推理


防汛抗旱指挥部、应急管理局、保险公司、测绘单位等场景,实现“空天地一体化”智能灾评

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/25 11:12:33

如何用AutoHotkey实现输入效率翻倍?

如何用AutoHotkey实现输入效率翻倍? 【免费下载链接】AutoHotkey 项目地址: https://gitcode.com/gh_mirrors/autohotke/AutoHotkey 你是否曾经在写代码时突然发现中英文符号混输导致编译错误?或者在会议中手忙脚乱地寻找语言栏切换输入法&#…

作者头像 李华
网站建设 2025/12/23 3:42:27

Cocos SDK集成终极指南:多平台适配与组件化封装高效方法

Cocos SDK集成终极指南:多平台适配与组件化封装高效方法 【免费下载链接】cocos-engine Cocos simplifies game creation and distribution with Cocos Creator, a free, open-source, cross-platform game engine. Empowering millions of developers to create hi…

作者头像 李华
网站建设 2025/12/25 10:30:38

算法:基础算法做题记录

点击查看代码P4047 [JSOI2010] 部落划分要求距离最远的部落距离最小,依然二分答案。但是判定时需要贪心地选择最近的两个部落合并,需要用到并查集维护集合。时间复杂度 �(�2log⁡��(�))O(n 2log…

作者头像 李华
网站建设 2025/12/29 4:33:59

Wan2.2-T2V-A14B生成结果的可控性与随机性平衡策略

Wan2.2-T2V-A14B生成结果的可控性与随机性平衡策略 在影视预演、广告创意和虚拟内容快速迭代的今天,AI视频生成已不再是“能不能做”的问题,而是“做得多好、多可控、多高效”的较量。传统T2V(文本到视频)模型常陷入两难&#xff…

作者头像 李华
网站建设 2025/12/23 3:19:50

5步掌握无名杀自定义武将开发:从入门到精通的完整教程

5步掌握无名杀自定义武将开发:从入门到精通的完整教程 【免费下载链接】noname 项目地址: https://gitcode.com/GitHub_Trending/no/noname 你是否曾经想要在无名杀游戏中创建属于自己的独特武将,却不知道从何入手?想要快速创建第一个…

作者头像 李华
网站建设 2025/12/30 0:14:36

ComfyUI-MultiGPU:单卡双倍模型容量的低成本扩容方案

你是否曾经面对这样的困境:心仪的最新大模型刚刚发布,却因为显存不足而无法在自己的设备上运行?或者想要生成更高分辨率的图像,却被显卡的物理限制所束缚?今天,我们将揭示如何通过智能分布式显存管理技术&a…

作者头像 李华