ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

基于YOLOv11的道路护栏实例分割系统 道路护栏实例分割数据集 yolo分割模型 实例分割系统界面

基于YOLOv11的道路护栏实例分割系统 道路护栏实例分割数据集 yolo分割模型 实例分割系统界面 基于YOLOv11的道路护栏实例分割系统 道路护栏实例分割数据集 yolo分割模型 实例分割系统界面道路护栏实例分割数据集1779张yolovoccoco三种标注方式数据集统计信息图像尺寸:640*640类别数量: 1 类训练集图像:1525; 验证集图像:198; 测试集图像:56总图像数: 1779类别分布:类别名称 | 包含该类别的图像数 | 总标注数guardrail | 1769 | 3295模型代码提供训练好的模型模型训练使用yolov11n-seg训练80个epoch训练结果map如描述图所示。qt界面运行界面采用pyqt5编写本项目已经训练好模型配置好环境后可直接使用运行效果见描述图像基于YOLOv11的道路护栏实例分割系统完整代码1、数据集配置文件 guardrail_seg.yamlpath:./guardrail_datasettrain:images/trainval:images/valtest:images/testnames:0:guardrail2、模型训练代码 train.pyfromultralyticsimportYOLOif__name____main__:# 加载YOLOv11实例分割预训练权重modelYOLO(yolo11n-seg.pt)resultsmodel.train(dataguardrail_seg.yaml,epochs80,imgsz640,batch8,device0,pretrainedTrue,patience10)print(训练完成权重保存在runs/segment/train/weights/best.pt)3、单图分割推理代码 predict.pyfromultralyticsimportYOLOimportcv2importnumpyasnp modelYOLO(runs/segment/train/weights/best.pt)defseg_image(img_path):imgcv2.imread(img_path)resmodel(img,conf0.25)forrinres:boxesr.boxes masksr.masksifmasksisnotNone:masksmasks.data.cpu().numpy()forseg,boxinzip(masks,boxes):segseg.astype(np.uint8)# 绘制掩码color_masknp.zeros_like(img)color_mask[seg0](0,255,0)imgcv2.addWeighted(img,1,color_mask,0.5,0)# 绘制框标签x1,y1,x2,y2map(int,box.xyxy[0])cls_namemodel.names[int(box.cls[0])]conffloat(box.conf[0])cv2.rectangle(img,(x1,y1),(x2,y2),(255,0,0),2)cv2.putText(img,f{cls_name}{conf:.2f},(x1,y1-8),cv2.FONT_HERSHEY_SIMPLEX,0.6,(255,0,0),2)cv2.imwrite(seg_result.jpg,img)returnimgif__name____main__:seg_image(test.jpg)4、PyQt5可视化界面完整代码 main_ui.pyimportsysimportcv2importnumpyasnpfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QPushButton,QFileDialog,QLabel,QTableWidget,QTableWidgetItem,QRadioButton,QTextEdit)fromPyQt5.QtGuiimportQImage,QPixmapfromPyQt5.QtCoreimportQtfromultralyticsimportYOLOclassMainWin(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(基于YOLO11的道路护栏实例分割系统)self.setGeometry(80,80,1400,850)self.modelYOLO(runs/segment/train/weights/best.pt)self.result_imgNoneself.initUI()definitUI(self):# 原始图像self.label_originQLabel(原始图像,self)self.label_origin.setGeometry(30,40,650,520)self.label_origin.setStyleSheet(border:1px solid #999)# 分割结果self.label_segQLabel(分割结果,self)self.label_seg.setGeometry(700,40,650,520)self.label_seg.setStyleSheet(border:1px solid #999)# 按钮self.btn_imgQPushButton(选择图片,self)self.btn_img.setGeometry(30,580,140,40)self.btn_img.clicked.connect(self.load_img)self.btn_videoQPushButton(选择视频,self)self.btn_video.setGeometry(190,580,140,40)self.btn_camQPushButton(摄像头,self)self.btn_cam.setGeometry(350,580,140,40)self.btn_saveQPushButton(保存结果,self)self.btn_save.setGeometry(510,580,140,40)# 模式单选框self.radio_detQRadioButton(检测模式,self)self.radio_det.setGeometry(680,580,120,30)self.radio_segQRadioButton(分割模式,self)self.radio_seg.setGeometry(820,580,120,30)self.radio_seg.setChecked(True)# 结果表格self.tableQTableWidget(self)self.table.setGeometry(30,640,1320,160)self.table.setColumnCount(5)self.table.setHorizontalHeaderLabels([序号,类别,置信度,xmin,ymin,bbox坐标])defload_img(self):fname,_QFileDialog.getOpenFileName(self,打开图片,.,Image(*.jpg *.png *.bmp))ifnotfname:returnimg_origincv2.imread(fname)img_rgb_ocv2.cvtColor(img_origin,cv2.COLOR_BGR2RGB)ho,wo,coimg_rgb_o.shape qimg_oQImage(img_rgb_o.data,wo,ho,wo*co,QImage.Format_RGB888)self.label_origin.setPixmap(QPixmap.fromImage(qimg_o).scaled(self.label_origin.size(),Qt.KeepAspectRatio))#推理resself.model(img_origin,conf0.25)img_segimg_origin.copy()self.table.setRowCount(0)forrinres:boxesr.boxes masksr.masksifmasksisnotNone:mask_datamasks.data.cpu().numpy()forseg,boxinzip(mask_data,boxes):segseg.astype(np.uint8)color_masknp.zeros_like(img_seg)color_mask[seg0](0,255,0)img_segcv2.addWeighted(img_seg,1,color_mask,0.5,0)x1,y1,x2,y2map(int,box.xyxy[0])cls_nameself.model.names[int(box.cls[0])]conffloat(box.conf[0])cv2.rectangle(img_seg,(x1,y1),(x2,y2),(255,0,0),2)cv2.putText(img_seg,f{cls_name}{conf:.2f},(x1,y1-8),cv2.FONT_HERSHEY_SIMPLEX,0.6,(255,0,0),2)rowself.table.rowCount()self.table.insertRow(row)self.table.setItem(row,0,QTableWidgetItem(str(row1)))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}))self.table.setItem(row,4,QTableWidgetItem(f[{x1},{y1},{x2},{y2}]))#显示结果图img_rgb_scv2.cvtColor(img_seg,cv2.COLOR_BGR2RGB)hs,ws,csimg_rgb_s.shape qimg_sQImage(img_rgb_s.data,ws,hs,ws*cs,QImage.Format_RGB888)self.label_seg.setPixmap(QPixmap.fromImage(qimg_s).scaled(self.label_seg.size(),Qt.KeepAspectRatio))self.result_imgimg_segif__name____main__:appQApplication(sys.argv)winMainWin()win.show()sys.exit(app.exec_())环境安装pipinstallultralytics opencv-python pyqt5 numpyPR曲线绘制代码fromultralyticsimportYOLO modelYOLO(runs/segment/train/weights/best.pt)metricsmodel.val()print(fmAP0.5:{metrics.seg.map50})
返回列表