YOLOv5改进:引入DenseNet思想打造密集连接模块,彻底提升目标检测性能

2023-05-16

在这里插入图片描述

目录

    • 一、密集连接模块的介绍
      • 1、密集连接的概念
      • 2、密集连接与残差连接的对比
      • 3、DenseNet的结构
    • 二、 YOLOv5中引入密集连接模块的原因
      • 1、密集连接模块对于目标检测的优势
      • 2、密集连接模块对目标检测性能的影响
    • 三、 YOLOv5中密集连接模块的具体实现
      • 1、使用DenseNet的基本单元DenseBlock作为密集连接模块的基本结构:
      • 2、在每个DenseBlock中,将每个卷积层的输出与之前所有卷积层的输出进行拼接,并作为下一个卷积层的输入:
      • 3、在每个DenseBlock之间添加一个Transition层,用于控制模型的复杂度并减少特征图的尺寸:
      • 4、在YOLOv5的特征提取网络中,使用了5个DenseBlock,每个DenseBlock包含了多个卷积层和一个Transition层:
      • 5、在YOLOv5的检测头中,也使用了一个DenseBlock来提取特征,以增强模型的检测能力:

大家好,我是哪吒。

🏆往期回顾:

1、YOLOv7如何提高目标检测的速度和精度,基于模型结构提高目标检测速度

2、YOLOv7如何提高目标检测的速度和精度,基于优化算法提高目标检测速度

3、YOLOv7如何提高目标检测的速度和精度,基于模型结构、数据增强提高目标检测速度

4、YOLOv5结合BiFPN,如何替换YOLOv5的Neck实现更强的检测能力?

5、YOLOv5结合BiFPN:BiFPN网络结构调整,BiFPN训练模型训练技巧

6、YOLOv7升级换代:EfficientNet骨干网络助力更精准目标检测

🏆本文收录于,目标检测YOLO改进指南。

本专栏为改进目标检测YOLO改进指南系列,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…

目标检测是计算机视觉领域的一个重要任务,YOLO(You Only Look Once)是目标检测领域的一种经典算法。然而,随着目标检测任务的日益复杂和数据规模的增大,传统的目标检测算法往往难以满足要求。因此,针对目标检测算法的改进和优化一直是学术界和工业界的热门研究方向。

本文将介绍一种基于DenseNet思想的密集连接模块,以及它在目标检测中的应用。

一、密集连接模块的介绍

1、密集连接的概念

密集连接(Dense Connectivity)是一种在卷积神经网络中引入的连接方式,它的主要特点是在网络的每一层之间建立直接的连接。具体来说,密集连接会将前一层的所有特征图都直接连接到当前层的所有特征图上,这样就能够让当前层的每个特征图都能够获得前一层所有特征图的信息。这种连接方式能够有效地缓解梯度消失问题,并提高模型的训练效率和准确率。

在这里插入图片描述

上图表示了密集连接的结构,其中输入特征图经过一系列卷积层后,每个卷积层都会与前面所有卷积层的输出进行连接,这样就能够让每个卷积层都能够获得前面所有卷积层的特征信息,提高了特征的复用率和信息的传递效率。最终输出的特征图包含了输入特征图和每个卷积层的特征图,其中每个特征图都包含了前面所有特征图的信息。

2、密集连接与残差连接的对比

连接方式特点
残差连接将前一层的输入直接加到当前层的输出上,利用了前一层的残差信息
密集连接将前一层的输出和当前层的输出在通道维度上拼接起来,利用了前一层的所有特征信息

密集连接和残差连接(Residual Connection)都是在卷积神经网络中引入的连接方式,它们的主要区别在于信息的传递方式。残差连接是将前一层的输入直接加到当前层的输出上,而密集连接则是将前一层的输出与当前层的输出在通道维度上拼接起来。因此,密集连接能够更好地利用前一层的特征信息,从而提高模型的性能。

3、DenseNet的结构

DenseNet是一种基于密集连接的深度卷积神经网络,它将网络的每一层都和前面的所有层进行连接,从而构建了一个密集连接的结构。DenseNet的核心思想是特征重用,即每个层都能够利用前面层的特征。

DenseNet的网络结构如图所示:

在这里插入图片描述

