基于YOLOv8的安全帽检测系统(2):Gold
基于YOLOv8的安全帽检测系统(2):Gold
Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的(SOTA)模型,它建立在先前YOLO成功基础上,并引入了新功能和改进,以进一步提升性能和灵活性。它可以在大型数据集上进行训练,并且能够在各种硬件平台上运行,从CPU到GPU。
具体改进如下:
- Backbone:使用的依旧是CSP的思想,不过YOLOv5中的C模块被替换成了C2f模块,实现了进一步的轻量化,同时YOLOv8依旧使用了YOLOv5等架构中使用的SPPF模块;
- PA-FP:毫无疑问YOLOv8依旧使用了PA的思想,不过通过对比YOLOv5与YOLOv8的结构图可以看到,YOLOv8将YOLOv5中PA-FP上采样阶段中的卷积结构删除了,同时也将C模块替换为了C2f模块;
- Decoupled-Head:是不是嗅到了不一样的味道?是的,YOLOv8走向了Decoupled-Head;
- Anchor-Free:YOLOv8抛弃了以往的Anchor-Base,使用了Anchor-Free的思想;
- 损失函数:YOLOv8使用VFL Loss作为分类损失,使用DFL Loss+CIOU Loss作为分类损失;
- 样本匹配:YOLOv8抛弃了以往的IOU匹配或者单边比例的分配方式,而是使用了Task-Aligned Assigner匹配方式
框架图提供见链接:Brief summary of YOLOv8 model structure · Issue #189 · ultralytics/ultralytics · GitHub
数据集大小241张,train:val:test 随机分配为7:2:1,类别:hat
链接:.111.pdf
传统YOLO的问题
在检测模型中,通常先经过backbone提取得到一系列不同层级的特征,FP利用了backbone的这一特点,构建了相应的融合结构:不层级的特征包含着不同大小物体的位置信息,虽然这些特征包含的信息不同,但这些特征在相互融合后能够互相弥补彼此缺失的信息,增强每一层级信息的丰富程度,提升网络性能。
原始的FP结构由于其层层递进的信息融合模式,使得相邻层的信息能够充分融合,但也导致了跨层信息融合存在问题:当跨层的信息进行交互融合时,由于没有直连的交互通路,只能依靠中间层充当“中介”进行融合,导致了一定的信息损失。之前的许多工作中都关注到了这一问题,而解决方案通常是通过添加shortcut增加更多的路径,以增强信息流动。
摘要:当前YOLO系列模型通常采用类FP方法进行信息融合,而这一结构在融合跨层信息时存在信息损失的问题。针对这一问题,我们提出了全新的信息聚集-分发(Gather-and-Distribute Mechanism)GD机制,通过在全局视野上对不同层级的特征进行统一的聚集融合并分发注入到不同层级中,构建更加充分高效的信息交互融合机制,并基于GD机制构建了Gold-YOLO。在COCO数据集中,我们的Gold-YOLO超越了现有的YOLO系列,实现了精度-速度曲线上的SOTA。
提出了一种全新的信息交互融合机制:信息聚集-分发机制(Gather-and-Distribute Mechanism)。该机制通过在全局上融合不同层次的特征得到全局信息,并将全局信息注入到不同层级的特征中,实现了高效的信息交互和融合。在不显著增加延迟的情况下GD机制显著增强了eck部分的信息融合能力,提高了模型对不同大小物体的检测能力。
核心代码:
代码语言:javascript代码运行次数:0运行复制class top_Block(nn.Module):
def __init__(self, dim, key_dim, num_heads, mlp_ratio=4., attn_ratio=2., drop=0.,
drop_path=0.):
super().__init__()
self.dim = dim
_heads = num_heads
_ratio = mlp_ratio
self.attn = Attention(dim, key_dim=key_dim, num_heads=num_heads, attn_ratio=attn_ratio)
# OTE: drop path for stochastic depth, we shall see if this is better than dropout here
self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity()
mlp_hidden_dim = int(dim * mlp_ratio)
= Mlp(in_features=dim, hidden_features=mlp_hidden_dim, drop=drop)
def forward(self, x1):
x1 = x1 + self.drop_path(self.attn(x1))
x1 = x1 + self.drop_path((x1))
return x1
class TopBasicLayer(nn.Module):
def __init__(self, embedding_dim, ouc_list, block_num=2, key_dim=8, num_heads=4,
mlp_ratio=4., attn_ratio=2., drop=0., attn_drop=0., drop_path=0.):
super().__init__()
self.block_num = block_num
_blocks = nn.ModuleList()
for i in range(self.block_num):
_blocks.append(top_Block(
embedding_dim, key_dim=key_dim, num_heads=num_heads,
mlp_ratio=mlp_ratio, attn_ratio=attn_ratio,
drop=drop, drop_path=drop_path[i] if isinstance(drop_path, list) else drop_path))
= nn.Conv2d(embedding_dim, sum(ouc_list), 1)
def forward(self, x):
# token *
for i in range(self.block_num):
x = _blocks[i](x)
return (x)
class AdvPoolFusion(nn.Module):
def forward(self, x):
x1, x2 = x
if is_in_onnx_export():
self.pool = onnx_AdaptiveAvgPool2d
else:
self.pool = nn.functional.adaptive_avg_pool2d
, C, H, W = x2.shape
output_size = np.array([H, W])
x1 = self.pool(x1, output_size)
return ([x1, x2], 1)
###################### gold-yolo #### ED by AI&CV ###############################
源码详见:全网首发YOLOv8暴力涨点:Gold-YOLO,遥遥领先,超越所有YOLO | 华为诺亚eurIPS2_AI小怪兽的博客-CSD博客
训练结果如下:
mAP@0.5 0.897提升至0.91
#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格
推荐阅读
留言与评论(共有 14 条评论) |
本站网友 天津电脑上门维修 | 23分钟前 发表 |
1) ###################### gold-yolo #### ED by AI&CV ###############################源码详见:全网首发YOLOv8暴力涨点:Gold-YOLO | |
本站网友 苍南租房 | 0秒前 发表 |
4.gold-yolo引入到yolov84.1新建 gold-yolo加入ultralytics/nn/head/goldyolo.py核心代码:代码语言:javascript代码运行次数:0运行复制class top_Block(nn.Module) | |
本站网友 复方薄荷脑软膏 | 20分钟前 发表 |
它建立在先前YOLO成功基础上 | |
本站网友 4岁宝宝食谱 | 13分钟前 发表 |
使用了Anchor-Free的思想; 损失函数:YOLOv8使用VFL Loss作为分类损失 | |
本站网友 韩国人均收入 | 18分钟前 发表 |
通过在全局视野上对不同层级的特征进行统一的聚集融合并分发注入到不同层级中 | |
本站网友 龙岩二手房网 | 6分钟前 发表 |
attn_drop=0. | |
本站网友 不上火的婴儿奶粉 | 7分钟前 发表 |
def __init__(self | |
本站网友 温州二手房 | 21分钟前 发表 |
def __init__(self | |
本站网友 恶心图片 | 13分钟前 发表 |
ouc_list | |
本站网友 倍舒痕 | 13分钟前 发表 |
不过YOLOv5中的C模块被替换成了C2f模块 | |
本站网友 丘八文化 | 22分钟前 发表 |
使用了Anchor-Free的思想; 损失函数:YOLOv8使用VFL Loss作为分类损失 | |
本站网友 集群服务器 | 12分钟前 发表 |
x1 | |
本站网友 女人睡多了男人的从哪看出来 | 23分钟前 发表 |
x = _blocks[i](x) return (x) class AdvPoolFusion(nn.Module) |