2022年美团技术年货 合辑
与其他模型在不同分辨率下性能对比 算法 < 3 图 1-1 展示了不同尺寸网络下各检测算法的性能对比,曲线上的点分别表示该检测 算法在不同尺寸网络下(s/tiny/nano)的模型性能,从图中可以看到,YOLOv6 在精 度和速度方面均超越其他 YOLO 系列同体量算法。 图 1-2 展示了输入分辨率变化时各检测网络模型的性能对比,曲线上的点从左往右 分别表示图像分辨率依次增大时(384 分别表示图像分辨率依次增大时(384/448/512/576/640)该模型的性能,从图中可 以看到,YOLOv6 在不同分辨率下,仍然保持较大的性能优势。 2. YOLOv6 关键技术介绍 YOLOv6 主要在 BackBone、Neck、Head 以及训练策略等方面进行了诸多的 改进: ● 我们统一设计了更高效的 Backbone 和 Neck :受到硬件感知神经网络设计 思想的启发,基于 RepVGG style[4] 网络,如何使用 QAT 来恢复量化模型精 度,我们一直存有困扰。如下图 4(左)所示,如果对重参数化操作之前的多分支网 络进行 QAT,对每个分支分别添加伪量化算子进行量化感知训练,由于每个分支的 量化参数不同,导致多分支结构无法等效融合进行高性能部署;如果对重参数化操作 之后的单分支网络进行 QAT, 由于网络中不再有 BN 层,使用 QAT 方法进行微调并 不容易恢复到浮点精度。而对于 RepOpt0 码力 | 1356 页 | 45.90 MB | 1 年前3美团点评2018技术年货
遇到的问题和挑战,同时本文也提供我们的解决思路:通过数据JSON化,运营流程化,接口SDK化分别 解决了运营平台的灵活性、高效性和稳定性。APPKIT帮助产品、运营和研发提升C端的开发和运营效 率,加速产品的迭代进程。 APPKIT打造稳定、灵活、高效的运营配置平台 - 美团技术团队 目前基于APPKIT的平台化特性,对App的模块化配置、 Picasso 的JS的管理、ABTest、个人中心入口 根 据服务所在机器内存与服务本身内存占用来确定,确保增加LruCache后,服务本身内存占用在安全范围 内;同时可以根据查询操作统计缓存数据在实际使用中的命中率。 下图是增加LruCache结构前后,且增加LruCache后命中率高于95%的情况下,针对持续增长的QPS得 出的数据获取平均耗时(ms)对比图: 引入LruCache前后平均耗时 根据平均耗时图显示可以得出结论: 1. 使用的需求。 2. 增加LruCache结构后,耗时下降一个量级。从平均耗时角度看,QPS不高于500的情况下,耗时低于2ms。 下图是增加LruCache结构前后,且增加LruCache后命中率高于95%的情况下,针对持续增长的QPS得 出的数据获取Top999耗时(ms)对比图: LruCache在美团DSP系统中的应用演进 - 美团技术团队 引入LruCache前后TP999耗时0 码力 | 229 页 | 61.61 MB | 1 年前3Nacos架构&原理
Nacos 架构 这种机制保证了 Distro 协议可以作为⼀种 AP 协议,对于读操作都进行及时的响应。在网络分区 的情况下,对于所有的读操作也能够正常返回;当网络恢复时,各个 Distro 节点会把各数据分片的 数据进行合并恢复。 小结 Distro 协议是 Nacos 对于临时实例数据开发的⼀致性协议。其数据存储在缓存中,并且会在启动 时进行全量数据同步,并定期进行数据校验。 在 Distro 网络短暂不可用: 客户端需要能接受短暂网络抖动,需要⼀定重试机制,防止集群抖动,超过 阈值后需要自动切换 server,但要防止请求风暴。 断网演练:断网场景下,以合理的频率进行重试,断网结束时可以快速重连恢复。 49 > Nacos 架构 5. 安全性 支持基础的鉴权,数据加密能力。 6. 低成本多语⾔实现 在客户端层面要尽可能多的支持多语言,至少要支持⼀个 Java 服务端连接通道,可以使用多个主 写的协议不做改造是无法支持的,这意味着 Zookeeper 不能在 没有人工干预的情况下做到双机房容灾。在单机房断网情况下,使机房内服务可用并不难,难的是 如何在断网恢复后做数据聚合,Zookeeper 的单点写模式就会有断网恢复后的数据对账问题。Eure ka 的部署模式天然支持多机房容灾,因为 Eureka 采用的是纯临时实例的注册模式:不持久化、所 有数据都可以通过客户端心跳上报进行补0 码力 | 326 页 | 12.83 MB | 9 月前3Hello 算法 1.1.0 C++ 版
评论区示例 0.2.5 算法学习路线 从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段。 1. 阶段一:算法入门。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效 率等方面的内容。 2. 阶段二:刷算法题。建议从热门题目开刷,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题 时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按照“艾宾浩斯遗忘曲线”来 所示,迭代和递归在实现、性能和适用性上有所不同。 表 2‑1 迭代与递归特点对比 第 2 章 复杂度分析 hello‑algo.com 27 迭代 递归 实现方 式 循环结构 函数调用自身 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 2. 归:当函数完成执行并返回时,对应的栈帧会被从“调用栈”上移除,恢复之前函数的执行环境。 因此,我们可以使用一个显式的栈来模拟调用栈的行为,从而将递归转化为迭代形式: // === File: recursion.cpp === /* 使用迭代模拟递归 */0 码力 | 379 页 | 18.47 MB | 1 年前3Hello 算法 1.1.0 C#版
评论区示例 0.2.5 算法学习路线 从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段。 1. 阶段一:算法入门。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效 率等方面的内容。 2. 阶段二:刷算法题。建议从热门题目开刷,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题 时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按照“艾宾浩斯遗忘曲线”来 所示,迭代和递归在实现、性能和适用性上有所不同。 表 2‑1 迭代与递归特点对比 第 2 章 复杂度分析 hello‑algo.com 27 迭代 递归 实现方 式 循环结构 函数调用自身 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 2. 归:当函数完成执行并返回时,对应的栈帧会被从“调用栈”上移除,恢复之前函数的执行环境。 因此,我们可以使用一个显式的栈来模拟调用栈的行为,从而将递归转化为迭代形式: // === File: recursion.cs === /* 使用迭代模拟递归 */ int0 码力 | 378 页 | 18.47 MB | 1 年前3Hello 算法 1.1.0 Go版
评论区示例 0.2.5 算法学习路线 从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段。 1. 阶段一:算法入门。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效 率等方面的内容。 2. 阶段二:刷算法题。建议从热门题目开刷,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题 时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按照“艾宾浩斯遗忘曲线”来 所示,迭代和递归在实现、性能和适用性上有所不同。 表 2‑1 迭代与递归特点对比 第 2 章 复杂度分析 hello‑algo.com 27 迭代 递归 实现方 式 循环结构 函数调用自身 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 2. 归:当函数完成执行并返回时,对应的栈帧会被从“调用栈”上移除,恢复之前函数的执行环境。 因此,我们可以使用一个显式的栈来模拟调用栈的行为,从而将递归转化为迭代形式: // === File: recursion.go === /* 使用迭代模拟递归 */ func0 码力 | 383 页 | 18.48 MB | 1 年前3Hello 算法 1.1.0 Java版
评论区示例 0.2.5 算法学习路线 从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段。 1. 阶段一:算法入门。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效 率等方面的内容。 2. 阶段二:刷算法题。建议从热门题目开刷,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题 时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按照“艾宾浩斯遗忘曲线”来 所示,迭代和递归在实现、性能和适用性上有所不同。 表 2‑1 迭代与递归特点对比 第 2 章 复杂度分析 hello‑algo.com 27 迭代 递归 实现方 式 循环结构 函数调用自身 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 2. 归:当函数完成执行并返回时,对应的栈帧会被从“调用栈”上移除,恢复之前函数的执行环境。 因此,我们可以使用一个显式的栈来模拟调用栈的行为,从而将递归转化为迭代形式: // === File: recursion.java === /* 使用迭代模拟递归 */0 码力 | 378 页 | 18.47 MB | 1 年前3Hello 算法 1.1.0 Kotlin版
评论区示例 0.2.5 算法学习路线 从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段。 1. 阶段一:算法入门。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效 率等方面的内容。 2. 阶段二:刷算法题。建议从热门题目开刷,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题 时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按照“艾宾浩斯遗忘曲线”来 所示,迭代和递归在实现、性能和适用性上有所不同。 表 2‑1 迭代与递归特点对比 第 2 章 复杂度分析 hello‑algo.com 27 迭代 递归 实现方 式 循环结构 函数调用自身 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 2. 归:当函数完成执行并返回时,对应的栈帧会被从“调用栈”上移除,恢复之前函数的执行环境。 因此,我们可以使用一个显式的栈来模拟调用栈的行为,从而将递归转化为迭代形式: // === File: recursion.kt === /* 使用迭代模拟递归 */ fun0 码力 | 381 页 | 18.47 MB | 1 年前3Hello 算法 1.1.0 Python版
评论区示例 0.2.5 算法学习路线 从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段。 1. 阶段一:算法入门。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效 率等方面的内容。 2. 阶段二:刷算法题。建议从热门题目开刷,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题 时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按照“艾宾浩斯遗忘曲线”来 所示,迭代和递归在实现、性能和适用性上有所不同。 表 2‑1 迭代与递归特点对比 迭代 递归 实现方 式 循环结构 函数调用自身 第 2 章 复杂度分析 hello‑algo.com 27 迭代 递归 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 2. 归:当函数完成执行并返回时,对应的栈帧会被从“调用栈”上移除,恢复之前函数的执行环境。 因此,我们可以使用一个显式的栈来模拟调用栈的行为,从而将递归转化为迭代形式: # === File: recursion.py === def for_loop_recur(n:0 码力 | 364 页 | 18.42 MB | 1 年前3Hello 算法 1.1.0 Swift版
评论区示例 0.2.5 算法学习路线 从总体上看,我们可以将学习数据结构与算法的过程划分为三个阶段。 1. 阶段一:算法入门。我们需要熟悉各种数据结构的特点和用法,学习不同算法的原理、流程、用途和效 率等方面的内容。 2. 阶段二:刷算法题。建议从热门题目开刷,先积累至少 100 道题目,熟悉主流的算法问题。初次刷题 时,“知识遗忘”可能是一个挑战,但请放心,这是很正常的。我们可以按照“艾宾浩斯遗忘曲线”来 所示,迭代和递归在实现、性能和适用性上有所不同。 表 2‑1 迭代与递归特点对比 第 2 章 复杂度分析 hello‑algo.com 27 迭代 递归 实现方 式 循环结构 函数调用自身 时间效 率 效率通常较高,无函数调用开销 每次函数调用都会产生开销 内存使 用 通常使用固定大小的内存空间 累积函数调用可能使用大量的栈帧空间 适用问 题 适用于简单循环任务,代码直观、可读性 好 系。 1. 递:当函数被调用时,系统会在“调用栈”上为该函数分配新的栈帧,用于存储函数的局部变量、参数、 返回地址等数据。 2. 归:当函数完成执行并返回时,对应的栈帧会被从“调用栈”上移除,恢复之前函数的执行环境。 因此,我们可以使用一个显式的栈来模拟调用栈的行为,从而将递归转化为迭代形式: // === File: recursion.swift === /* 使用迭代模拟递归 */0 码力 | 379 页 | 18.47 MB | 1 年前3
共 320 条
- 1
- 2
- 3
- 4
- 5
- 6
- 32