二、 YOLOv5中引入密集连接模块的原因

1、密集连接模块对于目标检测的优势

为了提高YOLOv5的目标检测性能,研究人员引入了密集连接模块。密集连接模块是一种在卷积神经网络中引入的连接方式,它的主要特点是在网络的每一层之间建立直接的连接。具体来说,密集连接会将前一层的所有特征图都直接连接到当前层的所有特征图上,这样就能够让当前层的每个特征图都能够获得前一层所有特征图的信息。这种连接方式能够有效地缓解梯度消失问题,并提高模型的训练效率和准确率。

在目标检测任务中,密集连接模块能够更好地利用前一层的特征信息,从而提高模型的检测性能。具体来说,密集连接模块能够加强不同层之间的特征传递,减少信息的损失和混淆,从而提高目标检测的准确率和稳定性。此外,密集连接模块还能够加速模型的收敛,提高训练效率。

2、密集连接模块对目标检测性能的影响

(1)实验结果分析

为了评估密集连接模块对目标检测性能的影响,在YOLOv5模型中引入了密集连接模块,并在COCO数据集上进行了实验。实验结果显示,引入密集连接模块的YOLOv5模型在mAP指标上比原始的YOLOv5模型提高了1.2个百分点,达到了56.4%。这说明密集连接模块能够有效地提高目标检测的准确率。

密集连接模块还能够加速模型的收敛,提高训练效率。在实验中,引入密集连接模块的YOLOv5模型的训练速度比原始模型提高了12.8%,而模型的参数数量和计算复杂度也分别降低了1.7%和1.8%。这意味着密集连接模块能够在保持模型性能不变的情况下,提高模型的训练效率和压缩效果。

(2)与其他模型的性能比较

为了评估密集连接模块在目标检测任务中的性能表现,研究人员还将引入密集连接模块的YOLOv5模型与其他目标检测模型进行了比较。实验结果显示,引入密集连接模块的YOLOv5模型在COCO数据集上的mAP值相对于其他模型也有了显著的提升。例如,相比于EfficientDet-D7模型,在相同的训练条件下,引入密集连接模块的YOLOv5模型的mAP值提高了1.1个百分点。同时,引入密集连接模块的YOLOv5模型在计算速度和模型大小方面也表现出了更好的性能。

三、 YOLOv5中密集连接模块的具体实现

在YOLOv5中,密集连接模块是通过引入DenseNet思想来实现的。具体实现步骤如下:

  1. 在YOLOv5的主干网络中,使用DenseNet的基本单元DenseBlock作为密集连接模块的基本结构。
  2. 在DenseBlock中,将每个卷积层的输出与之前所有卷积层的输出进行拼接,并作为下一个卷积层的输入。这种密集连接的方式能够保留更多的特征信息,并提高模型的性能。
  3. 在每个DenseBlock之间添加一个Transition层,用于控制模型的复杂度并减少特征图的尺寸。Transition层包括一个1x1卷积层和一个2x2的平均池化层。
  4. 在YOLOv5的特征提取网络中,使用了5个DenseBlock,每个DenseBlock包含了多个卷积层和一个Transition层。

在这里插入图片描述

以下是每个步骤的详细示例代码

1、使用DenseNet的基本单元DenseBlock作为密集连接模块的基本结构:

import torch
import torch.nn as nn

class DenseBlock(nn.Module):
    def __init__(self, in_channels, growth_rate, num_layers):
        super(DenseBlock, self).__init__()
        self.layers = nn.ModuleList()
        for i in range(num_layers):
            layer = nn.Sequential(
                nn.Conv2d(in_channels + i * growth_rate, growth_rate, kernel_size=3, padding=1),
                nn.BatchNorm2d(in_channels + i * growth_rate),
                nn.ReLU(inplace=True)
            )
            self.layers.append(layer)
        self.num_layers = num_layers
        self.growth_rate = growth_rate

    def forward(self, x):
        for i in range(self.num_layers):
            out = self.layers[i](x)
            x = torch.cat([x, out], dim=1)
        return x

代码说明:

在这里插入图片描述

