新春将至,一年一度的美团技术年货也如约到来!时间煮雨,岁月缝花,花开无声,花谢无语。2022这一年,我们一起经 历了无数的悲喜,也留下了满满的回忆。也许生活就是这样,只有历尽波澜,才能欣赏茫茫大海的辽阔和无边, 才能感受到漫天星辰的光芒和温暖。在2023年春节到来之际,我们从去年美团技术团队公众号上精选了60多篇技术文章,整理制作成一本1300多页的电子书,作为新年礼物赠送给大家。这本电子书内容覆盖算法、前端、后端、数据、安全等多个技术领域, 希望能对同学们的工作和学习有所帮助。也欢迎大家转给更多有相同兴趣、积极上进的同事和朋友们,一起切磋,共同成长。祝愿2023年,大家诸事顺遂,健康平安。序 算法 1yolov6:又快又准的目标检测框架开源啦 1目标检测开源框架 yolov6 全面升级,更快更准的 2.0 版本来啦 13通用目标检测开源框架 yolov6 在美团的量化部署实战 177 次 kdd cup&kaggle 冠军的经验分享:从多领域优化到 automl 框架 37图神经网络训练框架的实践和探索 66图技术在美团外卖下的场景化应用及探索 83大规模异构图召回在美团到店推荐广告的应用 102美团搜索粗排优化的探索与实践 116美团外卖推荐情境化智能流量分发的实践与探索 129大众点评搜索相关性技术探索与实践 152美团 semeval2022 结构化情感分析跨语言赛道冠军方法总结 174检索式对话系统在美团客服场景的探索与实践 188端智能在大众点评搜索重排序的应用实践 216对话摘要技术在美团的探索(sigir) 238异构广告混排在美团到店业务的探索与实践 258短视频内容理解与生成技术在美团的创新实践 271美团搜索中查询改写技术的探索与实践 297美团内部讲座 | 清华大学崔鹏:因果启发的学习、推断和决策 325neurips 2021 | twins:重新思考高效的视觉注意力模型设计 339目录 iv > 2022年美团技术年货美团获得小样本学习榜单 fewclue 第一! prompt learning 自训练实战 353dstc10 开放领域对话评估比赛冠军方法总结 368kdd 2022 | 美团技术团队精选论文解读 382acm sigir 2022 | 美团技术团队精选论文解读 391cvpr 2022 | 美团技术团队精选论文解读 404acm mm & eccv 2022 | 美团视觉 8 篇论文揭秘内容领域的智能科技 413前端 427知识图谱可视化技术在美团的实践与探索 427终端新玩法:技术栈无关的剧本式引导 459自动化测试在美团外卖的实践与落地 483深入理解函数式编程(上) 512深入理解函数式编程(下) 541android 对 so 体积优化的探索与实践 568从 0 到 1:美团端侧 cdn 容灾尊龙凯时人生就博的解决方案 589美团高性能终端实时日志系统建设实践 608后端 622可视化全链路日志追踪 622设计模式二三事 647基于代价的慢查询优化建议 670java 系列 | 远程热部署在美团的落地实践 692日志导致线程 block 的这些坑,你不得不防 713基于 ai 算法的数据库异常监测系统的设计与实现 775 目录 < vreplication(上):常见复制模型 & 分布式系统挑战 792replication(下):事务,一致性与共识 818tensorflow 在美团外卖推荐场景的 gpu 训练优化实践 855completablefuture 原理与实践 - 外卖商家端 api 的异步化 879工程效能 ci/cd 之流水线引擎的建设实践 912美团外卖搜索基于 elasticsearch 的优化实践 933美团图灵机器学习平台性能起飞的秘密(一) 953提升资源利用率与保障服务质量,鱼与熊掌不可兼得? 971标准化思想及组装式架构在后端 bff 中的实践 992外卖广告大规模深度学习模型工程实践 | 美团外卖广告工程实践专题连载 1013数据库全量 sql 分析与审计系统性能优化之旅 1048数据库异常智能分析与诊断 1059美团外卖广告智能算力的探索与实践(二) 1079linux 下跨语言调用 c 实践 1101gpu 在外卖场景精排模型预估中的应用实践 1130美团集群调度系统的云原生实践 1149广告平台化的探索与实践 | 美团外卖广告工程实践专题连载 1161数据 1193kafka 在美团数据平台的实践 1193美团综合业务推荐系统的质量模型及实践 1218业务数据治理体系化思考与实践 1233数据治理一体化实践之体系化建模 1263 vi > 2022年美团技术年货运维 / 安全 1277数字化新业态下数据安全创新——token 化 1277linux 中基于 ebpf 的恶意利用与检测机制 1293如何应对开源组件风险?软件成分安全分析(sca)能力的建设与演进 1328 算法 < 1yolov6:又快又准的目标检测框架开源啦作者:楚怡 凯衡 等1. 概述yolov6 是美团视觉智能部研发的一款目标检测框架,致力于工业应用。本框架同时专注于检测的精度和推理效率,在工业界常用的尺寸模型中:yolov6-nano 在 coco 上精度可达 35.0% ap,在 t4 上推理速度可达 1242 fps;yolov6-s 在 coco 上精度可达 43.1% ap,在 t4 上推理速度可达 520 fps。在部署方面,yolov6 支 持 gpu(tensorrt)、cpu(openvino)、arm(mnn、tnn、ncnn)等不同平台的部署,极大地简化工程部署时的适配工作。目前,项目已开源至 github,传送门:yolov6。欢迎有需要的小伙伴们 star 收藏,随时取用。精度与速度远超 yolov5 和 yolox 的新框架目标检测作为计算机视觉领域的一项基础性技术,在工业界得到了广泛的应用,其中 yolo 系列算法因其较好的综合性能,逐渐成为大多数工业应用时的首选框架。至今,业界已衍生出许多 yolo 检测框架,其中以 yolov5[1]、yolox[2] 和 pp-yoloe[3] 最具代表性,但在实际使用中,我们发现上述框架在速度和精度方面仍有很大的提升的空间。基于此,我们通过研究并借鉴了业界已有的先进技术,开发了一套新的目标检测框架——yolov6。该框架支持模型训练、推理及多平台部署等全链条的工业应用需求,并在网络结构、训练策略等算法层面进行了多项改进和优化,在 coco 数据集上,yolov6 在精度和速度方面均超越其他同体量算法,相关结果如下图 1 所示:算法 2 > 2022年美团技术年货图 1-1 yolov6 各尺寸模型与其他模型性能对比图 1-2 yolov6 与其他模型在不同分辨率下性能对比 算法 < 3图 1-1 展示了不同尺寸网络下各检测算法的性能对比,曲线上的点分别表示该检测算法在不同尺寸网络下(s/tiny/nano)的模型性能,从图中可以看到,yolov6 在精度和速度方面均超越其他 yolo 系列同体量算法。图 1-2 展示了输入分辨率变化时各检测网络模型的性能对比,曲线上的点从左往右分别表示图像分辨率依次增大时(384/448/512/576/640)该模型的性能,从图中可以看到,yolov6 在不同分辨率下,仍然保持较大的性能优势。2. yolov6 关键技术介绍yolov6 主要在 backbone、neck、head 以及训练策略等方面进行了诸多的改进: ●我们统一设计了更高效的 backbone 和 neck :受到硬件感知神经网络设计思想的启发,基于 repvgg style[4] 设计了可重参数化、更高效的骨干网络 efficientrep backbone 和 rep-pan neck。 ●优化设计了更简洁有效的 efficient decoupled head,在维持精度的同时,进一步降低了一般解耦头带来的额外延时开销。 ●在训练策略上,我们采用 anchor-free 无锚范式,同时辅以 simota[2] 标签分配策略以及 siou[9] 边界框回归损失来进一步提高检测精度。2.1 hardware-friendly 的骨干网络设计yolov5/yolox 使用的 backbone 和 neck 都基于 cspnet[5] 搭建,采用了多分支的方式和残差结构。对于 gpu 等硬件来说,这种结构会一定程度上增加延时,同时减小内存带宽利用率。下图 2 为计算机体系结构领域中的 roofline model[8] 介绍图,显示了硬件中计算能力和内存带宽之间的关联关系。 4 > 2022年美团技术年货图2 roofline model 介绍图于是,我们基于硬件感知神经网络设计的思想,对 backbone 和 neck 进行了重新设计和优化。该思想基于硬件的特性、推理框架 / 编译框架的特点,以硬件和编译友好的结构作为设计原则,在网络构建时,综合考虑硬件计算能力、内存带宽、编译优化特性、网络表征能力等,进而获得又快又好的网络结构。对上述重新设计的两个检测部件,我们在 yolov6 中分别称为 efficientrep backbone 和 rep-pan neck,其主要贡献点在于: ●引入了 repvgg[4] style 结构。 ●基于硬件感知思想重新设计了 backbone 和 neck。repvgg[4] style 结构是一种在训练时具有多分支拓扑,而在实际部署时可以等效融合为单个 3x3 卷积的一种可重参数化的结构(融合过程如下图 3 所示)。通过融合成的 3x3 卷积结构,可以有效利用计算密集型硬件计算能力(比如 gpu),同时也可获得 gpu/cpu 上已经高度优化的 nvidia cudnn 和 intel mkl 编译框架的帮助。 算法 < 5实验表明,通过上述策略,yolov6 减少了在硬件上的延时,并显著提升了算法的精度,让检测网络更快更强。以 nano 尺寸模型为例,对比 yolov5-nano 采用的网络结构,本方法在速度上提升了 21%,同时精度提升 3.6% ap。图3 rep 算子的融合过程[4]efficientrep backbone:在 backbone 设计方面,我们基于以上 rep 算子设计了一个高效的 backbone。相比于 yolov5 采用的 csp-backbone,该 backbone 能够高效利用硬件(如 gpu)算力的同时,还具有较强的表征能力。下图 4 为 efficientrep backbone 具体设计结构图,我们将 backbone 中 stride=2 的普通 conv 层替换成了 stride=2 的 repconv 层。同时,将原始的 csp-block 6 > 2022年美团技术年货都重新设计为 repblock,其中 repblock 的第一个 repconv 会做 channel 维度的变换和对齐。另外,我们还将原始的 sppf 优化设计为更加高效的 simsppf。图4 efficientrep backbone 结构图rep-pan:在 neck 设计方面,为了让其在硬件上推理更加高效,以达到更好的精度与速度的平衡,我们基于硬件感知神经网络设计思想,为 yolov6 设计了一个更有效的特征融合网络结构。rep-pan 基于 pan[6] 拓扑方式,用 repblock 替换了 yolov5 中使用的 csp-block,同时对整体 neck 中的算子进行了调整,目的是在硬件上达到高效推理的同时,保持较好的多尺度特征融合能力(rep-pan 结构图如下图 5 所示)。 算法 < 7图 5 rep-pan 结构图2.2 更简洁高效的 decoupled head在 yolov6 中,我们采用了解耦检测头(decoupled head)结构,并对其进行了精简设计。原始 yolov5 的检测