图像分割(九)—— Mask Transfiner for High-Quality Instance Segmentation

Mask Transfiner for High-Quality Instance Segmentation

  • Abstract
  • 1. Intrudouction
  • 3. Mask Transfiner
    • 3.1. Incoherent Regions
    • 3.2. Quadtree for Mask Refinement
      • Detection of Incoherent Regions
      • 四叉树的定义与构建
      • 四叉树的细化
      • 四叉树的传播
    • 3.3. Mask Transfiner Architecture
      • 细化网络的架构
      • RoI特征金字塔
      • 输入节点序列
      • 节点编码器
      • 序列编码器和像素解码器
      • 训练和推理
      • 实现细节

Abstract

两阶段和基于查询的实例分割方法取得了显著的效果。然而,它们的分割掩模仍然非常粗糙。在本文中,我们提出了掩模转换器的高质量和高效的实例分割。我们的掩模变换器不是在规则的密集张量上工作,而是分解并将图像区域表示为四叉树。我们的基于转换器的方法只处理检测到容易出错的树节点,并并行地自纠正它们的错误。虽然这些稀疏像素只占总数的一小部分,但它们对最终的掩模质量至关重要。这使得掩码转换器能够以较低的计算成本预测高度准确的实例掩码。大量的实验表明,掩码转换器在三个流行的基准测试上优于当前的实例分割方法,显著改善了两阶段和基于查询的框架,在COCO和BDD100K上的+3.0掩码AP,以及在城市景观上的+6.6边界AP。

1. Intrudouction

实例分割是计算机视觉中的一个基础任务,需要预测图像中每个像素点的实例标签,并区分不同的物体。然而,实例分割的效果提升很大程度上是由物体检测器的发展推动的,基于 Mask R-CNN 和 DETR 的方法在 COCO Challenge中取得了领先性能。尽管这些方法在物体的检测方面表现出色,分割物体的mask在高频区域仍过度地粗糙和平滑,并有大量的边缘像素点被错分。准确且高质量的实例分割不仅需要考虑图像的高层语义,也需要大分辨率的深度特征图以保留物体细节,与此同时,大尺寸会带来高计算量和内存消耗。因此,高效及非常准确的实例分割是极具挑战的。

为了解决以上问题,本文提出基于Transformer的高质量实例分割算法Mask Transfiner。如图 1 ,不同于常规方法,Transfiner首先识别容易出错并需要优化的像素区域(黄色标识),并把这些像素点按四叉树结构表示。这些像素点是根据下采样物体mask的信息损失而计算得到,主要分布在物体边界或高频区域中,空间上不连续。我们把这些区域称为信息损失区域(Incoherent Regions)。它们位置稀疏,仅占总像素的一小部分。然而,通过实验分析,我们发现这一区域对最终分割性能非常重要。这允许Transfiner在预测物体mask的过程中只处理在高分辨率特征图上的少部分区间。
在这里插入图片描述
结合信息损失区域的离散分布特点,Transfiner通过构建四叉树结构来表示多层级上不同的离散点。为了预测每个树节点实例标签,由于点分布在不连续的空间上,Transfiner没有采用卷积网络,而设计了基于Transformer的分割网络。Transfiner将这些离散的节点转为无序的像素序列。它包含三个模块:节点编码器 (Node Encoder)、序列编码器 (Sequence Encoder)和像素解码器 (Pixel Decoder)。节点编码器首先丰富每个点的特征表示,例如补充点的位置编码和临近点局部细节信息。然后,序列编码器将节点序列作为Query输入基于Transformer的序列编码器中。最后,像素解码器预测每个点对应的实例标签。与PointRend中使用的MLP相比,特征点的序列化输入和多头注意力使得Transfiner能够灵活地将多个尺度的稀疏特征点同时建模,并对每个特征点的关系进行长距离比较和跨层级地进行关联。


3. Mask Transfiner

3.1. Incoherent Regions

现有实例分割方法[15, 21]产生的许多分割错误是由于空间分辨率的损失,例如掩码下采样操作、小的RoI池化大小和系数压缩[15, 23],在这些情况下,掩码预测本身是在粗糙的特征尺度上进行的。尽管效率很高,但低空间分辨率使得准确预测对象边界变得具有挑战性,因为高频细节的损失。在本节中,我们首先定义不连贯区域(incoherent regions),即由于空间分辨率降低而导致掩码信息丢失的区域。然后,通过分析它们的属性,我们观察到很大一部分错误确实位于这些区域中。