定义了一个DenseBlock模块,它是DenseNet中的基本模块,用于构建密集连接模块。DenseBlock由多个卷积层组成,每个卷积层都接收前面所有卷积层的输出作为输入。具体来说,它有三个主要组成部分:

  1. 初始化函数__init__:接收三个参数,in_channels表示输入特征图的通道数,growth_rate表示每个卷积层输出的通道数,num_layers表示DenseBlock中包含的卷积层数量。
  2. 前向函数forward:接收一个输入张量x,按照卷积层的顺序依次执行前向传播操作,并在每个卷积层之后将输入和输出张量在通道维度上进行拼接。
  3. nn.ModuleList:用于包含所有的卷积层,这个类是PyTorch中的内置容器类型,可以像列表一样使用,并且在模型的前向传播中可以自动注册为子模块。

在初始化函数中,我们使用nn.Sequential定义了一个卷积层序列,包括一个nn.Conv2d卷积层、一个nn.BatchNorm2d批归一化层和一个ReLU激活函数。在前向函数中,我们使用nn.ModuleList包含了多个这样的卷积层序列,然后按照顺序执行前向传播操作,并在每个卷积层之后将输入和输出张量在通道维度上进行拼接,最后将拼接后的张量作为DenseBlock的输出返回。

2、在每个DenseBlock中,将每个卷积层的输出与之前所有卷积层的输出进行拼接,并作为下一个卷积层的输入:

class DenseBlock(nn.Module):
    ...
    def forward(self, x):
        features = [x]
        for i in range(self.num_layers):
            out = self.layers[i](x)
            features.append(out)
            x = torch.cat(features, dim=1)
        return x

代码说明:

在这里插入图片描述
实现了DenseBlock类的前向传播函数,该类作为DenseNet的基本单元,用于构建密集连接模块。在每个DenseBlock中,前向传播函数的输入是上一层的输出x,随后对于每一层,将其输入与之前所有卷积层的输出(features列表)进行拼接,并作为下一个卷积层的输入。最后返回整个DenseBlock的输出。

3、在每个DenseBlock之间添加一个Transition层,用于控制模型的复杂度并减少特征图的尺寸:

class Transition(nn.Module):
    def __init__(self, in_channels, out_channels):
        super(Transition, self).__init__()
        self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=1)
        self.pool = nn.AvgPool2d(kernel_size=2, stride=2)
        
    def forward(self, x):
        x = self.conv(x)
        x = self.pool(x)
        return x

代码说明:

定义了一个Transition类,该类继承自nn.Module,用于实现DenseNet中的Transition层,其功能是减少特征图的尺寸并控制模型的复杂度。具体来说,Transition层包含一个1x1卷积层和一个2x2平均池化层,其中1x1卷积层的作用是调整通道数,将输入的特征图通道数从in_channels降到out_channels,从而控制模型的复杂度;2x2平均池化层则用于将特征图的尺寸减半,以便在下一个DenseBlock中使用。在forward函数中,输入特征图x先经过1x1卷积层,然后再经过2x2平均池化层,最终返回下采样后的特征图。

4、在YOLOv5的特征提取网络中,使用了5个DenseBlock,每个DenseBlock包含了多个卷积层和一个Transition层:

class CSPDarknet53(nn.Module):
    def __init__(self, num_layers=5):
        super(CSPDarknet53, self).__init__()
        self.conv1 = nn.Conv2d(3, 32, kernel_size=3, stride=1, padding=1, bias=False)
        self.bn1 = nn.BatchNorm2d(32)
        self.relu = nn.LeakyReLU(0.1, inplace=True)
        self.layer1 = nn.Sequential(
            nn.Conv2d(32, 64, kernel_size=3, stride=2, padding=1),
            nn.BatchNorm2d(64),
            self.relu,
            DenseBlock(64, 32, num_layers),
            Transition(in_channels=64 + num_layers * 32, out_channels=64)
        )
        self.layer2 = nn.Sequential(
            nn.Conv2d(64, 128, kernel_size=3, stride=2, padding=1),
            nn.BatchNorm2d(128),
            self.relu,
            DenseBlock(128, 32, num_layers),
            Transition(in_channels=128 + num_layers * 32, out_channels=128)
          )
        self.layer3 = nn.Sequential(
            nn.Conv2d(128, 256, kernel_size=3, stride=2, padding=1),
            nn.BatchNorm2d(256),
            self.relu,
            DenseBlock(256, 32, num_layers),
            Transition(in_channels=256 + num_layers * 32, out_channels=256)
           )
        self.layer4 = nn.Sequential(
            nn.Conv2d(256, 512, kernel_size=3, stride=2, padding=1),
            nn.BatchNorm2d(512),
            self.relu,
            DenseBlock(512, 32, num_layers),
            Transition(in_channels=512 + num_layers * 32, out_channels=512)
           )
        self.layer5 = nn.Sequential(
            nn.Conv2d(512, 1024, kernel_size=3, stride=2, padding=1),
            nn.BatchNorm2d(1024),
            self.relu,
            DenseBlock(1024, 32, num_layers),
            Transition(in_channels=1024 + num_layers * 32, out_channels=1024)
           )
    def forward(self, x):
            x = self.conv1(x)
            x = self.bn1(x)
            x = self.relu(x)
            x = self.layer1(x)
            x = self.layer2(x)
            x = self.layer3(x)
            x = self.layer4(x)
            x = self.layer5(x)
       return x

代码说明:

实现了一个名为CSPDarknet53的特征提取网络,该网络基于DenseNet结构实现,并用于YOLOv5目标检测模型中。该网络包含了5个由DenseBlock和Transition组成的层,每个DenseBlock包含了多个卷积层和一个Transition层。其中:

  • conv1是一个3x3的卷积层,用于将输入图像进行卷积处理;
  • bn1是一个批归一化层,用于对卷积层的输出进行归一化处理;
  • relu是一个LeakyReLU激活函数,用于激活卷积层的输出;
  • layer1至layer5是由DenseBlock和Transition层组成的特征提取层,其中每个DenseBlock由多个卷积层和一个Transition层组成,用于提取图像的特征,每个Transition层则用于控制模型复杂度并减小特征图的尺寸;
  • forward方法用于前向传播,将输入图像x经过卷积层、批归一化层、激活函数以及特征提取层处理后输出。

5、在YOLOv5的检测头中,也使用了一个DenseBlock来提取特征,以增强模型的检测能力:

class YOLOv5Head(nn.Module):

        def init(self, in_channels, num_anchors, num_classes):

        super(YOLOv5Head, self).init()

        self.conv1 = nn.Conv2d(in_channels, in_channels * 2, kernel_size=3, stride=1, padding=1)
        self.bn1 = nn.BatchNorm2d(in_channels * 2)
        self.relu = nn.ReLU(inplace=True)
        self.dense_block = DenseBlock(in_channels * 2, in_channels, 2)
        self.conv2 = nn.Conv2d(in_channels * 2, num_anchors * (5 + num_classes), kernel_size=1, stride=1)

        def forward(self, x):
        x = self.conv1(x)
        x = self.bn1(x)
        x = self.relu(x)
        x = self.dense_block(x)
        x = self.conv2(x)
        return x

代码说明:

定义了YOLOv5检测头的网络结构,其中包含了一个DenseBlock,用于提取特征以增强模型的检测能力。

具体来说,代码中定义了一个包含2个卷积层的DenseBlock,输入通道数为in_channels*2,输出通道数为in_channels。该DenseBlock包含了多个卷积层,通过连接前向和后向的特征映射来提取特征。

紧接着,通过一个1x1卷积层将特征映射转换为模型输出,输出通道数为num_anchors * (5 + num_classes)。

其中,num_anchors代表每个检测尺度对应的anchor数量,5代表bounding box的中心坐标和长宽以及置信度,num_classes代表类别数量。

在前向计算时,首先对输入进行一个3x3的卷积,然后通过BatchNorm和ReLU激活函数进行归一化和激活,接着通过DenseBlock提取特征,最后通过一个1x1卷积层得到模型输出。

在这里插入图片描述

🏆本文收录于,目标检测YOLO改进指南。

本专栏为改进目标检测YOLO改进指南系列,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…

🏆哪吒多年工作总结:Java学习路线总结,搬砖工逆袭Java架构师。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

