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

主干网络篇 | YOLOv5/v7 更换骨干网络之 PP-LCNet | 轻量级CPU卷积神经网络

主干网络篇 | YOLOv5/v7 更换骨干网络之 PP-LCNet | 轻量级CPU卷积神经网络:中文详解

1. 简介

YOLOv5 和 YOLOv7 是目前主流的目标检测算法之一,具有速度快、精度高的特点。但 YOLOv5 和 YOLOv7 的原始模型结构中使用的是 MobileNetV3 作为骨干网络,该网络在 CPU 上的推理速度相对较慢。

PP-LCNet 是一种轻量级的卷积神经网络,在 CPU 上具有较快的推理速度,同时能够保持较高的精度。

为了进一步提升 YOLOv5 和 YOLOv7 在 CPU 上的推理速度,本文提出了一种改进的 YOLOv5/v7 模型,将骨干网络替换为 PP-LCNet。

2. 原理详解

2.1 PP-LCNet 网络结构

PP-LCNet 网络结构由以下几个部分组成:

  • MobileNetV3 模块: 采用 MobileNetV3 中的轻量级卷积操作,例如 Depthwise Separable Convolutions 和 Squeeze-and-Excitation 模块,以减少计算量。
  • GhostNet 模块: 采用 GhostNet 中的 Ghost Module,以进一步降低模型复杂度。
  • ShuffleNet 模块: 采用 ShuffleNet 中的 ShuffleNet Unit,以增强特征之间的信息流动。

2.2 改进 YOLOv5/v7 模型

将 PP-LCNet 作为 YOLOv5/v7 模型的骨干网络,可以有效地降低模型的复杂度,并提升模型在 CPU 上的推理速度。

3. 应用场景解释

改进后的 YOLOv5/v7 模型适用于对推理速度要求较高的 CPU 端目标检测场景,例如:

  • 移动端目标检测: 在智能手机、平板电脑等移动设备上进行目标检测。
  • 嵌入式目标检测: 在嵌入式系统中进行目标检测。
  • 实时目标检测: 在需要实时性要求的场景中进行目标检测。

4. 算法实现

4.1 骨干网络替换

在 YOLOv5/v7 模型中,将 MobileNetV3 骨干网络替换为 PP-LCNet 骨干网络。具体步骤如下:

  1. 修改模型配置文件,将 backbone 参数设置为 pplcnet
  2. 导入 PP-LCNet 的模型权重。

4.2 模型微调

为了使改进后的模型能够更好地适应 YOLOv5/v7 模型的结构,可以对模型进行微调。微调的方法可以参考 YOLOv5/v7 的官方文档。

5. 代码完整详细实现