不连贯区域的定义 为了识别不连贯区域,我们通过对掩码本身进行下采样来模拟网络中由于下采样导致的信息损失。具体而言,在掩码无法通过随后的上采样步骤正确重构的区域内会丢失信息,如图4所示。形式上,设 M l M_l Ml 为某一尺度级别 l l l 上物体的二进制真实实例掩码。每个尺度级别的分辨率相差一个因子2,其中 l = 0 l=0 l=0 为最细的尺度,而 l = L l=L l=L 为最粗的尺度。我们分别用 S ↓ S↓ S S ↑ S↑ S 表示 2 倍最近邻下采样和上采样。则在尺度 l l l 上的不连贯区域是通过以下方式获得的二进制掩码:
D l = O ↓ ( M l − 1 ⊕ S ↑ ( S ↓ ( M l − 1 ) ) ) . (1) D_l = \mathcal {O}_\downarrow (M_{l-1} \oplus \mathcal {S}_\uparrow (\mathcal {S}_\downarrow (M_{l-1}))). \tag{1} Dl=O(Ml1S(S(Ml1))).(1)

这里,⊕表示逻辑“异或”操作, O ↓ \mathcal O↓ O 是通过在每个2×2邻域内执行逻辑“或”操作进行2倍下采样。因此,如果原始掩码值 M l − 1 M_{l-1} Ml1 在较细尺度级别的至少一个像素中与其重构值不同,则像素 ( x , y ) (x, y) (x,y) 为不连贯的,即 D l ( x , y ) = 1 D_l(x, y) = 1 Dl(x,y)=1。直观上,不连贯区域大多散布在对象实例的边界或高频区域,包含由于粗糙掩码而缺失或多余的错误预测标签的点。我们在图6和补充文件中提供了这些区域的可视化,它们在典型图像上稀疏且不连续分布。

在这里插入图片描述

Figure 4. Illustration on incoherent regions definition by simulating mask information loss.
通过模拟掩模信息损失来说明非相干区域的定义。

Properties of Incoherent Regions
在表1中,我们提供了对上述不连贯区域的分析。结果显示,大部分预测错误集中在这些不连贯区域,占所有错误预测像素的43%,而对应的边界框区域仅占14%。在不连贯区域中,粗糙掩码预测的准确率为56%。通过固定边界框检测器,我们进行了一项“oracle”研究,为每个对象填充所有不连贯区域的真实标签,同时将其余部分保留为初始掩码预测。与在不连贯区域使用初始掩码预测相比,性能从35.5 AP跃升至51.0 AP,确实证明它们对于提高最终性能至关重要。

1

3.2. Quadtree for Mask Refinement

在这一部分,我们描述了用于检测和细化图像中不连贯区域的方法。我们的方法基于逐步检测和划分每个特征尺度中不连贯区域的理念。通过仅拆分已识别的不连贯像素进行进一步细化,我们的方法有效地处理高分辨率特征,只关注重要区域。为了形式化我们的方法,我们采用四叉树结构首先识别不同尺度上的不连贯区域。然后,我们使用在第3.3节中详细描述的网络,为四叉树中的所有不连贯节点预测细化的分割标签。最后,我们利用四叉树通过将更正的掩码概率从粗尺度传播到细尺度,融合来自多个尺度的新预测。

tu5

Figure 5. The framework of Mask Transfiner. On the point quadtree, yellow point grids denote detected incoherent regions requiring further subdivision to four quadrants. The incoherent query sequence is composed of points across three levels of the quadtree for joint refinement. The encoder of Transfiner consists of node encoder and sequence encoder, while the pixel decoder is on top of each self-attended query pixel and output their final labels. The incoherence detector is detailed in the right part of the figure with detections on multi-level incoherent regions (Yellow). The higher-resolution detection is under the guidance of the predicted incoherent mask up-sampled from lower level.

Detection of Incoherent Regions

