【论文阅读笔记】One Diffusion to Generate Them All
One Diffusion to Generate Them All
- 介绍
- 理解
- 引言
- 二、相关工作
- 三、方法
- 预备知识
- 训练
- 推理
- 实现细节
- 训练细节
- 数据集构建
- 实验分
- 结论
- 附录
介绍
Paper:https://arxiv.org/abs/2411.16318
Code:https://github.com/lehduong/onediffusion
Authors:Allen Institute for AI(AI2)\ 加州大学欧文分校 \ 华盛顿大学
理解
利用成组的序列数据通过Attention自身去完成其内部一致性的学习,多种任务同时训练又共同促进了模型的能力。
同类文章还有 GDT https://arxiv.org/pdf/2410.15027


引言

- LLMs 能作为通用模型,用于多种任务,并进行 zero-shot 泛化,作者团队试图寻求同样功能的扩散模型
- 现有的扩散模型往往需要 add-ons 来实现特定功能,比如条件控制、身份保持、多视图生成、姿态检测、深度提取、分割等
- 受基于序列数据的扩散模型启发,我们在训练期间将所有条件和目标图像建模为一系列具有不同噪声水平的“视图”。(本质上就是将对应任务的数据成组送入到模型,并使用不同的时间不 t 进行预测)
- 提出 OneGen 数据集,可用于训练不同任务
- 对多种特定任务起到了匹配特定模型的效果
二、相关工作
- 介绍了多种基于扩散模型的针对特定生成任务的方法,如 Controlnet、T2I、instruct pix2pix、IP-adapter、PuLiD等,多视图任务有syncdreamer、mvdream 等
- 介绍多种基于扩散模型的预测任务,如光流估计、开放语义分割等。这些研究表明,扩散模型不仅对生成图像有用,而且对计算机视觉中的各种预测任务也非常有效
- 介绍了相关的统一任务生成,如 unicontrolnet,OmniGen 等
三、方法

