(五)yolov5修改检测头detect为ASFF(自适应特征融合)|涨点
ASFF:Adaptively Spatial Feature Fusion (自适应空间特征融合)论文来源:Learning Spatial Fusion for Single-Shot Object Detection
1.背景不同特征尺度之间的不一致性是基于特征金字塔的单阶段检测器的主要缺陷。
本文提出了一种新的基于数据驱动的金字塔特征融合策略,称为自适应空间特征融合(ASFF)。它学习了空间过滤冲突信息的方法来抑制不一致性,从而提高了特征的尺度不变性,并且开销小。
所提出的方法使网络能直接学习如何在空间上过滤其他层次的特征,以便只保留有用的信息进行组合。在每个空间位置,不同层次的特征被自适应地融合,也就是说,一些特征在这个位置携带矛盾的信息时可能被过滤掉,而一些特征可能以更具争议性的线索支配。
提出一种自适应特征融合方法,ASFFASFF可以提高FPN形式网络的性能借助ASFF策略和可靠的YOLOv3基线,在MS COCO数据集上实现了最佳的速度精度折衷解决单发检测器特征金字塔的不一致性。
特征金字塔的一大缺点是不同尺度特征的不一致性,特别是对于一阶段检测器。确切地说,在FPN ...
(四)yolov5修改损失函数权重系数|提升小目标检测
损失计算YOLOv5的损失主要由三个部分组成:
Classes loss,分类损失,采用的是BCE loss,注意只计算正样本的分类损失。
Objectness loss,obj损失,采用的依然是BCE loss,注意这里的obj指的是网络预测的目标边界框与GT Box的CIoU。这里计算的是所有样本的obj损失。
Location loss,定位损失,采用的是CIoU loss,注意只计算正样本的定位损失。
在源码中,针对预测小目标的预测特征层(P3)采用的权重是4.0,针对预测中等目标的预测特征层(P4)采用的权重是1.0,针对预测大目标的预测特征层(P5)采用的权重是0.4,作者说这是针对COCO数据集设置的超参数。
对应在loss.py文件中的class ComputeLoss类找到下面代码,修改相应的数值
[loss]1self.balance = {3: [4.0, 1.0, 0.4]}.get(m.nl, [4.0, 1.0, 0.25, 0.06, 0.02]) # P3-P7
(三)yolov5检测头head魔改之CBAM,ODConv|添加注意力
1.CBAM介绍论文题目:《CBAM: Convolutional Block Attention Module》论文地址: https://arxiv.org/pdf/1807.06521.pdf实验证明,将CBAM注意力模块嵌入到YOLOv5网络中,有利于解决原始网络无注意力偏好的问题。主要在分类问题中比较明显
CBAM注意力结构基本原理:从上图明显可以看到, CBAM一共包含2个独立的子模块, 通道注意力模块(Channel Attention Module,CAM) 和空间注意力模块(Spartial Attention Module,SAM) ,分别进行通道与空间维度上的注意力特征融合。 这样不只能够节约参数和计算力,并且保证了其能够做为即插即用的模块集成到现有的网络架构中去。
那对应YOLOv5结合CBAM需要修改哪些地方:
2.common.py中加入CBAM代码[CBAM]12345678910111213141516171819202122232425262728293031323334353637383940class ChannelAttentionModul ...
(二)yolov5检测头head魔改之BiFPN|优化小目标检测涨点
1.YOLOv5算法原始head结构
YOLOv5模型的Neck部分使用的是FPN+PAN结构,FPN是针对多尺度问题提出的,FPN结构是自上而下并且横向连接的,它利用金字塔的形式对尺度不同的特征图进行连接,将高层特征和低层特征进行融合。FPN与PAN结合,对来自不同骨干层的不同检测层进行参数聚合。这种组合虽然有效提高了网络的特征融合能力,但也会导致一个问题,即PAN结构的输入全部是FPN结构处理的特征信息,而骨干特征提取网络部分的原始特征信息存在一部分丢失。缺乏参与学习的原始信息很容易导致训练学习的偏差,影响检测的准确性。
从neck特征融合入手,引入加权双向特征金字塔BiFPN来加强特征图的底层信息,使不同尺度的特征图进行信息融合,从而加强特征信息。
2.BiFPN原理与结构BiFPN是一种改进版的FPN网络结构,主要用于目标检测任务。该结构是加权且双向连接的,即自顶向下和自底向上结构,通过构造双向通道实现跨尺度连接,将特征提取网络中的特征直接与自下而上路径中的相对大小特征融合,保留了更浅的语义信息,而不会丢失太多的深层语义信息。
传统的特征融合时将尺度不同的特征图以相同权重进行加 ...
(一)yolov5检测头head魔改之添加小目标层|针对小目标检测
1.YOLOv5算法简介
YOLOv5主要由输入端、Backone、Neck以及Prediction四部分组成。其中:
(1) Backbone:在不同图像细粒度上聚合并形成图像特征的卷积神经网络。
(2) Neck:一系列混合和组合图像特征的网络层,并将图像特征传递到预测层。
(3) Head: 对图像特征进行预测,生成边界框和并预测类别。
检测框架:
2.原始YOLOv5模型
[原始]123456789101112131415161718192021222324# YOLOv5 headhead: [[-1, 1, Conv, [512, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest']], [[-1, 6], 1, Concat, [1]], # cat backbone P4 [-1, 3, C3, [512, False]], # 13 [-1, 1, Conv, [256, 1, 1]], [-1, 1, nn.Upsample, [None, 2, 'nearest ...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.
Quick StartCreate a new post1$ hexo new "My New Post"
More info: Writing
Run server1$ hexo server
More info: Server
Generate static files1$ hexo generate
More info: Generating
Deploy to remote sites1$ hexo deploy
More info: Deployment
decorator
1、@timer:测量执行时间@timer装饰器可以帮助我们跟踪特定函数的执行时间。通过用这个装饰器包装函数,我可以快速识别瓶颈并优化代码的关键部分。
[测量执行时间]1234567891011121314import time def timer(func): def wrapper(*args, **kwargs): start_time = time.time() result = func(*args, **kwargs) end_time = time.time() print(f"{func.__name__} took {end_time - start_time:.2f} seconds to execute.") return result return wrapper@timerdef my_data_processing_function(): # Your data processing code here
2.@log_resu ...
onnx模型和手动生成anchors文件进行后处理与测试
训练好的深度学习模型通常需要转换为onnx模型,官方有onnx的测试代码,这里重新进行构建,并手动生成anchor文件,进行onnx模型测试,对于输入图像前处理也分为两部分,一个包含letterbox;一个不包含直接resize,显然后一个精度会有多降低
后处理[后处理]1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571 ...
butterfly教程
引用块源代码
[引用块]12<blockquote><p>content </p><footer><strong>author</strong><cite>- source [link] [source_link_title]</cite></footer></blockquote>
content
author- source [link] [source_link_title]
源代码
[引用块]12345>引用内容>>引用内容>>>yy内容
引用内容
引用内容
yy内容
分割线源代码
[分割线]123---
代码块源代码
[代码块]123<figure class="highlight plaintext"><figcaption><span>[title] [lang:language] [url] [link text]</span& ...