图5的右侧部分描绘了我们的轻量级模块的设计,用于高效地在多尺度特征金字塔上检测不连贯区域。遵循级联设计,我们首先将最小特征与粗略的目标掩码预测连接在一起作为输入,然后使用简单的全卷积网络(四个3×3卷积层)以及一个二元分类器来预测最粗糙的不连贯掩码。接着,检测到的低分辨率掩码被上采样并与相邻尺度中的较大分辨率特征融合,以指导更细的非连贯预测,其中只使用单个1×1卷积层。在训练过程中,我们强制在低级生成的真实不连贯点(由公式1 产生)中,覆盖其在较高级特征图中的父点。

四叉树的定义与构建

我们定义了一个点四叉树,用于分解检测到的不连贯区域。我们的结构如图5 所示,其中一个位于高层FPN特征(如特征分辨率28×28)的黄色点在其相邻的低层FPN特征图(如分辨率56×56)中具有四个象限点。这些都是特征点,但粒度不同,因为它们位于不同的金字塔层次。与计算机图形学中使用的传统四叉树“单元”不同,四叉树“单元”可以包含多个点,我们的点四叉树的细分单元始终是单个点,点的划分由检测到的不连贯值和二元分类器的阈值决定。

基于检测到的不连贯点,我们构建了一个多级层次四叉树,从使用最高级特征图中的检测点作为根节点开始。这些根节点被选择用于在低层特征图上细分为四个象限,具有更大的分辨率和更多的局部细节。请注意,在细层次上,只有被检测为不连贯的象限点才能进一步细分,并且不连贯树节点的扩展在与之前粗糙层次的不连贯预测相对应的区域内受到限制。

四叉树的细化

我们使用基于变换器的架构来细化四叉树中不连贯节点的掩码预测。我们的设计在第3.3节中描述。它直接在四叉树的节点上操作,共同提供每个不连贯节点的细化掩码概率。

四叉树的传播

鉴于细化的掩码预测,我们设计了一种利用四叉树结构的分层掩码传播方案。给定低分辨率中的初始粗掩码预测,Mask Transfiner首先修正四叉树根层的点标签,然后通过最近邻插值将这些修正的点标签传播到相应的四个象限的较细层级中。标签修正的过程在不连贯节点上以分层方式高效进行,直到达到最细的四叉树层级。与仅修正四叉树中最细叶节点的标签相比,这种方法通过将修正标签传播到中间树层的叶节点,扩大了细化区域,而成本几乎可以忽略不计。

3.3. Mask Transfiner Architecture

细化网络的架构

在这一部分,我们描述了细化网络的架构,该网络以构建的四叉树上的不连贯点作为输入(第3.2节),进行最终的分割细化。这些点沿高频区域稀疏分布,且在空间上不连续。因此,标准的卷积网络在均匀网格上操作并不合适。相反,我们设计了一个细化变换器,称为Mask Transfiner,能够并行修正所有不连贯四叉树节点的预测。

准确地对模糊点进行分割需要细粒度的深层特征和粗语义信息。因此,网络需要强大的建模能力,以充分关联点及其周围的上下文,包括空间和跨层的邻近点。因此,变换器(transformer)能够处理序列输入,并通过多头注意力层进行强大的局部和非局部推理,是我们Mask Transfiner设计的自然选择。与[28]中的多层感知器(MLP)相比,变换器强大的全局处理能力与我们的四叉树结构非常契合,有助于有效融合具有不同粒度的多层特征点信息,并显式建模点对点关系。

图5展示了我们的Mask Transfiner的整体架构。基于分层特征金字塔网络(FPN)[32],实例分割以多层和粗到细的方式进行。Mask Transfiner不再为每个目标使用单层FPN特征[21],而是将稀疏检测到的不连贯图像区域中的特征点序列作为输入,并输出相应的分割标签。

RoI特征金字塔