预备知识
flow matching: 通过学习在两个概率分布之间传输的时间相关向量场来训练连续时间生成模型的框架。
L C F M ( θ ) : = E t , q ( z ) , p t ( x ∣ z ) ∥ v θ ( t , x ) − u t ( x ∣ z ) ∥ 2 \mathcal{L}_{\mathrm{CFM}}(\theta):=\mathbb{E}_{t, q(z), p_{t}(x \mid z)}\left\|v_{\theta}(t, x)-u_{t}(x \mid z)\right\|^{2} LCFM(θ):=Et,q(z),pt(x∣z)∥vθ(t,x)−ut(x∣z)∥2
根据图 2,我们将多模态条件下的图像生成问题视为序列建模,将不同任务的训练数据编组。
训练
训练:采用 SD3 的时间采样方式 t ∈ L o g N o r m ( 0 , 1 ) t \in LogNorm(0,1) t∈LogNorm(0,1),为同一序列的输入进行单独采样构建加噪后的潜变量,然后遵循其去噪损失: L ( θ ) = E [ ∥ v θ ( t 1 , … , t N , x 1 , … , x N ) − u ∥ 2 ] \mathcal{L}(\theta)=\mathbb{E}\left[\left\|v_{\theta}\left(t_{1}, \ldots, t_{N}, \mathbf{x}_{1}, \ldots, \mathbf{x}_{N}\right)-u\right\|^{2}\right] L(θ)=E[∥vθ(t1,…,tN,x1,…,xN)−u∥2]
推理
推理阶段将条件的噪声强度设置为 0,想要输出的目标图像(可能是多个)使用相同的去噪时间步 t,可以遵循正常的去噪推理流程对 ODE求解。
实现细节
- 网络架构:采用 Next-DiT 架构;设计了一个支持多种输入的变量长度定义方式;使用 3D RoPE 来处理位置编码
- 任务设定
- 文本到图像(1 个视图)。仅使用单个“视图”,训练和推理遵循与标准文本到图像扩散模型相同的过程。我们将任务标签 [[text2image]]] 添加到标题中以指定任务。
- 图像到图像(2 个视图)。我们将第一个视图设置为目标图像,第二个视图设置为条件输入。在推理过程中,我们可以使用一个或两个视图来生成,并训练模型生成目标图像。对于边界框或语义图生成等任务,我们将十六进制颜色代码和类标签添加到提示中。例如,要用黄色掩码分割鼠标,提示为:[[semantic2image]] <#FF00 黄色掩码:鼠标>一张照片。
- ID定制(2-4个视图)。我们跨视图对同一个人的图像进行采样,为每个输入图像连接字幕并使用标记 [[[imgX]] 来表示每张图像。我们还将任务标签 [[faceid]]] 添加到标题中。在推理时,我们可以以任意数量的图像为条件并生成多个输出,从而产生更一致的结果。
- 多视图生成(4-12 个视图)。受Cat3D的启发,我们使用Pl̈ucker射线嵌入来表示相机姿势。对于每个图像补丁,我们使用其射线原点o和方向d计算Pl̈ucker坐标asr = (o × d, d)。结果嵌入的维度 H/8×W/8×6,匹配潜在空间大小,并跨通道复制以形成 16 个通道嵌入。与 [18] 不同,我们将光线嵌入视为图像潜在变量的独立“视图”作为一个统一的序列,而不是通过通道连接。这种设计允许灵活的去噪,支持以相机姿势或采样光线嵌入为条件的多视图图像生成,以从图像条件下预测姿势,类似于 RayDiffusion [67]。我们将射线嵌入缩放到具有单位方差,如[47]所示。与其他任务一样,我们将任务标签 [[多视图]] 添加到标题中。在推理过程中,我们可以将图像或Pl̈ucker射线嵌入替换为高斯噪声,分别用于多视图生成和摄像机姿态估计。
训练细节
我们的模型是使用流匹配目标从头开始训练的。与之前的工作类似,我们使用三个阶段的训练配方。在第一阶段,我们以 256(500K 步) 和 512(500K 步) 的分辨率预训练文本到图像模型。在第二阶段,我们继续对混合任务进行训练,T2I 使用 512,其他任务使用 256,总共 1M 步。最后,在最后阶段,我们以 (1024) 的高分辨率对模型进行微调,用于 T2I。对于 ID 定制微调,我们使用 2-5 个视图。对于更少的视图(2-3),我们应用 512 的分辨率,而对于更多视图,我们使用 256 分辨率。
在训练期间,我们在每个阶段使用批量采样策略,以相等的概率对任务(T2I、图像到图像、ID 定制和多视图生成)进行采样。噪声调度器的移位值设置为 3,如SD3中所建议的。我们使用学习率为 η = 0.0005 的 AdamW 优化器。在第一阶段以 256 的全局批量大小为 256 的 TPU v3-256 pod 进行训练,最后的微调阶段使用相同的配置在 64 H100 GPU 上完成。
数据集构建
Text-to-Image 我们利用公共和内部(合成)数据集。公共数据集包括:PixelPenrose [52]、Unsplash、Coyo [6]、JourneyDB [40]。此外,我们使用 10M 内部合成数据集,该数据集由使用 LLAVA-NeXT [31] 和 Molmo [11] 重新描述的图像组成。每个图像的文本描述长度从 100 到 150 个单词不等。当原始提示可用时,我们使用 LLM 生成的标题和原始标题。
图像到图像 对于更简单的任务,如去模糊、修复、从canny边缘生成图像或放大,我们使用合成数据的1M样本子集,并为每个图像应用相关的预处理器来创建输入条件。对于更复杂的任务,我们按照下面概述的过程从 Midjourney、Stable Diffusion [15] 和 Flux-dev 生成的输出创建一个合成数据集:
- 语义图和检测对于每个图像,我们使用 LLAAVA-NeXT 模型来识别实体或主题(例如,人、衬衫、狗、建筑物),每张图像最多有 10 个实体。基于 LlaVA-Next 的这些主题名称,我们使用 SAM 执行语义分割并提取边界框。每个类都从预定义的列表中分配一个随机颜色。该数据集包含 350K 三元组,由语义图、边界框和原始图像组成。
- 深度图我们通过将 DepthAnything-v2 应用于从各种数据集中采样的 500K 图像来生成深度数据集,包括真实图像和合成图像。此外,我们将 Hypersim 数据集 中的 40K 图像与 LLAVA-NeXT 的标题,并将它们合并到训练集中。
- 人体姿势我们收集了一个包含 50K 图像的不同子集,主要是人类进行姿势调节。我们使用YOLOv5检测感兴趣区域的边界框,并应用ViTPose进行位姿估计
ID定制 我们通过从公开可用的图像中从游戏和电影中收集名人和人物的数据集。在过滤以确保每个受试者至少有四个图像并删除NSFW内容后,数据集包括大约60K个受试者,总共130万张图像。我们使用 LLAAVA-NeXT 对这些图像进行字幕。
多视图生成 我们使用DL3DV-10K数据集[29]、Obj厌恶[10]、CO3D[45]。对于 Objverse 数据集,我们利用从 LGM [54] 过滤拆分的 80K 和 Cap3D [38] 提供的标题。在 DL3DV 数据集中,我们从每个场景中采样图像并使用 LLAVA-Next 对其进行标题。对于 CO3D,我们排除了字幕并仅包含文本输入中的任务标记。
实验分

