当前位置: 首页 > news >正文

深度学习框架基于UNET __无人机建筑垃圾分割检测数据集 无人机建筑垃圾分割检测系统 自动识别非法倾倒建筑垃圾行为,辅助城管取证 _


🏗️ 数据集类别(共 10 类)

类别英文名中文名称说明
Debris建筑垃圾 / 碎屑建筑物倒塌后的瓦砾、混凝土块、钢筋等残骸
Water水体河流、湖泊、积水区域等
Building_No_Damage无损建筑完整未受损的建筑物
Building_Minor_Damage轻微损坏建筑局部墙体开裂、屋顶破损但主体结构完好
Building_Major_Damage严重损坏建筑大面积坍塌、结构倾斜但尚未完全倒塌
Building_Total_Destruction全部损毁建筑完全倒塌,仅剩废墟
Vehicle车辆各类汽车、卡车、工程车等
Road道路普通道路、公路、桥梁等交通设施
Tree树木绿化植被、林地、树木覆盖区
Pool游泳池住宅区或公共区域的泳池(可能为灾害评估中的特殊目标)
Sand沙地沙滩、沙土区域,常见于沿海或沙漠地区

🔍 应用场景

该数据集主要用于:

  • 灾后评估:地震、台风、洪水等自然灾害后的建筑物损毁程度分析
  • 城市更新监测:识别拆迁现场的建筑垃圾分布
  • 遥感影像分割:基于无人机或卫星图像进行语义分割(如 U-Net、DeepLabV3+)
  • AI 辅助救援决策:快速定位可通行道路、被困区域和危险建筑

💡 注:PoolSand可能是为特定地理环境(如沿海城市)设计的补充类别,有助于提升模型在复杂背景下的泛化能力。


✅ 总结

这是一个典型的高分辨率航拍/遥感图像语义分割数据集,专注于灾害响应与城市基础设施状态评估。其核心任务是识别不同类型的建筑损伤和环境要素,适用于深度学习模型训练(如 Segmentation, Detection, Classification),尤其适合用于智慧城市、应急管理系统、国土测绘等领域。

基于无人机建筑垃圾分割检测数据集的完整实现方案,包含:

UNet 语义分割训练代码(PyTorch)
数据预处理脚本(JSON → Mask)
Web 系统搭建(Django + WebGIS)
模型推理与可视化
系统部署建议


📁 一、数据集概览

项目说明
数据集名称无人机建筑垃圾分割检测数据集
采集设备DJI Mavic 2
图像数量4,494 张
分辨率4000×3000
采集高度60m ~ 120m
视角角度垂直俯视(90°)
标注格式JSON(Polygon)、Mask(PNG)
总大小22.1 GB
任务类型语义分割(Semantic Segmentation)
核心类别Debris(建筑垃圾)
其他类别Water, Building_No_Damage, Minor/Major/Total Damage, Vehicle, Road, Tree, Pool, Sand

💡 虽然你提到“类别:建筑垃圾”,但根据 Recall-Confidence 曲线图,实际是多类语义分割数据集,其中Debris是关键目标。


🗂️ 二、博主建议目录结构

debris_segmentation_system/ ├── data/ │ ├── images/ # 原始图像 │ ├── masks/ # 分割掩码(PNG) │ └── annotations/ # JSON 标注(可选) ├── models/ │ └── unet_debris.pth # 训练好的 UNet 模型 ├── train.py # UNet 训练脚本 ├── infer.py # 推理脚本 ├── web_app/ │ ├── views.py │ ├── models.py │ └── templates/ │ └── index.html └── requirements.txt

📦 三、requirements.txt

torch==2.0.1 torchvision==0.15.2 opencv-python==4.8.0 numpy==1.24.3 Pillow==9.5.0 matplotlib==3.6.3 django==4.2.7 pyecharts==2.0.0 shapely==2.0.0

安装:

pipinstall-r requirements.txt