给定一张输入图像,配备特征金字塔网络(FPN)的CNN骨干网络首先提取用于下游处理的层次特征图,其中我们利用P2到P5的特征层。基础目标检测器[15, 21]预测边界框作为实例提案。然后,通过在FPN的三个不同层级 P i , P i − 1 , P i − 2 {P_i, P_{i−1}, P_{i−2}} Pi,Pi1,Pi2中提取RoI特征,构建RoI特征金字塔,方形尺寸逐渐增大为 28 , 56 , 112 {28, 56, 112} 28,56,112 。起始层级 i i i 计算为 i = ⌊ i 0 + log ⁡ 2 ( W H / 224 ) ⌋ i = \lfloor i_0 + \log_2(\sqrt{WH}/224)\rfloor i=i0+log2(WH /224)⌋,其中 i 0 = 4 i_0 = 4 i0=4 W W W H H H 分别是RoI的宽度和高度。最粗的层级特征包含更多的上下文和语义信息,而更精细的层级则解析更多的局部细节。

输入节点序列

根据第3.2节讨论的四叉树以及每个节点的相关FPN特征,我们为基于变换器的架构构建输入序列。该序列由来自四叉树所有三个层级的不连贯节点组成。因此,结果序列的大小为 C × N C \times N C×N,其中N是节点的总数,C是特征通道维度。值得注意的是,由于高度稀疏性, N ≪ H W N \ll HW NHW。此外,由于变换器的置换不变性,序列的顺序并不重要。与标准的变换器编码器相比,Mask Transfiner的编码器有两个部分:节点编码器和序列编码器。

节点编码器

为了丰富不连贯点的特征,Mask Transfiner的节点编码器使用以下四种不同的信息线索对每个四叉树节点进行编码:

  1. 从FPN金字塔的相应位置和层级提取的细粒度特征。
  2. 基础检测器的初始粗糙掩膜预测提供区域特定和语义信息。
  3. 每个RoI中的相对位置编码封装了节点之间的空间距离和关系,捕捉重要的局部依赖和相关性。
  4. 每个节点的周围上下文捕捉局部细节以丰富信息。对于每个节点,我们使用从 3 × 3 3×3 3×3 邻域提取的特征,并通过全连接层进行压缩。直观地说,这有助于定位边缘和边界,同时捕捉物体的局部形状。如图5所示,细粒度特征、粗糙分割线索和上下文特征首先被连接并通过全连接层融合为原始特征维度。然后,将位置嵌入添加到结果特征向量中。

序列编码器和像素解码器

接下来,Transfiner的序列变换器编码器共同处理来自四叉树所有层级的编码节点。变换器因此执行全局空间和跨尺度推理。每个序列编码器层具有标准的变换器结构,由多头自注意力模块和全连接前馈网络(FFN)构成。为了为不连贯点序列提供足够的正负参考,我们还使用来自最粗FPN层级的小尺寸 14 × 14 14×14 14×14 的所有特征点。不同于具有深度注意力层的标准变换器解码器[4],Mask Transfiner中的像素解码器是一个小型的两层多层感知器(MLP),它解码树中每个节点的输出查询,以预测最终的掩膜标签。

训练和推理

基于构建的四叉树,我们为Mask Transfiner开发灵活和自适应的训练与推理方案,其中所有检测到的不连贯节点跨四叉树层级形成一个序列以进行并行预测。在推理过程中,为了获得最终的物体掩膜,Mask Transfiner在获得不连贯节点的细化标签后,遵循四叉树传播方案(第3.2节)。在训练过程中,整个Mask Transfiner框架可以以端到端的方式进行训练。我们采用了一个多任务损失函数:
L = λ 1 L Detect + λ 2 L Coarse + λ 3 L Refine + λ 4 L Inc . (2) \mathcal {L} = \lambda _1\mathcal {L}_{\text {Detect}} + \lambda _2\mathcal {L}_{\text {Coarse}} + \lambda _3\mathcal {L}_{\text {Refine}} + \lambda _4\mathcal {L}_{\text {Inc}} \tag{2}. L=λ1LDetect+λ2LCoarse+λ3LRefine+λ4LInc.(2)
其中, L Refine L_{\text{Refine}} LRefine表示不连贯节点的预测标签与其真实标签之间的L1损失。二元交叉熵损失 L Inc L_{\text{Inc}} LInc用于检测不连贯区域。检测损失 L Detect L_{\text{Detect}} LDetect包括来自基础检测器的定位和分类损失,例如Faster R-CNN [35]或DETR检测器。最后, L Coarse L_{\text{Coarse}} LCoarse代表基础粗糙分割预测的损失[21]。超参数权重 λ 1 , 2 , 3 , 4 \lambda_{1,2,3,4} λ1,2,3,4的值为 1.0 , 1.0 , 1.0 , 0.5 {1.0, 1.0, 1.0, 0.5} 1.0,1.0,1.0,0.5

