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

YOLOv5简介

YOLOv5

一、输入端

1. Mosaic数据增强:

请添加图片描述

CutMix 数据增强:随机生成一个裁剪框Box,裁剪掉A图中的相应位置,然后用B图相应位置的ROI放到A中被裁剪的区域中形成新的样本。采用加权求和的方式计算损失,将A区域中被cut掉的位置随机填充训练集中其他数据的区域像素值,分类结果按一定比例分配。
Mosaic数据增强:对四张图片进行拼接,每一张图片都有其对应的框框,将四张图片拼接之后就获得一张新的图片,同时也获得这张图片对应的锚框,之后将这样这张新的图片传入到神经网络当中学习,相当于一次传入四张图片进行学习。

论文中说这极大丰富了检测物体的背景!且在标准化BN计算的时候一次会计算四张图片的数据!主要用于小目标检测

2. 自适应锚框计算:

在输入图像中采样大量的区域,判断这些区域中是否包含感兴趣的目标,并调整区域边界从而更准确地预测目标的真实边界框(ground-truth bounding box)。 不同的模型使用的区域采样方法可能不同。 锚框:以每个像素为中心,生成多个缩放比和宽高比(aspect ratio)不同的边界框。

3. 自适应图片缩放:

请添加图片描述

1、原理:输入网络的尺寸统一缩放到同一个尺寸时,检测效果会更好(train中放入的图并不经过letterbox,而是检测的时候使用letterbox)。如果是简单的使用resize,很有可能就造成了图片信息的丢失,所以提出了letterbox自适应图片缩放技术。
letterbox的主要思想是尽可能的利用网络感受野的信息特征。比如在YOLOV5中最后一层的Stride=5,即最后一层的特征图中每个点,可以对应原图中32X32的区域信息
2、思想:图片变换比例一致指的是,长宽的收缩比例应该采用相同的比例。有效利用感受野信息则是指,对于收缩后不满足条件的一边,用灰白条填充至可以被感受野整除。

二、backbone

请添加图片描述

1、Focus层(现已弃用):

在获得输入后首先利用focus层将图像的宽高信息转换为通道信息。具体做法是在一张图片中,每隔一个像素获得一个像素,这时获得四个独立的特征层,之后进行特征层的堆叠。目的是减少参数量,增加运行速度。

在YOLOv5最新版本下,Focus层已经改为普通的64×6464 \times 6464×64卷积层。如图:

请添加图片描述

2、Conv2D_BN_SiLU卷积块:

其中,SiLU激活函数是sigmoid和ReLU的改进版,其具有无上界有下界、平滑和单调的特性。

f(x)=x×sigmoid(X)f(x)=x \times sigmoid(X) f(x)=x×sigmoid(X)
请添加图片描述

部分版本也采用LeakyReLU激活函数。

3、bottleneck

请添加图片描述
building block(图左)和bottleneck(图右)都是在Resnet提出的。其中,building block是Resnet34提出的,bottleneck是Resnet50提出的。在bottleneck中,1×1的卷积层的作用是减少参数量。经过实验证明,bottleneck即减少了参数量优化了计算,由保持了原有的精度。如果网络层数少的话,选用building block。而如果网络层数很深,为了减少计算量选用bottleneck。

shortcut处选择的是add而不是concat。作用是使特征图相加,维持通道数不变。

4、 CSPLayer:

请添加图片描述
YOLOv5的CSPNet结构将原输入分成两支(图b),两支分别进行卷积操作使得通道数减半。之后一个分支进行Bottleneck × N操作,然后concat两个分支进行通道数的堆叠。可以抽象的理解为CSPlayer有一个大的“残差边”。 这样的操作使得输入CSPLayer的特征与输出的通道数一致,目的是使模型习得更多的特征。

其中Backbone的CSPLayer结构为:

(CBL为Conv+BN+leakyReLU,CBS为Conv+BN+SiLU)
请添加图片描述
如图,其将输入先分成两支,一支先经过CBL块(后期改为CBS),再经过多个残差结构(Bottleneck × N),在经过一个卷积调整通道数。另一个分支直接进行卷积调整通道数。之后对这两个分支按通道进行堆叠,最后在经过一个CBL(后期改为CBS)。

