自然灾害类 滑坡落石检测数据集就 检测道路塌陷:倒树识别 深度学习基于YOLOv11自然灾害滑坡落石检测系统
灾害类-自然灾害检测数据集21357张存在数据增强yolo和voc两种标注方式4类标注数量landslide:滑坡 7818fallen tree:倒树 11037stone:落石 25155road collapse:道路塌陷 6416image num: 213572.模型代码模型训练使用yolov11n训练30个epoch训练结果map如描述图所示。3.qt界面运行界面采用pyqt编写本项目已经训练好模型配置好环境后可直接使用运行效果见描述图像自然灾害滑坡‑落石‑道路坍塌‑倒树检测系统完整代码类别landslide滑坡、stone落石、road_collapse道路坍塌、fallen_tree倒伏树木1、数据集yaml配置 natural_disaster.yamlnc:4names:0:landslide1:stone2:road_collapse3:fallen_treetrain:./datasets/natural_disaster/images/trainval:./datasets/natural_disaster/images/valtest:./datasets/natural_disaster/images/test2、YOLOv11训练脚本 train_natural.pyfromultralyticsimportYOLOif__name____main__:# 加载yolo11n预训练权重modelYOLO(yolo11n.pt)train_resultmodel.train(datanatural_disaster.yaml,epochs60,imgsz640,batch8,device0,workers2,patience12,conf0.25,iou0.45,projectnatural_disaster_system,nameyolo11n_exp)# 模型评估val_metricmodel.val()print(fmAP0.5:{val_metric.box.map50})3、PyQt5简易GUI检测系统对应界面qt_disaster.pyimportsysimportcv2fromPyQt5.QtWidgetsimport*fromPyQt5.QtGuiimport*fromPyQt5.QtCoreimport*fromultralyticsimportYOLOclassDisasterDetectWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(基于YOLOv11的自然灾害检测系统)self.resize(1200,800)self.modelYOLO(./weights/best.pt)# 控件self.label_imgQLabel()self.label_img.setFixedSize(550,550)self.btn_openQPushButton(选择图片)self.btn_open.clicked.connect(self.open_image)self.tableQTableWidget()self.table.setColumnCount(5)self.table.setHorizontalHeaderLabels([序号,类别,置信度,xmin,ymin,xmax,ymax][0:5])layoutQHBoxLayout()left_layoutQVBoxLayout()left_layout.addWidget(self.label_img)left_layout.addWidget(self.table)right_layoutQVBoxLayout()right_layout.addWidget(self.btn_open)layout.addLayout(left_layout)layout.addLayout(right_layout)centralQWidget()central.setLayout(layout)self.setCentralWidget(central)defopen_image(self):file,_QFileDialog.getOpenFileName(self,选择图片,,*.jpg *.png)ifnotfile:returnresself.model.predict(sourcefile,conf0.3,saveFalse)[0]imgcv2.imread(file)imgcv2.cvtColor(img,cv2.COLOR_BGR2RGB)self.table.setRowCount(0)foridx,boxinenumerate(res.boxes):cls_nameres.names[int(box.cls)]conffloat(box.conf)x1,y1,x2,y2map(int,box.xyxy[0])#绘制框cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2)cv2.putText(img,f{cls_name}{conf:.2f},(x1,y1-8),cv2.FONT_HERSHEY_SIMPLEX,0.6,(0,255,0),1)#表格插入rowself.table.rowCount()self.table.insertRow(row)self.table.setItem(row,0,QTableWidgetItem(str(idx1)))self.table.setItem(row,1,QTableWidgetItem(cls_name))self.table.setItem(row,2,QTableWidgetItem(f{conf:.2f}))self.table.setItem(row,3,QTableWidgetItem(f[{x1},{y1},{x2},{y2}]))qimgQImage(img.data,img.shape[1],img.shape[0],QImage.Format_RGB888)self.label_img.setPixmap(QPixmap.fromImage(qimg).scaled(self.label_img.size(),Qt.KeepAspectRatio))if__name____main__:appQApplication(sys.argv)winDisasterDetectWindow()win.show()sys.exit(app.exec_())4、环境依赖pipinstallultralytics opencv-python pyqt55、VOC转YOLO标签转换脚本importos,xml.etree.ElementTreeasET classes[landslide,stone,road_collapse,fallen_tree]defxml_to_yolo(xml_file,txt_out,w_img,h_img):treeET.parse(xml_file)roottree.getroot()lines[]forobjinroot.findall(object):clsobj.find(name).textifclsnotinclasses:continuecidclasses.index(cls)bobj.find(bndbox)xmin,yminfloat(b.find(xmin).text),float(b.find(ymin).text)xmax,ymaxfloat(b.find(xmax).text),float(b.find(ymax).text)cx((xminxmax)/2)/w_img cy((yminymax)/2)/h_img bw(xmax-xmin)/w_img bh(ymax-ymin)/h_img lines.append(f{cid}{cx:.6f}{cy:.6f}{bw:.6f}{bh:.6f})withopen(txt_out,w,encodingutf8)asf:f.write(\n.join(lines))使用说明将训练完成得到best.pt权重放到./weights/目录运行qt_disaster.py直接启动可视化检测系统支持图片检测输出类别、置信度、坐标到表格。训练运行python train_natural.py。。