实现细节

Mask Transfiner在两阶段检测器Faster R-CNN [35]和基于查询的检测器[4]上实现。我们设计了一个3级的四叉树,并使用Detectron2 [43]中实现的Mask R-CNN的超参数和训练计划作为骨干网络和粗糙掩膜头。Mask Transfiner编码器由三个标准变换器层组成。每层有四个注意力头,特征维度为256。在我们的消融研究中,采用了R-50-FPN [22]和Faster R-CNN,学习计划为1×。为了与COCO排行榜进行比较,我们采用了缩放抖动,图像短边随机从[640, 800]中抽取,并遵循[26, 30]中的训练计划。更多细节请参见补充文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1548222.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【JavaScript】搭建一个具有记忆的简洁个人待办网页

1. HTML 结构 文档类型声明&#xff1a;<!DOCTYPE html>这告诉浏览器这是一个 HTML5 文档。HTML 标签&#xff1a;<html lang"zh-CN">表示整个页面的内容&#xff0c;lang"zh-CN" 表示内容使用简体中文。头部信息&#xff1a;<head><…

文笔差只因没找对工具,这5个AI帮你变身写作高手!

在详细评估了超过二十种AI写作辅助应用后&#xff0c;我挑选了四款特别出色的工具来向您介绍。这些工具不仅能显著提高您的写作速度&#xff0c;而且在特定用途下能够创造出优秀的内容&#xff0c;从而避免了一些常见的AI写作缺陷。 通常情况下&#xff0c;对AI生成内容感到不…

【漏洞复现】Yearning数据库审计平台 front 任意文件读取漏洞

一、产品介绍 一款MYSQL SQL语句/查询审计开源工具&#xff0c;Yearning支持SQL查询、SQL审核、推送、用户权限及管理等功能&#xff0c;为DBA与开发人员使用&#xff0c;简单高效的MYSQL审计平台。 二、漏洞描述 该系统Yearning 2.3.1 版本、Interstellar GA 2.3.2 版本和 N…

Mybatis详细教程 (万字详解)

Mybatis 3.5.14 来自于B站‘天气预报’,一名宝藏up,跟着他可以培养起独立解决编程问题的能力&#xff01;&#xff01;&#xff01; 01.简介 1.1 官网 官方中文网: MyBatis中文网 中文网参考手册 1.2 概念 MyBatis 是一款优秀的持久层框架&#xff0c;支持自定义 SQL, 存储过…

【含文档】基于Springboot+Vue的高校竞赛管理系统(含源码+数据库+lw)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 系统定义了三个…

机器学习学习笔记-20240927

文章目录 一些简单的指令数据操作广播机制 标量&#xff0c;向量&#xff0c;矩阵的相互求导1. 标量对标量的求导2. 标量对向量的求导3. 向量对标量的求导4. 向量对向量的求导5. 矩阵对标量的求导6. 矩阵对向量的求导 链式求导法则YYDS求出损失函数偏导为0时的最优解w*1. 损失函…

昇思MindSpore进阶教程-格式转换

大家好&#xff0c;我是刘明&#xff0c;明志科技创始人&#xff0c;华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享&#xff0c;如果你也喜欢我的文章&#xff0c;就点个关注吧 MindSpore中可以把用于训练网络模型的数据…

打造未来社交:区块链社交DAO的颠覆性开发之路

随着区块链技术的不断发展&#xff0c;去中心化自治组织&#xff08;DAO&#xff09;逐渐成为一种创新的社交模式。结合区块链的透明性和不可篡改性&#xff0c;社交DAO为用户提供了一种全新的参与和治理方式&#xff0c;重塑了社交网络的构建与互动方式。本文将探讨区块链社交…

【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇(上)

系列文章目录 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;上&#xff09; 【鸿蒙】HarmonyOS NEXT开发快速入门教程之ArkTS语法装饰器&#xff08;下&#xff09; 【鸿蒙】HarmonyOS NEXT应用开发快速入门教程之布局篇&#xff08;上&#xff09; 文…

