【工业场景】用YOLOv26实现桥梁检测

本文以YOLOv26为基础,设计研究了基于YOLOv26的桥梁识别任务,提取不同分辨率的遥感影像中的桥梁自动,包含完整数据介绍、训练过程和测试结果全流程。

若需要完整数据集和源代码可以私信。

目录

🌷🌷1.数据集介绍

🍉1.1输入影像

🍉1.2yolo_obb目标检测格式

👍👍2.桥梁识别实现效果

🍎🍎3.YOLOv26识别桥梁算法步骤

🍋3.1数据准备

🍋3.2模型选择

🍋3.3加载预训练模型

🍋3.4输入数据组织

🍭🍭4.目标检测训练代码

⭐4.1训练过程

⭐4.2训练结果

🏆🏆5.目标检测推理代码

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--


🌷🌷1.数据集介绍

🍉1.1输入影像

桥梁检测数据集总共包含22648张样本数据,其中训练集17240张,验证集5408张,影像尺寸为2048*2048,部分影像展示如下:

样本数据包含1类,表示桥梁。

label为txt格式的yolo-obb目标检测格式,示例txt文件内容为:

🍉1.2yolo_obb目标检测格式

YOLO_OBB(Oriented Bounding Box)是YOLO系列中用于检测旋转目标的一种格式,适用于需要检测带有角度信息的场景(如遥感图像、文字检测等)。其核心是在传统YOLO边界框(x, y, w, h)的基础上增加角度参数,形成五参数表示法(x, y, w, h, θ)。

YOLO_OBB的标注文件通常为.txt格式,每行对应一个目标,包含以下字段:

bash 复制代码
<class_id> <x_center> <y_center> <width> <height> <angle> [<difficulty>]
  • class_id: 目标类别ID(整数)。
  • x_center, y_center: 边界框中心点坐标(归一化值,范围[0,1])。
  • width, height: 边界框的宽度和高度(归一化值,范围[0,1])。
  • angle: 旋转角度(弧度制,范围通常为[-π/2, π/2])。
  • difficulty(可选): 检测难度标记(如0/1)。

训练验证比例可以自行调整,这里不赘述。

👍👍2.桥梁识别实现效果

🍎🍎3.YOLOv26识别桥梁算法步骤

通过目标检测方法进行桥梁识别的方法不限,本文以YOLOv26为例进行说明。

🍋3.1数据准备

桥梁检测数据集总共包含22648张样本数据,其中训练集17240张,验证集5408张。

数据组织:

bash 复制代码
----bridge_dataset
       ----images
                ----train
                ----val
        ----labels
                ----train
                ----val

images/train文件夹如下:

labels/train文件夹如下:

模型训练label部分采用的是YOLO_OBB格式的txt文件,所以如果自己的数据集是xml格式或者json格式需要进行转换哦,转换可移步这里

具体txt格式内容如1.数据集介绍中所示。

🍋3.2模型选择

以YOLO26n为例,模型选择代码如下:

python 复制代码
from ultralytics import YOLO
 
# Load a model
#model = YOLO('yolo26n.yaml')  # build a new model from YAML
#model = YOLO('yolo26n.pt')  # load a pretrained model (recommended for training)
model = YOLO('yolo26n-obb.yaml').load('yolov26n-obb.pt')  # build from YAML and transfer weights
 

其中yolo26n-obb.yaml为./ultralytics/cfg/models/26/yolo26n-obb.yaml,可根据自己的数据进行模型调整,打开yolo26n-obb.yaml显示内容如下:

bash 复制代码
# Parameters
nc: 80 # number of classes
end2end: True # whether to use end-to-end mode
reg_max: 1 # DFL bins
scales: # model compound scaling constants, i.e. 'model=yolo26n-obb.yaml' will call yolo26-obb.yaml with scale 'n'
  # [depth, width, max_channels]
  n: [0.50, 0.25, 1024] # summary: 291 layers, 2,715,614 parameters, 2,715,614 gradients, 16.9 GFLOPs
  s: [0.50, 0.50, 1024] # summary: 291 layers, 10,582,142 parameters, 10,582,142 gradients, 63.5 GFLOPs
  m: [0.50, 1.00, 512] # summary: 311 layers, 23,593,918 parameters, 23,593,918 gradients, 211.9 GFLOPs
  l: [1.00, 1.00, 512] # summary: 423 layers, 27,997,374 parameters, 27,997,374 gradients, 259.0 GFLOPs
  x: [1.00, 1.50, 512] # summary: 423 layers, 62,811,678 parameters, 62,811,678 gradients, 578.9 GFLOPs

