建筑物损伤分割 YOLOv8对建筑物损伤分割 检测数据集进行处理训练 如何使用Segmentation Models库对建筑物损伤分割与检测数据集进行处理_并使用YOLOv8对建筑物损伤分割与检测数据集进行处理训练以下文字及代码仅供参考。文章目录如何使用Segmentation Models库对建筑物损伤分割与检测数据集进行处理_并使用YOLOv8对建筑物损伤分割与检测数据集进行处理训练1. 数据集准备2. 安装依赖库3. VOC转PNG掩码4. 模型训练训练脚本5. 推理与结果可视化推理脚本建筑物损伤分割与检测数据集voc标注类别名称标注数量Graffiti - 涂鸦1883Drainage - 排水问题1402Wetspot - 湿斑1445Weathering - 风化4066Crack - 裂缝3155Rockpocket - 岩石凹坑525Spalling - 剥落8484WConccor - 水侵蚀混凝土360Cavity - 空洞8119Efflorescence - 泛碱3454Rust - 生锈12844PEquipment - 防护设备1677ExposedRebars - 露筋1755Bearing - 支座1048Hollowareas - 空洞区域1362JTape - 接头胶带923Restformwork - 剩余模板851ACrack - 活动裂缝376EJoint - 伸缩缝450image num - 图像数量6934使用YOLOv8对建筑物损伤分割与检测数据集进行处理我们将遵循以下步骤准备数据集、配置模型参数、训练模型、评估模型性能以及推理和结果可视化。我们这里选择使用Segmentation Models库来完成这个任务。1. 数据集准备假设你的数据集结构如下building_damage_detection/ ├── images/ │ ├── train/ │ │ ├── img1.jpg │ │ └── ... │ ├── val/ │ │ ├── img1.jpg │ │ └── ... │ └── test/ │ ├── img1.jpg │ └── ... └── annotations/ ├── train/ │ ├── img1.xml │ └── ... ├── val/ │ ├── img1.xml │ └── ... └── test/ ├── img1.xml └── ... data_building_damage.yamldata_building_damage.yaml文件内容示例train:./building_damage_detection/images/train/val:./building_damage_detection/images/val/test:./building_damage_detection/images/test/nc:19# 类别数量names:[Graffiti,Drainage,Wetspot,Weathering,Crack,Rockpocket,Spalling,WConccor,Cavity,Efflorescence,Rust,PEquipment,ExposedRebars,Bearing,Hollowareas,JTape,Restformwork,ACrack,EJoint]需要将VOC格式的标注转换为适合Segmentation Models使用的格式如PNG格式的掩码图像。可以编写一个脚本来实现这一转换。2. 安装依赖库确保安装了必要的库pipinstallsegmentation-models-pytorch albumentations opencv-python-headless torch torchvision xmltodict3. VOC转PNG掩码编写脚本将VOC格式的XML文件转换为PNG格式的掩码图像importosimportcv2importnumpyasnpimportxmltodictdefvoc_to_mask(xml_path,class_dict):withopen(xml_path,r)asxml_file:dataxmltodict.parse(xml_file.read())heightint(data[annotation][size][height])widthint(data[annotation][size][width])masknp.zeros((height,width),dtypenp.uint8)ifobjectindata[annotation]:forobjindata[annotation][object]:nameobj[name]cls_idclass_dict[name]polygon[(int(pt[x]),int(pt[y]))forptinobj[polygon][pt]]cv2.fillPoly(mask,[np.array(polygon)],cls_id)returnmask class_dict{Graffiti:0,Drainage:1,Wetspot:2,Weathering:3,Crack:4,Rockpocket:5,Spalling:6,WConccor:7,Cavity:8,Efflorescence:9,Rust:10,PEquipment:11,ExposedRebars:12,Bearing:13,Hollowareas:14,JTape:15,Restformwork:16,ACrack:17,EJoint:18}# 示例调用forfolderin[train,val,test]:annotation_folderf./building_damage_detection/annotations/{folder}/mask_folderf./building_damage_detection/masks/{folder}/os.makedirs(mask_folder,exist_okTrue)forxml_fileinos.listdir(annotation_folder):maskvoc_to_mask(os.path.join(annotation_folder,xml_file),class_dict)cv2.imwrite(os.path.join(mask_folder,xml_file.replace(.xml,.png)),mask)4. 模型训练创建一个Python脚本来开始训练过程。这里我们以PSPNet为例说明如何使用Segmentation Models库。训练脚本fromsegmentation_models_pytorchimportPSPNetfromtorch.utils.dataimportDataLoaderimporttorchfromtorchimportnnfromdatasetimportBuildingDamageDataset# 假设你已实现了一个自定义的数据集类classBuildingDamageDataset(torch.utils.data.Dataset):def__init__(self,images_dir,masks_dir,transformNone):self.images_fps[os.path.join(images_dir,image_id)forimage_idinos.listdir(images_dir)]self.masks_fps[os.path.join(masks_dir,mask_id).replace(.jpg,.png)formask_idinos.listdir(images_dir)]self.transformtransformdef__getitem__(self,i):imagecv2.imread(self.images_fps[i])maskcv2.imread(self.masks_fps[i],0)ifself.transform:transformedself.transform(imageimage,maskmask)imagetransformed[image]masktransformed[mask]returnimage,maskdef__len__(self):returnlen(self.images_fps)ENCODERresnet34ENCODER_WEIGHTSimagenetCLASSES[Graffiti,Drainage,Wetspot,Weathering,Crack,Rockpocket,Spalling,WConccor,Cavity,Efflorescence,Rust,PEquipment,ExposedRebars,Bearing,Hollowareas,JTape,Restformwork,ACrack,EJoint]ACTIVATIONsoftmax2dmodelPSPNet(encoder_nameENCODER,encoder_weightsENCODER_WEIGHTS,classeslen(CLASSES),activationACTIVATION,)preprocessing_fnsmp.encoders.get_preprocessing_fn(ENCODER,ENCODER_WEIGHTS)train_datasetBuildingDamageDataset(./building_damage_detection/images/train/,./building_damage_detection/masks/train/)valid_datasetBuildingDamageDataset(./building_damage_detection/images/val/,./building_damage_detection/masks/val/)train_loaderDataLoader(train_dataset,batch_size16,shuffleTrue,num_workers4)valid_loaderDataLoader(valid_dataset,batch_size4,shuffleFalse,num_workers4)losssmp.utils.losses.CrossEntropyLoss()metrics[smp.utils.metrics.IoU(threshold0.5),]optimizertorch.optim.Adam([dict(paramsmodel.parameters(),lr0.0001),])train_epochsmp.utils.train.TrainEpoch(model,lossloss,metricsmetrics,optimizeroptimizer,devicecuda,verboseTrue,)valid_epochsmp.utils.train.ValidEpoch(model,lossloss,metricsmetrics,devicecuda,verboseTrue,)max_score0foriinrange(0,40):# 训练周期数print(\nEpoch: {}.format(i))train_logstrain_epoch.run(train_loader)valid_logsvalid_epoch.run(valid_loader)ifmax_scorevalid_logs[iou_score]:max_scorevalid_logs[iou_score]torch.save(model,./best_model.pth)print(Model saved!)ifi25:optimizer.param_groups[0][lr]/10print(Decrease decoder learning rate to 1e-5!)5. 推理与结果可视化训练完成后我们可以加载最佳模型对新图片进行预测并将结果可视化。推理脚本importmatplotlib.pyplotasplt best_modeltorch.load(./best_model.pth)defvisualize(image,mask,pred_mask):figure,axplt.subplots(1,3,figsize(10,10))ax[0].imshow(image)ax[0].set_title(Image)ax[1].imshow(mask)ax[1].set_title(Ground Truth)ax[2].imshow(pred_mask)ax[2].set_title(Predicted Mask)plt.show()test_datasetBuildingDamageDataset(./building_damage_detection/images/test/,./building_damage_detection/masks/test/)foriinrange(5):# 可视化前5个测试样本image,gt_masktest_dataset[i]x_tensortorch.from_numpy(image).to(cuda).unsqueeze(0)pr_maskbest_model.predict(x_tensor)pr_maskpr_mask.squeeze().cpu().numpy().round()visualize(image,gt_mask,pr_mask)使用Segmentation Models库对建筑物损伤分割与检测数据集进行处理。请根据实际需求调整相关参数和代码。具体实现细节需要根据Segmentation Models的具体版本和API进行适当调整。

