当前位置: 首页 > article >正文

YOLOV7主干改进,使用fasternet轻量化改进主干(完整教程)

1,Pconv(来自Fasternet)(可作为模型中的基础卷积模块使用)

论文链接:https://arxiv.org/abs/2303.03667

2,为了大家方便的使用,这里我对原本的PConv的代码做了部分的改动,使得它的参数设置与Conv保持一致。大家直接将这一部分代码放到models/common.py的最后面。

import torch
import torch.nn as nn
import torch.nn.functional as F
class PConv(nn.Module):
    def __init__(self,
                 dim: int,
                 c2,
                 k,
                 s=1,
                 n_div=2,
                 forward: str = "split_cat",
                 kernel_size: int = 3) -> None:
        super(PConv, self).__init__()
        self.dim_conv = dim//n_div
        self.dim_untouched = dim - self.dim_conv
        self.conv = nn.Conv2d(
            self.dim_conv,
            self.dim_conv,
            kernel_size=k,
            stride=s,
            padding=k//2,
            bias=False
        )
        self.bn = nn.BatchNorm2d(dim)
        self.act = nn.SiLU()

    def forward(self,x):
        x1,x2 = torch.split(x,[self.dim_conv,self.dim_untouched],dim=1)
        x1 = self.conv(x1)
        x = torch.cat((x1,x2),1)
        return self.act(self.bn(x))

3,在models/yolo.py中将模块名添加上,大约是752行

4,自己动手diy配置文件yolov7.yaml文件。

这里有一个注意事项,因为PConv本身只是一个基本的卷积操作,因此它并不支持下采样和通道变换操作,因此为了尽可能的简单,大家直接在一些通道前后没改变的地方,没有进行下采样的地方使用PConv即可。


http://www.kler.cn/a/145874.html

相关文章:

  • 【基于无线电的数据通信链】Link 11 仿真测试
  • 二十七、资源限制-LimitRange
  • JavaScript系列(36)--微服务架构详解
  • 记录一下OpenCV Contrib 编译踩的坑
  • nginx实现TCP反向代理
  • Wi-Fi 7、Wi-Fi 6 与 5G、4G 的全方位对比
  • 人工智能|机器学习——循环神经网络的简洁实现
  • Docker 命令详解
  • hivesql 将json格式字符串转为数组
  • 飞翔的鸟小游戏
  • 医保线上购药系统:引领医疗新潮流
  • 【古诗生成AI实战】之四——模型包装器与模型的训练
  • 数字图像处理-Matlab实验
  • Doris单机部署——2.0.1.1版本
  • 单例模式-C++实现
  • 使用 Vue3 + Pinia + Ant Design Vue3 搭建后台管理系统
  • 有理数比较
  • 计算机图形学-变换基础
  • Linux 面试题(一)
  • zookeeper 单机伪集群搭建简单记录
  • AUTOSAR汽车电子嵌入式编程精讲300篇-汽车CAN总线安全性模糊测试
  • docker network容器网络通信
  • 机器学习【02】在 Pycharm 里使用 Jupyter Notebook
  • 【第二部分:结构】ARM Realm Management Monitor specification
  • Android 10.0 mtp模式下连接pc后显示的文件夹禁止删除copy重命名功能实现
  • Jenkins 保姆级教程