Neck的CSPLayer结构为: 请添加图片描述
Neck层的CSPLayer将中间的残差结构换成了2 × X个CBL(后期为CBS)。主要原因是Neck层比较浅。

5、SPPBottleneck:

传统的SPP又称金字塔池化可以将任意大小的特征图转换成固定大小的特征向量。但是在YOLOv5中,SPPBottleneck主要作用是通过不同池化核大小的最大池化进行特征提取,提高网络的感受野。其中,shotcut处为concat,因此应保证每次池化后map大小不变。
请添加图片描述
SPPF,在YOLOv5后期提出了SPPF结构,起将并行的最大层化改为了串行的最大池化层,虽然对结构进行了修改但是目的完全一样。
请添加图片描述
其中,串行的2个5×5和1个9×9是等价的,串行的3个5×5和1个13×13是等价的。并行和串行的效果一样,但串行的效率更高。

三 、Neck层

请添加图片描述
如图,YOLOv5提取三个特征层进行目标检测,分别位于中间层、中下层和底层。三个特征曾的尺寸分别为(80,80,256)(80, 80, 256)(80,80,256)(40,40,512)(40, 40, 512)(40,40,512)(20,20,1024)(20, 20 ,1024)(20,20,1024)

特征金字塔可以将不同shape的特征层进行特征融合,有利于提取更好的特征,具体融合方式如图。其中,上采样采用插值,下采样采用卷积。

FPN(语义信息)+PAN(定位信息)

通常认为,深层的特征层携带有较强的语义特征信息和较弱的定位信息;浅层的特征层有较强的位置信息和较弱的语义信息。FPN就是把深层的语义特征传到浅层,从而增强多个尺度上的语义表达。而PAN则把浅层的定位信息传导到深层,增强多个尺度上的定位能力。

如图,FPN是自底向上,将高层的语义特征传递上去,对整个金字塔进行增强,但是只增强了语义信息而没有增强位置信息;通过在FPN后加上一个自顶向下的PAN对位置信息进行补充,将顶层的位置信息传递下去。

四、 YOLO Head

通过特征金字塔,获得了三个加强特征,分别为(20,20,1024)(20, 20, 1024)(20,20,1024)(40,40,512)(40, 40, 512)(40,40,512)(80,80,256)(80, 80, 256)(80,80,256),之后将这三个加强特征传入YOLO Head获得预测结果。

对于每一个特征层,首先使用一个卷积调整通道数,最终的通道数与数据集的类别数相关。其中,每一个特征层的每一个特征点存在3个锚框。

假设使用的是voc数据集,类别是20种,最后的维度为75=3×(4+1+20)

其中:3代表三个锚框;4代表每一个锚框的回归参数;1代表该特征点是否包含物体(该特征点是否为背景);20用于判断该特征点的种类。

假设使用的是coco数据集(类别为80),则最后的通道数为255=3×(4+1+80)。

五、 预测

1、 解码

假设数据集为coco数据集,获得的特征层预测结果为:(N,20,20,255)(N, 20, 20, 255)(N,20,20,255)(N,40,40,255)(N, 40, 40, 255)(N,40,40,255)(N,80,80,255)(N, 80, 80, 255)(N,80,80,255),之后将255拆分成3个85,对应3个锚框的85个参数。

(N,20,20,255)(N, 20, 20, 255)(N,20,20,255)特征层reshape成(N,20,20,3,85)(N, 20, 20, 3, 85)(N,20,20,3,85),之后对每个特征点对应的三个锚框进行解码操作:

其中:pwp_wpwphp_hph为锚框的长宽,cxc_xcxcyc_ycy为预测锚框对应的单元格离图片左上角的距离。(tx,ty,tw,th)(t_x, t_y, t_w, t_h)(tx,ty,tw,th)是预测偏移量。σ\sigmaσ为sigmoid激活函数。

请添加图片描述
请添加图片描述

图一为YOLOv2/3/4的锚框回归计算公式,图二为YOLOv5的锚框回归计算公式。

  1. 宽高计算:作者认为原始的yolo /darknet框方程式存在严重缺陷,宽度和高度虽然永远>0,但不受限制,因为它们只是out=einout=e^{in}out=ein,这种指数的运算很危险,易导致梯度不稳定,训练难度加大,使用(2σ(tw))2\left(2\sigma\left( t_w \right) \right)^2(2σ(tw))2既能够保证宽高>0,也能对宽高限制,最大值为anchor框宽高的4倍。
  2. 偏移计算:因为YOLOv5的正样本定义与YOLO之前系列的不同,故在此公式的计算也不相同。关于正负样本在”训练“处进行介绍。

