ICRA 2023 | 首个联合暗光增强和深度估计的自监督方法STEPS
原文链接:https://www.techbeat.net/article-info?id=4629
作者:郑宇鹏
本文中,我们提出了STEPS,第一个自监督框架来联合学习图像增强和夜间深度估计的方法。它可以同时训练图像增强网络和深度估计网络,并利用了图像增强的中间量生成了一个像素级mask来抑制过曝和欠曝区域。通过大量的实验研究表明,我们的方法在这两种区域取得了更好的效果。此外,我们提出了一个增强到显示风格的仿真数据集CRALA-EPE,它以低成本、稠密的ground truth为室外场景的深度估计任务提供了更多的可能。
论文链接:
https://arxiv.org/abs/2302.01334
代码链接:
https://github.com/ucaszyp/STEPS
一、 简介
近年来,基于图像的自监督深度估计方法不仅所需的硬件成本低,而且不需要真值的标注,因此受到了广泛的关注。该类方法本质上依赖于相邻帧光度一致性的假设,通过合成图和目标图的光度误差进行模型的训练。
然而在夜间环境下,图像中包含了大量的欠曝和过曝区域,它们在相邻帧之间有较明显的差异,同时掩盖了对应区域的有效信息,如图1(a)的第一行所示。我们在nuScenes数据集的测试集上评测了基线方法RNW预测的深度值和真值的均方根误差值(RMSE),同时我们人工挑选了其中100多个过曝和欠曝的场景,做了如图1(b)所示的统计结果。可以看出,在这两种特殊场景下,RNW的表现要低于平均水平,可视化效果如图1(a)的第二行所示。
图1 夜间深度估计的挑战。(a)第一行,nuScenes数据集中过曝和欠曝的场景;第二行,RNW预测的深度图;第三行,STEPS预测的深度图。(b)过曝(Overexposed),欠曝(Underexposed)和测试集平均(Avg)的RMSE。
针对欠曝的区域,前人提出了先进行图像增强再做深度估计的方法。虽然他们提出了各种有监督的夜间图像增强方法,但在具有挑战性的驾驶场景中的泛化性能并不令人满意,而且需要一定量的人工标注。针对过曝区域对深度估计的影响的研究还较少。为此,我们提出了STEPS,第一个自监督联合学习夜间图像增强和深度估计的方法,同时不使用任何ground truth。
此外,针对欠曝和过曝区域,我们提出了不确定像素掩膜策略。它基于图像增强的中间产物来过滤影响深度估计的图像区域,从而将两个自监督任务紧密地结合在一起。对比图1(a)的第二行和第三行可以明显发现,受益于我们的框架和策略,STEPS在欠曝和过曝区域的表现要优于基线方法。最后,我们还提出了CARLA-EPE,一个基于CARLA仿真器的增强到现实风格的夜间数据集。它具有密集的深度图的标注,且更接近现实的图像风格,为深度估计任务带来更多的可能性。
二、方法
模型架构
如前所述,夜间图像增强可以提高输入图像的质量,以帮助进行深度估计。但是有监督的夜间图像增强在本质上受到数据集自身分布的限制。因此,我们提出了一个以自监督的方式联合训练深度估计和图像增强的框架,如图2所示。它包含自监督图像增强模块(SIE),夜间自监督深度估计模块,由目标帧(ItI_tIt)经过SIE生成的光照图(xtx_txt)将两个模块联系在一起。
图2 整体模型架构
自监督图像增强模块
根据Retinex理论,给定一个低光图像 III ,可以通过
得到增强图像,其中 xxx 是光照图,图像增强最重要的部分, I′I'I′ 是反射图,也被认为是得到的增强图像。一个不准确的照明估计可能会导致过度增强的结果。为了提高性能稳定性和减少计算负担,我们采用SCI的自校准模块结构进行阶段级照明估计。
如图2底部所示,给定输入的图像,如 ItI_tIt,增强过程可以表示为:
其中n(0<n<3)为级数, E\mathscr{E}E 和 C\mathscr{C}C 分别表示光照估计模块和校准模块。 对于第n级, E\mathscr{E}E 和 C\mathscr{C}C 是通过以下步骤实现的:
其中,ΦE\Phi_EΦE 和 ΦC\Phi_CΦC 是可训练网络,分别用于估计光照图 xntx_n^txnt 和生成校准残差图 restnres^n_trestn。校正模块重新生成伪夜间图像,使SIE可以分几个级应用,经验校正带来更快的收敛速度和更好的增强效果。
训练时,我们使用与SCI相同的损失函数,即保真度损失和平滑损失。保真度损失的原理是对于夜间图像,光照分量在很大程度上与输入图像相似损失,它可以表示为:
平滑度损失是一种一致性正则化损失,可以表示为:
其中 κi,j\kappa_{i,j}κi,j 高斯核的权重, W(i){W}(i)W(i) 是以像素 iii 为中心的 5×55 {\times} 55×5 大小的窗口, x(i)x(i)x(i) 表示光照图 xxx 在像素 iii 处的值。
夜间自监督深度估计模块
自监督深度估计首先由Sfm-learner提出,它的关键思想是从给定源帧(IsI_sIs)根据几何约束重建目标帧(ItI_tIt)。 具体来说,给定已知的摄像机内参矩阵 KKK、可训练网络 Φd:RH×W×3→RH×W\Phi_{d}: \mathbb{R}^{H\times W\times 3} \rightarrow\mathbb{R}^{H\times W}Φd:RH×W×3→RH×W 预测 ItI_tIt 的深度图 DtD_tDt 和可训练网络 Φp:RH×W×6→R4×4\Phi_{p}: \mathbb{R}^{H\times W\times 6} \rightarrow\mathbb{R}^{4\times4}Φp:RH×W×6→R4×4 预测的 IsI_sIs 与 ItI_tIt 之间的相对位姿 Pt→s∈R4×4P_{t \to s} \in\mathbb{R}^{4\times4}Pt→s∈R4×4 ,ItI_tIt 中的每一个点 ptp_tpt 都可以投影到 IsI_sIs 中的 psp_sps 上,投影公式表示为:
其中,∼\sim∼ 表示齐次等价。此时,我们可以利用下面的公式从 IsI_sIs 中重建出目标帧,重建的目标帧记作 It^\hat{I_t}It^
其中, <⋅>\big < \cdot \big >⟨⋅⟩ 是STN提出的可微双线性插值, proj(⋅,⋅,⋅)\rm proj(\cdot,\cdot,\cdot)proj(⋅,⋅,⋅) 表示公式 (7)(7)(7)。
自监督训练的损失函数是 ItI_tIt 与重建帧 It^\hat{I_t}It^ 之间的光度误差。我们采用MonoDepth2的方法,将L1损失和SSIM损失函数合并为光度损失函数 Lp\mathcal{L}_pLp,其定义为:
其中 α\alphaα 是超参数,通常设置为0.85。另外,我们遵循MonoDepth2,通过加强预测深度图的平滑性来避免深度歧义,即
由于夜间图像质量较差,公式 (9)(9)(9) 的梯度带有从噪声。为了缓解这种情况,我们在RNW的基础上引入了一个预训练的白天深度估计模型 ΦdD\Phi^D_{d}ΦdD ,并通过一种对抗的方式指导夜间模型的训练。构造夜间深度估计网络 ΦdN\Phi^N_{d}ΦdN 作为生成器,通过训练使其预测值 DtD_tDt 与 ΦdD\Phi^D_{d}ΦdD 的输出值 DdD_dDd 不可区分。 基于Patch-GAN的鉴别器 ΦA\Phi_{A}ΦA 是一个可训练的网络,它来区分 DdD_dDd 和 DtD_tDt 。 ΦdN\Phi^N_{d}ΦdN 和 ΦA\Phi_{A}ΦA 是通过最小化对抗式损失函数来训练的,该函数表示为
其中,∣Id∣|I_d|∣Id∣ 和 ∣It∣|I_t|∣It∣ 是白天和夜间训练图像的数量,Dd=ΦdD(Id)D_d = \Phi^D_{d}(I_d)Dd=ΦdD(Id) , Dt=ΦdN(It)D_t = \Phi^N_{d}(I_t)Dt=ΦdN(It) 。
联合训练
两个模块联合训练的过程如图2所示,SIE的第一级的输出的增强结果 It′I'_tIt′ 和 Is′I'_sIs′ 作为深度估计模块的输入。公式 (8)(8)(8),(9)(9)(9),(10)(10)(10) 和 (11)(11)(11) 中,目标帧 ItI_tIt 和重建帧 It^\hat{I_t}It^ 分别被增强的目标帧 It′I'_tIt′ 和增强源帧 Is′I'_sIs′ 重建后图像 It′^\hat{I'_t}It′^ 所取代。
基于统计的光照不确定性mask
如文章开头所描述,夜间图像通常包含欠曝和过曝的区域,这些区域会丢失重要的细节信息,导致估计的深度值不准确。而且,过曝区域往往与汽车的运动(如车灯)相关联,这也违反了自监督深度估计中的光照一致性假设。因此,我们需要设计某种机制来滤除这些区域去训练的影响。经研究发现,SIE 可以预测一个光照图 xtx_txt ,以确定每个像素的颜色的增强比。如图3所示,欠曝区域的比值较大,过曝区域的比值较小。如果我们用这个来衡量每个像素在光度损失中的重要性,则可以最大可能减小这两个区域对训练的影响。
注意,我们给不确定区域每个像素点一个置信度,希望它们能参与到训练中,而非直接强硬地全部遮盖掉。
具体来说,我们定义了一个不确定映射 Muc∈RH×WM_{uc} \in \mathbb{R}^{H\times W}Muc∈RH×W ,它在欠曝和过曝区域中给出了低置信度,在合理区域中给出了高置信度。MucM_{uc}Muc 表示为:
其中 aaa 和 bbb 是基于统计的光照值处于合理区域的上下界,ppp 和 qqq 是衰减系数。如图3所示,直观地看,这个函数看起来像一个桥,它利用光照图生成不确定mask。
这个建模源于我们对两个夜间数据集光度图的统计,它可以遮掩过曝和欠曝区域的像素,又不会过多遮掩过对训练有帮助的像素点。
图3 MucM_{uc}Muc 的原理。 (a)光照图 xtx_txt 。 (b) MucM_{uc}Muc 函数,该函数可以柔和地屏蔽过曝和弱曝区域。 © 不确定mask的可视化
三、实验
数据集
我们在nuScence数据集和RobotCar数据集上和其他方法做了比较。此外,针对真实数据集成本高、深度图稀疏以及仿真器数据域与现实数据域差异大的痛点,我们提出了增强到现实风格的仿真数据集CARLA-EPE。
nuScenes-Night
nuScenes是一个大规模的自动驾驶数据集。它包含多种天气环境下复杂的道路场景,十分具有挑战性。
RobotCar-Night
RobotCar数据来源于RobotCar团队一年的时间内在各种天气下频繁地穿越牛津市中心的同一条路线时的驾驶记录,包括车辆上的6个摄像头数据以及激光雷达、GPS和INS数据。
CARLA-EPE
上述两个数据集的真实深度均来自激光雷达,然而,激光雷达数据的采集是昂贵的,并且只能提供稀疏的深度图。为此,我们将目光放在了仿真数据上。RGB图像和相应的密集深度图可以很容易地在仿真器(例如CARLA)中收集,但仿真图像和真实图像之间的分布差异极大地影响了训练模型在真实场景中的应用。因此,我们提出了一个基于CARLA和增强图片真实感的网络EPE的夜间深度估计数据集CARLA-EPE,它可以提供密集的深度真值和迁移到真实风格的图像,如图4所示。
图4 EPE增强后的图像(CRALA-EPE)与增强前(CRALA)的对比。
实验结果
如表1所示,我们在nuScenes数据集和RobotCar数据集上均达到了SOTA,在准确率和误差上均有显著的提升。在更具挑战性的nuScenes数据集上,我们的a1相较于baseline提升了16.2%,abs_rel相较于baseline降低了10.4%。
表1 nuScenes数据集和Oxford数据集的定量结果。
可视化结果
如图5所示,蓝色方框展示了基线方法受到过曝的影响,预测了错误的深度。 红色方框还表明基线方法在欠曝区域错误地估计物体深度。由于我们的方法提出了新的框架和自适应掩膜的策略,因此可以使模型在这两种区域中预测出更合理的深度。
图5 可视化结果。
四、总结与展望
我们提出了STEPS,第一个自监督框架来联合学习图像增强和夜间深度估计的方法。它可以同时训练图像增强网络和深度估计网络,并利用了图像增强的中间量生成了一个像素级mask来抑制过曝和欠曝区域。通过大量的实验研究表明,我们的方法在这两种区域取得了更好的效果。此外,我们提出了一个增强到显示风格的仿真数据集CRALA-EPE,它以低成本、稠密的ground truth为室外场景的深度估计任务提供了更多的可能。
参考文献
[1] nuscenes: A multimodal dataset for autonomous driving: https://www.nuscenes.org
[2] Regularizing Nighttime Weirdness: Efficient Self-supervised Monocular Depth Estimation in the Dark: https://arxiv.org/abs/2108.03830
[3] Regularizing Nighttime Weirdness: Efficient Self-supervised Monocular Depth Estimation in the Dark: https://arxiv.org/abs/2108.03830
[4] The retinex theory of color vision.: https://lambentresearch.com/color/docs/LandRetinex.pdf
[5] Toward Fast, Flexible, and Robust Low-Light Image Enhancement: https://openaccess.thecvf.com/content/CVPR2022/html/Ma_Toward_Fast_Flexible_and_Robust_Low-Light_Image_Enhancement_CVPR_2022_paper.html
[6] Unsupervised Learning of Depth and Ego-Motion from Video: https://arxiv.org/abs/1704.07813
[7] Spatial transformer networks: https://arxiv.org/abs/1506.02025
[8] Digging Into Self-Supervised Monocular Depth Estimation: https://arxiv.org/abs/1806.01260
[9] Image-to-Image Translation with Conditional Adversarial Networks: https://arxiv.org/abs/1611.07004
[10] Enhancing photorealism enhancement: http://vladlen.info/papers/EPE.pdf
Illustration by nanoagency from IconScout
-The End-
关于我“门”
▼
将门是一家以专注于发掘、加速及投资技术驱动型创业公司的新型创投机构,旗下涵盖将门创新服务、将门-TechBeat技术社区以及将门创投基金。
将门成立于2015年底,创始团队由微软创投在中国的创始团队原班人马构建而成,曾为微软优选和深度孵化了126家创新的技术型创业公司。
如果您是技术领域的初创企业,不仅想获得投资,还希望获得一系列持续性、有价值的投后服务,欢迎发送或者推荐项目给我“门”:
bp@thejiangmen.com
相关文章:

ICRA 2023 | 首个联合暗光增强和深度估计的自监督方法STEPS
原文链接:https://www.techbeat.net/article-info?id4629 作者:郑宇鹏 本文中,我们提出了STEPS,第一个自监督框架来联合学习图像增强和夜间深度估计的方法。它可以同时训练图像增强网络和深度估计网络,并利用了图像增…...

基于react+nodejs+mysql开发用户中心,用于项管理加入的项目的用户认证
基于reactnodejsmysql开发用户中心,用于项管理加入的项目的用户认证用户中心功能介绍页面截图后端采用架构user表projects表project_user表仓库地址用户中心功能介绍 用户中心项目,用于统一管理用户信息、登录、注册、鉴权等 功能如下: 用…...

mapreduce与yarn
文章目录一、MapReduce1.1、MapReduce思想1.2、MapReduce实例进程1.3、MapReduce阶段组成1.4、MapReduce数据类型1.5、MapReduce关键类1.6、MapReduce执行流程1.6.1、Map阶段执行流程1.6.2、Map的shuffle阶段执行流程1.6.3、Reduce阶段执行流程1.7、MapReduce实例WordCount二、…...

鲲鹏云服务器上使用 traceroute 命令跟踪路由
traceroute 命令跟踪路由 它由遍布全球的几万局域网和数百万台计算机组成,并通过用于异构网络的TCP/IP协议进行网间通信。互联网中,信息的传送是通过网中许多段的传输介质和设备(路由器,交换机,服务器,网关…...

代码随想录算法训练营第47天 || 198.打家劫舍 || 213.打家劫舍II || 337.打家劫舍III
代码随想录算法训练营第47天 || 198.打家劫舍 || 213.打家劫舍II || 337.打家劫舍III 198.打家劫舍 题目介绍 你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&…...

JVM调优方式
对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数。 1.Full GC 会对整个堆进行整理,包括Young、Tenured和Perm。Full GC因为需要对整个堆进行回收,所以比较慢,因此应该尽可能减少Full GC的次数。 2.导致Full GC的原因 1)年老…...

机器学习模型监控的 9 个技巧
机器学习 (ML) 模型是非常敏感的软件;它们的成功使用需要进行仔细监控以确保它们可以正常工作。当使用所述模型的输出自动做出业务决策时尤其如此。这意味着有缺陷的模型通常会对终端客户的体验产生真正的影响。因此,监控输入数据(和输出&…...

Linux 实现鼠标侧边键实现代码与网页的前进、后退
前言 之前一直是使用windows进行开发,最近转到linux后使用VsCode编写代码。 但是不像在win环境下,使用鼠标侧边键可以实现代码的前向、后向跳转。浏览网页时也不行(使用Alt Left可以后退)。 修改键盘映射实在没有那么方便&…...

健身蓝牙耳机推荐,推荐五款适合健身的蓝牙耳机
出门运动健身,有音乐的陪伴是我们坚持运动的不懈动力,在健身当中佩戴的耳机,佩戴舒适度以及牢固程度是我们十分需要注意的,还不知道如何选择健身蓝牙耳机,可以看看下面这些运动蓝牙耳机分享。 1、南卡Runner Pro4骨传…...

Type-c诱骗取电芯片大全
随着Type-C的普及和推广,目前市面上的电子设备正在慢慢淘汰micro-USB接口,逐渐都更新成了Type-C接口,micro-USB接口从2007年上市,已经陪伴我们走过十多个年头,如今也慢慢退出舞台。 今天我们评测的产品是市面上Type-C…...

Scala模式匹配详解(第八章:基本语法、模式守卫、模式匹配类型)(尚硅谷笔记)
模式匹配第 8 章 模式匹配8.1 基本语法8.2 模式守卫8.3 模式匹配类型8.3.1 匹配常量8.3.2 匹配类型8.3.3 匹配数组8.3.4 匹配列表8.3.5 匹配元组8.3.6 匹配对象及样例类8.4 变量声明中的模式匹配8.5 for 表达式中的模式匹配8.6 偏函数中的模式匹配(了解)第 8 章 模式匹配 Scal…...

Linux:基于libevent读写管道代码
基于libevent读写管道代码: 读端: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <string.h> #include <event2/event.h> #include…...

2022年中职网络安全逆向题目整理合集
中职网络安全逆向题目整理合集逆向分析:PE01.exe算法破解:flag0072算法破解:flag0073算法破解:CrackMe.exe远程代码执行渗透测试天津逆向re1 re2逆向分析:PE01.exe FTPServer20220509(关闭链接) FTP用户名:PE01密码…...

Tencent OS下逻辑卷(LVM)增加硬盘扩容
上一篇文章写了逻辑卷创建以及使用剩余空间为已经创建的逻辑卷扩容。 本篇是针对卷组空间已经用尽时的扩容方法。那就是增加硬盘。 首先我们为虚拟机增加硬盘/dev/sdd 使用fdisk为/dev/sdd分区,方法在上一篇文章已经描述,在此不再赘述。 新增的硬盘使用如下命令添加到卷组…...

【Java】Spring的创建和使用
Spring的创建和使用 Spring就是一个包含众多工具方法的IOC容器。既然是容器,那么就具备两个最主要的功能: 将对象存储到容器中从容器中将对象取出来 在Java语言当中对象也叫作Bean。 1. 创建Spring项目 创建一个普通maven项目添加Spring框架支持(spri…...

【HTML】HTML 表单 ④ ( textarea 文本域控件 | select 下拉列表控件 )
文章目录一、textarea 文本域控件二、select 下拉列表控件一、textarea 文本域控件 textarea 文本域 控件 是 多行文本输入框 , 标签语法格式如下 : <textarea cols"每行文字字符数" rows"文本行数">多行文本内容 </textarea>实际开发中 并不…...

MySQL 操作 JSON 数据类型
MySQL 从 v5.7.8 开始支持 JSON 数据类型。 JSON 数据类型和传统数据类型的操作还是有很大的差别,需要单独学习掌握。好在 JSON 数据类型的学习成本不算太高,只是在 SQL 语句中扩展了 JSON 函数,操作 JSON 数据类型主要是对函数的学习。 新…...

关于vue3生命周期的使用、了解以及用途(详细版)
生命周期目录前言组合式写法没有 beforeCreate / created 生命周期,并且组合式写生命周期用哪个先引哪个beforeCreatecreatedbeforeMount/onBeforeMountmounted/onMountedbeforeUpdate/onBeforeUpdateupdated/onUpdatedbeforeUnmount/onBeforeUnmountunmounted/onUn…...

2月,真的不要跳槽。
新年已经过去,马上就到金三银四跳槽季了,一些不满现状,被外界的“高薪”“好福利”吸引的人,一般就在这时候毅然决然地跳槽了。 在此展示一套学习笔记 / 面试手册,年后跳槽的朋友可以好好刷一刷,还是挺有必…...

Vulnhub靶场----4、DC-4
文章目录一、环境搭建二、渗透流程三、思路总结一、环境搭建 DC-4下载地址:https://download.vulnhub.com/dc/DC-4.zip kali:192.168.144.148 DC-4:192.168.144.152 二、渗透流程 端口扫描:nmap -T5 -p- -sV -sT -A 192.168.144.1…...

51单片机学习笔记_12 LCD1602 原理及其模块化代码
LCD1602 liquid crystal display 液晶显示屏,一种字符型液晶显示模块,可以显示 16*2 个字符,每个字符是 5*7 点阵。 P0 P2 会和数码管、LED 一定程度上冲突。 地。 Vcc。 调对比度的。 RS:数据指令端。1代表 DB 是数据&#x…...

科技 “新贵”ChatGPT 缘何 “昙花一现” ,仅低代码风靡至今
恍惚之间,ChatGPT红遍全网,元宇宙沉入深海…… 在科技圈,见证了太多“昙花一现”,“新贵” ChatGPT 的爆火几乎复制了元宇宙的路径,它会步元宇宙的后尘,成为下一个沉入深海的工具吗? 不可否认的…...

redis基本入门| 怎么安装redis?什么的是redis?怎么使用?
目录 一、Redis下载与安装 二、基本概念 1.什么是Redis? 2.Redis端口多少? 3.Redis是单线程还是多线程? 4.Redis为什么单线程还这么快? 三、Redis的基本操作 四、Redis的五个基本类型 1.Redis-key 2.字符串 string 3.列表 list …...

kubernetes traefik ingress 安装部署以及使用和注意点
1、简介 Traefik 是一款 open-source 边缘路由器,可让您轻松地发布服务. 它接收来自您的系统请求,并找出负责处理它们的后端服务组件。 traefik 与众不同在于它能够自动发现适合您服务的配置。 当 Traefik 检查您的基础设施时,它会发现相关信…...

电脑病毒已灭绝,是真的吗?
大家有没有这样一个疑问,觉得自己的电脑好像很久没有电脑病毒了?之前大名鼎鼎的蠕虫2000,熊猫烧香都变得不那么常见了。到底是电脑因为自身优化和杀毒软件的防护导致病毒变少了,还是本身电脑病毒变少了呢?(…...

基于RK3399+Linux QT地面测试台多参数记录仪测试平台软件设计(二)
rk3399 是由本土芯片厂商瑞芯微(Rockchip)研发的高性能、低功耗“中国芯”。在 2016 年 4 月,rk3399 首次在香港举行的电子展上亮相。芯片使用六核大 LITTLE 处理器: 包括四核的 Cortex-A53 和双核的 Cortex-A72,主频可…...

追梦之旅【数据结构篇】——详解C语言实现动态版顺序栈
详解C语言动态实现顺序栈~😎前言🙌预备小知识💞栈的概念及结构整体实现内容分析💞1.头文件编码实现🙌2.功能文件编码实现🙌3.测试文件的编写:🙌总结撒花💞😎博…...

Ubuntu 使用Nohup 部署/启动/关闭程序
目录 一、什么是nohup? 二、nohup能做什么? 三、nohup如何使用? 四、怎么查看/关闭使用nohup运行的程序? 命令 实例 一、什么是nohup? nohup 命令运行由 Command参数和任何相关的 Arg参数指定的命令,…...

Spring 用到了哪些设计模式
关于设计模式,如果使用得当,将会使我们的代码更加简洁,并且更具扩展性。本文主要讲解Spring中如何使用策略模式,工厂方法模式以及Builder模式。1. 策略模式关于策略模式的使用方式,在Spring中其实比较简单,…...

Linux上基于PID找到对应的进程名以及所在目录
Linux上基于PID找到对应的进程名以及所在目录前言找到进程的pid通过top命令查看通过 ps -ef |grep nignx进行查看通过端口号进行查看查看nginx进程目录前言 在一台新接触的服务器,却不熟悉搭建所在目录的时候,这时候就就可以通过ps查找进程,并…...