如何用YOLOv6训练无人机航拍船舶obb数据集?原理!
- 内容介绍
- 文章标签
- 相关推荐
你有没有觉得,现在的AI模型,越来越像一个黑箱?你把数据扔进去,它吐出后来啊,但你根本不知道它在想什么。YOLOv6, 这个“你只看一次”的模型,最近又更新了叫YOLO26,说是要解决无人机航拍图像中船舶的检测问题。听起来是不是很酷?其实吧,它就是个更聪明的YOLO,专门用来在天上飞的无人机上找船。我们今天就来聊聊, 怎么用它来训练一个无人机航拍图像的OBB数据集,顺便也说说它背后的原理,别看它高大上,其实也挺“烂”的,但烂得有理有据。
YOLOv6?不是YOLO26
麻了... 先说说这个YOLO26是啥玩意儿。它不是你想象中的YOLOv6,而是YOLO26,是2025年9月刚出的“新物种”。它干了啥?它把原来YOLOv8、 v11、v12、v13这些老家伙的“坏习惯”给改了比如那个叫DFL的模块,就是个被它给砍了的玩意儿。这玩意儿本来是想通过概率分布来优化边界框的,但太复杂,太慢,太难部署,太……鸡肋。所以YOLO26直接说:不玩了删了!

那它到底改了啥?
在理。 先说说它把那个“分布焦点损失”给干掉了。这玩意儿是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的四大创新:
- 移除DFL,简化模型结构,提高推理速度
- 引入端到端无NMS推理,简化部署流程
- 引入新损失函数策略,包括渐进损失平衡和小目标感知标签分配
- 开发用于稳定高效收敛的MuSGD优化器
你看,这玩意儿是不是很“烂”?但烂得有理有据,对吧?
你有没有觉得,现在的AI模型,越来越像一个黑箱?你把数据扔进去,它吐出后来啊,但你根本不知道它在想什么。YOLOv6, 这个“你只看一次”的模型,最近又更新了叫YOLO26,说是要解决无人机航拍图像中船舶的检测问题。听起来是不是很酷?其实吧,它就是个更聪明的YOLO,专门用来在天上飞的无人机上找船。我们今天就来聊聊, 怎么用它来训练一个无人机航拍图像的OBB数据集,顺便也说说它背后的原理,别看它高大上,其实也挺“烂”的,但烂得有理有据。
YOLOv6?不是YOLO26
麻了... 先说说这个YOLO26是啥玩意儿。它不是你想象中的YOLOv6,而是YOLO26,是2025年9月刚出的“新物种”。它干了啥?它把原来YOLOv8、 v11、v12、v13这些老家伙的“坏习惯”给改了比如那个叫DFL的模块,就是个被它给砍了的玩意儿。这玩意儿本来是想通过概率分布来优化边界框的,但太复杂,太慢,太难部署,太……鸡肋。所以YOLO26直接说:不玩了删了!

那它到底改了啥?
在理。 先说说它把那个“分布焦点损失”给干掉了。这玩意儿是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的四大创新:
- 移除DFL,简化模型结构,提高推理速度
- 引入端到端无NMS推理,简化部署流程
- 引入新损失函数策略,包括渐进损失平衡和小目标感知标签分配
- 开发用于稳定高效收敛的MuSGD优化器
你看,这玩意儿是不是很“烂”?但烂得有理有据,对吧?

