深度学习泥石流目标检测系统 yolo训练识别泥石流数据集,落石数据集 滑坡检测 泥石流检测数据集进行模型训练

发布时间:2026/10/31 2:15:26
深度学习泥石流目标检测系统 yolo训练识别泥石流数据集,落石数据集 滑坡检测 泥石流检测数据集进行模型训练 泥石流目标检测数据集6653张23000标注yolo和voc两种标注方式标注数量debris-flow: 11111muddy: 634rock: 11487图像数量image num: 6653声明文章代码仅供参考构建一个泥石流目标检测系统我们需要处理包含6653张图像的数据集并且这些图像使用YOLO和VOC两种标注方式。我们将使用深度学习模型来进行目标检测任务。以下是详细的步骤和代码实现数据准备确保数据集格式正确。环境部署安装必要的库。数据预处理对图像进行归一化等预处理操作。模型定义定义用于目标检测的深度学习模型例如 YOLOv5 或 Faster R-CNN。训练模型编写训练脚本。评估模型编写评估脚本。用户界面创建带有和不带 UI 的预测脚本。数据准备假设你已经有一个包含6653张遥感图像的数据集并且标注格式为适合目标检测任务的格式例如YOLO 和 VOC 格式。数据集结构示例dataset/ ├── images/ │ ├── train/ │ │ ├── image1.jpg │ │ ├── image2.jpg │ │ └── ... │ ├── valid/ │ │ ├── image3.jpg │ │ ├── image4.jpg │ │ └── ... │ └── test/ │ ├── image5.jpg │ ├── image6.jpg │ └── ... ├── labels_yolo/ │ ├── train/ │ │ ├── image1.txt │ │ ├── image2.txt │ │ └── ... │ ├── valid/ │ │ ├── image3.txt │ │ ├── image4.txt │ │ └── ... │ └── test/ │ ├── image5.txt │ ├── image6.txt │ └── ... └── dataset.yamldataset.yaml内容如下train:img_dir:./images/trainann_dir:./labels_yolo/trainval:img_dir:./images/validann_dir:./labels_yolo/validtest:img_dir:./images/testann_dir:./labels_yolo/testnc:3names:[debris-flow,muddy,rock]环境部署说明确保你已经安装了必要的库如上所述。安装依赖# 创建虚拟环境可选conda create-nlandslide_detection_envpython3.8conda activate landslide_detection_env# 安装PyTorchpipinstalltorch1.9torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu111# 安装其他依赖pipinstallopencv-python pyqt5 scikit-learn pandas matplotlib seaborn onnxruntime xml.etree.ElementTree albumentations yolov5数据预处理data_preprocessing.py我们将使用albumentations进行图像预处理。[titleData Preprocessing for Landslide Detection]importosimportcv2importnumpyasnpfromtqdmimporttqdmfromalbumentationsimport(HorizontalFlip,VerticalFlip,RandomRotate90,Transpose,ShiftScaleRotate,HueSaturationValue,Blur,OpticalDistortion,GridDistortion,CLAHE,RandomBrightnessContrast,RandomGamma,ToFloat,Normalize,Compose,NoOp,OneOf,Resize)fromalbumentations.pytorchimportToTensorV2importshutildefpreprocess_image(image_path,label_path,output_img_path,output_label_path,patch_size512):imagecv2.imread(image_path)withopen(label_path,r)asf:linesf.readlines()bboxes[]class_ids[]forlineinlines:partsline.strip().split()class_idint(parts[0])bboxlist(map(float,parts[1:]))bboxes.append(bbox)class_ids.append(class_id)transformA.Compose([Resize(heightpatch_size,widthpatch_size),HorizontalFlip(p0.5),VerticalFlip(p0.5),Rotate(limit45,p0.5),RandomBrightnessContrast(p0.2),ToFloat(max_value255),Normalize(mean(0.485,0.456,0.406),std(0.229,0.224,0.225)),ToTensorV2(),],bbox_paramsA.BboxParams(formatyolo,min_visibility0.5,label_fields[class_labels]))transformedtransform(imageimage,bboxesbboxes,class_labelsclass_ids)image_transformedtransformed[image]bboxes_transformedtransformed[bboxes]class_ids_transformedtransformed[class_labels]output_img_pathf{output_img_path}.jpgoutput_label_pathf{output_label_path}.txtcv2.imwrite(output_img_path,(image_transformed.permute(1,2,0).numpy()*255).astype(np.uint8))withopen(output_label_path,w)asf:forbbox,cls_idinzip(bboxes_transformed,class_ids_transformed):f.write(f{cls_id}{ .join(map(str,bbox))}\n)if__name____main__:dataset_pathpath/to/datasetoutput_dataset_pathpath/to/output_datasetsets[train,valid,test]forsinsets:img_diros.path.join(dataset_path,images,s)label_diros.path.join(dataset_path,labels_yolo,s)output_img_diros.path.join(output_dataset_path,images,s)output_label_diros.path.join(output_dataset_path,labels_yolo,s)os.makedirs(output_img_dir,exist_okTrue)os.makedirs(output_label_dir,exist_okTrue)forimg_filenameintqdm(os.listdir(img_dir)):img_pathos.path.join(img_dir,img_filename)label_filenameimg_filename.replace(.jpg,.txt)label_pathos.path.join(label_dir,label_filename)output_img_pathos.path.join(output_img_dir,img_filename[:-4])output_label_pathos.path.join(output_label_dir,label_filename[:-4])preprocess_image(img_path,label_path,output_img_path,output_label_path)请将path/to/dataset和path/to/output_dataset替换为实际的数据集路径。模型定义与训练train.py我们将使用 YOLOv5 进行目标检测任务。首先克隆 YOLOv5 仓库并安装依赖gitclone https://github.com/ultralytics/yolov5.gitcdyolov5 pipinstall-rrequirements.txt然后编写训练脚本[titleTraining Script for Landslide Detection using YOLOv5]importtorchfrompathlibimportPath# 设置工作目录ROOTPath(/path/to/yolov5).resolve()WEIGHTS_DIRROOT/runs/train# 加载YOLov5模型modeltorch.hub.load(ROOT,custom,path/path/to/best.pt,sourcelocal)# 训练参数hyp{lr0:0.01,lrf:0.2,momentum:0.937,weight_decay:0.0005,warmup_epochs:3.0,warmup_momentum:0.8,warmup_bias_lr:0.1,box:0.05,cls:0.5,cls_pw:1.0,obj:1.0,obj_pw:1.0,iou_t:0.20,anchor_t:4.0,fl_gamma:0.0,hsv_h:0.015,hsv_s:0.7,hsv_v:0.4,degrees:0.0,translate:0.1,scale:0.5,shear:0.0,perspective:0.0,flipud:0.0,fliplr:0.5,mosaic:1.0,mixup:0.0,copy_paste:0.0}# 训练命令!python{ROOT}/train.py \--img512\--batch16\--epochs50\--data/path/to/dataset.yaml \--cfg{ROOT}/models/yolov5s.yaml \--weights\--cache \--device0\--multi-scale \--optimizer SGD \--sync-bn \--cos-lr \--label-smoothing0.1\--patience10\--freeze10\--save-period10\--project runs/train \--name yolov5s_landslide_detection \--exist-ok请将/path/to/yolov5、/path/to/best.pt和/path/to/dataset.yaml替换为实际的路径。评估模型evaluate.py[titleEvaluation Script for Landslide Detection]importtorchfrompathlibimportPathimportyaml# 设置工作目录ROOTPath(/path/to/yolov5).resolve()# 加载YOLov5模型modeltorch.hub.load(ROOT,custom,path/path/to/best.pt,sourcelocal)# 加载数据集配置文件withopen(/path/to/dataset.yaml,r)asf:data_configyaml.safe_load(f)# 测试数据集路径test_images_pathdata_config[test][img_dir]# 评估命令!python{ROOT}/val.py \--data/path/to/dataset.yaml \--weights/path/to/best.pt \--task val \--img512\--conf0.25\--iou0.45\--agnostic-nmsFalse\--augmentFalse\--halfFalse\--device0\--verboseTrue\--save-txtTrue\--save-confTrue\--save-jsonTrue\--project runs/val \--name yolov5s_landslide_detection \--exist-ok请将/path/to/yolov5、/path/to/best.pt和/path/to/dataset.yaml替换为实际的路径。用户界面ui.py我们将使用 PyQt5 创建一个简单的 GUI 来加载和运行模型进行实时预测。[titlePyQt5 Main Window for Landslide Detection]importsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimportQApplication,QMainWindow,QLabel,QPushButton,QVBoxLayout,QWidget,QFileDialogfromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQt,QTimerimporttorchfrompathlibimportPathimportyamlclassMainWindow(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(Landslide Detection System)self.setGeometry(100,100,800,600)# Load YOLOv5 modelself.modeltorch.hub.load(Path(/path/to/yolov5),custom,path/path/to/best.pt,sourcelocal)# Load dataset configurationwithopen(/path/to/dataset.yaml,r)asf:self.data_configyaml.safe_load(f)self.initUI()definitUI(self):self.central_widgetQWidget()self.setCentralWidget(self.central_widget)self.layoutQVBoxLayout()self.image_labelQLabel(self)self.image_label.setAlignment(Qt.AlignCenter)self.layout.addWidget(self.image_label)self.load_image_buttonQPushButton(Load Image,self)self.load_image_button.clicked.connect(self.load_image)self.layout.addWidget(self.load_image_button)self.start_prediction_buttonQPushButton(Start Prediction,self)self.start_prediction_button.clicked.connect(self.start_prediction)self.layout.addWidget(self.start_prediction_button)self.stop_prediction_buttonQPushButton(Stop Prediction,self)self.stop_prediction_button.clicked.connect(self.stop_prediction)self.layout.addWidget(self.stop_prediction_button)self.central_widget.setLayout(self.layout)self.image_pathNoneself.timerQTimer()self.timer.timeout.connect(self.update_frame)defload_image(self):optionsQFileDialog.Options()file_name,_QFileDialog.getOpenFileName(self,QFileDialog.getOpenFileName(),,Images (*.jpg *.jpeg *.png);;All Files (*),optionsoptions)iffile_name:self.image_pathfile_name self.display_image(file_name)defdisplay_image(self,path):pixmapQPixmap(path)scaled_pixmappixmap.scaled(self.image_label.width(),self.image_label.height(),Qt.KeepAspectRatio)self.image_label.setPixmap(scaled_pixmap)defstart_prediction(self):ifself.image_pathisnotNoneandnotself.timer.isActive():self.timer.start(30)# Update frame every 30 msdefstop_prediction(self):ifself.timer.isActive():self.timer.stop()self.image_label.clear()defupdate_frame(self):framecv2.imread(self.image_path)resultsself.model(frame)annotated_frameresults.render()[0]rgb_imagecv2.cvtColor(annotated_frame,cv2.COLOR_BGR2RGB)h,w,chrgb_image.shape bytes_per_linech*w qt_imageQImage(rgb_image.data,w,h,bytes_per_line,QImage.Format_RGB888)pixmapQPixmap.fromImage(qt_image)scaled_pixmappixmap.scaled(self.image_label.width(),self.image_label.height(),Qt.KeepAspectRatio)self.image_label.setPixmap(scaled_pixmap)if__name____main__:appQApplication(sys.argv)windowMainWindow()window.show()sys.exit(app.exec_())请将/path/to/yolov5、/path/to/best.pt和/path/to/dataset.yaml替换为实际的路径。不带用户界面的预测脚本without_ui.py[titlePrediction Script without UI for Landslide Detection]importcv2importnumpyasnpimporttorchfrompathlibimportPathimportyaml# 设置工作目录ROOTPath(/path/to/yolov5).resolve()# 加载YOLov5模型modeltorch.hub.load(ROOT,custom,path/path/to/best.pt,sourcelocal)# 加载数据集配置文件withopen(/path/to/dataset.yaml,r)asf:data_configyaml.safe_load(f)defpredict(image_path):framecv2.imread(image_path)resultsmodel(frame)annotated_frameresults.render()[0]cv2.imshow(Detected Image,annotated_frame)cv2.waitKey(0)cv2.destroyAllWindows()if__name____main__:image_pathpath/to/image.jpgpredict(image_path)请将/path/to/yolov5、/path/to/best.pt、/path/to/dataset.yaml和path/to/image.jpg替换为实际的路径。辅助工具tools/check_img.py[titleCheck Image Files Tool]importosdefcheck_image_files(directory):supported_extensions[.jpg,.jpeg,.png]forfilenameinos.listdir(directory):ifany(filename.lower().endswith(ext)forextinsupported_extensions):continueelse:raiseValueError(fUnsupported file format:{filename})print(All image files are valid.)辅助工具tools/check_ann.py[titleCheck Annotation Files Tool]importosdefcheck_annotation_files(directory,annotation_formatyolo):ifannotation_formatyolo:supported_extensions[.txt]elifannotation_formatvoc:supported_extensions[.xml]else:raiseValueError(Unsupported annotation format. Use yolo or voc.)forfilenameinos.listdir(directory):ifany(filename.lower().endswith(ext)forextinsupported_extensions):continueelse:raiseValueError(fUnsupported file format:{filename})print(All annotation files are valid.)使用说明配置路径将/path/to/dataset设置为存放原始数据集的目录路径。将/path/to/output_dataset设置为存放预处理后数据集的目录路径。确保/path/to/best.pt是训练好的 YOLOv5 模型权重路径。将path/to/image.jpg设置为要预测的图像路径。运行脚本在终端中运行data_preprocessing.py脚本来预处理图像。在终端中运行train.py脚本来训练模型。在终端中运行evaluate.py来评估模型性能。在终端中运行ui.py来启动 GUI 应用程序。在终端中运行without_ui.py来进行无界面预测。使用tools/check_img.py和tools/check_ann.py检查图像和注释文件的有效性。注意事项确保所有必要的工具箱已安装特别是 PyTorch 和 PyQt5。根据需要调整参数如epochs和batch_size。示例假设你的数据文件夹结构如下dataset/ ├── images/ │ ├── train/ │ │ ├── image1.jpg │ │ ├── image2.jpg │ │ └── ... │ ├── valid/ │ │ ├── image3.jpg │ │ ├── image4.jpg │ │ └── ... │ └── test/ │ ├── image5.jpg │ ├── image6.jpg │ └── ... ├── labels_yolo/ │ ├── train/ │ │ ├── image1.txt │ │ ├── image2.txt │ │ └── ... │ ├── valid/ │ │ ├── image3.txt │ │ ├── image4.txt │ │ └── ... │ └── test/ │ ├── image5.txt │ ├── image6.txt │ └── ... └── dataset.yaml并且每个.txt文件中都有正确的 YOLO 格式的标注。运行ui.py后你可以通过点击按钮来加载图像并进行垃圾检测。

关于本文作者

来自尧图内容编辑团队

尧图内容编辑团队 内容团队

尧图内容编辑团队

本文由尧图网络内容编辑团队执笔。团队由资深项目经理、前端工程师与设计师组成,所有内容均来自亲手交付的真实项目,先讲清问题、再给出可落地的解法。尧图深耕北京网站建设十年,服务过京华建材集团、智造科技等各行业客户,把一线经验沉淀为可复用的行业观察。

  • 十年建站经验,覆盖建材、制造、服务、文创等
  • 项目经理把关选题与事实准确性
  • 工程师与设计师联合撰写专业细节
  • 统一编辑规范,保证文风与排版一致
  • 每月复盘转化数据,迭代选题方向

延伸阅读

相关资讯与近期热门内容

深度阅读推荐

建站决策前值得细读的三篇

网站改版的5个关键决策
2024-08-12

网站改版的5个关键决策

什么时候该改版、改到什么程度、如何避免流量掉光,京华建材集团改版复盘给出答案。

获取专属建站方案

看完文章,把您的行业与预算告诉我们,免费获取一份量身定制的官网建设方案与报价。

立即免费咨询