图像 检测 - RetinaNet: Focal Loss for Dense Object Detection (arXiv 2018)
图像 检测 - RetinaNet: Focal Loss for Dense Object Detection - 密集目标检测中的焦点损失(arXiv 2018)
- 摘要
- 1. 引言
- 2. 相关工作
- References
声明:此翻译仅为个人学习记录
文章信息
- 标题:RetinaNet: Focal Loss for Dense Object Detection (arXiv 2018)
- 作者:Tsung-Yi Lin, Priya Goyal, Ross Girshick, Kaiming He, Piotr Dollár
- 文章链接:https://arxiv.org/pdf/1708.02002.pdf
- 文章代码:https://github.com/facebookresearch/Detectron
(推荐:亦可参考 图像 处理 - 开源算法集合)
摘要
迄今为止,最高精度的目标检测器是基于R-CNN推广的两阶段方法,其中将分类器应用于候选目标位置的稀疏集。相比之下,对可能的目标位置进行定期、密集采样的单级检测器有可能更快、更简单,但迄今为止的精度落后于两级检测器。在本文中,我们调查了为什么会出现这种情况。我们发现,在密集检测器的训练过程中遇到的极端前景-背景类不平衡是主要原因。我们建议通过重塑标准交叉熵损失来解决这种类别不平衡问题,使其对分配给分类良好的示例的损失进行加权。我们的新颖的Focal Loss将训练集中在一组稀疏的困难例子上,并防止在训练过程中大量容易出现的阴性影响淹没检测器。为了评估我们损失的有效性,我们设计并训练了一个简单的密集检测器,我们称之为RetinaNet。我们的结果表明,当使用焦点损失进行训练时,RetinaNet能够与以前的单级检测器的速度相匹配,同时超过所有现有最先进的两级检测器的精度。代码位于:https://github.com/facebookresearch/Detectron.
图1. 我们提出了一种新的损失,我们称之为焦点损失,它在标准交叉熵标准中添加了一个因子 ( 1 − p t ) γ (1−p_t)^γ (1−pt)γ。设置 γ > 0 γ>0 γ>0可以减少分类良好的示例的相对损失 ( p t > . 5 ) (p_t>.5) (pt>.5),从而更加关注难以分类的错误示例。正如我们的实验所证明的那样,所提出的焦点损失能够在大量简单背景示例的情况下训练高精度的密集目标检测器。
图2. COCO test-dev的速度(ms)与精度(AP)。由于焦点损失,我们的简单单级RetinaNet检测器优于以前的所有单级和两级检测器,包括[20]中报道最好的Faster R-CNN[28]系统。我们展示了在五个尺度(400-800像素)上具有ResNet-50-FPN(蓝色圆圈)和ResNet-101-FPN(橙色菱形)的RetinaNet变体。忽略低精度状态(AP<25),RetinaNet形成了所有当前检测器的上包络,改进的变体(未显示)达到40.8 AP。详细信息见§5。
1. 引言
目前最先进的目标检测器是基于两阶段、提案驱动机制。正如在R-CNN框架[11]中推广的那样,第一阶段生成候选目标位置的稀疏集,第二阶段使用卷积神经网络将每个候选位置分类为前景类之一或背景。通过一系列的进步[10,28,20,14],这个两阶段的框架在具有挑战性的COCO基准[21]上始终实现了最高的准确性。
尽管两级检测器取得了成功,但一个自然的问题是:一个简单的单级检测器能达到类似的精度吗?单级检测器应用于目标位置、尺度和纵横比的规则、密集采样。最近对单级检测器的研究,如YOLO[26,27]和SSD[22,9],证明了有希望的结果,与最先进的两级方法相比,产生了精度在10-40%以内的更快检测器。
本文进一步推进了这一概念:我们提出了一种单级目标检测器,它首次与更复杂的两级检测器的最先进的COCO AP相匹配,如特征金字塔网络(FPN)[20]或Faster R-CNN[28]的Mask R-CNN[14]变体。为了实现这一结果,我们将训练过程中的类不平衡确定为阻碍单级检测器实现最先进精度的主要障碍,并提出了一种新的损失函数来消除这一障碍。
通过两阶段级联和采样启发式算法,解决了类CNN检测器中的类不平衡问题。提议阶段(例如,选择性搜索[35]、边缘框[39]、深度掩码[24,25]、RPN[28])迅速将候选目标位置的数量缩小到一个小数字(例如,1-2k),过滤掉大多数背景样本。在第二个分类阶段,执行采样启发法,如固定的前景与背景比率(1:3)或在线困难示例挖掘(OHEM)[31],以保持前景和背景之间的可管理平衡。
相比之下,单级检测器必须处理在图像上定期采样的一组更大的候选目标位置。在实践中,这通常相当于列举了大约100k个密集覆盖空间位置、尺度和纵横比的位置。虽然也可以应用类似的采样启发法,但它们效率低下,因为训练过程仍然由容易分类的背景示例主导。这种低效率是目标检测中的一个经典问题,通常通过自举[33,29]或困难示例挖掘[37,8,31]等技术来解决。
在本文中,我们提出了一个新的损失函数,作为处理类别不平衡的先前方法的更有效的替代方案。损失函数是一个动态缩放的交叉熵损失,其中缩放因子随着对正确类的置信度增加而衰减为零,见图1。直观地说,这个缩放因子可以在训练过程中自动降低简单示例的贡献,并快速将模型集中在困难示例上。实验表明,我们提出的Focal Loss使我们能够训练高精度的单级检测器,该检测器显著优于使用采样启发法或困难示例挖掘进行训练的替代方案,这是以前训练单级检测器的最先进技术。最后,我们注意到焦点损失的确切形式并不重要,我们表明其他实例可以获得类似的结果。
为了证明所提出的焦点损失的有效性,我们设计了一个名为RetinaNet的简单单级目标检测器,该检测器因其对输入图像中目标位置的密集采样而得名。它的设计特点是一个高效的网络内特征金字塔和使用锚框。它借鉴了[22,6,28,20]中的各种最新思想。RetinaNet高效准确;我们的最佳模型基于ResNet-101-FPN主干,在以每秒5帧的速度运行时,实现了39.1的COCO test-dev AP,超过了之前公布的单级和两级检测器的最佳模型结果,见图2。
2. 相关工作
经典目标检测器:将分类器应用于密集图像网格的滑动窗口范式有着悠久而丰富的历史。最早的成功之一是LeCun等人的经典工作。他将卷积神经网络应用于手写数字识别[19,36]。Viola和Jones[37]使用增强的目标检测器进行人脸检测,导致了此类模型的广泛采用。HOG[4]和整体通道特征[5]的引入产生了行人检测的有效方法。DPM[8]有助于将密集检测器扩展到更通用的目标类别,并在PASCAL[7]上取得了多年的最佳结果。虽然滑动窗口方法是经典计算机视觉中的主要检测范式,但随着深度学习[18]的复兴,接下来描述的两阶段检测器很快就主导了目标检测。
两阶段检测器:现代目标检测的主导范式是基于两阶段方法。正如选择性搜索工作[35]所开创的那样,第一阶段生成一组稀疏的候选提案,该候选提案应包含所有目标,同时过滤掉大多数阴性位置,第二阶段将提案分类为前景类/背景。R-CNN[11]将第二阶段分类器升级为卷积网络,从而在精度上获得了很大的提高,并开创了目标检测的现代时代。多年来,R-CNN在速度[15,10]和使用学习目标提案[6,24,28]方面都有所改进。区域提案网络(RPN)将提案生成与第二阶段分类器集成到单个卷积网络中,形成更快的R-CNN框架[28]。已经提出了对该框架的许多扩展,例如[20,31,32,16,14]。
单级检测器:OverFeat[30]是第一个基于深度网络的现代单级目标检测器之一。最近,SSD[22,9]和YOLO[26,27]对一阶段方法重新产生了兴趣。这些检测器经过了速度调整,但其精度落后于两阶段方法。SSD的AP降低了10-20%,而YOLO则专注于更极端的速度/精度权衡。见图2。最近的工作表明,只需降低输入图像分辨率和提案数量,就可以快速实现两阶段检测器,但即使计算预算更大,单阶段方法的精度也落后[17]。相比之下,这项工作的目的是了解单级检测器在以类似或更快的速度运行时是否能够匹配或超过两级检测器的精度。
我们的RetinaNet检测器的设计与以前的密集检测器有很多相似之处,特别是RPN[28]引入的“锚”概念,以及SSD[22]和FPN[20]中特征金字塔的使用。我们强调,我们的简单检测器取得了最佳结果,这不是基于网络设计的创新,而是由于我们的新损失。
类别不平衡:经典的单阶段目标检测方法,如增强检测器[37,5]和DPM[8],以及最近的方法,如SSD[22],在训练过程中都面临着较大的类别不平衡。这些检测器评估每个图像104-105个候选位置,但是只有少数位置包含目标。这种不平衡导致了两个问题:(1)训练效率低下,因为大多数位置都是容易产生阴性影响的,没有提供有用的学习信号;(2) 总的来说,简单的阴性影响可能会淹没训练,并导致退化模型。一种常见的解决方案是执行某种形式的困难阴性挖掘[33,37,8,31,22],在训练或更复杂的采样/重新加权方案[2]期间对困难示例进行采样。相反,我们表明,我们提出的焦点损失自然地处理了单级检测器所面临的类别不平衡,并使我们能够在没有采样的情况下对所有示例进行有效训练,也没有容易的阴性压倒损失和计算的梯度。
鲁棒估计:人们对设计鲁棒损失函数(例如,Huber损失[13])非常感兴趣,该函数通过对具有大误差的示例(困难示例)的损失进行加权来减少异常值的贡献。相反,我们的焦点损失不是解决异常值,而是通过对异常值(简单的例子)进行加权来解决类别不平衡问题,即使它们的数量很大,它们对总损失的贡献也很小。换句话说,焦点损失扮演着与鲁棒损失相反的角色:它将训练集中在一组稀疏的困难例子上。
References
[1] S. Bell, C. L. Zitnick, K. Bala, and R. Girshick. Inside-outside net: Detecting objects in context with skip pooling and recurrent neural networks. In CVPR, 2016. 6
[2] S. R. Bulo, G. Neuhold, and P. Kontschieder. Loss maxpooling for semantic image segmentation. In CVPR, 2017.3
[3] J. Dai, Y. Li, K. He, and J. Sun. R-FCN: Object detection via region-based fully convolutional networks. In NIPS, 2016. 1
[4] N. Dalal and B. Triggs. Histograms of oriented gradients for human detection. In CVPR, 2005. 2
[5] P. Doll´ar, Z. Tu, P. Perona, and S. Belongie. Integral channel features. In BMVC, 2009. 2, 3
[6] D. Erhan, C. Szegedy, A. Toshev, and D. Anguelov. Scalable object detection using deep neural networks. In CVPR, 2014.2
[7] M. Everingham, L. Van Gool, C. K. Williams, J. Winn, and A. Zisserman. The PASCAL Visual Object Classes (VOC) Challenge. IJCV, 2010. 2
[8] P. F. Felzenszwalb, R. B. Girshick, and D. McAllester. Cascade object detection with deformable part models. In CVPR, 2010. 2, 3
[9] C.-Y. Fu, W. Liu, A. Ranga, A. Tyagi, and A. C. Berg. DSSD: Deconvolutional single shot detector. arXiv:1701.06659, 2016. 1, 2, 8
[10] R. Girshick. Fast R-CNN. In ICCV, 2015. 1, 2, 4, 6, 8
[11] R. Girshick, J. Donahue, T. Darrell, and J. Malik. Rich feature hierarchies for accurate object detection and semantic segmentation. In CVPR, 2014. 1, 2, 5
[12] R. Girshick, I. Radosavovic, G. Gkioxari, P. Doll´ar, and K. He. Detectron. https://github.com/facebookresearch/detectron, 2018. 8
[13] T. Hastie, R. Tibshirani, and J. Friedman. The elements of statistical learning. Springer series in statistics Springer, Berlin, 2008. 3, 7
[14] K. He, G. Gkioxari, P. Doll´ar, and R. Girshick. Mask R-CNN. In ICCV, 2017. 1, 2, 4
[15] K. He, X. Zhang, S. Ren, and J. Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV. 2014. 2
[16] K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. In CVPR, 2016. 2, 4, 5, 6, 8
[17] J. Huang, V. Rathod, C. Sun, M. Zhu, A. Korattikara, A. Fathi, I. Fischer, Z. Wojna, Y. Song, S. Guadarrama, and K. Murphy. Speed/accuracy trade-offs for modern convolutional object detectors. In CVPR, 2017. 2, 8
[18] A. Krizhevsky, I. Sutskever, and G. Hinton. ImageNet classification with deep convolutional neural networks. In NIPS, 2012. 2
[19] Y. LeCun, B. Boser, J. S. Denker, D. Henderson, R. E. Howard, W. Hubbard, and L. D. Jackel. Backpropagation applied to handwritten zip code recognition. Neural computation, 1989. 2
[20] T.-Y. Lin, P. Doll´ar, R. Girshick, K. He, B. Hariharan, and S. Belongie. Feature pyramid networks for object detection. In CVPR, 2017. 1, 2, 4, 5, 6, 8
[21] T.-Y. Lin, M. Maire, S. Belongie, J. Hays, P. Perona, D. Ramanan, P. Doll´ar, and C. L. Zitnick. Microsoft COCO: Common objects in context. In ECCV, 2014. 1, 6
[22] W. Liu, D. Anguelov, D. Erhan, C. Szegedy, and S. Reed. SSD: Single shot multibox detector. In ECCV, 2016. 1, 2, 3, 6, 7, 8
[23] J. Long, E. Shelhamer, and T. Darrell. Fully convolutional networks for semantic segmentation. In CVPR, 2015. 4
[24] P. O. Pinheiro, R. Collobert, and P. Dollar. Learning to segment object candidates. In NIPS, 2015. 2, 4
[25] P. O. Pinheiro, T.-Y. Lin, R. Collobert, and P. Doll´ar. Learning to refine object segments. In ECCV, 2016. 2
[26] J. Redmon, S. Divvala, R. Girshick, and A. Farhadi. You only look once: Unified, real-time object detection. In CVPR, 2016. 1, 2
[27] J. Redmon and A. Farhadi. YOLO9000: Better, faster, stronger. In CVPR, 2017. 1, 2, 8
[28] S. Ren, K. He, R. Girshick, and J. Sun. Faster R-CNN: Towards real-time object detection with region proposal networks. In NIPS, 2015. 1, 2, 4, 5, 8
[29] H. Rowley, S. Baluja, and T. Kanade. Human face detection in visual scenes. Technical Report CMU-CS-95-158R, Carnegie Mellon University, 1995. 2
[30] P. Sermanet, D. Eigen, X. Zhang, M. Mathieu, R. Fergus, and Y. LeCun. Overfeat: Integrated recognition, localization and detection using convolutional networks. In ICLR, 2014.2
[31] A. Shrivastava, A. Gupta, and R. Girshick. Training region-based object detectors with online hard example mining. In CVPR, 2016. 2, 3, 6, 7
[32] A. Shrivastava, R. Sukthankar, J. Malik, and A. Gupta. Beyond skip connections: Top-down modulation for object detection. arXiv:1612.06851, 2016. 2, 8
[33] K.-K. Sung and T. Poggio. Learning and Example Selection for Object and Pattern Detection. In MIT A.I. Memo No.1521, 1994. 2, 3
[34] C. Szegedy, S. Ioffe, V. Vanhoucke, and A. A. Alemi. Inception-v4, inception-resnet and the impact of residual connections on learning. In AAAI Conference on Artificial Intelligence, 2017. 8
[35] J. R. Uijlings, K. E. van de Sande, T. Gevers, and A. W. Smeulders. Selective search for object recognition. IJCV, 2013. 2, 4
[36] R. Vaillant, C. Monrocq, and Y. LeCun. Original approach for the localisation of objects in images. IEE Proc. on Vision, Image, and Signal Processing, 1994. 2
[37] P. Viola and M. Jones. Rapid object detection using a boosted cascade of simple features. In CVPR, 2001. 2, 3
[38] S. Xie, R. Girshick, P. Doll´ar, Z. Tu, and K. He. Aggregated residual transformations for deep neural networks. In CVPR, 2017. 8
[39] C. L. Zitnick and P. Doll´ar. Edge boxes: Locating object proposals from edges. In ECCV, 2014. 2
相关文章:

图像 检测 - RetinaNet: Focal Loss for Dense Object Detection (arXiv 2018)
图像 检测 - RetinaNet: Focal Loss for Dense Object Detection - 密集目标检测中的焦点损失(arXiv 2018) 摘要1. 引言2. 相关工作References 声明:此翻译仅为个人学习记录 文章信息 标题:RetinaNet: Focal Loss for Dense Obje…...

MySQL 与MongoDB区别
一、什么是MongoDB呢 ? MongoDB 是由C语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情况下,添加更多的节点,可以保证服务器性能。 MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。 MongoDB 将数据存储为一…...

Kaggle First Place Winner Solution Study——多变量回归问题
本期分享一个Kaggle上playground系列多变量回归问题的第一名解决方案。试着分析、复现、学习一下金牌选手的数据分析思路。 赛题链接: Prediction of Wild Blueberry Yield | Kagglehttps://www.kaggle.com/competitions/playground-series-s3e14第一名解决方案链…...

分布式应用:Zookeeper 集群与kafka 集群部署
目录 一、理论 1.Zookeeper 2.部署 Zookeeper 集群 3.消息队列 4.Kafka 5.部署 kafka 集群 6.FilebeatKafkaELK 二、实验 1.Zookeeper 集群部署 2.kafka集群部署 3.FilebeatKafkaELK 三、问题 1.解压文件异常 2.kafka集群建立失败 3.启动 filebeat报错 4.VIM报错…...

