蛇形卷积介绍

蛇形卷积常用于特征提取模块的改进 ---- 适用于细长微弱的局部结构特征与复杂多变的形态特征(将应用于管状结构上的动态蛇形卷积移植到杂草识别上)

管状目标分割的特点细长且复杂,标准卷积、空洞卷积无法根据目标特征调整关注区域,可变形卷积可以根据特征自适应学习感兴趣区域,但是对于管状目标,可变形卷积无法限制关注区域的连通性,而动态蛇形卷积则可变形卷积的基础上,限制了关注区域的连通性

在动态蛇形卷积中引入变形偏移△,对于可变形卷积模型被完全自由的学习偏移,感知场往往会偏离目标,特别是在处理一些细长复杂多变的目标,因此蛇形卷积采用迭代策略,依次选择每个要处理目标的下一个位置进行观察,从而确保了观察连续性,不会由于大的偏移将感知范围扩散的太远,我们将连续性约束加入卷积核的设计中,每一个卷积卷积位置都由前一个位置为基准,自由选择摆动方向,从而在自由选择的同时确保感受的连续性

卷积核咋蛇变呢??

普通的卷积核比如(3*3)的格子位置是规整的,但动态蛇形卷积要让这些格子"蛇形"排列,所以得从新算每一个格子的位置

位置算法----累加偏移的过程

从中心格子开始,往外扩展时,每个新格子的位置 = 前一个格子位置+偏移量(△,在范围在(1,-1))

比如计算x轴方向

中心是(xi,yj),往右边扩展(+c方向),每个新格子的y坐标要把之前的偏移(△y)累加

往左扩展(-c方向)同理,也是累加偏移

计算y轴格子位置同理

简单来说:从中心出发,每一步走的时候,把偏移一点点加上,让卷积核格子蛇形扭起来。

将C3_Snake替换掉我们YOLOv5里原来的C3特征提取模块,让模型更好的提取特征

左边模块(Bottlenck_D+C3_Snake)

Input(输入):将图像数据丢进去

Conv(普通卷积)+DySnakeConv(动态蛇形卷积):两条分支,一条普通卷积,另一条用动态蛇形卷积(更灵活提取数据特征)

合并:两次合并,最后输出,第一次合并普通卷积+动态蛇形卷积,第二次卷积,在第一次合并的基础上+原始数据

普通卷积稳住基本盘,动态蛇形卷积(更灵活提取)两者一结合更厉害

右边模块(多分枝+拼接)

Input输入

Conv+DSConv(动态蛇形卷积*2),三条分支,不同分支抓住不同的特征

Concat(拼接):把三条分支的结果"并排拼起来",在用一次普通卷积整理,最后输出

用不同的卷积分支广撒网抓特征,抓住的特征拼起来,在经过一次普通卷积让模型拿到更全面的信息

相关推荐
仙俊红28 分钟前
LeetCode487周赛T2,删除子数组后的最终元素
数据结构·算法
-dzk-7 小时前
【代码随想录】LC 59.螺旋矩阵 II
c++·线性代数·算法·矩阵·模拟
风筝在晴天搁浅7 小时前
hot100 78.子集
java·算法
Jasmine_llq7 小时前
《P4587 [FJOI2016] 神秘数》
算法·倍增思想·稀疏表(st 表)·前缀和数组(解决静态区间和查询·st表核心实现高效预处理和查询·预处理优化(提前计算所需信息·快速io提升大规模数据读写效率
超级大只老咪7 小时前
快速进制转换
笔记·算法
m0_706653237 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你918 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
qq_423233908 小时前
C++与Python混合编程实战
开发语言·c++·算法
TracyCoder1238 小时前
LeetCode Hot100(19/100)——206. 反转链表
算法·leetcode
m0_715575348 小时前
分布式任务调度系统
开发语言·c++·算法