-
Text2Image
文本到图像任务的OneDiffusion的定性结果如图3所示。由于我们的One-Gen数据集的多样性,该模型可以处理各种艺术风格,跨越艺术和逼真的设计。继之前的工作 [15] 之后,我们评估了我们的模型在 GenEval 基准 [20] 上的文本到图像能力。对于每个提示,我们使用具有 100 步的欧拉求解器和 5 的引导尺度生成 4 张图像。 OneDiffusion 的结果以及基线模型的结果如表 1 所示。与类似大小的基线相比,我们的模型表现出强大的性能,尽管在相对较小的数据集上进行训练,但在多任务能力方面表现出色。这一性能很大程度上归功于数据集的多样性和每个样本提供的综合字幕。 -
可控图像生成
文本到图像任务的OneDiffusion的定性结果如图3所示。由于我们的One-Gen数据集的多样性,该模型可以处理各种艺术风格,跨越艺术和逼真的设计。继之前的工作 [15] 之后,我们评估了我们的模型在 GenEval 基准 [20] 上的文本到图像能力。对于每个提示,我们使用具有 100 步的欧拉求解器和 5 的引导尺度生成 4 张图像。 OneDiffusion 的结果以及基线模型的结果如表 1 所示。与类似大小的基线相比,我们的模型表现出强大的性能,尽管在相对较小的数据集上进行训练,但在多任务能力方面表现出色。这一性能很大程度上归功于数据集的多样性和每个样本提供的综合字幕。

-
多视角生成

我们使用 **Google Scanned Object 数据集 [13] 评估我们方法的多视图生成能力。**表 2 显示了我们的方法与最先进的方法(包括 Zero123 [32]、Zero123-XL [12] 和 EscherNet [15])的比较。需要注意的是,这些模型是专门为多视图生成任务设计和训练的。相比之下,我们的模型支持可变数量的条件输入,由于其灵活的去噪框架,即使相机姿势未知,也可以合并额外的条件视图。如表2所示,OneDiffusion
图 5 展示了从单个前视图图像生成多视图的两个定性示例。我们的模型成功地在不同的方位角和仰角之间生成了一致的视图。有关额外的可视化,请参阅附录中的图 10 和 11。由于我们框架的灵活性,我们还可以直接执行文本到多视图,通过“屏蔽”所有图像,并且只输入相机姿势,如附录中的图 12 所示

-
ID 保持
我们进一步评估了 ID 定制任务的 OneDiffusion,该任务涉及使用一个或多个 ID 图像作为个性化生成的输入。为了评估性能,我们使用定性和定量分析与 STOA 方法(包括 InstantID [58]、PuLID [21] 和 PhotoMaker [27])进行了比较。我们的评估超出了标准基准(unsplash-50 [16])来测试 ID 定制任务的泛化,例如不同的表达式、视点甚至非人类图像。图 6 说明了改变面部表情和注视方向(第一行)、改变视点(第二行)和定制非人类 ID(第三行)的示例。


-
深度估计
对于图像理解任务,我们使用标准基准评估我们的模型在单目深度估计上的性能:NYUv2 [51] 和 DIODE [56]。我们在表4中报告了定量结果。定量结果如表4所示,与利用预先训练的文本到图像扩散模型(如Marigold[22])的基线相比,我们的模型获得了具有竞争力的性能。然而,如图 7 所示,我们的模型表现出比 Marigold 等基于扩散的深度估计器更强的鲁棒性。具体来说,它擅长处理开放世界图像,包括绘画、朦胧天气和非常规纹理。为了进一步定性比较,请参见图 15 和图 16。

-
相机姿态估计
我们使用 Google Scanned Object 数据集 [13] 在相机位姿估计上评估我们的模型。对于这项任务,我们使用每个合成对象的六个渲染图像,并通过去噪相应的射线嵌入来估计相机姿势。在RayDiffusion[67]之后,我们应用最小二乘优化来估计相机的中心和旋转。表 5 报告了以 0.3 阈值测量的相机中心精度。
图 8 提供了我们的模型和 RayDiffusion 之间的定性比较。由于训练数据的偏差,RayDiffusion 始终预测上半球的相机姿势,例如 CO3D,它主要具有上半球视图。相比之下,由于我们的大规模训练数据集的多样性,OneDiffusion 实现了更高的准确度并避免这个限制。 -
其他任务
由于直接从原始输出图像中提取掩码、边界框和关键点并不简单,我们在附录图17和图18中分别为COCO数据集上的人体姿态估计和语义分割提供了几个定性结果。由于我们的模型在训练期间不区分条件和图像的任务,因此其在理解任务上的性能作为模型的附加指标。我们将对这方面的进一步探索留给未来的工作。
结论
我们的实验表明,OneDiffusion 在各种任务中取得了令人印象深刻的结果,包括条件 T2I 生成、深度估计、开放词汇语义分割、姿势估计、多视图生成、ID 定制和相机位姿估计。我们相信这项工作提高了扩散模型的能力,提供了一种通用且可扩展的解决方案,可与大型语言模型提供的灵活性相媲美。这代表着朝着开发通用视觉模型迈出的重要一步,该模型可以作为各种应用的主干。
附录
数据分布:



更多的结果查看原文吧
相关文章:
【论文阅读笔记】One Diffusion to Generate Them All
One Diffusion to Generate Them All 介绍理解 引言二、相关工作三、方法预备知识训练推理实现细节训练细节 数据集构建实验分结论附录 介绍 Paper:https://arxiv.org/abs/2411.16318 Code:https://github.com/lehduong/onediffusion Authors࿱…...
SpringCloud和Nacos的基础知识和使用
1.什么是SpringCloud 什么是微服务? 假如我们需要搭建一个网上购物系统,那么我们需要哪些功能呢?商品中心、订单中心和客户中心等。 当业务功能较少时,我们可以把这些功能塞到一个SpringBoot项目中来进行管理。但是随…...
人工智能技术的深度解析与推广【人工智能的应用场景】
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默, 忍不住分享一下给大家。点击跳转到网站 学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……) 2、学会Oracle数据库入门到入土用法(创作中……) 3、手把…...
md5sum -c
md5sum -c xxx 命令用于验证文件的 MD5 校验和是否匹配。具体来说,-c 选项告诉 md5sum 命令去读取指定文件(通常是一个包含 MD5 校验和的文件),并与实际文件的 MD5 校验和进行比较。 工作原理: 生成校验和文件&#x…...
excel使用笔记
1.工作表1计算工作表2某列的和 假设我们有两个工作表,分别命名为“Sheet1”和“Sheet2”,我们想要求和这两个工作表中A1到A**单元格的数据,可以在任意一个工作表的单元格中输入以下公式: SUM(Sheet1!A1:A10, Sheet2!A1:A10) SUM…...
keepalived+nginx实现web高可用
目录 高可用集群搭建 Keepalived+nginx实现web高可用 一.节点规划 二.基础准备 1.修改主机名 2.关闭防火墙和selinux服务 三.用keepalived配置高可用 1.安装nginx服务 2.修改nginx配置文件 3.启动nginx 4.访问nginx 5.安装keepalived服务 6.编辑配置文件…...
边界层气象:脉动量预报方程展开 | 湍流脉动速度方差预报方程 | 平均湍流动能收支方程推导
写成分量形式 原始式子: ∂ u i ′ ∂ t u ‾ j ∂ u i ′ ∂ x j u j ′ ∂ u ‾ i ∂ x j u j ′ ∂ u i ′ ∂ x j − 1 ρ ‾ ⋅ ∂ p ′ ∂ x i g θ v ′ θ ‾ v δ i 3 f ϵ i j 3 u j ′ v ∂ 2 u i ′ ∂ x j 2 ∂ ( u i ′ u j ′ ‾ ) ∂ x j…...
TOSUN同星TsMaster使用入门——2、使用TS发送报文,使用graphics分析数据等
在第一章里面已经介绍了关于同星工程的创建和最基础的总线分析,接下来看看怎么使用TS发送报文以及图形化分析数据。 目录 一、使用Graphics分析报文信号/变量(对标CANoe Graphics) 二、使用数值窗口统计信号值/变量 三、使用TS发送报文 3…...
【操作系统】实验七:显示进程列表
实验7 显示进程列表 练习目的:编写一个模块,将它作为Linux内核空间的扩展来执行,并报告模块加载时内核的当前进程信息,进一步了解用户空间和内核空间的概念。 7.1 进程 进程是任何多道程序设计的操作系统中的基本概念。为了管理…...
day10 电商系统后台API——接口测试(使用postman)
【没有所谓的运气🍬,只有绝对的努力✊】 目录 实战项目简介: 1、用户管理(8个) 1.1 登录 1.2 获取用户数据列表 1.3 创建用户 1.4 修改用户状态 1.5 根据id查询用户 1.6 修改用户信息 1.7 删除单个用户 1.8 …...
JavaScript ES6+ 语法速通
一、ES6 基础语法 1. let 和 const 声明变量 let:块级作用域,可以重新赋值。const:块级作用域,声明常量,不能重新赋值。 let name Li Hua; name Li Ming; // 可修改const age 21; // age 22; // 报错࿰…...
移动端h5自适应rem适配最佳方案
网页开发中,我们常用的单位有如下几个: px:像素固定,无法适配各分辨率的移动设备em: 该单位受父容器影响,大小为父元素的倍数rem: 因为html根元素大小为16px,所以默认 1rem 16px,rem只受根元素…...
2024年使用 Cython 加速 Python 的一些简单步骤
文章结尾有最新热度的文章,感兴趣的可以去看看。 本文是经过严格查阅相关权威文献和资料,形成的专业的可靠的内容。全文数据都有据可依,可回溯。特别申明:数据和资料已获得授权。本文内容,不涉及任何偏颇观点,用中立态度客观事实描述事情本身 文章有点长,期望您能坚持看…...
EasyExcel设置表头上面的那种大标题(前端传递来的大标题)
1、首先得先引用easyExcel的版本依赖,我那 <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>2.2.6</version> </dependency> 2、然后得弄直接的实体类,&…...
【Linux网络编程】第十弹---打造初级网络计算器:从协议设计到服务实现
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【Linux网络编程】 目录 1、Protocol.hpp 1.1、Request类 1.1.1、基本结构 1.1.2、构造析构函数 1.1.3、序列化函数 1.1.4、反…...
无限弹窗?无限重启?
Windows开机自启目录: "%USERPROFILE%\AppData\Roaming\Microsoft\windows\StartMenu\Programs\Startup" 基于这个和 start 命令, shutdown 命令, 编写 bat 病毒程序。 无限弹窗 echo start cmd > hack.txt echo %0 >>…...
深入详解人工智能机器学习常见算法中的K-means聚类
目录 引言 1. K-means聚类的基本概念 1.1 K-means聚类的定义 1.2 K-means聚类的核心思想 1.3 K-means聚类的目标函数 2. K-means聚类的核心原理 2.1 初始化 2.2 分配 2.3 更新 2.4 迭代 3. K-means聚类的具体实现 3.1 K-means聚类的算法流程 3.2 K-means聚类的Pyt…...
lc146LRU缓存——模仿LinkedHashMap
146. LRU 缓存 - 力扣(LeetCode) 法1: 调用java现有的LinkedHashMap的方法,但不太理解反正都不需要扩容,super(capacity, 1F, true);不行吗,干嘛还弄个装载因子0.75还中途扩容一次浪费时间。 class LRUC…...
全面深入解析:C语言动态库
引言 动态库(Dynamic Library)是现代软件开发中不可或缺的一部分,它们不仅提高了代码的重用性和维护性,还显著提升了系统的性能和资源利用率。本文将全面探讨C语言中的动态库,从基础概念到高级应用,通过丰…...
运用 SSM 实现垃圾分类系统智能化升级
目 录 摘 要 1 前 言 3 第1章 概述 4 1.1 研究背景 4 1.2 研究目的 4 1.3 研究内容 4 第二章 开发技术介绍 5 2.1Java技术 6 2.2 Mysql数据库 6 2.3 B/S结构 7 2.4 SSM框架 8 第三章 系统分析 9 3.1 可行性分析 9 3.1.1 技术可行性 9 3.1.2 经济可行性 10 3.1.3 操作可行性 10 …...
C++实现分布式网络通信框架RPC(3)--rpc调用端
目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...
工程地质软件市场:发展现状、趋势与策略建议
一、引言 在工程建设领域,准确把握地质条件是确保项目顺利推进和安全运营的关键。工程地质软件作为处理、分析、模拟和展示工程地质数据的重要工具,正发挥着日益重要的作用。它凭借强大的数据处理能力、三维建模功能、空间分析工具和可视化展示手段&…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
算术操作符与类型转换:从基础到精通
目录 前言:从基础到实践——探索运算符与类型转换的奥秘 算术操作符超级详解 算术操作符:、-、*、/、% 赋值操作符:和复合赋值 单⽬操作符:、--、、- 前言:从基础到实践——探索运算符与类型转换的奥秘 在先前的文…...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
Mysql故障排插与环境优化
前置知识点 最上层是一些客户端和连接服务,包含本 sock 通信和大多数jiyukehuduan/服务端工具实现的TCP/IP通信。主要完成一些简介处理、授权认证、及相关的安全方案等。在该层上引入了线程池的概念,为通过安全认证接入的客户端提供线程。同样在该层上可…...