2、得分筛选与非极大抑制:

得分筛选与非极大抑制的过程可以概括如下:

  1. 找出该图片中得分大于门限函数的框。在进行重合框筛选前就进行得分的筛选可以大幅度减少框的数量。
  2. 对种类进行循环,非极大抑制的作用是筛选出一定区域内属于同一种类得分最大的框,对种类进行循环可以帮助我们对每一个类分别进行非极大抑制。
  3. 根据得分对该种类进行从大到小排序。
  4. 每次取出得分最大的框,计算其与其它所有预测框的重合程度,重合程度过大的则剔除。

六、训练

1、 LOSS组成

网络的损失与网络的预测组成相同,分为:Reg部分(特征点的回归参数)、Obj部分(该特征点是否包含物体)、Cls部分(特征点物体的种类)。

2、 正样本匹配:

从IOU匹配变成shape匹配,先计算gt与9个锚框的长宽比,如果长宽比小于设定阈值,说明该gt和对应的锚框匹配,一个gt可能与几个锚框均能匹配上,因为同之前YOLO一样,YOLOv5有三层网络,9个锚框, 从小到大,每3个锚框对应一层网络,所以一个gt可能在不同的网络层上做预测训练,大大增加了正样本的数量,当然也会出现gt与所有锚框都匹配不上的情况,这样gt就会被当成背景,不参与训练。

3、 筛选框匹配:

gt框与锚框匹配后,得到锚框对应的网络层的grid,看gt中心点落在哪个grid上,不仅取该grid中和gt匹配的锚框作为正样本,还取相邻的的两个grid中的anchor为正样本。同时gt不仅与一个锚框匹配,如果跟几个锚框都匹配上,而且锚框不在同一个网络层上,所以可能有3-9个正样本,增大正样本数量。

4、 LOSS计算:

1、DIOU Loss: 好的目标框函数应该考虑三个重要几何因素:重叠面积、中心点距离和长宽比如何最小化预测框和目标框之间的归一化距离:DIOU_Loss
请添加图片描述
DIOU_Loss考虑了重叠面积和中心点距离,当目标框包裹预测框的时候,直接度量2个框的距离,因此DIOU Loss收敛的更快。
请添加图片描述

问题:没有考虑长宽比:如1、2、3,目标框包裹预测框,本来DIOU_Loss可以起作用,但是预测框的中心点的位置都是一样的,因此按照DIOU Loss的计算公式,三者的值都是相同的。

2、CIOU Loss:CIOU Loss在DIOU Loss的基础上增加了一个影响因子,将预测框和目标框的长宽比都考虑进去了。
CIOU_Loss=1−CIOU=1−(IOU−Distance_22Distance_C2−v2(1−IOU)+v)CIOU\_Loss = 1-CIOU=1-(IOU -\frac{Distance\_2^2}{Distance\_C^2}- \frac{v^2}{(1-IOU)+v}) CIOU_Loss=1CIOU=1(IOUDistance_C2Distance_22(1IOU)+vv2)
其中,vvv是衡量长宽比一致性的参数,也可以定义为:
v=4π2(arctanwgthgt−arctanwPhP)2v=\frac{4}{\pi^2}(arctan\frac{w^{gt}}{h^{gt}}-arctan\frac{w^P}{h^P})^2 v=π24(arctanhgtwgtarctanhPwP)2
这样,CIOU Loss就将目标框回归函数应该考虑三个重要集合因素:重叠面积、中心点距离、长宽比全都考虑进去了。

3、Obj部分,由第正样本匹配部分可知道每个真实框对应的先验框,所有真实框对应的先验框都是正样本,剩余的先验框均为负样本,根据正负样本和特征点的是否包含物体的预测结果计算交叉熵损失,作为Obj部分的Loss组成。

4、 Cls部分,由第三部分可知道每个真实框对应的先验框,获取到每个框对应的先验框后,取出该先验框的种类预测结果,根据真实框的种类和先验框的种类预测结果计算交叉熵损失,作为Cls部分的Loss组成。

相关文章:

YOLOv5简介