相关新闻

最新新闻

Kali Linux新手入门:从零搭建安全实验室与建立工程化安全思维

Kali Linux新手入门:从零搭建安全实验室与建立工程化安全思维

你有没有过这样的经历:刚接触网络安全,被各种工具和术语搞得晕头转向,听说Kali Linux是“黑客神器”,于是兴冲冲地下载安装,结果要么是系统装不上,要么是装好了却不知道从何下手,最后只能对着那…

2026/9/1 17:37:16
2026青岛海鲜啤屋口碑TOP1,本地人爱去

2026青岛海鲜啤屋口碑TOP1,本地人爱去

青岛地道海鲜啤酒屋大揭秘,本地人私藏好去处 提到青岛的美食,海鲜和啤酒绝对是最具代表性的组合。如果你是第一次来青岛,或者想要体验正宗的青岛风味,找一家好的海鲜啤酒屋就变得非常重要了。今天,我给大家推荐一个让本…

2026/9/1 17:37:16
字节客户端笔试备考指南:算法与计算机基础双线突破

字节客户端笔试备考指南:算法与计算机基础双线突破

字节跳动的客户端笔试,可能是整个秋招里最容易让人误判的笔试之一。很多人一听“客户端”三个字,下意识觉得这是给Android/iOS方向的同学准备的,算法题随便刷刷就行;也有人反过来,觉得客户端笔试跟后端笔试差不多&…

2026/9/1 17:37:16
【听见课堂 HarmonyOS NEXT 实战系列 14】HarmonyOS 数据库升级实战:从 Schema v1 迁移到 v2

【听见课堂 HarmonyOS NEXT 实战系列 14】HarmonyOS 数据库升级实战:从 Schema v1 迁移到 v2

【听见课堂 HarmonyOS NEXT 实战系列 14】HarmonyOS 数据库升级实战:从 Schema v1 迁移到 v2 第一次安装时建表很容易,真正困难的是已经有用户数据后再改表。直接把 CREATE TABLE 增加两个字段,只对新数据库有效;旧设备上的表结构…

2026/9/1 17:37:16
东亚低生育率之谜:不是生不起而是分工慢了

东亚低生育率之谜:不是生不起而是分工慢了

《生育补贴,多半在错误的方向上努力》 ——真正抬高生育成本的,不是孩子,是没换过的家庭脚本东亚人均收入不及欧美,生育率却全球垫底。钱不够?恰恰相反,是钱来得太快。现代化有“一快一慢”:女性…

2026/9/1 17:37:16
2026年3月最新测评:DeepSeek+豆包+kimi+四款高效降AI工具实测

2026年3月最新测评:DeepSeek+豆包+kimi+四款高效降AI工具实测

最近不少快毕业的同学来找我吐槽,说论文卡在降 AI 率这一关过不去。很多人已经改了好几轮,把长句拆成短句,主动变被动,能换的词都换了,但再查一遍,AI 率反而更高了。 其实降 AI 率没那么复杂,我…

2026/9/1 17:32:15