如何用YOLOv6训练无人机航拍船舶obb数据集?原理!

2026-05-24 01:394阅读0评论工具资源
  • 内容介绍
  • 文章标签
  • 相关推荐

你有没有觉得,现在的AI模型,越来越像一个黑箱?你把数据扔进去,它吐出后来啊,但你根本不知道它在想什么。YOLOv6, 这个“你只看一次”的模型,最近又更新了叫YOLO26,说是要解决无人机航拍图像中船舶的检测问题。听起来是不是很酷?其实吧,它就是个更聪明的YOLO,专门用来在天上飞的无人机上找船。我们今天就来聊聊, 怎么用它来训练一个无人机航拍图像的OBB数据集,顺便也说说它背后的原理,别看它高大上,其实也挺“烂”的,但烂得有理有据。

YOLOv6?不是YOLO26

麻了... 先说说这个YOLO26是啥玩意儿。它不是你想象中的YOLOv6,而是YOLO26,是2025年9月刚出的“新物种”。它干了啥?它把原来YOLOv8、 v11、v12、v13这些老家伙的“坏习惯”给改了比如那个叫DFL的模块,就是个被它给砍了的玩意儿。这玩意儿本来是想通过概率分布来优化边界框的,但太复杂,太慢,太难部署,太……鸡肋。所以YOLO26直接说:不玩了删了!

YOLO26如何训练自己的obb数据集(原理介绍+代码详见+结构框图) | (无人机航拍船舶为案列)

那它到底改了啥?

在理。 先说说它把那个“分布焦点损失”给干掉了。这玩意儿是YOLOv8这些老家伙的“祖传模块”, 但问题是它太占地方,太难搞,导出模型的时候还得专门处理,烦死了。所以YOLO26直接说:我们不搞这个了直接预测边界框,不带NMS!

接下来 它还加了个新玩意儿叫“端到端无NMS推理”,说白话就是不用你再手动调一堆参数,它自己就能搞定。这下子,部署到无人机上、机器人上、嵌入式设备上,都轻松多了。你想想,无人机在天上飞,哪有时间等你慢慢调参数,翻车了。?

再者, 它还搞了个新损失函数,叫ProgLoss,说白了就是“渐进损失平衡”,专门用来解决小目标检测的问题。你想想,无人机飞在天上,拍的都是小船、小岛、小鱼,这些小目标,本来就不好找,再加个遮挡,那不是更难?所以这个ProgLoss就是来解决这个问题的,让小目标也能被看见,我悟了。。

蚌埠住了... 还有个叫STAL的模块,全名叫“小目标感知标签分配”,专门用来给小目标打标签的。你要是搞过目标检测, 就知道小目标多难搞,尤其在航拍图里小目标经常被遮挡,或者像素太小,YOLO26就靠这个STAL来“点亮”这些小目标。

再说说 它还加了个新优化器叫MuSGD,是SGD和Muon的结合体,说白了就是“稳定又高效”,专门用来优化训练过程,让模型训练得更快、更稳。你想想,训练模型就像跑马拉松,MuSGD就是那个能让你跑得更快、不摔跤的“能量饮料”。

那我们怎么用它来训练一个无人机航拍船舶OBB数据集?

先说说你得有数据。无人机航拍图像,特别是船舶检测,数据是关键。你得准备一堆图像,然后标注好船舶的位置,角度,大小,方向,最好还能有OBB的格式。这玩意儿说起来简单,做起来难。你得先用标注工具把图像里的船框出来然后转成YOLO格式。这一步, 说白了就是“打标签”,但不是你手机上贴的那种,而是给图像里的目标打标签,告诉模型“这是船,那是水,那边还有只海鸥”。

大体上... 然后你得准备数据集。这一步最烦人,你得把数据整理成模型能读的格式,比如YOLO格式的txt文件。这玩意儿就像做菜,调料得放对,顺序不能错。你得把图像和标签文件放在一个文件夹里 然后写个YAML文件,告诉模型“这是训练集,这是验证集,这是测试集”。然后你再跑训练脚本, 比如:

from ultralytics import YOLO
if __name__ == '__main__':
    model = YOLO
    (data='data/ship_.yaml',
                cache=False,
                imgsz=640,
                epochs=200,
                batch=32,
                close_mosaic=10,
                workers=2,
                device='0',
                project='runs/train',
                name='exp')