YOLOv5 一、输入端 1. Mosaic数据增强: CutMix 数据增强:随机生成一个裁剪框Box,裁剪掉A图中的相应位置,然后用B图相应位置的ROI放到A中被裁剪的区域中形成新的样本。采用加权求和的方式计算损失,将A区域中被cut掉的…...

【面向对象语言三大特性之 “继承”】

目录 1.继承的概念及定义 1.1继承的概念 1.2 继承定义 1.2.1定义格式 1.2.2继承关系和访问限定符 1.2.3继承基类成员访问方式的变化 2.基类和派生类对象赋值转换 3.继承中的作用域 4.派生类的默认成员函数 5.继承与友元 6. 继承与静态成员 7.复杂的菱形继承及菱形虚拟…...

Ambari2.7.5集群搭建详细流程

0 说明 本文基于本地虚拟机从零开始搭建ambari集群 1 前置条件 1.1 本地虚拟机环境 节点角色ambari-1ambari-server ambari-agentambari-2ambari-agentambari-3ambari-agent 1.2 安装包 1.3 修改主机名并配置hosts文件 hostnamectl set-hostname ambari-1 hostnamectl se…...

房产|1月全国70城房价出炉!疫情放开后你关心的城市房价有何变化

2023年1月份,70个大中城市中新房销售价格环比上涨城市个数增加;一线城市新房销售价格环比同比转涨、二三线城市环比降势趋缓,二三线城市同比下降。 | 新房/二手房12月-1月环比上涨城市数量变化 70个大中城市中,新房环比上涨城市…...

秒验 重新定义“一键登录”

现如今,一般APP在注册登录时,仍然要经历填写用户名、密码、绑定手机号等一系列传统流程,有的人认为可以通过第三方登录避免这些流程,但仍旧要经历手机验证码的环节,而且存在验证码被拦截的风险,短信费用也很…...

ZenBuster:一款功能强大的多线程跨平台URL枚举工具

关于ZenBuster ZenBuster是一款功能强大的多线程跨平台URL枚举工具,该工具基于Python开发,同时还具备暴力破解功能。 该工具适用于安全专业人员,可以在渗透测试或CTF比赛中为广大研究人员提供帮助,并收集和目标相关的各种信息。…...

2023年美赛ICM问题E:光污染 这题很好做啊!

