蛇形卷积常用于特征提取模块的改进 ---- 适用于细长微弱的局部结构特征与复杂多变的形态特征(将应用于管状结构上的动态蛇形卷积移植到杂草识别上)
管状目标分割的特点细长且复杂,标准卷积、空洞卷积无法根据目标特征调整关注区域,可变形卷积可以根据特征自适应学习感兴趣区域,但是对于管状目标,可变形卷积无法限制关注区域的连通性,而动态蛇形卷积则可变形卷积的基础上,限制了关注区域的连通性
在动态蛇形卷积中引入变形偏移△,对于可变形卷积模型被完全自由的学习偏移,感知场往往会偏离目标,特别是在处理一些细长复杂多变的目标,因此蛇形卷积采用迭代策略,依次选择每个要处理目标的下一个位置进行观察,从而确保了观察连续性,不会由于大的偏移将感知范围扩散的太远,我们将连续性约束加入卷积核的设计中,每一个卷积卷积位置都由前一个位置为基准,自由选择摆动方向,从而在自由选择的同时确保感受的连续性
卷积核咋蛇变呢??
普通的卷积核比如(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(拼接):把三条分支的结果"并排拼起来",在用一次普通卷积整理,最后输出
用不同的卷积分支广撒网抓特征,抓住的特征拼起来,在经过一次普通卷积让模型拿到更全面的信息