Last-Mile Embodied Visual Navigation 论文阅读
论文阅读 题目:Last-Mile Embodied Visual Navigation 作者:JustinWasserman, Karmesh Yadav 来源:CoRL 时间:2023 代码地址:https://jbwasse2.github.io/portfolio/SLING Abstract 现实的长期任务(例如…...

thunder gbm
文章目录 背景参考官网信息训练调参模型保存推理 背景 想在 GPU 上使用使用闪电般快速的提升方法?了解这个库就好了。在很多任务上,它都比 LightGBM 和 XGBoost 快。 ThunderGBM 的主要特征如下: 通常是其它库的 10 倍。 支持 Python&#x…...

数据结构--单链表
前言 上一章,我们讲了数据结构--动态顺序表,我们会发现有以下问题: 1.当我们要头部或者插入或删除时,都需要进行位置挪动,腾出某一个位置,时间复杂度为0(N); 2.增容需要申请新空间,…...

过程:从虚拟机上添加 git 并成功提交到 GitLab 的全过程
Ⅰ、准备工作: 1、Git 查看: 其一、命令:git --version // 此时就能在虚拟机环境下看到 git 的版本为: git version 2.41.0 其二、如何在虚拟机上安装 git : A、命令 : sudo apt-get install git B、然后再输入虚…...