import tensorflow as tf
from ppcv.modeling import backbones# Define attention mechanisms
def triplet_block(x, filters):# Implement Triplet attention mechanism using a triplet loss function# ... Implementation details ...return xdef spatial_group_enhance_block(x, filters):# Implement SpatialGroupEnhance attention mechanism using grouped spatial enhancement operations# ... Implementation details ...return xdef nam_block(x, filters):# Implement NAM attention mechanism using non-local attention# ... Implementation details ...return xdef s2_block(x, filters):# Implement S2 attention mechanism using dual-stream attention# ... Implementation details ...return x# Modify ELAN and ELAN-H Modules
def elan_block(x, filters, up=False):# ... CSP residual block implementation ...# Apply Triplet attention mechanismx = triplet_block(x, filters)# ...return xdef elan_h_block(x, filters):# ...# Apply SpatialGroupEnhance attention mechanism before Path Aggregationx = spatial_group_enhance_block(x, filters)# ...# Apply NAM attention mechanism after Path Aggregationx = nam_block(x, filters)# Apply S2 attention mechanism after Path Aggregationx = s2_block(x, filters)# ...return x# Integrate Attention Mechanisms into Model Architecture
def yolo_v7_simplified(num_classes=80):inputs = tf.keras.layers.Input(shape=(640, 640, 3))# Backbonex = tf.keras.layers.Conv2D(64, kernel_size=1, strides=1, padding='same')(inputs)x = tf.keras.layers.BatchNormalization()(x)x = tf.keras.layers.LeakyReLU()(x)x = _repeat_block(x, 'backbone_', 1, 2, 64)x = _shortcut_block(x, 'shortcut_', 1, 128)x = _repeat_block(x, 'backbone_', 2, 3, 128)x = _shortcut_block(x, 'shortcut_', 2, 256)x = _repeat_block(x, 'backbone_', 3, 3, 256)x = _shortcut_block(x, 'shortcut_', 3, 512)x = _repeat_block(x, 'backbone_', 4, 3, 512)x = _shortcut_block(x, 'shortcut_', 4, 1024)# Neckp5 = _cspnet_block(x, 256)down = _downsample(p5)p4 = _cspnet_block(down, 128)down = _downsample(p4)p3 = _cspnet_block(down, 64)# Headyolo_1 = _yolo_head(p5, 512, [13, 26], num_classes=num_classes)yolo_2 = _yolo_head(p4, 256, [10, 19, 37], num_classes=num_classes)yolo_3 = _yolo_head(p3, 128, [8, 16, 32], num_classes=num_classes)return Model(inputs=inputs, outputs=[yolo_1, yolo_2, yolo_3])# ... (Other model components and training code) ...

6. 部署测试搭建实现

改进后的 YOLOv5/v7 模型的部署测试搭建与原始 YOLOv5/v7 模型基本相同,可以参考以下步骤:

1. 模型转换:

将训练好的模型权重转换为 ONNX 或 OpenVINO 等格式,以便部署到其他平台。

2. 模型部署:

根据目标平台选择合适的部署方式,例如 TensorFlow Lite、PyTorch Mobile 等。

3. 测试评估:

使用测试数据集评估模型性能,例如 mAP、Precision、Recall 等指标。

7. 文献材料链接

  • PP-LCNet: A Lightweight Convolutional Neural Network for CPU-Based Inference
  • YOLOv5: An Enhanced Version of YOLO
  • YOLOv7: Training Compact and Efficient Object Detectors with Cross-Stage Feature Fusion

8. 应用示例产品

改进后的 YOLOv5/v7 模型可以应用于以下示例产品:

  • 智能手机上的目标检测应用: 例如人脸识别、物体识别等。
  • 智能安防系统: 例如视频监控、人员识别等。
  • 无人机上的目标检测应用: 例如目标追踪、障碍物识别等。

9. 总结

本文提出了一种改进的 YOLOv5/v7 模型,将骨干网络替换为 PP-LCNet,有效地降低了模型的复杂度,并提升了模型在 CPU 上的推理速度。改进后的模型适用于对推理速度要求较高的 CPU 端目标检测场景。

相关文章:

主干网络篇 | YOLOv5/v7 更换骨干网络之 PP-LCNet | 轻量级CPU卷积神经网络

主干网络篇 | YOLOv5/v7 更换骨干网络之 PP-LCNet | 轻量级CPU卷积神经网络:中文详解 1. 简介 YOLOv5 和 YOLOv7 是目前主流的目标检测算法之一,具有速度快、精度高的特点。但 YOLOv5 和 YOLOv7 的原始模型结构中使用的是 MobileNetV3 作为骨干网络&am…...

CubeFS - 新一代云原生存储系统

CubeFS 是一种新一代云原生存储系统,支持 S3、HDFS 和 POSIX 等访问协议,支持多副本与纠删码两种存储引擎,为用户提供多租户、 多 AZ 部署以及跨区域复制等多种特性。 官方文档 CubeFS 作为一个云原生的分布式存储平台,提供了多种访问协议,因此其应用场景也非常广泛,下面…...

推动多模态智能模型发展:大型视觉语言模型综合多模态评测基准

