【轻量化网络】实战:更改SqueezeNet网络&MobileNet网络& ShuffleNet网络输出替换yolo的backbone部分

简介: 【轻量化网络】实战:更改SqueezeNet网络&MobileNet网络& ShuffleNet网络输出替换yolo的backbone部分

前言

  因此我们可以在“写(水)”论文的时候更换yolo的主干网络进行实验获取实验参数。在本文中将介绍ShuffleNetV2网络以及MobilenetV2网络更改的主干网络。

  轻量化网络相比于 YOLO 系列网络的主干网络,具有以下优势:

  1. 更快的推理速度:轻量化网络通常具有更少的参数和计算量,因此在推理时可以更快地处理输入数据。
  2. 更小的模型尺寸:轻量化网络通常具有更小的模型尺寸,这使得它们更容易部署到嵌入式设备或移动设备上。
  3. 更低的计算资源需求:轻量化网络需要更少的计算资源来运行,这使得它们更适合于在资源受限的环境中使用。
  4. 更好的泛化能力:轻量化网络通常具有更好的泛化能力,可以在小数据集上训练,并且可以更好地应对数据集的变化。
  5. 更容易优化:由于轻量化网络具有更少的参数,因此可以更容易地进行优化和调整,以在特定的任务上实现更好的性能

轻量化移植

   本文以yolov5作为例子向大家介绍如何进行轻量化替代迁移。这里我们主要是替代“三张图”

yolo5主干

  YOLOv5的主干网络采用的是CSPNet(Cross Stage Partial Network)结构,它是一种轻量级的卷积神经网络,可以有效地减少参数数量和计算量,提高模型的速度和精度。CSPNet结构的具体实现包括以下几个部分:

  1. CSPDarknet:包括多个卷积层和残差块,用于从图像中提取特征;
  2. SPP(Spatial Pyramid Pooling)模块:用于在不同尺度下对特征图进行池化操作,以提取更全局和丰富的特征信息;
  3. CSP Bottleneck Block:包括多个卷积层和残差块,用于进一步加深网络结构和提取更复杂的特征;
  4. PAN(Path Aggregation Network)模块:用于将不同层级的特征图进行融合,以提高检测精度;
  5. Detection Head:包括多个卷积层和全连接层,用于对特征图进行分类和回归,以得到目标的位置和类别。

MobilenetV2&ShuffleNetV2迁移

移植步骤:

  1. 使用torchvision.models中自带的MobilenetV2的网络当作模板进行使用;
  2. 修改YOLOv5的代码:需要将MobilenetV2的卷积层、批归一化层、激活函数等等替换为原来的CSPDarknet中的对应层次。同时,你还需要调整一些超参数,例如输入图像的大小、通道数、卷积核大小等等,以适应MobilenetV2网络的结构和特点;
  3. 加载MobilenetV2的预训练权重文件;
  4. 对新的模型进行微调.

代码示例

python

复制代码

import torch
import torchvision
from torch import nn
class MobilenetV2(nn.Module):
    def __init__(self, pretrained=False):
        super(MobilenetV2, self).__init__()
        self.model = torchvision.models.mobilenet_v2(pretrained=pretrained)
    def forward(self, x):
        out3 = self.model.features[:7](x)
        out4 = self.model.features[7:14](out3)
        out5 = self.model.features[14:18](out4)
        return out3, out4, out5
class Shufflenetv2_x0_5(nn.Module):
    def __init__(self, pretrained=False):
        super(Shufflenetv2_x0_5, self).__init__()
        self.model = torchvision.models.shufflenet_v2_x0_5(pretrained=pretrained)
    def forward(self, x):
        x1 = self.model.conv1(x)
        x2 = self.model.maxpool(x1)
        out3 = self.model.stage2(x2)
        out4 = self.model.stage3(out3)
        out5 = self.model.stage4(out4)
        return out3, out4, out5
if __name__ == "__main__":
    x = torch.zeros([1, 3, 640, 640])
    model = Shufflenetv2_x0_5()
    out3, out4, out5 = model(x)
    print(out3.shape)
    print(out4.shape)
    print(out5.shape)


相关文章
|
2月前
|
编解码 缓存 计算机视觉
改进的yolov5目标检测-yolov5替换骨干网络-yolo剪枝(TensorRT及NCNN部署)-1
改进的yolov5目标检测-yolov5替换骨干网络-yolo剪枝(TensorRT及NCNN部署)-1
126 0
|
2月前
|
机器学习/深度学习 计算机视觉 网络架构
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
40 0
【GhostNet】复现CVPR2020| 保证模型轻量化的同时,提升网络的性能表现
|
2月前
|
机器学习/深度学习 算法 PyTorch
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
python手把手搭建图像多分类神经网络-代码教程(手动搭建残差网络、mobileNET)
46 0
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch实战演练】AlexNet网络模型构建并使用Cifar10数据集进行批量训练(附代码)
【PyTorch实战演练】AlexNet网络模型构建并使用Cifar10数据集进行批量训练(附代码)
62 0
|
1月前
|
机器学习/深度学习 PyTorch 算法框架/工具
【PyTorch实战演练】使用Cifar10数据集训练LeNet5网络并实现图像分类(附代码)
【PyTorch实战演练】使用Cifar10数据集训练LeNet5网络并实现图像分类(附代码)
66 0
|
2月前
|
算法 PyTorch 计算机视觉
改进的yolov5目标检测-yolov5替换骨干网络-yolo剪枝(TensorRT及NCNN部署)-2
改进的yolov5目标检测-yolov5替换骨干网络-yolo剪枝(TensorRT及NCNN部署)-2
100 1
改进的yolov5目标检测-yolov5替换骨干网络-yolo剪枝(TensorRT及NCNN部署)-2
|
11天前
|
数据采集 机器学习/深度学习 数据挖掘
网络数据处理中的NumPy应用实战
【4月更文挑战第17天】本文介绍了NumPy在网络数据处理中的应用,包括数据预处理、流量分析和模式识别。通过使用NumPy进行数据清洗、格式化和聚合,以及处理时间序列数据和计算统计指标,可以有效进行流量分析和异常检测。此外,NumPy还支持相关性分析、周期性检测和聚类分析,助力模式识别。作为强大的科学计算库,NumPy在处理日益增长的网络数据中发挥着不可或缺的作用。
|
1月前
|
机器学习/深度学习 算法 PyTorch
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
【PyTorch实战演练】深入剖析MTCNN(多任务级联卷积神经网络)并使用30行代码实现人脸识别
61 2
|
1月前
|
机器学习/深度学习 自然语言处理 PyTorch
【PyTorch实战演练】基于全连接网络构建RNN并生成人名
【PyTorch实战演练】基于全连接网络构建RNN并生成人名
23 0
|
1月前
|
运维 数据库
Powershell实战:测试网络请求两个命令介绍
【2月更文挑战第11篇】 Test-Connection 命令将 Internet 控制消息协议 (ICMP) 回显请求数据包或 ping 发送给一台或多台远程计算机并返回回显响应回复。 我们可以使用该命令确定是否可通过 IP 网络ping通特定的计算机。