序 新春将至,一年一度的美团技术年货也如约到来! 时间煮雨,岁月缝花,花开无声,花谢无语。2022这一年,我们一起经历了无数的悲喜,也留下了满满的回忆。 也许生活就是这样,只有历尽波澜,才能欣赏茫茫大海的辽阔和无边,才能感受到漫天星辰的光芒和温暖。 在2023年春节到来之际,我们从去年美团技术团队公众号上精选了60多篇技术文章,整理制作成一本1300多页的电子书,作为新年礼物赠送给大家。 这本电子书内容覆盖算法、前端、后端、数据、安全等多个技术领域,希望能对同学们的工作和学习有所帮助。 也欢迎大家转给更多有相同兴趣、积极上进的同事和朋友们,一起切磋,共同成长。 祝愿2023年,大家诸事顺遂,健康平安。 目录 算法1 YOLOv6:又快又准的目标检测框架开源啦1 目标检测开源框架YOLOv6全面升级,更快更准的2.0版本来啦13 通用目标检测开源框架YOLOv6在美团的量化部署实战17 7次KDDCup&Kaggle冠军的经验分享:从多领域优化到AutoML框架37 图神经网络训练框架的实践和探索66 图技术在美团外卖下的场景化应用及探索83 大规模异构图召回在美团到店推荐广告的应用102 美团搜索粗排优化的探索与实践116 美团外卖推荐情境化智能流量分发的实践与探索129 大众点评搜索相关性技术探索与实践152 美团SemEval2022结构化情感分析跨语言赛道冠军方法总结174 检索式对话系统在美团客服场景的探索与实践188 端智能在大众点评搜索重排序的应用实践216 对话摘要技术在美团的探索(SIGIR)238 异构广告混排在美团到店业务的探索与实践258 短视频内容理解与生成技术在美团的创新实践271 美团搜索中查询改写技术的探索与实践297 美团内部讲座|清华大学崔鹏:因果启发的学习、推断和决策325 NeurIPS2021|Twins:重新思考高效的视觉注意力模型设计339 美团获得小样本学习榜单FewCLUE第一!PromptLearning+自训练实战353 DSTC10开放领域对话评估比赛冠军方法总结368 KDD2022|美团技术团队精选论文解读382 ACMSIGIR2022|美团技术团队精选论文解读391 CVPR2022|美团技术团队精选论文解读404 ACMMM&ECCV2022|美团视觉8篇论文揭秘内容领域的智能科技413 前端427 知识图谱可视化技术在美团的实践与探索427 终端新玩法:技术栈无关的剧本式引导459 自动化测试在美团外卖的实践与落地483 深入理解函数式编程(上)512 深入理解函数式编程(下)541 Android对so体积优化的探索与实践568 从0到1:美团端侧CDN容灾解决方案589 美团高性能终端实时日志系统建设实践608 后端622 可视化全链路日志追踪622 设计模式二三事647 基于代价的慢查询优化建议670 Java系列|远程热部署在美团的落地实践692 日志导致线程Block的这些坑,你不得不防713 基于AI算法的数据库异常监测系统的设计与实现775 目录 <v Replication(上):常见复制模型&分布式系统挑战 792 Replication(下):事务,一致性与共识 818 TensorFlow在美团外卖推荐场景的GPU训练优化实践 855 CompletableFuture原理与实践-外卖商家端API的异步化 879 工程效能CI/CD之流水线引擎的建设实践 912 美团外卖搜索基于Elasticsearch的优化实践 933 美团图灵机器学习平台性能起飞的秘密(一) 953 提升资源利用率与保障服务质量,鱼与熊掌不可兼得? 971 标准化思想及组装式架构在后端BFF中的实践 992 外卖广告大规模深度学习模型工程实践|美团外卖广告工程实践专题连载 1013 数据库全量SQL分析与审计系统性能优化之旅 1048 数据库异常智能分析与诊断 1059 美团外卖广告智能算力的探索与实践(二) 1079 Linux下跨语言调用C++实践 1101 GPU在外卖场景精排模型预估中的应用实践 1130 美团集群调度系统的云原生实践 1149 广告平台化的探索与实践|美团外卖广告工程实践专题连载 1161 数据1193 Kafka在美团数据平台的实践1193 美团综合业务推荐系统的质量模型及实践1218 业务数据治理体系化思考与实践1233 数据治理一体化实践之体系化建模1263 运维/安全1277 数字化新业态下数据安全创新——Token化1277 Linux中基于eBPF的恶意利用与检测机制1293 如何应对开源组件风险?软件成分安全分析(SCA)能力的建设与演进1328 算法 YOLOv6:又快又准的目标检测框架开源啦 作者:楚怡凯衡等 1.概述 YOLOv6是美团视觉智能部研发的一款目标检测框架,致力于工业应用。本框架同时专注于检测的精度和推理效率,在工业界常用的尺寸模型中:YOLOv6-nano在COCO上精度可达35.0%AP,在T4上推理速度可达1242FPS;YOLOv6-s在COCO上精度可达43.1%AP,在T4上推理速度可达520FPS。在部署方面,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所示: 图1-1YOLOv6各尺寸模型与其他模型性能对比 图1-2YOLOv6与其他模型在不同分辨率下性能对比 图1-1展示了不同尺寸网络下各检测算法的性能对比,曲线上的点分别表示该检测算法在不同尺寸网络下(s/tiny/nano)的模型性能,从图中可以看到,YOLOv6在精度和速度方面均超越其他YOLO系列同体量算法。 图1-2展示了输入分辨率变化时各检测网络模型的性能对比,曲线上的点从左往右分别表示图像分辨率依次增大时(384/448/512/576/640)该模型的性能,从图中可以看到,YOLOv6在不同分辨率下,仍然保持较大的性能优势。 2.YOLOv6关键技术介绍 YOLOv6主要在BackBone、Neck、Head以及训练策略等方面进行了诸多的改进: ●我们统一设计了更高效的Backbone和Neck:受到硬件感知神经网络设计思想的启发,基于RepVGGstyle[4]设计了可重参数化、更高效的骨干网络EfficientRepBackbone和Rep-PANNeck。 ●优化设计了更简洁有效的EfficientDecoupledHead,在维持精度的同时,进一步降低了一般解耦头带来的额外延时开销。 ●在训练策略上,我们采用Anchor-free无锚范式,同时辅以SimOTA[2]标签分配策略以及SIoU[9]边界框回归损失来进一步提高检测精度。 2.1Hardware-friendly的骨干网络设计 YOLOv5/YOLOX使用的Backbone和Neck都基于CSPNet[5]搭建,采用了多分支的方式和残差结构。对于GPU等硬件来说,这种结构会一定程度上增加延时,同时减小内存带宽利用率。下图2为计算机体系结构领域中的RooflineModel[8]介绍图,显示了硬件中计算能力和内存带宽之间的关联关系。 图2RooflineModel介绍图 于是,我们基于硬件感知神经网络设计的思想,对Backbone和Neck进行了重新设计和优化。该思想基于硬件的特性、推理框架/编译框架的特点,以硬件和编译友好的结构作为设计原则,在网络构建时,综合考虑硬件计算能力、内存带宽、编译优化特性、网络表征能力等,进而获得又快又好的网络结构。对上述重新设计的两个检测部件,我们在YOLOv6中分别称为EfficientRepBackbone和Rep-PANNeck,其主要贡献点在于: ●引入了RepVGG[4]style结构。 ●基于硬件感知思想重新设计了Backbone和Neck。 RepVGG[4]Style结构是一种在训练时具有多分支拓扑,而在实际部署时可以等效融合为单个3x3卷积的一种可重参数化的结构(融合过程如下图3所示)。通过融合成的3x3卷积结构,可以有效利用计算密集型硬件计算能力(比如GPU),同时也可获得GPU/CPU上已经高度优化的NVIDIAcuDNN和IntelMKL编译框架的帮助。 实验表明,通过上述策略,YOLOv6减少了在硬件上的延时,并显著提升了算法的精度,让检测网络更快更强。以nano尺寸模型为例,对比YOLOv5-nano采用的网络结构,本方法在速度上提升了21%,同时精度提升3.6%AP。 图3Rep算子的融合过程[4] EfficientRepBackbone:在Backbone设计方面,我们基于以上Rep算子设计了一个高效的Backbone。相比于YOLOv5采用的CSP-Backbone,该Backbone能够高效利用硬件(如GPU)算力的同时,还具有较强的表征能力。 下图4为EfficientRepBackbone具体设计结构图,我们将Backbone中stride=2的普通Conv层替换成了stride=2的RepConv层。同时,将原始的CSP-Block 都重新设计为RepBlock,其中RepBlock的第一个RepConv会做channel维度的变换和对齐。另外,我们还将原始的SPPF优化设计为更加高效的SimSPPF。 图4EfficientRepBackbone结构图 Rep-PAN:在Neck设计方面,为了让其在硬件上推理更加高效,以达到更好的精度与速度的平衡,我们基于硬件感知神经网络设计思想,为YOLOv6设计了一个更有效的特征融合网络结构。 Rep-PAN基于PAN[6]拓扑方式,用RepBlock替换了YOLOv5中使用的CSP-Block,同时对整体Neck中的算子进行了调整,目的是在硬件上达到高效推理的同时,保持较好的多尺度特征融合能力(Rep-PAN结构图如下图5所示)。 图5Rep-PAN结构图 2.2更简洁高效的DecoupledHead 在YOLOv6中,我们采用了解耦检测头(DecoupledHead)结构,并对其进行了精简设计。原始YOLOv5的检测头是通过分类和回归分支融合共享的方式来实现的,而YOLOX的检测头则是将分类和回归分支进行解耦,同时新增了两个额外的3x3的卷积层,虽然提升了检测精度,但一定程度上增加了网络延时。 因此,我们对解耦头进行了精简设计,同时综合考虑到相关算子表征能力和硬件上计算开销这两者的平衡,采用HybridChannels策略重新设计了一个更高效的解耦头结构,在维持精度的同时降低了延时,缓解了解耦头中3x3卷积带来的额外延时开销。通过在nano尺寸模型上进行消融实验,对比相同通道数的解耦头结构,精度提升0.2%AP的同时,速度提升6.8%。 图6EfficientDecoupledHead结构图 2.3更有效的训练策略 为了进一步提升检测精度,我们吸收借