目标检测算法Yolov5训练反光衣数据集模型 建立基于深度学习yolov5反光衣的检测

发布时间:2026/6/16 6:45:51

目标检测算法Yolov5训练反光衣数据集模型 建立基于深度学习yolov5反光衣的检测 目标检测算法Yolov5训练反光衣数据集模型 建立基于深度学习yolov5反光衣的检测文章目录**标题基于YOLOv5的反光衣检测全流程参考****1. 安装依赖****2. 准备数据集**数据集结构示例创建data.yaml文件**3. 配置并训练YOLOv5模型**训练模型模型评估**4. 推理代码****5. 构建GUI应用程序**反光衣数据集 格式txt两个类别 反光衣和其他衣服标注labelimg标注txt格式已划分train2043和val51011使用YOLOv5模型进行目标检测任务。以下是详细的流程包括安装依赖、准备数据集、配置YOLOv5、训练模型、评估模型、推理代码以及构建GUI应用程序的详细步骤。标题基于YOLOv5的反光衣检测全流程参考1. 安装依赖首先确保你的环境中已安装了必要的库和工具pipinstalltorch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113# 根据CUDA版本选择gitclone https://github.com/ultralytics/yolov5# 克隆YOLOv5仓库cdyolov5 pipinstall-rrequirements.txt2. 准备数据集数据集已经按照8:2的比例划分为训练集2043张和验证集510张并且标注文件为YOLO适用的txt格式。数据集结构示例reflective_clothing_dataset/ ├── images/ │ ├── train/ │ │ ├── img1.jpg │ │ └── ... │ └── val/ │ ├── img2044.jpg │ └── ... └── labels/ ├── train/ │ ├── img1.txt │ └── ... └── val/ ├── img2044.txt └── ...创建data.yaml文件在YOLOv5项目的根目录下创建一个名为data.yaml的数据配置文件内容如下train:./path/to/reflective_clothing_dataset/images/train/val:./path/to/reflective_clothing_dataset/images/val/nc:2# 类别数量names:[reflective_clothing,other_clothing]# 类别名称请将路径替换为你实际的数据集路径。3. 配置并训练YOLOv5模型训练模型使用YOLOv5的预训练模型开始训练。这里我们以YOLOv5s为例python train.py--img640--batch16--epochs50--datadata.yaml--weightsyolov5s.pt--img 640: 输入图像尺寸。--batch 16: 批次大小。--epochs 50: 训练轮数。--data data.yaml: 数据配置文件。--weights yolov5s.pt: 使用YOLOv5s预训练权重。模型评估训练完成后可以对验证集进行评估python val.py--weightsruns/train/exp/weights/best.pt--datadata.yaml--img640这会输出模型在验证集上的性能指标如mAP。4. 推理代码编写推理代码用于预测新图片中的目标frompathlibimportPathimportcv2importtorchfrommodels.experimentalimportattempt_loadfromutils.generalimportnon_max_suppression,scale_coordsfromutils.datasetsimportletterboxdefdetect(image_path,model,img_size640):devicecudaiftorch.cuda.is_available()elsecpunamesmodel.module.namesifhasattr(model,module)elsemodel.names# 读取图像img0cv2.imread(image_path)imgletterbox(img0,new_shapeimg_size)[0]imgimg[:,:,::-1].transpose(2,0,1)# BGR to RGB, to 3x416x416imgnp.ascontiguousarray(img)# 转换为tensorimgtorch.from_numpy(img).to(device)imgimg.float()# uint8 to fp32img/255.0# 0 - 255 to 0.0 - 1.0ifimg.ndimension()3:imgimg.unsqueeze(0)# 推理withtorch.no_grad():predmodel(img)[0]prednon_max_suppression(pred,0.25,0.45,classesNone,agnosticFalse)# 处理预测结果fori,detinenumerate(pred):# detections per imageiflen(det):det[:,:4]scale_coords(img.shape[2:],det[:,:4],img0.shape).round()for*xyxy,conf,clsinreversed(det):labelf{names[int(cls)]}{conf:.2f}plot_one_box(xyxy,img0,labellabel,color(0,255,0),line_thickness3)returnimg0# 示例用法image_path./path/to/test/image.jpgmodelattempt_load(runs/train/exp/weights/best.pt,map_locationcuda)result_imagedetect(image_path,model)cv2.imshow(Result Image,result_image)cv2.waitKey(0)cv2.destroyAllWindows()# 辅助函数绘制边界框defplot_one_box(x,img,colorNone,labelNone,line_thicknessNone):tlline_thicknessorround(0.002*(img.shape[0]img.shape[1])/2)1# line/font thicknesscolorcoloror[random.randint(0,255)for_inrange(3)]c1,c2(int(x[0]),int(x[1])),(int(x[2]),int(x[3]))cv2.rectangle(img,c1,c2,color,thicknesstl,lineTypecv2.LINE_AA)iflabel:tfmax(tl-1,1)# font thicknesst_sizecv2.getTextSize(label,0,fontScaletl/3,thicknesstf)[0]c2c1[0]t_size[0],c1[1]-t_size[1]-3cv2.rectangle(img,c1,c2,color,-1,cv2.LINE_AA)# filledcv2.putText(img,label,(c1[0],c1[1]-2),0,tl/3,[225,255,255],thicknesstf,lineTypecv2.LINE_AA)5. 构建GUI应用程序使用PyQt5构建一个简单的GUI应用程序用于选择图片并展示检测结果importsysfromPyQt5.QtWidgetsimportQApplication,QWidget,QVBoxLayout,QPushButton,QLabel,QFileDialogfromPyQt5.QtGuiimportQPixmapfromPyQt5.QtCoreimportQtimportcv2classApp(QWidget):def__init__(self,model):super().__init__()self.modelmodel self.initUI()definitUI(self):self.setWindowTitle(反光衣检测系统)layoutQVBoxLayout()self.image_labelQLabel(self)layout.addWidget(self.image_label)self.select_buttonQPushButton(选择图片,self)self.select_button.clicked.connect(self.select_image)layout.addWidget(self.select_button)self.setLayout(layout)self.show()defselect_image(self):optionsQFileDialog.Options()file_name,_QFileDialog.getOpenFileName(self,选择图片,,Image Files (*.jpg *.jpeg *.png),optionsoptions)iffile_name:self.detect_and_show(file_name)defdetect_and_show(self,image_path):detected_imagedetect(image_path,self.model)height,width,channeldetected_image.shape bytes_per_line3*width q_imgQImage(detected_image.data,width,height,bytes_per_line,QImage.Format_RGB888).rgbSwapped()pixmapQPixmap.fromImage(q_img)self.image_label.setPixmap(pixmap)if__name____main__:appQApplication(sys.argv)exApp(model)# 将训练好的模型传入sys.exit(app.exec_())以上是从安装依赖、准备数据集、配置YOLOv5、训练模型、评估模型、推理代码到构建GUI应用程序的完整实现流程。

相关新闻