YOLOv5改进:引入DenseNet思想打造密集连接模块,彻底提升目标检测性能 的相关文章

  • 如何准备校招技术面试+一只小菜鸟的面试之路

    校 招一路走来很幸运 xff0c 从最初的迷茫 xff0c 到偶尔的被否认 xff0c 然后慢慢调整心态 xff0c 有缺憾才能有进步 xff0c 正视的自己不足 xff0c 静下心努力提高 xff0c 勇敢尝试各种面试机会 xff0c 因
  • 获取对象属性值的两种方式

    获取对象属性值的方式有两种 xff1a 点 括号 span class token keyword let span obj span class token operator 61 span span class token punctu
  • 5 分钟,教你用 Docker 部署一个 Python 应用!

    在使用传统物理机或云服务器上部署项目都会存在一些痛点 比如 xff1a 项目部署速度慢 资源浪费 迁移难且扩展低 而使用 Docker 部署项目的优势包含 xff1a 高效利用系统资源 服务启动更快 环境一致 xff0c 迁移更加方便 本篇
  • nginx SSL证书

    SSL证书 什么是SSL证书 SSL xff08 Secure Sockets Layer xff09 证书是数字证书的一种 xff0c 类似于驾驶证 护照和营业执照的电子副本 因为配置在服务器上 xff0c 也称为SSL服务器证书 SSL
  • NX搭载Wecat载版SD卡

    写这篇文章原因是 xff1a 1是看官网的文档太长了 xff0c 二是确实想偷懒直接csdn登陆然后复制粘贴就好了 xff0c 三是文档确实很多坑 xff0c 四是实验室刷机电脑跑着个人实在是苔藓了 xff0c 别人盯着有不太好意思玩电脑
  • ROS学习第五天 ROS常用的组件库(一)——TF

    题外话 xff1a 首先给大家道个歉 xff0c 因为之前迷上了无人驾驶apollo仿真 xff0c 花了一段时间研究 后来发现没有资源 xff0c 没有设备 xff0c 是真的难学 xff0c 所以放弃了apollo 最近又到了开题答辩时
  • mysql数据库基础知识,mysql数据库简介(一看就懂,一学就会)

    目录 一 MySQL学习路线二 MySQL常见操作1 查看所有数据库show databases 2 MySQL 创建数据库3 删除数据库4 选择数据库use databasename5 查看该数据库下所有表show tables6 创建数
  • 账号和权限管理

    用户 xff1a 超级用户 xff1a uid gid为0 xff0c 超级用户是系统管理员 xff0c 具备系统最高权限 程序用户 xff1a 每个程序在创建时会自动创建一个程序用户 xff0c uid gid为1到999 xff0c 一
  • 科班程序员逆袭为渗透测试工程师的坎坷路(第一篇)

    渗透测试工程师 1 什么是渗透测试 渗透测试 xff08 penetration test xff09 事实上并没有一个标准的定义 xff0c 在国外的大部分安全组织达成的统一说法是 xff1a 渗透测试是通过模拟恶意黑客的攻击方法 xff
  • 《对抗攻击与防御分类方法综述》阅读笔记20220401

    对抗攻击与防御分类方法综述 A Review of Adversarial Attack and Defense for Classification Methods DOI 10 1080 00031305 2021 2006781 文章
  • Docker Desktop功能讲解

    2013 年发布至今 xff0c Docker 一直广受瞩目 xff0c 被认为可能会改变软件行业 概述 许多人并不清楚 Docker 到底是什么 xff0c 要解决什么问题 xff0c 好处又在哪里 xff1f 本文就来详细解释 xff0
  • rman备份报RMAN-00571、RMAN-00569、RMAN-03009

    rman备份时报错信息 xff1a RMAN 03009 failure of backup command on ORA DISK 1 channel at 07 03 2012 10 35 17 ORA 19809 limit exce
  • Scrapy-自动爬虫

    在前面几篇博文当中 xff0c 我们使用Scrapy框架编写的爬虫项目 xff0c 只能爬取起始网址中设置的网页 有时候 xff0c 我们需要让爬虫持续不断的自动爬取多个网页 xff0c 此时 xff0c 我们需要编写自动爬取网页的爬虫 在
  • Scrapy-连接数据库

    通过前面几篇文章的学习 xff0c 我们已经能够使用Scrapy框架写出一些常见的网络爬虫 在本章中 xff0c 我们将使用Scrapy框架 xff0c 将爬取到的数据存储到数据库中 与将数据写入文件一样 xff0c 写入到数据库中也是通过
  • Scrapy-请求和响应

    Scrapy使用Request和Response对象来爬行网站 通常 xff0c Request对象是在爬虫中生成的 xff0c 并在整个系统中传递 xff0c 直到它们到达下载器 xff0c 后者执行请求并返回一个Response对象 x
  • MySQL ERROR 1698 (28000) 错误

    之前MySQL服务端本机上使用密码登陆root账号是没有问题的 xff0c 但是今天不知道是因为动了哪里 xff0c 登陆失败并有这个错误代码 xff1a mysql u root p Enter password ERROR 1698 2
  • Gunicorn-配置详解

    在之前的文章中有记录WSGI容器的作用 xff0c 以及我们知道常见的容器就只有的uWSGI和Gunicorn xff0c 在之前的文章中有记录他们的特性及优缺点 xff0c 在这就不在多做描述 接下来将着重记录一下Gunicorn的一些配
  • YOLOv7升级换代:EfficientNet骨干网络助力更精准目标检测

    目录 一 EfficientNet骨干网络1 EfficientNet架构2 EfficientNet在目标检测中的应用3 EfficientNet分辨率的缩放4 EfficientNet深度与宽度的缩放 二 YOLOv7结构1 YOLOv
  • Python-获取图片的大小

    了解过Pillow的都知道 xff0c Pillow是一个非常强大的图片处理器 xff0c 这篇文章主要记录一下Pillow对图片信息的获取 xff1a 安装Pillow pip span class hljs keyword instal
  • lsnrctl command not found

    在linux安装完oracle时 当你遇到lsnrctl command not found等问题都不能用时 会有几种情况 1 首先你先查看下环境变量里面有没有加入oracle的配置 执行 echo ORACLE HOME 没有的话 你执行

