YOLOv8算法优化
CA注意力机制
为加强Yolov8模型对输入数据的空间结构理解,选择在Yolo算法中引入CA注意力机制(Coordinate Attention)。CA 注意力机制的核心思想是引入位置信息,通过将位置信息嵌入到通道注意力中,使得轻量级网络能够在更大的区域上进行注意力,同时避免了产生大量的计算开销。为了缓解2D全局池化造成的位置信息丢失,团队将通道注意力分解为两个并行的1D特征编码过程,有效地将空间坐标信息整合到生成的注意图中。以便模型可以更好地理解不同位置之间的关系。CA注意力机制算法流程图如下所示。
AFPN检测头
为帮助模型更好地理解图像中的语义信息。选择了AFPN(Asymptotic Feature Pyramid Network)方法来改进检测头。AFPN作为一种自适应的特征金字塔网络,能够有效地处理图像中的尺度变化,从而使得模型能够更全面地捕获目标的多尺度信息。AFPN结构框架如下图所示:
在Backbone网络自下而上的特征提取过程中,AFPN渐进地集成了Low-Level、High-Level和顶级特征。具体来说,AFPN最初融合了Low-Level特征,然后融合了深层特征,最后融合了最High-Level的特征,即最抽象的特征。非相邻层次特征之间的语义差距大于相邻层次特征间的语义差距,尤其是底部和顶部特征。这直接导致了非相邻层次特征的融合效果较差。因此,直接使用C2、C3、C4和C5进行特征融合是不合理的。由于AFPN的架构是渐进的,这将使不同 Level 特征的语义信息在渐进融合过程中更加接近,从而缓解上述问题。例如,C2和C3之间的特征融合减少了它们的语义差距。由于C3和C4是相邻的层次特征,因此减少了C2和C4之间的语义差距。
RFAConv卷积
RFAConv的几个关键思想:
- 感受野空间特征的重点关注:RFAConv特别关注于感受野内的空间特征,不仅仅局限于传统的空间维度。这种方法允许网络更有效地理解和处理图像中的局部区域,从而提高特征提取的精确性。
- 解决参数共享问题:在传统的CNN中,卷积核在处理不同区域的图像时共享同样的参数,这可能限制了模型对于复杂模式的学习能力。RFAConv通过引入注意力机制,能够更灵活地调整卷积核的参数,针对不同区域提供定制化的处理。
- 提高大尺寸卷积核的效率:对于大尺寸卷积核,仅使用标准的空间注意力可能不足以捕获所有重要的信息。RFAConv通过提供有效的注意力权重,使得大尺寸卷积核能够更有效地处理图像信息。
3*3的卷积操作
- 在这个操作中,特征是通过将卷积核与同样大小的感受野滑块相乘然后求和得到的。具体来说,输入图像X上的每一个33的区域(即感受野)都被一个33的卷积核K处理。每个感受野内的元素,(其中和表示在感受野内的位置)都与卷积核K内对应位置的权重,、相乘,然后这些乘积会被求和得到一个新的特征值F。这个过程在整个输入图像上滑动进行,以生成新的特征图。这种标准的卷积操作强调了局
- 部连接和权重共享的概念,即卷积核的权重对整个输入图。 同时我们使用RFAConv卷积以解决参数共享问题,RFAConv通过引入注意力机制,允许网络为每个感受野生成特定的权重。这样,卷积核可以根据每个感受野内的不同特征动态调整其参数,而不是对所有区域一视同仁。
卷积操作过程
- 其中卷积核参数K通过将注意力权重A;与卷积核参数K相乘得到。这意味着每个感受野滑块的卷积操作都有一个独特的卷积核参数,这些参数是通过将通用的卷积核参数与特定于该位置的注意力权重相结合来获得的。
- 这个过程将注意力机制与卷积核相结合,为每个感受野位置产生一个定制化的卷积核。例如,图中的Kemel1、Kemel2和Kemel3分别是通过将通用卷积核参数K与对应的注意力权重、和43相乘得到的。这种方法允许网络在特征提取过程中对不同空间位置的特征赋予不同的重要性,从而增强了模型对关键特征的捕获能力。
AI决策
调用AI接口
调用多个AI接口,对于图像识别到类型,转换为对问题的描述,需要得到什么样的解决方案,将多个解决方案进行相互决策修改顶正,对于重合率最高的部分进行整合输出
调用通以千问的接口
defcall_with_messages(text,pred):
template ='''
你是一名身份,请你根据天气情况和灾害情况进行建议
当前天气情况:{text}
当前灾害情况:{pred}
给出详细的决策方案
'''
messages =[{"role":"user","content":template.format(text=text,pred=pred)}]
response = dashscope.Generation.call(# dashscope.Generation.Models.qwen_turbo,"qwen1.5-1.8b-chat",
messages=messages,
result_format='message',# set the result to be "message" format.
temperature=0.95,
top_p=0.8,
max_tokens=200,)if response.status_code == HTTPStatus.OK:
res = response["output"]["choices"][0]["message"]["content"]else:
res ='请求异常'return res
版权归原作者 Mercer_Su 所有, 如有侵权,请联系我们删除。