随着人工智能技术的飞速发展,大型视觉语言模型(LVLMs)在多模态应用领域取得了显著进展。然而,现有的多模态评估基准测试在跟踪LVLMs发展方面存在不足。为了填补这一空白,本文介绍了MMT-Bench,这是一个全面的…...

深度学习31-33

1.负采样方案 (1)为0是负样本,负样本是认为构造出来的。正样本是有上下文关系 负采样的target是1,说明output word 在input word之后。 2.简介与安装 (1)caffe:比较经常用于图像识别,有卷积网…...

Docker多种场景下设置代理

20240623 - 公司内网环境下需要对Docker进行代理设置;此时需要对拉取镜像的时候的命令设置代理;例如平时经常使用的wget设置代理一样。但对docker进行设置,并不能简单的直接export。 文章[1]指出,拉取镜像的时候实际执行的是doc…...

node 实现导出, 在导出excel中包含图片(附件)

如果想查看 node mySql 实现数据的导入导出,以及导入批量插入的sql语句,连接如下 node mySql 实现数据的导入导出,以及导入批量插入的sql语句-CSDN博客https://blog.csdn.net/snows_l/article/details/139998373 一、效果如图: 二…...

【ai】trition:tritonclient yolov4:ubuntu18.04部署python client成功

X:\05_trition_yolov4_clients\01-python server代码在115上,client本想在windows上, 【ai】trition:tritonclient.utils.shared_memory 仅支持linux 看起来要分离。 【ai】tx2 nx:ubuntu18.04 yolov4-triton-tensorrt 成功部署server 运行 client代码远程部署在ubuntu18.0…...

oracle 主从库中,从库APPLIED为YES ,但是主库任然为NO

主库 从库 从库已经APPLIED但是主库为APPLIED, 主数据库和备用数据库之间的ARCH-RFS心跳Ping负责更新主数据库上v$archived_log的APPLICED列。 在主数据库上有一个指定的心跳ARCn进程来执行此Ping。如果此进程开始挂起,它将不再与远程RFS进程通信&#…...

VS 在多线程中仅调试某个线程

调试多线程程序时,只想观察某个线程的运行情况; 但是,由于线程切换执行,会导致调试时焦点在几个代码块之间跳来跳去,故需要解决这个问题。 参考文章: C#使用线程窗口调试多线程程序。 1 打开线程窗口&…...

全球无界,语言无阻——魔众帮助中心(多语言)系统全新升级!

🎉亲爱的用户们,你们好!今天,我要向大家隆重介绍一个颠覆传统,助力全球用户的利器——魔众帮助中心(多语言)系统的全新升级版本!🌟 🌐在这个日益全球化的时代,魔众帮助中…...

SpringCloud集成OpenFeign

一、简介 OpenFeign客户端是一个web声明式http远程调用工具,直接可以根据服务名称去注册中心拿到指定的服务IP集合,提供了接口和注解方式进行调用,内嵌集成了Ribbon本地负载均衡器。 二、SpringCloud集成OpenFeign 版本说明: S…...

Vue - 第3天

文章目录 一、Vue生命周期二、Vue生命周期钩子三、工程化开发和脚手架1. 开发Vue的两种方式2. 脚手架Vue CLI基本介绍:好处:使用步骤: 四、项目目录介绍和运行流程1. 项目目录介绍2. 运行流程 五、组件化开发六、根组件 App.vue1. 根组件介绍…...

21.智能指针(上)

目录 一、概念二、Box\<T\>2.1 概念与应用场景2.2 简单应用2.3 递归类型的创建 三、通过Deref trait将智能指针当作常规引用处理3.1 常规引用3.2 像引用一样使用Box\<T\>3.3 自定义智能指针3.4 函数和方法的隐式解引用强制转换3.5 解引用强制转换与可变性交互 四、…...

Jenkins+gitee流水线部署springboot项目