机器学习笔记之优化算法(九)收敛速度的简单认识
机器学习笔记之优化算法——收敛速度的简单认识 引言收敛速度的判别标准 Q \mathcal Q Q-收敛速度 R \mathcal R R-收敛速度关于算法复杂度与收敛速度 引言 本节对收敛速度简单介绍。 收敛速度的判别标准 我们之前几节介绍了线搜索方法 ( Line Search Method ) (\text{Line …...

FPGA学习——Altera IP核调用之PLL篇
文章目录 一、IP核1.1 IP核简介1.2 FPGA中IP核的分类1.3 IP核的缺陷 二、PLL简介2.1 什么是PLL2.2 PLL结构图2.3 C4开发板上PLL的位置 三、IP核调用步骤四、编写测试代码五、总结 一、IP核 1.1 IP核简介 IP核(知识产权核),是在集成电路的可…...
经纬度坐标工具
LngLatUtil :用于计算里程数 import cn.hutool.core.util.ArrayUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import lombok.Getter; import lombok.Setter;import java.io.FileInputStream; import java.io.Serializable; import java.t…...
如何使用伪元素::before和::after?
伪元素(::before和::after)是CSS中非常有用的特性,它们允许你在元素的内容之前或之后插入额外的内容,并且不需要在HTML结构中添加额外的标记。这样可以方便地在页面上添加装饰性元素、图标、或者样式效果。以下是使用伪元素的基本方法: 1、创…...

Visual Studio Code中对打开的脚本格式统一
什么是Language Server Protocol (LSP)? Language Server Protocol(语言服务器协议,简称LSP)是微软在2016年提出的一套统一的通讯协议方案。LSP定义了一套编辑器或者IDE与语言服务器(Language Server)之间使用的协议&…...

补充JDK源码-IDEA集成工具
在阅读JDK8源码的时候发现,只有一小部分常用包是存在源码及其注释的,而很多内部包是没有源码,class文件在阅读的时候对阅读者十分不友好。在网上搜集了很多资料都没有解决问题。 解决问题办法:参考文档。本文主要是根据这篇文章记…...

Git Submodule 更新子库失败 fatal: Unable to fetch in submodule path
编辑本地目录 .git/config 文件 在 [submodule “Assets/CommonModule”] 项下 加入 fetch refs/heads/:refs/remotes/origin/...
Springboot切面打印日志
切面打印完整日志,以下代码用于扫描RestController 注解修饰的接口,并打印相关日志 import org.aspectj.lang.JoinPoint; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; impor…...

ubuntu上回环设备/dev/loop0占用100%清理
查看磁盘占用情况时: df -h/dev/loopn这些设备在Linux下被称为回环设备。 终端输入: sudo apt autoremove --purge snapd再次查看:...

List list=new ArrayList()抛出的ArrayIndexOutOfBoundsException异常
1.应用场景,今天生产日志监控到一下ArrayList 进行add 异常,具体日志如下: eptionHandler.handler(178): TXXYBUSSINESS|执行异常 java.util.concurrent.CompletionException: java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bo…...

桶排序算法
桶排序算法 算法思想概述:桶排序的主要步骤如下: 算法goland实现:图解演示: 算法思想概述: 桶排序(Bucket Sort)是一种非比较性的排序算法,它将待排序的元素分到有限数量的桶&#…...
P8604 [蓝桥杯 2013 国 C] 危险系数
题目背景 抗日战争时期,冀中平原的地道战曾发挥重要作用。 题目描述 地道的多个站点间有通道连接,形成了庞大的网络。但也有隐患,当敌人发现了某个站点后,其它站点间可能因此会失去联系。 我们来定义一个危险系数 DF(x,y)&…...

对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
三体问题详解
从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

select、poll、epoll 与 Reactor 模式
在高并发网络编程领域,高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表,以及基于它们实现的 Reactor 模式,为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。 一、I…...

什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
MySQL JOIN 表过多的优化思路
当 MySQL 查询涉及大量表 JOIN 时,性能会显著下降。以下是优化思路和简易实现方法: 一、核心优化思路 减少 JOIN 数量 数据冗余:添加必要的冗余字段(如订单表直接存储用户名)合并表:将频繁关联的小表合并成…...