Python画笔案例-066 绘制橙子

1、绘制橙子 通过 python 的turtle 库绘制 橙子,如下图: 2、实现代码 绘制 橙子,以下为实现代码: """橙子.py注意亮度为0.5的时候最鲜艳本程序需要coloradd模块支持,安装方法:pip install coloradd程序运行需要很长时间,请耐心等待。可以把窗口最小化,然后…

教师工作量在线管理服务

4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式&#xff0c;是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示&#xff1a; 图4-1系统工作原理…

springAOP和spring事务

AOP 1.简介 Aop面向切面编程&#xff1a;在开发中我们不能直接对已经设计好的代码进行修改&#xff08;开放-封闭原则&#xff0c;对扩展开放&#xff0c;对修改封闭&#xff09;&#xff0c;解耦 AOP的底层实现为动态代理 * Target&#xff08;目标对象&#xff09;&#…

专业网站建设必备

专业网站建设不仅仅是简单的页面搭建&#xff0c;更是一项综合性的工程&#xff0c;需要结合行业特性、用户体验和技术创新&#xff0c;打造一个符合企业需求、独具特色的线上空间。 第一印象至关重要 一个企业网站就如同公司的数字名片&#xff0c;第一印象往往决定了用户是否…

衡石分析平台系统管理手册-功能配置之全局 JS 设置

全局 JS 设置​ 衡石系统提供了全局 JS 设置功能&#xff0c;用户可以通过自定义 JS 代码实现系统的个性化需求&#xff0c;如使用第三方统计工具对系统平台的 PV 、UV 进行监测。 使用场景​ 场景1&#xff1a;增加百度统计​ 下图示例中使用 js 代码引用了百度网站统计功…

MQTT.fx 1.7.1使用说明篇(OneNET-MQTT-API调试)

&#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程) &#xff08;代码完美实现&#xff09;stm32 新版 onenet mqtt物联网(保姆级教程)https://blog.csdn.net/Wang2869902214/article/details/142501323 MQTT.fx 1.7.1使用教程 下载地址 MQ…

深圳龙链科技:全球区块链开发先锋,领航Web3生态未来

【深圳龙链科技】是全球领先的Web3区块链技术开发公司&#xff0c;专注于为全球客户提供创新高效的区块链解决方案。 深圳龙链科技由币安资深股东携手香港领先的Web3创新枢纽Cyberport联袂打造&#xff0c;立足于香港这一国际金融中心&#xff0c;放眼全球&#xff0c;汇聚了华…

部分监督多器官医学图像分割中的标记与未标记分布对齐|文献速递--基于多模态-半监督深度学习的病理学诊断与病灶分割

Title 题目 Labeled-to-unlabeled distribution alignment for partially-supervised multi-organ medical image segmentation 部分监督多器官医学图像分割中的标记与未标记分布对齐 01 文献速递介绍 多器官医学图像分割&#xff08;Mo-MedISeg&#xff09;是医学图像分析…

『功能项目』下载Mongodb【81】

下载网址&#xff1a;Download MongoDB Community Server | MongoDB 点击安装即可 选择Custom 此时安装已经完成 桌面会创建图标 检查是否配置好MongoDB 输入cmd命令行 Windows键 R 打开命令行 输入cmd 复制安装路径 复制data路径 如果输出一大串代码即配置mongdb成功

LeetCode 面试经典150题 172.阶乘后的零

题目&#xff1a;给定一个整数 n &#xff0c;返回 n! 结果中尾随零的数量。 提示 n! n * (n - 1) * (n - 2) * ... * 3 * 2 * 1 思路&#xff1a; 代码&#xff1a; class Solution {public int trailingZeroes(int n) {return n 0 ? 0 : n / 5 trailingZeroes(n / 5);}…

央企办医布局智慧医康养,环球医疗(2666.HK)让养老有“医”靠

投资传奇查理芒格说&#xff1a;“我给自己设定的目标是追求平常人没有的常识。”只有挖掘出市场潜移默化的趋势&#xff0c;才能抓住投资机遇。 当下&#xff0c;资本市场一个被低估的产业趋势是&#xff0c;医疗健康行业大并购时代悄然开启&#xff0c;头部上市公司对并购产…