我们都曾是... 你跑完这个脚本,模型就开始训练了。然后你就可以去喝杯咖啡,等它跑完。

训练后来啊可视化

训练完之后 你就能看到类似这样的后来啊:

YOLO26-obb summary : 132 layers, 2,446,602 parameters, 0 gradients, 5.4 GFLOPs
Class     Images  Instances      Box: 100% ━━━━━━━━━━━━ 11/11 3.8it/s 2.9s
all        343        338      0.717      0.657      0.756      0.449

不错。 这玩意儿就是告诉你,模型跑完了效果还不错。P是精确率,R是召回率,mAP50是50%的平均精度,mAP50-95是不同IoU阈值下的平均精度。你要是看不懂,就当是模型告诉你“我找到了船”。

模型结构框图

结构框图如下:

重复模块m :
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  如果 attn=True:                                        │
│    Sequential(                                          │
│        Bottleneck,                     │  ←─ 先特征提取
│        PSABlock │  ←─ 后注意力增强
│    )                                                    │
│                                                         │
│  否则如果 c3k=True:                                     │
│    C3k                             │  ←─ 吃饭的家伙
│                                                         │
│  否则:                                                  │
│    Bottleneck                         │  ←─ 吃饭的家伙
│                                                         │
└─────────────────────────────────────────────────────────┘

这玩意儿就是个结构图,告诉你模型是怎么跑的。你可以把它理解为“模型的食谱”。

模型结构对比

模型版本 是否支持OBB 是否支持无NMS 是否支持小目标检测 是否支持
YOLOv8
YOLOv11
YOLO26

你看, YOLO26就是个“升级版”的YOLO,它把YOLOv8、v11、v12、v13这些老家伙的“坏习惯”都改了。比如它把NMS给砍了把DFL给删了把小目标检测给加强了。你说它是不是“烂”?但烂得有理有据,对吧?

摆烂。 再说说 我们来一下YOLO26的四大创新:

  1. 移除DFL,简化模型结构,提高推理速度
  2. 引入端到端无NMS推理,简化部署流程
  3. 引入新损失函数策略,包括渐进损失平衡和小目标感知标签分配
  4. 开发用于稳定高效收敛的MuSGD优化器

你看,这玩意儿是不是很“烂”?但烂得有理有据,对吧?

你有没有觉得,现在的AI模型,越来越像一个黑箱?你把数据扔进去,它吐出后来啊,但你根本不知道它在想什么。YOLOv6, 这个“你只看一次”的模型,最近又更新了叫YOLO26,说是要解决无人机航拍图像中船舶的检测问题。听起来是不是很酷?其实吧,它就是个更聪明的YOLO,专门用来在天上飞的无人机上找船。我们今天就来聊聊, 怎么用它来训练一个无人机航拍图像的OBB数据集,顺便也说说它背后的原理,别看它高大上,其实也挺“烂”的,但烂得有理有据。

YOLOv6?不是YOLO26

麻了... 先说说这个YOLO26是啥玩意儿。它不是你想象中的YOLOv6,而是YOLO26,是2025年9月刚出的“新物种”。它干了啥?它把原来YOLOv8、 v11、v12、v13这些老家伙的“坏习惯”给改了比如那个叫DFL的模块,就是个被它给砍了的玩意儿。这玩意儿本来是想通过概率分布来优化边界框的,但太复杂,太慢,太难部署,太……鸡肋。所以YOLO26直接说:不玩了删了!

YOLO26如何训练自己的obb数据集(原理介绍+代码详见+结构框图) | (无人机航拍船舶为案列)

那它到底改了啥?

在理。 先说说它把那个“分布焦点损失”给干掉了。这玩意儿是YOLOv8这些老家伙的“祖传模块”, 但问题是它太占地方,太难搞,导出模型的时候还得专门处理,烦死了。所以YOLO26直接说:我们不搞这个了直接预测边界框,不带NMS!

接下来 它还加了个新玩意儿叫“端到端无NMS推理”,说白话就是不用你再手动调一堆参数,它自己就能搞定。这下子,部署到无人机上、机器人上、嵌入式设备上,都轻松多了。你想想,无人机在天上飞,哪有时间等你慢慢调参数,翻车了。?

再者, 它还搞了个新损失函数,叫ProgLoss,说白了就是“渐进损失平衡”,专门用来解决小目标检测的问题。你想想,无人机飞在天上,拍的都是小船、小岛、小鱼,这些小目标,本来就不好找,再加个遮挡,那不是更难?所以这个ProgLoss就是来解决这个问题的,让小目标也能被看见,我悟了。。