# YOLO26n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, Conv, [64, 3, 2]] # 0-P1/2
  - [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  - [-1, 2, C3k2, [256, False, 0.25]]
  - [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
  - [-1, 2, C3k2, [512, False, 0.25]]
  - [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
  - [-1, 2, C3k2, [512, True]]
  - [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
  - [-1, 2, C3k2, [1024, True]]
  - [-1, 1, SPPF, [1024, 5, 3, True]] # 9
  - [-1, 2, C2PSA, [1024]] # 10

# YOLO26n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 6], 1, Concat, [1]] # cat backbone P4
  - [-1, 2, C3k2, [512, True]] # 13

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 4], 1, Concat, [1]] # cat backbone P3
  - [-1, 2, C3k2, [256, True]] # 16 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 13], 1, Concat, [1]] # cat head P4
  - [-1, 2, C3k2, [512, True]] # 19 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 10], 1, Concat, [1]] # cat head P5
  - [-1, 1, C3k2, [1024, True, 0.5, True]] # 22 (P5/32-large)

  - [[16, 19, 22], 1, OBB26, [nc, 1]] # Detect(P3, P4, P5)

主要需要修改的地方为nc,也就是num_class,此处数据集类别为1类,所以nc=1。

如果其他的模型参数不变的话,就默认保持原版yolo26,需要改造模型结构的大佬请绕行。

🍋3.3加载预训练模型

加载预训练模型yolo26-obb.pt,可以在第一次运行时自动下载,如果受到下载速度限制,也可以自行下载好(下载链接),放在对应目录下即可。

🍋3.4输入数据组织

yolo26还是以yolo-obb格式的数据为例,./ultralytics/cfg/datasets/data.yaml的内容示例如下:

bash 复制代码
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: ../datasets/coco8  # dataset root dir
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
test:  # test images (optional)
 
# Classes (80 COCO classes)
names:
  0: person
  1: bicycle
  2: car
  # ...
  77: teddy bear
  78: hair drier

这个是官方的标准coco数据集,需要换成自己的数据集格式,此处建议根据自己的数据集设置新建一个bridge_obb.yaml文件,放在./ultralytics/cfg/datasets/目录下,最后数据集设置就可以直接用自己的bridge_obb.yaml文件了。以我的bridge_obb.yaml文件为例:

bash 复制代码
path: /home/datasets/bridge  # dataset root dir
train: images/train  # train images (relative to 'path') 4 images
val: images/val  # val images (relative to 'path') 4 images
test: images/test # test images (optional)
 
names:
  0: bridge

🍭🍭4.目标检测训练代码

准备好数据和模型之后,就可以开始训练了,train.py的内容显示为:

python 复制代码
from ultralytics import YOLO

model = YOLO("yolo26n-obb.pt") 

results = model.train(data="bridge_obb.yaml", epochs=300, imgsz=2048, device="0", batch = 8)

通常我会选择在基础YOLO模型上进行transfer微调,不会从头开始训练,如果想自己从头开始,可以自行选择第一种方式。这里建议选择第三种。

⭐4.1训练过程

⭐4.2训练结果

训练完成后会在/run/obb/目录下生成train或者train+数字的文件夹,存放你的训练结果。

训练完成后的结果如下:

其中weights文件夹内会包含2个模型,一个best.pth,一个last.pth。

至此就可以使用best.pth进行推理检测桥梁了。

🏆🏆5.目标检测推理代码

批量推理python代码如下:

python 复制代码
from ultralytics import YOLO
from PIL import Image
import cv2
import os
 
 
model = YOLO('/yolov8/runs/obb/train/weights/best.pt')  # load a custom model
path = '/home/dataset/images/test/'  #test_image_path_dir
img_list = os.listdir(path)
for img_path in img_list:
###  =============detect=====================
    im1 = Image.open(os.path.join(path,img_path))
    results = model.predict(source=im1, save=True,save_txt=True)

若需要完整数据集和源代码可以私信。

整理不易,欢迎一键三连!!!

送你们一条美丽的--分割线--

🌷🌷🍀🍀🌾🌾🍓🍓🍂🍂🙋🙋🐸🐸🙋🙋💖💖🍌🍌🔔🔔🍉🍉🍭🍭🍋🍋🍇🍇🏆🏆📸📸⛵⛵⭐⭐🍎🍎👍👍🌷🌷

相关推荐
无忧智库16 小时前
大型国际机场全域态势感知与航班运行协同决策系统 (A-CDM) 深度解析:打造智慧民航的“最强大脑”(WORD)
人工智能
lisw0516 小时前
如何在科学出版中负责任地使用人工智能?
人工智能·机器学习
mtouch33316 小时前
三维数字沙盘智能交互式可视化动态主界面系统
人工智能·ai·信息可视化·无人机·虚拟现实·电子沙盘·数字沙盘
AC赳赳老秦16 小时前
多模态 AI 驱动办公智能化变革:DeepSeek 赋能图文转写与视频摘要的高效实践
java·ide·人工智能·python·prometheus·ai-native·deepseek
未来之窗软件服务16 小时前
AI人工智能(十二)C# 运行sensevoice onnx—东方仙盟练气期
开发语言·人工智能·c#·仙盟创梦ide·东方仙盟
2501_9269783316 小时前
嵌套分形意识融合理论3.0:概率分形通用理论与存在意义论的统一整合框架
人工智能·经验分享·机器学习·ai写作·agi
隔壁大炮16 小时前
07. PyTorch框架简介
人工智能·pytorch·python
apcipot_rain16 小时前
python与人工智能代码基础
人工智能·python·机器学习
ccLianLian16 小时前
强化学习·贝尔曼方程
人工智能
Coding茶水间16 小时前
基于深度学习的鸡数量统计系统演示与介绍(YOLOv12/v11/v8/v5模型+Pyqt5界面+训练代码+数据集)
开发语言·人工智能·深度学习·yolo·目标检测·机器学习