1,本文介绍
本文将通过RCS-OSA改进YOLOv8:
-
RCS(重参数化卷积):减少通道数以增强特征提取能力,同时在训练过程中学习深层表示,在推理时降低计算复杂度和内存消耗。
-
OSA(一次性聚合):增加特征多样性,提高对不同尺度目标的检测性能,并优化计算效率。
该方法在YOLOv8中实现了这些机制,并提供了代码部署指南。
关于RCS-OSA的详细介绍可以看论文:https://arxiv.org/ftp/arxiv/papers/2307/2307.16412.pdf
本文将讲解如何将RCS-OSA融合进yolov8
话不多说,上代码!
2, 将RCS-OSA融合进yolov8
2.1 步骤一
找到如下的目录'ultralytics/nn/modules',然后在这个目录下创建一个RCSOSA.py文件,文件名字可以根据你自己的习惯起,然后将RCS-OSA的核心代码复制进去
import torch.nn as nn
import torch
import torch.nn.functional as F
import numpy as np
import math
# build RepVGG block
# -----------------------------
def conv_bn(in_channels, out_channels, kernel_size, stride, padding, groups=1):
result = nn.Sequential()
result.add_module('conv', nn.Conv2d(in_channels=in_channels, out_channels=out_channels,
kernel_size=kernel_size, stride=stride, padding=padding, groups=groups,
bias=False))
result.add_module('bn', nn.BatchNorm2d(num_features=out_channels))
return result
class SEBlock(nn.Module):
def __init__(self, input_channels):
super(SEBlock, self).__init__()
internal_neurons = input_channels // 8
self.down = nn.Conv2d(in_channels=input_channels, out_channels=internal_neurons, kernel_size=1, stride=1,
bias=True)
self.up = nn.Conv2d(in_channels=internal_neurons, out_channels=input_channels, kernel_size=1, stride=1,
bias=True)
self.input_channels = input_channels
def forward(self, inputs):
x = F.avg_pool2d(inputs, kernel_size=inputs.size(3))
x = self.down(x)