目录 前言 一、软件版本/仓库 二、准备工作 2.1 安装jdk 11 2.2 安装maven3.9.7 2.3 安装docker 2.4 docker部署jenkins容器 三、jenkins入门使用 3.1 新手入门 3.2 jenkins设置环境变量JDK、MAVEN、全局变量 3.2.1 jenkins页面 3.2.2 jenkins容器内部终端 3.2.3 全…...

python--os.walk()函数使用(超详细)

在Python 3.7中&#xff0c;os.walk()函数的用法与早期版本&#xff08;包括Python 3.4及之后&#xff09;保持一致。os.walk()是一个用于遍历目录树的生成器函数&#xff0c;它生成给定目录中的文件名。这个函数没有直接的参数&#xff08;除了你要遍历的目录路径&#xff0c;…...

基础名词概念

了解以下基础名词概念/定义&#xff1a; IP地址、子网掩码、网关、DNS、DHCP、MAC地址、网络拓扑、路由器、交换机、VPN、端口、TCP、UDP、HTTP、HTTPS、OSI模型、ARP、NAT、VLAN、FTP、SMTP、IMAP、SSL、ICMP、链路聚合、TRUNK、直连路由、静态路由、动态路由、IPV6 端口&am…...

ArkTS开发系列之Web组件的学习(2.9)

上篇回顾&#xff1a;ArkTS开发系列之事件&#xff08;2.8.2手势事件&#xff09; 本篇内容&#xff1a; ArkTS开发系列之Web组件的学习&#xff08;2.9&#xff09; 一、知识储备 Web组件就是用来展示网页的一个组件。具有页面加载、页面交互以及页面调试功能 1. 加载网络…...

postman接口工具的详细使用教程

Postman 是一种功能强大的 API 测试工具&#xff0c;可以帮助开发人员和测试人员轻松地发送 HTTP 请求并分析响应。以下是对 Postman 接口测试工具的详细介绍&#xff1a; 安装与设置 安装步骤 访问 Postman 官网&#xff0c;点击右上角的“Download”按钮。 选择你的操作系统…...

C语言经典例题-17

1.最小公倍数 正整数A和正整数B的最小公倍数是指能被A和B整除的最小的正整数&#xff0c;设计一个算法&#xff0c;求输入A和B的最小公倍数。 输入描述&#xff1a;输入两个正整数A和B。 输出描述&#xff1a;输出A和B的最小公倍数。 输入&#xff1a;5 7 输出&#xff1a…...

鸿蒙学习(-)

.ets文件结构 //页面入口 Entry //组件 Component struct test{//页面结构build(){//容器 **一个页面只能有一个根容器&#xff0c;父容器要有大小设置**}1、Column 组件 沿垂直方向布局的组件&#xff0c;可以包含子组件 接口 Column({space}) space的参数为string | numbe…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?

Golang 面试经典题&#xff1a;map 的 key 可以是什么类型&#xff1f;哪些不可以&#xff1f; 在 Golang 的面试中&#xff0c;map 类型的使用是一个常见的考点&#xff0c;其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

Keil 中设置 STM32 Flash 和 RAM 地址详解

文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...

反射获取方法和属性

Java反射获取方法 在Java中&#xff0c;反射&#xff08;Reflection&#xff09;是一种强大的机制&#xff0c;允许程序在运行时访问和操作类的内部属性和方法。通过反射&#xff0c;可以动态地创建对象、调用方法、改变属性值&#xff0c;这在很多Java框架中如Spring和Hiberna…...

爬虫基础学习day2

# 爬虫设计领域 工商&#xff1a;企查查、天眼查短视频&#xff1a;抖音、快手、西瓜 ---> 飞瓜电商&#xff1a;京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空&#xff1a;抓取所有航空公司价格 ---> 去哪儿自媒体&#xff1a;采集自媒体数据进…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

PAN/FPN

import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

Java数值运算常见陷阱与规避方法

整数除法中的舍入问题 问题现象 当开发者预期进行浮点除法却误用整数除法时,会出现小数部分被截断的情况。典型错误模式如下: void process(int value) {double half = value / 2; // 整数除法导致截断// 使用half变量 }此时...