1.CSPdarknet网络结构的实现(python)

本文详细介绍了CSPDarknet的网络结构,包括Focus、Bottleneck、C3模块以及SPP层的应用,展示了其如何通过特征提取和多尺度池化来增强网络性能。代码示例展示了如何构建并使用CSPDarknet进行图像特征提取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

CSPdarknet的网络结构如下图所示(该图来自别的博客【目标检测】yolov5模型详解-CSDN博客),是下图最左边的input和下面长方形的网络结构,该结构输出的是1X128X80X80,1X256X40X40和1X512X20X20三个数据。

代码如下:

import cv2
import numpy as np
import torch
import torch.nn as nn


#silu激活函数
class SiLU(nn.Module):
    @staticmethod
    def forward(x):
        return x*torch.sigmoid(x)

def autopad(k, p=None):
    if p is None:
        p = k // 2 if isinstance(k, int) else [x // 2 for x in k]
    return p


#1.单个卷积结构的的conv函数
class Conv(nn.Module):
    def __init__(self,c1,c2,k=1,s=1,p=None,g=1,act=True):
        super(Conv,self).__init__()
        #卷积、标准化、激活函数
        self.conv=nn.Conv2d(c1,c2,k,s,autopad(k,p),groups=g, bias=False)
        self.bn=nn.BatchNorm2d(c2,eps=0.001, momentum=0.03)
        self.act=SiLU() if act is True else (act if isinstance(act, nn.Module) else nn.Identity())

    def forward(self,x):
        return self.act(self.bn(self.conv(x)))#卷积->BatchNorm2d->激活函数->output

    def fuseforward(self,x):
        return self.act(self.conv(x))#这个forward函数不存在BN操作


#2.focus函数
class Focus(nn.Module):
    def __init__(self, c1, c2, k=1, s=1, p=None, g=1, act=True):  # ch_in, ch_out, kernel, stride, padding, groups
        super(Focus, self).__init__()

        # 通道数变为原来 4 倍
        self.conv = Conv(c1 * 4, c2, k, s, p, g, act)

    def forward(self,x):
        # 320, 320, 12 => 320, 320, 64
        return self.conv(
            # 640, 640, 3 => 320, 320, 12
            torch.cat(
                [
                    x[...,::2,::2],
                    x[...,1::2,::2],
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值