YOLOv5算法改进(16)— 增加小目标检测层
前言:Hello大家好,我是小哥谈。小目标检测层是指在目标检测任务中用于检测小尺寸目标的特定网络层。由于小目标具有较小的尺寸和低分辨率,它们往往更加难以检测和定位。YOLOv5算法的检测速度与精度较为平衡,但是对于小目标的检测效果不佳,根据一些论文,我们可以通过增加检测层来提高对小目标的特征提取能力,以提高算法在密集场景下的表现。🌈
前期回顾:
YOLOv5算法改进(1)— 如何去改进YOLOv5算法
YOLOv5算法改进(2)— 添加SE注意力机制
YOLOv5算法改进(3)— 添加CBAM注意力机制
YOLOv5算法改进(4)— 添加CA注意力机制
YOLOv5算法改进(5)— 添加ECA注意力机制
YOLOv5算法改进(6)— 添加SOCA注意力机制
YOLOv5算法改进(7)— 添加SimAM注意力机制
YOLOv5算法改进(8)— 替换主干网络之MobileNetV3
YOLOv5算法改进(9)— 替换主干网络之ShuffleNetV2
YOLOv5算法改进(10)— 替换主干网络之GhostNet
YOLOv5算法改进(11)— 替换主干网络之EfficientNetv2
YOLOv5算法改进(12)— 替换主干网络之Swin Transformer
YOLOv5算法改进(13)— 替换主干网络之PP-LCNet
YOLOv5算法改进(14)— 更换Neck之BiFPN
YOLOv5算法改进(15)— 更换Neck之AFPN
目录
🚀1.小目标检测介绍
💥💥1.1 小目标定义
💥💥1.2 小目标检测难点
💥💥1.3 小目标检测意义
💥💥1.4 YOLOv5中的小目标检测
🚀2.增加小目标检测层的方法
💥💥2.1 网络结构
💥💥2.2 添加步骤
💥💥步骤1:创建自定义yaml文件
💥💥步骤2:验证是否添加成功
🚀1.小目标检测介绍
💥💥1.1 小目标定义
🍀(1)以目标检测领域的通用数据集COCO为例,小目标是指小于32×32个像素点(中目标是指32×32 ~ 96×96,大目标是指大于96×96);
🍀(2)在实际应用场景中,通常更倾向于使用相对于原图的比例来定义,比如物体标注框的长宽乘积,除以整个图像的长宽乘积,再开根号,如果结果小于3%,就称之为小目标。
💥💥1.2 小目标检测难点
🍀(1)包含小目标的样本数量较少,这样潜在的让目标检测模型更关注中大目标的检测;
🍀(2)由于小目标覆盖的区域更小,这样小目标的位置会缺少多样性。我们推测这使得小目标检测的在验证时的通用性变得很难。
💥💥1.3 小目标检测意义
小目标检测的意义在于它可以提高技术的应用范围,同时可以帮助大家更好地理解图像中的细节信息。此外,小目标检测其实在我们日常生活中的许多领域均有广泛的应用,例如交通监控、医学影像分析、无人机航拍等。🌴
举个例子:
在交通监控领域,小目标检测可用于识别交通信号灯、车牌等;
在医学影像分析领域,小目标检测可用于识别微小的肿瘤细胞等;
在自动驾驶领域,小目标检测可用于识别微小的障碍物,以弥补激光雷达难以探测的窘况。
等等......🍉 🍓 🍑 🍈 🍌 🍐
💥💥1.4 YOLOv5中的小目标检测
针小目标检测,YOLOv5的效果可能不好的原因是由于小目标样本的尺寸较小,而YOLOv5模型的下采样倍数较大,导致较深的特征图难以学习到小目标的特征信息。为了改善这个问题,可以考虑在YOLOv5模型中增加小目标检测层,将较浅的特征图与深特征图拼接后进行检测。🍄
这种方式实现简单有效,只需要修改YOLOv5模型文件的yaml即可增加小目标检测层。然而,增加检测层后会带来计算量的增加,从而导致推理检测的速度降低。但是对于小目标的检测,这种改进确实能够取得良好的效果。✅
🚀2.增加小目标检测层的方法
💥💥2.1 网络结构
YOLOv5 - 5.0网络结构图:
YOLOv5 - 6.0网络结构图:
由YOLOv5 - 5.0和YOLOv5 - 6.0网络结构图可知,都是由输入端+主干网络Backbone+Neck网络+输出端四部分组成的。
关于YOLOv5的相关知识,请参考文章:👇
YOLOv5基础知识入门(2)— YOLOv5核心基础知识讲解
由网络结构图可知,YOLOv5原始只有3个检测头,分别是20×20(大目标)、40×40(中目标)和80×80(小目标),我们要增加小目标检测层,可以在80×80(小目标)的上面增加,也就是增加160×160检测层。🌱
YOLOv5s模型只有3个预测层,当将尺寸为640×640的图像输入网络时,Neck 网络分别进行8倍、16倍、32倍下采样,对应的预测层特征图尺寸为80×80、40×40、20×20,用来检测小目标、中目标和大目标。在YOLOv5s原始网络上增加一个预测层,在Neck网络中增加1次上采样,第3次上采样后,与主干网络第2层融合,得到新增加的160×160的预测层,用以检测小目标。整个模型改进后采用4个预测尺度的预测层,将底层特征高分辨率和深层特征高语义信息充分利用,并且未显著增加网络复杂度。🌄
当增加了一层之后,网络结构就变成下面这样子了。👇
YOLOv5 - 5.0版本:
YOLOv5 - 6.0版本:
说明:♨️♨️♨️
上图中,红框部分为新增的检测层,随着箭头往上走,将Neck网络中80×80的特征图经过上采样变成160×160。
💥💥2.2 添加步骤
💥💥步骤1:创建自定义yaml文件
在models文件夹中复制yolov5s.yaml,粘贴并重命名为yolov5s_SmallTarget.yaml。
针对增加小目标检测层,我们需要做两处修改。
修改1:
🍀(1)修改Anchor:增加一组较小的anchor
#---原始的anchors--#
anchors:- [10,13, 16,30, 33,23] # P3/8- [30,61, 62,45, 59,119] # P4/16- [116,90, 156,198, 373,326] # P5/32
若输入图像的尺寸是640×640,
# P3/8 对应的检测特征图大小为 80×80,用于检测大小在 8×8 以上的目标。
# P4/16 对应的检测特征图大小为 40×40,用于检测大小在 16×16 以上的目标。
# P5/32 对应的检测特征图大小为 20×20,用于检测大小在 32×32 以上的目标。
#---修改后的anchors---#
anchors:- [4,5, 8,10, 22,18] # P2/4- [10,13, 16,30, 33,23] # P3/8- [30,61, 62,45, 59,119] # P4/16- [116,90, 156,198, 373,326] # P5/32
# P2/4 新增加的anchors,对应的检测特征图大小为 160×160,用于检测大小在 4×4 以上的目标。
修改2:
YOLOv5中的head包括 Neck 和Detect(输出端) 两部分。修改head部分,增加一层网络结构。
#---原始的head部分---#
head:[[-1, 1, Conv, [512, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 6], 1, Concat, [1]], # cat backbone P4[-1, 3, C3, [512, False]], # 13[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 4], 1, Concat, [1]], # cat backbone P3[-1, 3, C3, [256, False]], # 17 (P3/8-small)[-1, 1, Conv, [256, 3, 2]],[[-1, 14], 1, Concat, [1]], # cat head P4[-1, 3, C3, [512, False]], # 20 (P4/16-medium)[-1, 1, Conv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]], # cat head P5[-1, 3, C3, [1024, False]], # 23 (P5/32-large)[[17, 20, 23], 1, Detect, [nc, anchors]], # Detect(P3, P4, P5)]
修改后的head部分如下所示:
#---修改后的head部分---#
head:
#neck#[512,20,20][[-1, 1, Conv, [512, 1, 1]], #10 卷积层 [512,20,20][-1, 1, nn.Upsample, [None, 2, 'nearest']], #11 上采样 [512,40,40][[-1, 6], 1, Concat, [1]], #12 Concat [1024,40,40][-1, 3, C3, [512, False]], #13 C3 [512,40,40][-1, 1, Conv, [256, 1, 1]], #14 卷积层 [256,40,40][-1, 1, nn.Upsample, [None, 2, 'nearest']], #15 上采样 [256,80,80][[-1, 4], 1, Concat, [1]], #16 Concat [512,80,80]#[-1, 3, C3, [256, False]], # 被删了#下面是我们自己加的[-1, 3, C3, [256, False]], #17 C3 [256,80,80][-1, 1, Conv, [128, 1, 1]], #18 卷积层 [128,80,80][-1, 1, nn.Upsample, [None, 2, 'nearest']], #19 上采样 [256,160,160][[-1, 2], 1, Concat, [1]], #20 Concat [512,160,160]#head[-1, 3, C3, [128, False]], #21 C3 [128,160,160][-1, 1, Conv, [128, 3, 2]], #22 卷积层 [128,80,80][[-1, 18], 1, Concat, [1]], #23 Concat [512,160,160][-1, 3, C3, [256, False]], #24 C3 [256,160,160][-1, 1, Conv, [256, 3, 2]], #25 卷积层 [256,40,40][[-1, 14], 1, Concat, [1]], #26 Concat [512,160,160][-1, 3, C3, [512, False]], #27 C3 [512,40,40][-1, 1, Conv, [512, 3, 2]], #28 卷积层 [512,20,20][[-1, 10], 1, Concat, [1]], #29 特征融合 [1024,20,20][-1, 3, C3, [1024, False]], #30 C3 [1027,20,20][[21, 24, 27, 30], 1, Detect, [nc, anchors]], # 将21, 24, 27, 30传入检测头]
yaml文件修改后的完整代码如下:
# YOLOv5 🚀 by Ultralytics, GPL-3.0 license# Parameters
nc: 80
depth_multiple: 0.67
width_multiple: 0.75anchors:- [4,5, 8,10, 22,18] # P2/4- [10,13, 16,30, 33,23] # P3/8- [30,61, 62,45, 59,119] # P4/16- [116,90, 156,198, 373,326] # P5/32# YOLOv5 v6.0 backbone
backbone:[[-1, 1, Conv, [64, 6, 2, 2]], #0 卷积层 [64,320,320 ][-1, 1, Conv, [128, 3, 2]], #1 卷积层 [128,160,160][-1, 3, C3, [128]], #2 C3 [128,160,160][-1, 1, Conv, [256, 3, 2]], #3 卷积层 [256,80,80][-1, 6, C3, [256]], #4 C3 [256,80,80][-1, 1, Conv, [512, 3, 2]], #5 卷积层 [512,40,40][-1, 9, C3, [512]], #6 C3 [512,40,40][-1, 1, Conv, [1024, 3, 2]], #7 卷积层 [1024,20,20][-1, 3, C3, [1024]], #8 C3 [1024,20,20][-1, 1, SPPF, [1024, 5]], #9 SPPF [1024,20,20]]head:
#neck#[512,20,20][[-1, 1, Conv, [512, 1, 1]], #10 卷积层 [512,20,20][-1, 1, nn.Upsample, [None, 2, 'nearest']], #11 上采样 [512,40,40][[-1, 6], 1, Concat, [1]], #12 Concat [1024,40,40][-1, 3, C3, [512, False]], #13 C3 [512,40,40][-1, 1, Conv, [256, 1, 1]], #14 卷积层 [256,40,40][-1, 1, nn.Upsample, [None, 2, 'nearest']], #15 上采样 [256,80,80][[-1, 4], 1, Concat, [1]], #16 Concat [512,80,80]#[-1, 3, C3, [256, False]], # 被删了#下面是添加的[-1, 3, C3, [256, False]], #17 C3 [256,80,80][-1, 1, Conv, [128, 1, 1]], #18 卷积层 [128,80,80][-1, 1, nn.Upsample, [None, 2, 'nearest']], #19 上采样 [128,160,160][[-1, 2], 1, Concat, [1]], #20 Concat [512,160,160]#head[-1, 3, C3, [128, False]], #21 C3 [128,160,160][-1, 1, Conv, [128, 3, 2]], #22 卷积层 [128,80,80][[-1, 18], 1, Concat, [1]], #23 Concat [512,160,160][-1, 3, C3, [256, False]], #24 C3 [256,160,160][-1, 1, Conv, [256, 3, 2]], #25 卷积层 [256,40,40][[-1, 14], 1, Concat, [1]], #26 Concat [512,160,160][-1, 3, C3, [512, False]], #27 C3 [512,40,40][-1, 1, Conv, [512, 3, 2]], #28 卷积层 [512,20,20][[-1, 10], 1, Concat, [1]], #29 特征融合 [1024,20,20][-1, 3, C3, [1024, False]], #30 C3 [1027,20,20][[21, 24, 27, 30], 1, Detect, [nc, anchors]], # 将21, 24, 27, 30传入检测头]
💥💥步骤2:验证是否添加成功
在yolo.py文件里,配置我们刚才自定义的yolov5s_SmallTarget.yaml。
然后运行yolo.py,得到结果。👇
这样就算添加成功了。🎉🎉🎉
相关文章:
YOLOv5算法改进(16)— 增加小目标检测层
前言:Hello大家好,我是小哥谈。小目标检测层是指在目标检测任务中用于检测小尺寸目标的特定网络层。由于小目标具有较小的尺寸和低分辨率,它们往往更加难以检测和定位。YOLOv5算法的检测速度与精度较为平衡,但是对于小目标的检测效…...
蓝桥杯官网练习题(图像模糊)
题目描述 小蓝有一张黑白图像,由 nm 个像素组成,其中从上到下共 n 行,每行从左到右 �m 列。每个像素由一个 0 到 255 之间的灰度值表示。 现在,小蓝准备对图像进行模糊操作,操作的方法为: 对…...
使用鳄鱼指标和ADX开立空头的条件,3秒讲清楚
使用鳄鱼指标和ADX开立空头的条件其实很简单,anzo capital昂首资本3秒钟讲清楚。 首先,市场行情需呈水平状态。再者,均线体系开始向上发散,给出明确的信号。最后,ADX确认该信号,要求指数上涨20%以上&#…...
RabbitMQ死信队列与延迟队列
目录 死信队列 死信队列的定义 死信队列的应用场景 死信队列的作用 死信队列架构图 死信队列代码实现 延迟队列 延迟队列的定义 延迟队列的应用场景 延迟队列的作用 延迟队列架构图 延迟队列的代码实现 死信队列 死信队列的定义 死信队列(Dead Letter …...
存储管理呀
世界太吵,别听,别看,别管,别怕,向前走 一. 存储管理 初识硬盘 机械 HDD 固态 SSDSSD的优势 SSD采用电子存储介质进行数据存储和读取的一种技术,拥有极高的存储性能,被认为是存储技术发展的未来…...
学习 BeautifulSoup 库从入门到精通
可以按照以下步骤进行: 1. 安装 BeautifulSoup: 首先,确保你已经安装了 Python。然后可以使用 pip 命令来安装 BeautifulSoup 库。在命令行中输入以下命令: pip install beautifulsoup42. 导入 BeautifulSoup: 在 …...
JavaScript基础知识总结
目录 一、js代码位置 二、变量与数据类型 1、声明变量 2、基本类型(7种基本类型) 1、undefined和null 2、String ⭐ 模板字符串(Template strings) 3、number和bigint ⭐ 4、boolean ⭐ 5、symbol 3、对象类型 1、Fun…...
技术面试与HR面:两者之间的关联与区别
🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…...
【Redis】为什么要学 Redis
文章目录 前言一、Redis 为什么快二、Redis 的特性2.1 将数据储存到内存中2.2 可编程性2.3 可扩展性2.4 持久性2.5 支持集群2.6 高可用性 三、Redis 的应用场景四、不能使用 Redis 的场景 前言 关于为什么要学 Redis 这个问题,一个字就可以回答,那就是&…...
动静态库生成使用
🔥🔥 欢迎来到小林的博客!! 🛰️博客主页:✈️林 子 🛰️博客专栏:✈️ Linux 🛰️社区 :✈️ 进步学堂 🛰…...
LLVM编译安装
LLVM编译安装 #全量下载 git clone https://github.com/llvm/llvm-project.git #只下载最新commit版本 git clone --depth 1 https://github.com/llvm/llvm-project.git#配置 #!/bin/bash set -ex cmake -S llvm -B build -DCMAKE_INSTALL_PREFIX/data0/huozai/software/insta…...
表的内连接和外连接
表的连接是SQL中的一种操作,用于将两个或多个表中的数据按照某个条件进行关联。 内连接 使用内连接将两个表(Table1 和 Table2)进行连接: select * from Table1 inner join Table2 on Table1.id Table2.id;举例: -- 用普通的写法 select…...
三、C#—变量,表达式,运算符(3)
🌻🌻 目录 一、变量1.1 变量1.2 使用变量的步骤1.3 变量的声明1.4 变量的命名规则1.5 变量的初始化1.6 变量初始化的三种方法1.7 变量的作用域1.8 变量使用实例1.9 变量常见错误 二、C#数据类型2.1 数据类型2.2 值类型2.2.1 值类型直接存储值2.2.2 简单类…...
纷享销客受邀出席CDIE2023数字化创新博览会 助力大中型企业增长
2023年,穿越周期,用数字化的力量重塑企业经营与增长的逻辑,再次成为企业数字化技术应用思考的主旋律,以数字经济为主线,数字技术融入产业发展与企业增长为依据,推动中国企业数字化升级。 9月5日,…...
linux下qt交叉编译 tslib 库
在 Linux 下进行 Qt 的交叉编译,并包含 tslib 库,可以按照以下步骤进行操作:1. 准备交叉编译工具链:首先,你需要准备适用于目标平台的交叉编译工具链。这个工具链包括交叉编译器、 2. 链接器和其他相关的工具ÿ…...
2.13 PE结构:实现PE代码段加密
代码加密功能的实现原理,首先通过创建一个新的.hack区段,并对该区段进行初始化,接着我们向此区段内写入一段具有动态解密功能的ShellCode汇编指令集,并将程序入口地址修正为ShellCode地址位置处,当解密功能被运行后则可…...
Rust更换Cargo国内源,镜像了寂寞
换皮不换身 换了国内源,构建时该卡还会卡。因为它所谓的换源,只是更换crates.io“索引”的源,而不是package“内容”的源。换了国内源后,在国内编译时访问 crates.io-index 自然会快很多,可是crates.io-index里面的信…...
【网络安全带你练爬虫-100练】第23练:文件内容的删除+写入
目录 0x00 前言: 0x02 解决: 0x00 前言: 本篇博文可能会有一点点的超级呆 0x02 解决: 你是不是也会想: 使用pyrhon将指定文件夹位置里面的1.txt中数据全部删除以后---->然后再将参数req_text的值写入到1.txt …...
ESP32蓝牙实例-BLE服务器与客户端通信
BLE服务器与客户端通信 文章目录 BLE服务器与客户端通信1、软件准备2、硬件准备3、代码实现3.1 BLE服务器实现3.2 Android手机测试BLE服务器3.3 ESP32 BLE客户端在本文中,我们将介绍如何使用低功耗蓝牙在两个 ESP32 开发板之间执行 BLE 服务器客户端通信。 换句话说,将介绍如…...
第11章_瑞萨MCU零基础入门系列教程之SysTick
本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写,需要的同学可以在这里获取: https://item.taobao.com/item.htm?id728461040949 配套资料获取:https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总: ht…...
【面试题精讲】如何使用Stream的聚合功能
有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准https://blog.zysicyj.top 首发博客地址 系列文章地址 求和(Sum): List<Integer> numbers Arrays.asList(1, 2, 3, 4, 5);int sum n…...
Linux 中的 chmod 命令及示例
在 Unix 操作系统中,chmod命令用于更改文件的访问模式。该名称是change mode的缩写。其中规定每个文件和目录都有一组权限来控制权限,例如谁可以读取、写入或执行该文件。其中权限分为三类:同时读、写和执行,用“r”、“w”和“x”表示。这些字母组合在一起形成一组用户的特…...
sannaing i14 pro max使用体验
体验了一把山寨机,不明真相的人会以为这是三星的英文标志,又是pro又是max的,价格600,进系统去看了配置,cpu写的是snapdragon 888,运存12g,内存500g。下了个安兔兔也是被忽悠了,它也以…...
Shazam音乐检索算法原理及实现
算法基本流程如下: 1. 采集音乐库 2. 音乐指纹采集 3. 采用局部最大值作为特征点 4. 将临近的特征点进行组合形成特征点对 5. 对每个特征点对进行hash编码 编码过程:将f1和f2进行10bit量化,其余bit用来存储时间偏移合集形成32bit的hash码 …...
vue递归组件
父组件: <template><div><treeVue :treeData"treeData"></treeVue></div> </template><script setup lang"ts"> import { reactive } from "vue"; import treeVue from "./tree.vue…...
软件测试/测试开发丨测试用例自动录入 学习笔记
点此获取更多相关资料 本文为霍格沃兹测试开发学社学员学习笔记分享 原文链接:https://ceshiren.com/t/topic/27139 测试用例自动录入 测试用例自动录入的价值 省略人工同步的步骤,节省时间 兼容代码版本的自动化测试用例 用例的执行与调度统一化管理…...
来学Python啦,大话字符串
To be a happy man, reading, travel, hard work, care for the body and mind。做一个幸福的人,读书,旅行,努力工作,关心身体和心境。 前面我们讲解过关于用Python写温度转换器&…...
pyqt5设置背景图片
PyQt5设置背景图片 1、打开QTDesigner 创建一个UI,camera.ui。 2、创建一个pictures.qrc文件 在ui文件同级目录下先创建一个pictures.txt,填写内容: <RCC><qresource prefix"media"><file>1.jpg</file>…...
C# WPF 自己写的一个模拟病毒传播的程序,有可视化
源代码: https://github.com/t39q/VirusSpread 主要代码 using System; using System.Collections.Concurrent; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks;namespace VirusSpread.Bu…...
stable diffusion实践操作-大模型介绍-SDXL1大模型
系列文章目录 大家移步下面链接中,里面详细介绍了stable diffusion的原理,操作等(本文只是下面系列文章的一个写作模板)。 stable diffusion实践操作 提示:写完文章后,目录可以自动生成,如何生…...
影视传媒公司/外汇seo公司
http://club.pchome.net/thread_1_15_4954062__.html这里贴个网友的防骗秘笈下面给大家以重要提示:一、骗子一般都不支持中介二、在大家使用淘宝链接时一定要慢之又慢,千万别操之过急,注意观察:1、骗子给的淘宝网址一般都比较长&a…...
网站跳转代码 html/百度收录提交入口网址是什么
在前面几篇文章我们已经对FreeRTOS任务API和任务调度原理进行了相对深入的分析 这篇文章主要针对任务与任务之间的交互,信息传递相关的API组件进行分析目录一、任务通知基本介绍1、FreeRTOS 任务通知函数2、CMSIS封装后任务通知函数2.1 osSignalSet2.2 osSignalWait…...
wordpress 慢 优化/网址域名注册信息查询
Handler的基本概念 当有一段处理耗时比较漫长的时候,我们就需要用线程来处理。Android中是用Handler类来处理线程的。 与Handler绑定的有两个队列,一个为消息队列,另一个为线程队列。Handler可以通过这两个队列来分别: 【消息队…...
网站开发vs设计报告/微信软文广告经典案例
来自:http://www.it165.net/pro/html/201505/42504.html 一、前言 上篇有提到在WebAPI项目内,通过在Nuget里安装(Microsoft.AspNet.WebApi.HelpPage)可以根据注释生成帮助文档,查看代码实现会发现是基于解析项目生成的…...
网络工程有限公司/品牌企业seo咨询
965. 单值二叉树 难度简单69 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。 只有给定的树是单值二叉树时,才返回 true;否则返回 false。 示例 1: 输入:[1,1,1,1,1,null,1] 输出:true示例…...
wordpress部署https/廊坊首页霸屏优化
集群配置:1个nsqlookupd, 1个nsqadmin,3个nsqd 分区:1个order-topic,分区数为100,副本数为3 扩容时,新增一个nsqd-4。刚开始,nsqd-4没有任何分区副本。 接下来通过nsqadmin页面发现ÿ…...