蚌埠住了... 还有个叫STAL的模块,全名叫“小目标感知标签分配”,专门用来给小目标打标签的。你要是搞过目标检测, 就知道小目标多难搞,尤其在航拍图里小目标经常被遮挡,或者像素太小,YOLO26就靠这个STAL来“点亮”这些小目标。

再说说 它还加了个新优化器叫MuSGD,是SGD和Muon的结合体,说白了就是“稳定又高效”,专门用来优化训练过程,让模型训练得更快、更稳。你想想,训练模型就像跑马拉松,MuSGD就是那个能让你跑得更快、不摔跤的“能量饮料”。

那我们怎么用它来训练一个无人机航拍船舶OBB数据集?

先说说你得有数据。无人机航拍图像,特别是船舶检测,数据是关键。你得准备一堆图像,然后标注好船舶的位置,角度,大小,方向,最好还能有OBB的格式。这玩意儿说起来简单,做起来难。你得先用标注工具把图像里的船框出来然后转成YOLO格式。这一步, 说白了就是“打标签”,但不是你手机上贴的那种,而是给图像里的目标打标签,告诉模型“这是船,那是水,那边还有只海鸥”。

大体上... 然后你得准备数据集。这一步最烦人,你得把数据整理成模型能读的格式,比如YOLO格式的txt文件。这玩意儿就像做菜,调料得放对,顺序不能错。你得把图像和标签文件放在一个文件夹里 然后写个YAML文件,告诉模型“这是训练集,这是验证集,这是测试集”。然后你再跑训练脚本, 比如:

from ultralytics import YOLO
if __name__ == '__main__':
    model = YOLO
    (data='data/ship_.yaml',
                cache=False,
                imgsz=640,
                epochs=200,
                batch=32,
                close_mosaic=10,
                workers=2,
                device='0',
                project='runs/train',
                name='exp')

我们都曾是... 你跑完这个脚本,模型就开始训练了。然后你就可以去喝杯咖啡,等它跑完。

训练后来啊可视化

训练完之后 你就能看到类似这样的后来啊:

YOLO26-obb summary : 132 layers, 2,446,602 parameters, 0 gradients, 5.4 GFLOPs
Class     Images  Instances      Box: 100% ━━━━━━━━━━━━ 11/11 3.8it/s 2.9s
all        343        338      0.717      0.657      0.756      0.449

不错。 这玩意儿就是告诉你,模型跑完了效果还不错。P是精确率,R是召回率,mAP50是50%的平均精度,mAP50-95是不同IoU阈值下的平均精度。你要是看不懂,就当是模型告诉你“我找到了船”。

模型结构框图

结构框图如下:

重复模块m :
┌─────────────────────────────────────────────────────────┐
│                                                         │
│  如果 attn=True:                                        │
│    Sequential(                                          │
│        Bottleneck,                     │  ←─ 先特征提取
│        PSABlock │  ←─ 后注意力增强
│    )                                                    │
│                                                         │
│  否则如果 c3k=True:                                     │
│    C3k                             │  ←─ 吃饭的家伙
│                                                         │
│  否则:                                                  │
│    Bottleneck                         │  ←─ 吃饭的家伙
│                                                         │
└─────────────────────────────────────────────────────────┘

这玩意儿就是个结构图,告诉你模型是怎么跑的。你可以把它理解为“模型的食谱”。

模型结构对比

模型版本 是否支持OBB 是否支持无NMS 是否支持小目标检测 是否支持
YOLOv8
YOLOv11
YOLO26

你看, YOLO26就是个“升级版”的YOLO,它把YOLOv8、v11、v12、v13这些老家伙的“坏习惯”都改了。比如它把NMS给砍了把DFL给删了把小目标检测给加强了。你说它是不是“烂”?但烂得有理有据,对吧?

摆烂。 再说说 我们来一下YOLO26的四大创新:

  1. 移除DFL,简化模型结构,提高推理速度
  2. 引入端到端无NMS推理,简化部署流程
  3. 引入新损失函数策略,包括渐进损失平衡和小目标感知标签分配
  4. 开发用于稳定高效收敛的MuSGD优化器

你看,这玩意儿是不是很“烂”?但烂得有理有据,对吧?