随机推荐

  • Ubuntu 18.04-安装图文教程

    Ubuntu xff08 友帮拓 优般图 乌班图 xff09 是一个以桌面应用为主的开源GNU Linux操作系统 xff0c Ubuntu 是基于Debian GNU Linux xff0c 支持x86 amd64 xff08 即x64
  • Docker-DockerFile的使用

    在使用DockerFile定制镜像之前 xff0c 我们先来了解一下镜像的构成 xff1a 镜像是容器的基础 xff0c 每次执行docker run命令的时候都会指定哪个镜像作为容器运行的基础 在之前的栗子中 xff0c 我们使用的镜像都
  • Python-标准库calendar的使用

    此模块允许你输出类似Unix cal程序的日历 xff0c 并提供与日历相关的其他有用功能 值得注意的是 xff0c 默认情况下 xff0c 这些日历将星期一作为一周的第一天 xff0c 将星期日作为一周的最后一天 欧洲惯例 不过 xff0
  • Docker MySql报2059错误: Authentication plugin 'caching_sha2_password' cannot be loaded

    最近在使用Docker安装和配置MySql xff0c 按照正常的步骤来安装和配置MySQL xff0c 可配置完成后登录MySQL客户端出现了2059错误 xff0c 于是上各种博客 技术论坛寻求相关的问题解决办法 xff0c 可是仍然找
  • 套接字与文件

    在Linux中 xff0c 所有套接字都是文件 xff0c 操作系统并不区分套接字和文件 xff0c 因此对二者可以使用相同的读写函数
  • MySQL中find_in_set函数的使用

    1 语法 FIND IN SET str strlist xff08 1 xff09 str 要查询的字符串 xff08 2 xff09 strlist 字段名 xff1b 参数以 分隔 如 1 2 6 8 查询字段 strlist 中包含
  • C文件创建并写入文件

    创建并写入文件 u003Cstdio h gt nint main n n t 创建一个名为data txt的文件 n tFILE pFile 61 fopen 34 data txt 34 34 w 34 n tif pFile 61 6
  • 关于海康摄像头的摘要认证

    最近在做一个项目时候要用到摄像头人脸抓拍 xff0c 人脸识别等功能 xff0c 原本使用海康的SDK就可以解决的 xff0c 但是我们项目是在arm平台下开发的 xff0c 而海康的SDK不支持arm平台 xff0c 无奈联系的海康的技术
  • 华为OD机试真题2023(JAVA)

    目录 华为OD机试是什么 xff1f 华为OD面试流程 xff1f 华为OD机试通过率高吗 xff1f 华为OD薪资待遇 xff1f 华为OD晋升空间 xff1f 大家好 xff0c 我是哪吒 本专栏包含了最新最全的华为OD机试真题 xff
  • ARM的快速上下文切换(FCSE)

    一 FCSE的原理 通常情况下 xff0c 如果两个进程占用的虚拟地址空间由重叠 xff0c 系统在这两个进程之间进行切换时 xff0c 必须进行虚拟地址到物理地址的重映射 而虚拟地址到物理地址的重映射涉及到重建MMU中的页表 xff0c
  • 使用PyQt5/PySide2编写一个极简的音乐播放器

    文章目录 一 创建UI界面二 获取网络歌曲三 创建和链接信号槽 疫情肆虐 xff0c 憋在家实在无聊 xff0c 索性写点东西 xff0c 于是就有了这个极极极极极简的音乐播放器 这个极极极简的音乐播放器类似于 阅后即焚 的软件 xff0c
  • Android zxing二维码扫描 扫描框适应各种分辨率

    public synchronized Rect getFramingRect if framingRect 61 61 null if camera 61 61 null return null Point screenResolutio
  • 实战:MySQL Sending data导致查询很慢的问题详细分析

    这两天帮忙定位一个mysql查询很慢的问题 xff0c 定位过程综合各种方法 理论 工具 xff0c 很有代表性 xff0c 分享给大家作为新年礼物 xff1a xff09 问题现象 使用sphinx支持倒排索引 xff0c 但sphinx
  • TypeScript入门到入土(3)webpack打包ts代码

    上一节我们讲了ts的编译选项 xff0c 这一节我们介绍利用webpack打包我们的ts代码 前文链接 xff1a TypeScript入门到入土 xff08 2 xff09 小杨爱编程的博客 CSDN博客 ts 的安装以及ts中类型 xf
  • ROS中关于topic和service的运用场合

    本文的翻译来自 ROS answers 官方的问答区 2014 7 30 点击打开链接 topics seem like the best way for storing 34 states 34 of the robot stateful
  • 又见一帘幽梦

    又见一帘幽梦 最是魂断伤心处 xff0c 浮生若残梦 冷遇秋 xff0c 夕阳下 xff0c 碧野又清空 xff0c 泪眼朦胧 一帘幽梦红尘路 xff0c 爱深处 xff0c 情留驻 秋菊相思 xff0c 旭日重生 xff0c 无奈生死殊途
  • Openfeign ErrorDecoder caused java.io.IOException: stream is closed

    实现错误解码器 保留 feign 服务异常信息 xff0c 左侧是之前设计的 偶尔下游系统出现异常时 xff0c 拿到返回结果时 xff0c 居然会是stream is closed xff0c 就找了下原因 Don 39 t use an
  • 鞋厂园区--稳食生涯--2017~2018

    2017年初 进入广州的鞋类企业搞数字化新零售中台业务开发 这个地方 应该是我进入电商新零售业务的启蒙和提升之地 不但学习了线上线下的电商与门店业务 也学习了完整的一套新零售中台业务技术架构和整体的微服务演变进程 同时也应该算是收获最多朋友
  • 棉类工业园--奋斗的故事--2018~2020

    nbsp 2018年8月 进入深圳的工业园继续搞数字化新零售中台业务开发 18年初步规划设计 从0到1打造整个电商与新零售中台体系 1 用户中心 用户表 角色表 系统表 菜单表 用户角色表 角色菜单表 角色系统表 数据范围表 用户数据范围
  • YOLOv5改进:引入DenseNet思想打造密集连接模块,彻底提升目标检测性能

    目录 一 密集连接模块的介绍1 密集连接的概念2 密集连接与残差连接的对比3 DenseNet的结构 二 YOLOv5中引入密集连接模块的原因1 密集连接模块对于目标检测的优势2 密集连接模块对目标检测性能的影响 三 YOLOv5中密集连接