2023年美赛ICM问题E:光污染 这题很好做啊!![在这里插入图片描述](https://img-blog.csdnimg.cn/e918cc6fc9214b53bf4859063bfe56b0.png#pic_center) 我看到DS数模的分析,看似头头是道,实则GouPi不通,我出一个,用于大家…...

InVEST模型 | 01 InVEST模型安装(Windows10)

除了在Python Anaconda环境中进行安装InVEST模型Python安装,平时最常使用的安装方式是通过.exe直接进行安装,本节介绍的就是直接下载安装的步骤: 打开InVEST模型下载页面 链接为:https://naturalcapitalproject.stanford.edu/…...

spring-web InvocableHandlerMethod 源码分析

说明 本文基于 jdk 8, spring-framework 5.2.x 编写。author JellyfishMIX - github / blog.jellyfishmix.comLICENSE GPL-2.0 类层次 HandlerMethod,处理器的方法的封装对象。HandlerMethod 只提供了处理器的方法的基本信息,不提供调用逻辑。 Invoca…...

一分钟了解微信公众号服务器配置自动回复

1、建一个web服务工程 2、开放任意一个接口, 比如 /aaa/bbb/ccc 把接口路径配置在这里,ip为公网ip或域名,其他的参数默认,对入门选手没啥用 3、该接口允许get和post两种方式访问,接口需要对于访问方式编写两套逻辑…...

打印不同的图形-课后程序(JAVA基础案例教程-黑马程序员编著-第四章-课后作业)

【案例4-1】打印不同的图形 记得 关注,收藏,评论哦,作者将持续更新。。。。 【案例介绍】 案例描述 本案例要求编写一个程序,可以根据用户要求在控制台打印出不同的图形。例如,用户自定义半径的圆形和用户自定义边长的…...

14. QT_OPenGL中引入顶点着色器和片段着色器

1. 说明: 着色器是OPenGL中非常重要的一部分,在有了模型后,如果未给模型添加着色器,那么渲染效果会折扣很多。着色器中使用到的语言是GLSL(OPenGL Shader Language),可以通过这篇文章GLSL基本语法进行了解。 效果展示&#xff1a…...

ecaozzz

2. 图形报表ECharts 2.1 ECharts简介 ECharts缩写来自Enterprise Charts,商业级数据图表,是百度的一个开源的使用JavaScript实现的数据可视化工具,可以流畅的运行在 PC 和移动设备上,兼容当前绝大部分浏览器(IE8/9/10/…...

应用部署初探:6个保障安全的最佳实践

在之前的文章中,我们了解了应用部署的阶段以及常见的部署模式,包括微服务架构的应用应该如何部署等基本内容。本篇文章将介绍如何安全地部署应用程序。 安全是软件开发生命周期(SDLC)中的关键部分,同时也需要成为 S…...

转转测试环境docker化实践

测试环境对于任何一个软件公司来讲,都是核心基础组件之一。转转的测试环境伴随着转转的发展也从单一的几套环境发展成现在的任意的docker动态环境docker稳定环境环境体系。期间环境系统不断的演进,去适应转转集群扩张、新业务的扩展,走了一些…...

linux 之 ps命令介绍

哈喽,大家好,我是有勇气的牛排(全网同名)🐮 有问题的小伙伴欢迎在文末评论,点赞、收藏是对我最大的支持!!!。 前言 如过想实现对进程监控,就需要使用到ps命…...

Server端的Actor,分工非常的明确,但是只将Actor作为一部手机来用,真的合适吗?

这是一篇介绍PowerJob,Server端Actor的文章,如果感兴趣可以请点个关注,大家互相交流一下吧。 server端一共有两个Actor,一个是处理worker传过来的信息,一个是server之间的信息传递。 处理Worker的Actor叫做WorkerRequ…...

2023年美赛C题 预测Wordle结果Predicting Wordle Results这题太简单了吧

2023年美赛C题 预测Wordle结果Predicting Wordle Results 更新时间:2023-2-17 11:30 1 题目 2023年MCM 问题C:预测Wordle结果![在这里插入图片描述](https://img-blog.csdnimg.cn/e059d917333e497e90ca082605869e3c.png#pic_center) Wordle是纽约时报目前每天提…...

UE4 渲染学习笔记(未完)

原文链接:虚幻4渲染管线入门 - 知乎 从原文摘抄一下: 渲染框架 1,一套是传统的以RHICmdList为核心构建RenderPass,从RHICmdList.BeginRenderPass(...)开始,以RHICmdList.EndRenderPass()结束的框架。 2.一套是以新的Gr…...

Ajax?阿贾克斯?

一、Ajax简介 AJAX Asynchronous JavaScript and XML(异步的 JavaScript 和 XML)。 AJAX 不是新的编程语言,而是一种使用现有标准的创新方法。 AJAX 最大的优点是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网…...

项目质量要怎么保持? 如何借助系统软件进行管理

对于任何项目型的企业总是很关心项目成本的话题,但不知从什么时候开始,高质量等于高成本成了各个企业的一种潜意识。 如果交付的项目产品不符合质量标准,即使企业使用最好的项目管理工具或者每个里程碑都达到并在预算范围内完成项目&#xf…...

没有接口文档的怎样进行接口测试

前言: 在进行接口测试之前,一般开发会提供接口文档,给出一些接口参数和必要熟悉,便于我们编写接口脚本。但如果没有提供接口开发文档的请求下,我们该如何编写接口测试脚本呢?在编写测试脚本前要做哪些必要…...

Unity—游戏设计模式+GC

每日一句:"少年一贯快马扬帆 道阻且长不转弯 要盛大要绚烂要哗然 要用理想的泰坦尼克去撞现实的冰川 要当烧赤壁的风而非借箭的草船 要为一片海就肯翻万山。" 目录 状态模式: 外观模式 组合模式, 单例模式 命令模式 观察者模…...

【刷题笔记】--二分查找binarysearch

当给一个有序的数组,在其中查找某个数,可以考虑用二分查找。 题目1: 二分查找的思路: 设置left和right指针分别指向要查找的区间。mid指针指向这个区间的中间。比较mid指针所指的数与target。 如果mid所指的数小于target&…...

Python版本的常见模板(二) 数论(一)

文章目录前言质数相关质数判断求约数求取区间质数埃氏筛法线性筛法分解质因数欧拉欧拉函数求取单个数线性筛法求取欧拉定理求逆元快速幂/幂取模欧几里得算法求最小公约数拓展欧几里得算法求解同余方程前言 本文主要是提供Python版本的常见的一些与数论相关的模板,例…...

SQL快速上手(知识点总结+训练资料)

文章目录一 SQL训练资料二 SQL知识点总结1.SQL语句的执行顺序2.窗口函数3.字符串处理函数模糊查询三 SQL题目的总结一 SQL训练资料 牛客SQL题目 猴子数据分析题目 关注的公众号 猴子数据分析 二 SQL知识点总结 1.SQL语句的执行顺序 每一个子句产生的中间结果供接下来的子句…...

无需经验的steam搬砖,每天操作1小时,轻松创业赚钱!

我作为一个95后社畜,就喜欢倒腾各种赚钱的事情,8年老韭菜告诉你,副业创收一点都不难,难就难在是否找对项目,俗话说方向不对,努力白费! 什么做苦力、技能、直播卖货,电商等等对比我这…...

如何创建你的公司的FAQ页面?

很多企业考虑为公司搭建一个“常见问题”页面,作为帮助客户回答关于产品和服务的常见问题的一种方式。 FAQ页面和登录/销售页面不同,没有展现出直接的投资回报,但是为团队节省了其他成本,据了解,高达67%的客户相比于跟…...

CK-GW06-E03与欧姆龙PLC配置指南

CK-GW06-E03与欧姆龙PLC配置指南CK-GW06-E03是一款支持标准工业EtherCAT协议的网关控制器,方便用户集成到PLC等控制系统中。本控制器提供了网络 POE 供电和直流电源供电两种方式,确保用户在使用无POE供电功能的交换机时可采用外接电源供电;系统还集成了六…...

使用docker-compose部署RocketMQ5.0

简介:使用docker-compose部署rocketmq5.0。文中会介绍docker-compose版本以及需要注意的项第一步:进入hub.docker.com搜索rocketmq我们选择第一个,因为第一个是7个月前更新的,(我看有很多博客使用的依旧是最下面的那种…...

外贸网站开发莆田/河北企业网站建设

详解Linux内核红黑树算法的实现 标签: linux内核structinsertnulltree算法2012-04-11 17:02 14253人阅读 评论(7) 收藏 举报分类:linux内核修炼之其它(12) 基本算法(10) 版权声明:本文为博主原创…...

wordpress 4.4 火车头/坚持

今日内容来自论文《商业模式设计与创新》商业模式的概念、内涵、体系框架如何进行商业模式设计和创新研究成功企业商业模式创新案例5分钟 碎片速读每天一点 精华笔记 论文*1关键词:商业模式、价值创新、价值创造作者:范永娟中国海洋大学硕士学位论文摘要…...

自己做网站需要钱吗/微信公众号软文怎么写

2019独角兽企业重金招聘Python工程师标准>>> elinks setsebool 转载于:https://my.oschina.net/u/138995/blog/224332...

网站点击率排名靠前/百度seo怎么优化

今天做了一下nagios监控linux和windows主机下的mysql的实验,总结一下: 先说一下实验环境: 监控主机:IP 192.168.0.170 nagios-3.2.0.tar.gz nagios-cn-3.2.0.tar.bz2 nagios-plugins-1.4.15.tar.gz nrpe-2.8.1.tar.gz 被监控机…...

网站建设电话客服话术/windows优化大师官方

文章目录1. 简介2. 开发工具3. 命名规范3.1. 场景3.1.1. MainScene3.1.2. SelectScene3.1.3. GameScene4. 代码仓库地址1. 简介 Antivirus is a 3d game based on Unity 2020.1.0a25.3171 Personal. 2. 开发工具 Unity官方下载与安装与使用说明 3. 命名规范 3.1. 场景 3.…...

全网营销型网站建设/微信管理系统软件

strcpy ,strncpy ,strlcpy的用法好多人已经知道利用strncpy替代strcpy来防止缓冲区越界。但是如果还要考虑运行效率的话,也许strlcpy是一个更好的方式。1. strcpy我们知道,strcpy 是依据 \0 作为结束判断的,如果 to 的空间不够,则…...