🔁 四、JSON → PNG 掩码转换(utils/json_to_mask.py

# utils/json_to_mask.pyimportjsonimportcv2importnumpyasnpfrompathlibimportPathdefjson_to_mask(json_path,output_dir,class_name="Debris"):withopen(json_path,'r')asf:data=json.load(f)if'annotations'notindata:returnNoneh,w=data['imageHeight'],data['imageWidth']mask=np.zeros((h,w),dtype=np.uint8)forannindata['annotations']:ifann['label']==class_nameand'polygon'inann:points=np.array(ann['polygon'],dtype=np.int32).reshape(-1,2)cv2.fillPoly(mask,[points],color=255)output_path=Path(output_dir)/f"{Path(json_path).stem}.png"cv2.imwrite(str(output_path),mask)returnoutput_pathif__name__=="__main__":json_dir="data/annotations"mask_dir="data/masks"Path(mask_dir).mkdir(parents=True,exist_ok=True)forjson_fileinPath(json_dir).glob("*.json"):print(f"Processing{json_file.name}")json_to_mask(json_file,mask_dir)print("✅ 所有 JSON 已转为掩码!")

💡 假设 JSON 中的label字段为Debris,且包含polygon数组。


🧠 五、UNet 模型定义(models/unet.py

# models/unet.pyimporttorchimporttorch.nnasnnimporttorch.nn.functionalasFclassDoubleConv(nn.Module):def__init__(self,in_channels,out_channels):super().__init__()self.conv=nn.Sequential(nn.Conv2d(in_channels,out_channels,kernel_size=3,padding=1),nn.BatchNorm2d(out_channels),nn.ReLU(inplace=True),nn.Conv2d(out_channels,out_channels,kernel_size=3,padding=1),nn.BatchNorm2d(out_channels),nn.ReLU(inplace=True))defforward(self,x):returnself.conv(x)classDownSample(nn.Module):def__init__(self,in_channels,out_channels):super().__init__()self.maxpool_conv=nn.Sequential(nn.MaxPool2d(2),DoubleConv(in_channels,out_channels))defforward(self,x):returnself.maxpool_conv(x)classUpSample(nn.Module):def__init__(self,in_channels,out_channels,bilinear=True):super().__init__()self.up=nn.Upsample(scale_factor=2,mode='bilinear',align_corners=True)ifbilinearelsenn.ConvTranspose2d(in_channels//2,in_channels//2,kernel_size=2,stride=2)self.conv=DoubleConv(in_channels,out_channels)defforward(self,x1,x2):x1=self.up(x1)diff_y=x2.size()[2]-x1.size()[2]diff_x=x2.size()[3]-x1.size()[3]x1=F.pad(x1,[diff_x//2,diff_x-diff_x//2,diff_y//2,diff_y-diff_y//2])x=torch.cat([x2,x1],dim=1)returnself.conv(x)classUNet(nn.Module):def__init__(self,n_channels=3,n_classes=2):super().__init__()self.inc=DoubleConv(n_channels,64)self.down1=DownSample(64,128)self.down2=DownSample(128,256)self.down3=DownSample(256,512)self.down4=DownSample(512,512)self.up1=UpSample(1024,256)self.up2=UpSample(512,128)self.up3=UpSample(256,64)self.up4=UpSample(128,64)self.outc=nn.Conv2d(64,n_classes,kernel_size=1)defforward(self,x):x1=self.inc(x)x2=self.down1(x1)x3=self.down2(x2)x4=self.down3(x3)x5=self.down4(x4)x=self.up1(x5,x4)x=self.up2(x,x3)x=self.up3(x,x2)x=self.up4(x,x1)logits=self.outc(x)returntorch.sigmoid(logits)

🚀 六、train.py—— UNet 训练脚本

# train.pyimporttorchimporttorch.nnasnnimporttorch.optimasoptimfromtorch.utils.dataimportDataLoader,DatasetfromPILimportImageimportosimportnumpyasnpclassDebrisDataset(Dataset):def__init__(self,image_dir,mask_dir,transform=None):self.image_dir=image_dir self.mask_dir=mask_dir self.transform=transform self.images=sorted(os.listdir(image_dir))self.masks=sorted(os.listdir(mask_dir))def__len__(self):returnlen(self.images)def__getitem__(self,idx):img_path=os.path.join(self.image_dir,self.images[idx])mask_path=os.path.join(self.mask_dir,self.masks[idx])image=Image.open(img_path).convert("RGB")mask=Image.open(mask_path).convert("L")ifself.transform:image=self.transform(image)mask=self.transform(mask)mask=torch.where(mask>0,torch.tensor(1),torch.tensor(0)).float()returnimage,mask# 数据增强fromtorchvisionimporttransforms transform=transforms.Compose([transforms.Resize((512,512)),transforms.ToTensor(),transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])])# 初始化device=torch.device("cuda"iftorch.cuda.is_available()else"cpu")model=UNet(n_channels=3,n_classes=1).to(device)criterion=nn.BCELoss()optimizer=optim.Adam(model.parameters(),lr=0.001)dataset=DebrisDataset("data/images","data/masks",transform=transform)dataloader=DataLoader(dataset,batch_size=4,shuffle=True)epochs=10forepochinrange(epochs):model.train()running_loss=0.0forimages,masksindataloader:images,masks=images.to(device),masks.to(device)optimizer.zero_grad()outputs=model(images)loss=criterion(outputs,masks)loss.backward()optimizer.step()running_loss+=loss.item()print(f"Epoch [{epoch+1}/{epochs}], Loss:{running_loss/len(dataloader):.4f}")# 保存模型torch.save(model.state_dict(),"models/unet_debris.pth")print("✅ 模型已保存!")

🔍 七、infer.py—— 推理脚本

# infer.pyimporttorchimportcv2importnumpyasnpfromPILimportImagefrommodels.unetimportUNet model=UNet(n_channels=3,n_classes=1)model.load_state_dict(torch.load("models/unet_debris.pth"))model.eval()defpredict_image(image_path):image=Image.open(image_path).convert("RGB")transform=transforms.Compose([transforms.Resize((512,512)),transforms.ToTensor(),transforms.Normalize(mean=[0.485,0.456,0.406],std=[0.229,0.224,0.225])])input_tensor=transform(image).unsqueeze(0).to("cuda"iftorch.cuda.is_available()else"cpu")withtorch.no_grad():output=model(input_tensor)pred_mask=output.squeeze().cpu().numpy()pred_mask=(pred_mask>0.5).astype(np.uint8)*255returnpred_mask# 使用示例mask=predict_image("data/images/test.jpg")cv2.imwrite("output_mask.png",mask)

🌐 八、Django Web 系统(web_app/views.py

fromdjango.shortcutsimportrenderfromdjango.httpimportJsonResponsefromdjango.core.files.storageimportFileSystemStoragefrom.modelsimportDetectionRecordimportcv2importosdefindex(request):returnrender(request,'index.html')defdetect_debris(request):ifrequest.method=="POST":image=request.FILES['image']fs=FileSystemStorage()filename=fs.save(image.name,image)input_path=fs.path(filename)output_mask="static/results/"+filename.replace(".jpg","_mask.png")# 推理mask=predict_image(input_path)cv2.imwrite(output_mask,mask)# 保存记录record=DetectionRecord.objects.create(image=image,result_mask=output_mask)returnJsonResponse({'result_url':fs.url(output_mask),'area':int(mask.sum()/255)})

✅ 总结:应用场景

应用领域说明
环保执法自动识别非法倾倒建筑垃圾行为,辅助城管取证
变化检测对比不同时期航拍图,发现新增垃圾堆
智慧城市集成于城市大脑,实现低空智能巡查
灾后评估快速定位废墟区域,支持救援决策

以上文字及代码仅供参考学习。

http://www.jsqmd.com/news/165450/

相关文章:

  • PyGUI
  • 专业的AIGC智能降重网站怎么选择,万方查重/AIGC降重/论文查重/维普AIGC检测/免费论文查重AIGC智能降重网站口碑推荐 - 品牌推荐师
  • 2025年生物基氨基酸衍生物公司排行榜:氨基酸表面活性剂正规公司有哪些? - 工业品网
  • python基于Vue的怀来葡萄酒品鉴会宣传网站的设计与实现_fzjwn_django Flask pycharm项目
  • 量价分析入门
  • 2025年口碑好的全屋整装十大排名公司、高性价比全包装修公司推荐 - 工业品网
  • 华为 ModelEngine Nexent 零代码平台智能体能力深度实践评测
  • 2025年GEO公共区域优化公司推荐:靠谱的GEO优化公司有哪些? - 工业品网
  • python基于Vue的航空飞机机票预定座位管理系统_v810b_django Flask pycharm项目
  • 2025年抗台风窗价格合理的厂家推荐,抗台风窗知名品牌排名与选购指南 - mypinpai
  • 产品为王!用友HR SaaS斩获2025数字人力资源科技最佳产品奖
  • 跨平台站群系统Word文档导入处理组件
  • 2025年靠谱geo酒店优化geo餐饮优化公司排行榜 - mypinpai
  • 2025年度MBR平板膜厂商排名:mbr平板膜厂商哪家好? - myqiye
  • 2025年闭式冷却塔靠谱生产商、闭式冷却塔加工厂年度排名 - myqiye
  • 网页编辑器自动转存Word图片到OSS的插件
  • python基于Vue的钢材商城销售订单管理系统的设计与实现_17585_django Flask pycharm项目
  • 2025年靠谱工业沙盘模型推荐制造商排行榜,精选工业动态沙盘模型公司推荐 - 工业设备
  • 2025年山东化工材料企业服务口碑榜:万丰科技的售后怎么样? - 工业设备
  • HTML编辑器粘贴Word图片并压缩上传组件
  • 2025三相分离器专业加工厂TOP5权威推荐:选三相分离器制造企业的技巧与厂商挑选指南 - mypinpai
  • 前端粘贴Word公式转MathML的编辑器组件
  • python基于Vue白云山景点门票销售管理系统_d9z5p_django Flask pycharm项目
  • Lua数组
  • 口碑不错的威学教育公司与资质齐全的威学教育机构有哪些? - 工业设备
  • SpringBoot+Vue 网上商品订单转手系统平台完整项目源码+SQL脚本+接口文档【Java Web毕设】
  • python基于Vue的畅销图书商城推荐系统_q33zs_django Flask pycharm项目
  • python基于Vue的scratch在线学习知识分享网站系统的设计与实现_5yu23_django Flask pycharm项目
  • 【onnx-mlir】ShapeHelper功能学习
  • 【毕业设计】SpringBoot+Vue+MySQL 微乐校园pf平台源码+数据库+论文+部署文档