本文介绍: 这里一个注意事项,因为PConv本身只是一个基本卷积操作,因此它并不支持采样通道变换操作,因此为了尽可能的简单大家直接在一些通道前后没改变的地方,没有进行下采样的地方使用PConv即可。2,为了大家方便的使用这里我对原本的PConv代码做了部分的改动,使得它的参数设置与Conv保持一致。1,Pconv(来自Fasternet)(可作为模型中的基础卷积模块使用)3,在models/yolo.py中将模块添加上,大约是752行。4,自己动手diy配置文件yolov7.yaml文件

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即可

原文地址:https://blog.csdn.net/weixin_57111012/article/details/134560724

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_20196.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注