位置: IT常识 - 正文
推荐整理分享目标检测算法——YOLOv5/v7/v8改进结合即插即用的动态卷积ODConv(小目标涨点神器)(运动目标检测算法),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:3d目标检测算法,目标检测算法的主要目的是找到图像中用户感兴趣的,目标检测算法有哪些,目标检测算法排名,SSD目标检测算法,目标检测算法排名,目标检测算法排名,目标检测算法有哪些,内容如对您有帮助,希望把文章链接给更多的朋友!
作者将CondConv中一个维度上的动态特性进行了扩展,同时了考虑了空域、输入通道、输出通道等维度上的动态性,故称之为全维度动态卷积。ODConv通过并行策略采用多维注意力机制沿核空间的四个维度学习互补性注意力。
作为一种“即插即用”的操作,它可以轻易的嵌入到现有CNN网络中。ImageNet分类与COCO检测任务上的实验验证了所提ODConv的优异性:即可提升大模型的性能,又可提升轻量型模型的性能,实乃万金油是也!值得一提的是,受益于其改进的特征提取能力,ODConv搭配一个卷积核时仍可取得与现有多核动态卷积相当甚至更优的性能。
一、ODConv网络结构二、ODConv相关代码import torchimport torch.nn as nnimport torch.nn.functional as Fimport torch.autogradclass Attention(nn.Module): def __init__(self, in_planes, out_planes, kernel_size, groups=1, reduction=0.0625, kernel_num=4, min_channel=16): super(Attention, self).__init__() attention_channel = max(int(in_planes * reduction), min_channel) self.kernel_size = kernel_size self.kernel_num = kernel_num self.temperature = 1.0 self.avgpool = nn.AdaptiveAvgPool2d(1) self.fc = nn.Conv2d(in_planes, attention_channel, 1, bias=False) self.bn = nn.BatchNorm2d(attention_channel) self.relu = nn.ReLU(inplace=True) self.channel_fc = nn.Conv2d(attention_channel, in_planes, 1, bias=True) self.func_channel = self.get_channel_attention if in_planes == groups and in_planes == out_planes: # depth-wise convolution self.func_filter = self.skip else: self.filter_fc = nn.Conv2d(attention_channel, out_planes, 1, bias=True) self.func_filter = self.get_filter_attention if kernel_size == 1: # point-wise convolution self.func_spatial = self.skip else: self.spatial_fc = nn.Conv2d(attention_channel, kernel_size * kernel_size, 1, bias=True) self.func_spatial = self.get_spatial_attention if kernel_num == 1: self.func_kernel = self.skip else: self.kernel_fc = nn.Conv2d(attention_channel, kernel_num, 1, bias=True) self.func_kernel = self.get_kernel_attention self._initialize_weights() def _initialize_weights(self): for m in self.modules(): if isinstance(m, nn.Conv2d): nn.init.kaiming_normal_(m.weight, mode='fan_out', nonlinearity='relu') if m.bias is not None: nn.init.constant_(m.bias, 0) if isinstance(m, nn.BatchNorm2d): nn.init.constant_(m.weight, 1) nn.init.constant_(m.bias, 0) def update_temperature(self, temperature): self.temperature = temperature @staticmethod def skip(_): return 1.0 def get_channel_attention(self, x): channel_attention = torch.sigmoid(self.channel_fc(x).view(x.size(0), -1, 1, 1) / self.temperature) return channel_attention def get_filter_attention(self, x): filter_attention = torch.sigmoid(self.filter_fc(x).view(x.size(0), -1, 1, 1) / self.temperature) return filter_attention def get_spatial_attention(self, x): spatial_attention = self.spatial_fc(x).view(x.size(0), 1, 1, 1, self.kernel_size, self.kernel_size) spatial_attention = torch.sigmoid(spatial_attention / self.temperature) return spatial_attention def get_kernel_attention(self, x): kernel_attention = self.kernel_fc(x).view(x.size(0), -1, 1, 1, 1, 1) kernel_attention = F.softmax(kernel_attention / self.temperature, dim=1) return kernel_attention def forward(self, x): x = self.avgpool(x) x = self.fc(x) x = self.bn(x) x = self.relu(x) return self.func_channel(x), self.func_filter(x), self.func_spatial(x), self.func_kernel(x)class ODConv2d(nn.Module): def __init__(self, in_planes, out_planes, kernel_size, stride=1, padding=0, dilation=1, groups=1, reduction=0.0625, kernel_num=4): super(ODConv2d, self).__init__() self.in_planes = in_planes self.out_planes = out_planes self.kernel_size = kernel_size self.stride = stride self.padding = padding self.dilation = dilation self.groups = groups self.kernel_num = kernel_num self.attention = Attention(in_planes, out_planes, kernel_size, groups=groups, reduction=reduction, kernel_num=kernel_num) self.weight = nn.Parameter(torch.randn(kernel_num, out_planes, in_planes//groups, kernel_size, kernel_size), requires_grad=True) self._initialize_weights() if self.kernel_size == 1 and self.kernel_num == 1: self._forward_impl = self._forward_impl_pw1x else: self._forward_impl = self._forward_impl_common def _initialize_weights(self): for i in range(self.kernel_num): nn.init.kaiming_normal_(self.weight[i], mode='fan_out', nonlinearity='relu') def update_temperature(self, temperature): self.attention.update_temperature(temperature) def _forward_impl_common(self, x): # Multiplying channel attention (or filter attention) to weights and feature maps are equivalent, # while we observe that when using the latter method the models will run faster with less gpu memory cost. channel_attention, filter_attention, spatial_attention, kernel_attention = self.attention(x) batch_size, in_planes, height, width = x.size() x = x * channel_attention x = x.reshape(1, -1, height, width) aggregate_weight = spatial_attention * kernel_attention * self.weight.unsqueeze(dim=0) aggregate_weight = torch.sum(aggregate_weight, dim=1).view( [-1, self.in_planes // self.groups, self.kernel_size, self.kernel_size]) output = F.conv2d(x, weight=aggregate_weight, bias=None, stride=self.stride, padding=self.padding, dilation=self.dilation, groups=self.groups * batch_size) output = output.view(batch_size, self.out_planes, output.size(-2), output.size(-1)) output = output * filter_attention return output def _forward_impl_pw1x(self, x): channel_attention, filter_attention, spatial_attention, kernel_attention = self.attention(x) x = x * channel_attention output = F.conv2d(x, weight=self.weight.squeeze(dim=0), bias=None, stride=self.stride, padding=self.padding, dilation=self.dilation, groups=self.groups) output = output * filter_attention return output def forward(self, x): return self._forward_impl(x)三、实验对比结果🚀🏆🍀【算法创新&算法训练&论文投稿】相关链接👇👇👇✨【YOLO创新算法尝新系列】✨🏂 美团出品 | YOLOv6 v3.0 is Coming(超越YOLOv7、v8)🏂 官方正品 | Ultralytics YOLOv8算法来啦(尖端SOTA模型)🏂 改进YOLOv5/YOLOv7——魔改YOLOv5/YOLOv7提升检测精度(涨点必备)————————————🌴【重磅干货来袭】🎄————————————🚀一、主干网络改进(持续更新中)🎄🎈1.目标检测算法——YOLOv5/YOLOv7改进之结合ConvNeXt结构(纯卷积|超越Swin)2.目标检测算法——YOLOv5/YOLOv7改进之结合MobileOne结构(高性能骨干|仅需1ms)3.目标检测算法——YOLOv5/YOLOv7改进之结合Swin Transformer V2(涨点神器)4.目标检测算法——YOLOv5/YOLOv7改进结合BotNet(Transformer)5.目标检测算法——YOLOv5/YOLOv7改进之GSConv+Slim Neck(优化成本)6.目标检测算法——YOLOv5/YOLOv7改进结合新神经网络算子Involution(CVPR 2021)7.目标检测算法——YOLOv7改进|增加小目标检测层8.目标检测算法——YOLOv5改进|增加小目标检测层🌴 持续更新中……🚀二、轻量化网络(持续更新中)🎄🎈1.目标检测算法——YOLOv5/YOLOv7改进之结合RepVGG(速度飙升)2.目标检测算法——YOLOv5/YOLOv7改进之结合PP-LCNet(轻量级CPU网络)3.目标检测算法——YOLOv5/YOLOv7改进之结合轻量化网络MobileNetV3(降参提速)4.目标检测算法——YOLOv5/YOLOv7改进|结合轻量型网络ShuffleNetV25.目标检测算法——YOLOv5/YOLOv7改进结合轻量型Ghost模块🌴 持续更新中……🚀三、注意力机制(持续更新中)🎄🎈1.目标检测算法——YOLOv5改进之结合CBAM注意力机制2.目标检测算法——YOLOv7改进之结合CBAM注意力机制3.目标检测算法——YOLOv5/YOLOv7之结合CA注意力机制4.目标检测算法——YOLOv5/YOLOv7改进之结合ECA注意力机制5.目标检测算法——YOLOv5/YOLOv7改进之结合NAMAttention(提升涨点)6.目标检测算法——YOLOv5/YOLOv7改进之结合GAMAttention7.目标检测算法——YOLOv5/YOLOv7改进之结合无参注意力SimAM(涨点神器)8.目标检测算法——YOLOv5/YOLOv7改进之结合Criss-Cross Attention9.目标检测算法——YOLOv5/YOLOv7改进之结合SOCA(单幅图像超分辨率)🌴 持续更新中……🚀四、检测头部改进(持续更新中)🎄🎈1.魔改YOLOv5/v7高阶版(魔法搭配+创新组合)——改进之结合解耦头Decoupled_Detect2.目标检测算法——YOLOv5/YOLOv7改进结合涨点Trick之ASFF(自适应空间特征融合)🌴 持续更新中……🚀五、空间金字塔池化(持续更新中)🎄🎈1.目标检测算法——YOLOv5/YOLOv7改进之结合ASPP(空洞空间卷积池化金字塔)2.目标检测算法——YOLOv5/YOLOv7改进之结合特征提取网络RFBNet(涨点明显)🌴 持续更新中……🚀六、损失函数及NMS改进(持续更新中)🎄🎈1.目标检测算法——YOLOv5/YOLOv7改进|将IOU Loss替换为EIOU Loss2.目标检测算法——助力涨点 | YOLOv5改进结合Alpha-IoU3.目标检测算法——YOLOv5/YOLOv7改进之结合SIoU4.目标检测算法——YOLOv5将NMS替换为DIoU-NMS🌴 持续更新中……🚀七、其他创新改进项目(持续更新中)🎄🎈1.手把手教你搭建属于自己的PyQt5-YOLOv5目标检测平台(保姆级教程)2.YOLO算法改进之结合GradCAM可视化热力图(附详细教程)3.目标检测算法——YOLOv5/YOLOv7改进之结合SPD-Conv(低分辨率图像和小目标涨点明显)4.目标检测算法——YOLOv5/YOLOv7改进之更换FReLU激活函数5.目标检测算法——YOLOv5/YOLOv7改进之结合BiFPN🌴 持续更新中……🚀八、算法训练相关项目(持续更新中)🎄🎈1.目标检测算法——YOLOv7训练自己的数据集(保姆级教程)2.人工智能前沿——玩转OpenAI语音机器人ChatGPT(中文版)3.深度学习之语义分割算法(入门学习)4.知识经验分享——YOLOv5-6.0训练出错及解决方法(RuntimeError)5.目标检测算法——将xml格式转换为YOLOv5格式txt6.目标检测算法——YOLOv5/YOLOv7如何改变bbox检测框的粗细大小7.人工智能前沿——6款AI绘画生成工具8.YOLOv5结合人体姿态估计9.超越YOLOv5,0.7M超轻量,又好又快(PP-YOLOE&PP-PicoDet)10.目标检测算法——收藏|小目标检测的定义(一)11.目标检测算法——收藏|小目标检测难点分析(二)12.目标检测算法——收藏|小目标检测解决方案(三)🌴 持续更新中……🚀九、数据资源相关项目(持续更新中)🎄🎈1.目标检测算法——小目标检测相关数据集(附下载链接)2.目标检测算法——3D公共数据集汇总(附下载链接)3.目标检测算法——3D公共数据集汇总 2(附下载链接)4.目标检测算法——行人检测&人群计数数据集汇总(附下载链接)5.目标检测算法——遥感影像数据集资源汇总(附下载链接)6.目标检测算法——自动驾驶开源数据集汇总(附下载链接)7.目标检测算法——自动驾驶开源数据集汇总 2(附下载链接)8.目标检测算法——图像分类开源数据集汇总(附下载链接)9.目标检测算法——医学图像开源数据集汇总(附下载链接)10.目标检测算法——工业缺陷数据集汇总1(附下载链接)11.目标检测算法——工业缺陷数据集汇总2(附下载链接)12.目标检测算法——垃圾分类数据集汇总(附下载链接)13.目标检测算法——人脸识别数据集汇总(附下载链接)14.目标检测算法——安全帽识别数据集(附下载链接)15.目标检测算法——人体姿态估计数据集汇总(附下载链接)16.目标检测算法——人体姿态估计数据集汇总 2(附下载链接)17.目标检测算法——车辆牌照识别数据集汇总(附下载链接)18.目标检测算法——车辆牌照识别数据集汇总 2(附下载链接)19.收藏 | 机器学习公共数据集集锦(附下载链接)20.目标检测算法——图像分割数据集汇总(附下载链接)21.目标检测算法——图像分割数据集汇总 2(附下载链接)22.收藏 | 自然语言处理(NLP)数据集汇总(附下载链接)23.自然语言处理(NLP)数据集汇总 2(附下载链接)24.自然语言处理(NLP)数据集汇总 3(附下载链接)25.自然语言处理(NLP)数据集汇总 4(附下载链接)🌴 持续更新中……🚀十、论文投稿相关项目(持续更新中)🎄🎈1.论文投稿指南——收藏|SCI论文投稿注意事项(提高命中率)2.论文投稿指南——收藏|SCI论文怎么投?(Accepted)3.论文投稿指南——收藏|SCI写作投稿发表全流程4.论文投稿指南——收藏|如何选择SCI期刊(含选刊必备神器)5.论文投稿指南——SCI选刊6.论文投稿指南——SCI投稿各阶段邮件模板7.人工智能前沿——深度学习热门领域(确定选题及研究方向)8.人工智能前沿——2022年最流行的十大AI技术9.人工智能前沿——未来AI技术的五大应用领域10.人工智能前沿——无人自动驾驶技术11.人工智能前沿——AI技术在医疗领域的应用12.人工智能前沿——随需应变的未来大脑13.目标检测算法——深度学习知识简要普及14.目标检测算法——10种深度学习框架介绍15.目标检测算法——为什么我选择PyTorch?16.知识经验分享——超全激活函数解析(数学原理+优缺点)17.知识经验分享——卷积神经网络(CNN)18.海带软件分享——Office 2021全家桶安装教程(附报错解决方法)19.海带软件分享——日常办公学习软件分享(收藏)20.论文投稿指南——计算机视觉 (Computer Vision) 顶会归纳21.论文投稿指南——中文核心期刊22.论文投稿指南——计算机领域核心期刊23.论文投稿指南——中文核心期刊推荐(计算机技术)24.论文投稿指南——中文核心期刊推荐(计算机技术2)25.论文投稿指南——中文核心期刊推荐(计算机技术3)26.论文投稿指南——中文核心期刊推荐(电子、通信技术)27.论文投稿指南——中文核心期刊推荐(电子、通信技术2)28.论文投稿指南——中文核心期刊推荐(电子、通信技术3)29.论文投稿指南——中文核心期刊推荐(机械、仪表工业)30.论文投稿指南——中文核心期刊推荐(机械、仪表工业2)31.论文投稿指南——中文核心期刊推荐(机械、仪表工业3)32.论文投稿指南——中国(中文EI)期刊推荐(第1期)33.论文投稿指南——中国(中文EI)期刊推荐(第2期)34.论文投稿指南——中国(中文EI)期刊推荐(第3期)35.论文投稿指南——中国(中文EI)期刊推荐(第4期)36.论文投稿指南——中国(中文EI)期刊推荐(第5期)37.论文投稿指南——中国(中文EI)期刊推荐(第6期)38.论文投稿指南——中国(中文EI)期刊推荐(第7期)39.论文投稿指南——中国(中文EI)期刊推荐(第8期)40.【1】SCI易中期刊推荐——计算机方向(中科院3区)41.【2】SCI易中期刊推荐——遥感图像领域(中科院2区)42.【3】SCI易中期刊推荐——人工智能领域(中科院1区)43.【4】SCI易中期刊推荐——神经科学研究(中科院4区)44.【5】SCI易中期刊推荐——计算机科学(中科院2区)45.【6】SCI易中期刊推荐——人工智能&神经科学&机器人学(中科院3区)46.【7】SCI易中期刊推荐——计算机 | 人工智能(中科院4区)47.【8】SCI易中期刊推荐——图像处理领域(中科院4区)48.【9】SCI易中期刊推荐——工程技术-计算机:软件工程(中科院4区)49.【10】SCI易中期刊推荐——工程技术-计算机:人工智能(中科院2区)50.【11】SCI易中期刊推荐——计算机方向(中科院4区)51.【12】SCI易中期刊推荐——计算机信息系统(中科院4区)🌴 持续更新中……关于YOLO算法改进&论文投稿可关注并留言博主的CSDN/QQ>>>一起交流!互相学习!共同进步!<<<上一篇:【哈士奇赠书活动 - 24期】-〖前端工程化:基于Vue.js 3.0的设计与实践〗(哈士奇新手礼包)
下一篇:Anaconda D2L 虚拟环境安装配置(anaconda虚拟机)
友情链接: 武汉网站建设