惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Engineering at Meta
Engineering at Meta
T
Threatpost
P
Palo Alto Networks Blog
NISL@THU
NISL@THU
O
OpenAI News
Project Zero
Project Zero
G
GRAHAM CLULEY
P
Privacy International News Feed
A
Arctic Wolf
Microsoft Azure Blog
Microsoft Azure Blog
H
Help Net Security
M
MIT News - Artificial intelligence
T
Threat Research - Cisco Blogs
S
Security @ Cisco Blogs
Google DeepMind News
Google DeepMind News
B
Blog RSS Feed
D
Docker
aimingoo的专栏
aimingoo的专栏
博客园 - 【当耐特】
N
Netflix TechBlog - Medium
云风的 BLOG
云风的 BLOG
雷峰网
雷峰网
W
WeLiveSecurity
P
Proofpoint News Feed
腾讯CDC
Cloudbric
Cloudbric
S
Secure Thoughts
C
Check Point Blog
博客园 - Franky
T
The Exploit Database - CXSecurity.com
T
Troy Hunt's Blog
GbyAI
GbyAI
Security Archives - TechRepublic
Security Archives - TechRepublic
Application and Cybersecurity Blog
Application and Cybersecurity Blog
月光博客
月光博客
C
Cyber Attacks, Cyber Crime and Cyber Security
I
Intezer
TaoSecurity Blog
TaoSecurity Blog
L
Lohrmann on Cybersecurity
V
Visual Studio Blog
F
Fortinet All Blogs
博客园 - 叶小钗
C
CXSECURITY Database RSS Feed - CXSecurity.com
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
C
Cisco Blogs
博客园 - 司徒正美
Stack Overflow Blog
Stack Overflow Blog
Y
Y Combinator Blog
Apple Machine Learning Research
Apple Machine Learning Research

美团技术团队

美团 · 技术团队 美团 · 技术团队 美团 · 技术团队 美团 · 技术团队 美团 · 技术团队 美团 · 技术团队 美团发布基于 N-gram 全新模型:嵌入扩展新范式,实现轻量化 MoE 高效进化 2025美团技术年货,「马」上到来 多维创新打造强泛化智能体模型,LongCat-Flash-Thinking-2601技术报告发布 美团 EvoCUA 刷新开源 SOTA,会用电脑还会持续进化的智能体! 美团 LongCat-Flash-Thinking-2601 发布,工具调用能力登顶开源 SOTA! KuiTest:基于大模型通识的 UI 交互遍历测试 AAAI 2026 | 美团技术团队学术论文精选 2025 | 美团技术团队热门技术文章汇总 美团 LongCat-Video-Avatar 正式发布,实现开源 SOTA 级拟真表现 大模型剪枝新范式:先浓缩,再剪枝——DenoiseRotator技术解读 LongCat 上线 AI 生图!精准高效,AI 创作不设限 美团发布 LongCat-Image 图像生成模型,编辑能力登顶开源 SOTA AI Coding与单元测试的协同进化:从验证到驱动 R-HORIZON:探索长程推理边界,复旦NLP&美团LongCat联合提出LRMs能力评测新框架 美团 LongCat 发布 AMO-Bench:突破 AIME 评测饱和困境,重新定义 LLM 数学上限 美团 LongCat Interaction 团队发布大模型交互系统技术报告 WOWService 美团 LongCat 团队发布全模态一站式评测基准 UNO-Bench 美团开源LongCat-Audio-Codec,高效语音编解码器助力实时交互落地 NeurIPS 2025 | 美团技术团队论文精选 LongCat-Flash-Omni正式发布并开源:开启全模态实时交互时代 美团 LongCat 团队发布 VitaBench:基于复杂生活场景的交互式 Agent 评测基准 LongCat-Video 视频生成模型正式发布,探索世界模型的第一步 ICCV 2025 | 美团论文精选及多模态推理竞赛冠军方法分享 从0到1建设美团数据库容量评估系统 可验证过程奖励在提升大模型推理效率中的探索与实践 LongCat-Flash-Thinking 正式发布,更强、更专业,保持极速! 开源 | InfiniteTalk:无限长虚拟人视频生成的新范式 美团正式发布并开源 LongCat-Flash-Chat,动态计算开启高效 AI 时代 美团 M17 团队开源 Meeseeks 评测集:揭秘大模型的“听话”能力 可信实验白皮书系列08:开放式分析引擎 | 附PDF合集 美团智能头盔研发实践系列02:软件功能篇 美团智能头盔研发实践系列01:硬件设计篇 ACL 2025 | 美团技术团队论文精选 美团开源OIBench与CoreCodeBench:揭示大模型编程能力的真实水平 可信实验白皮书系列07:高阶实验工具 开源 | MeiGen-MultiTalk:基于单张照片实现多人互动演绎 可信实验白皮书系列06:观察性研究 JDK高版本特性总结与ZGC实践 可信实验白皮书系列05:准实验 可信实验白皮书系列04:随机轮转实验 可信实验白皮书系列03:随机对照实验 可信实验白皮书系列02:AB实验基础 可信实验白皮书系列01:从0到1的方法论与实践指南 MTGR:美团外卖生成式推荐Scaling Law落地实践 OR算法+ML模型混合推理框架架构演进 ICLR&CVPR 2025美团技术团队论文精选 行为正则化与顺序策略优化结合的离线多智能体学习算法 预测技术在美团弹性伸缩场景的探索与应用 美团技术年货 | 600+页电子书,算法、工程、测试、数据、安全系列大合集 鸿蒙应用签名实操及机制探究 2024 | 美团技术团队热门技术文章汇总 AutoConsis:UI内容一致性智能检测 CIKM 2024 | 美团技术团队精选论文解读 大前端:如何突破动态化容器的天花板? KDD 2024 OAG-Challenge Cup赛道三项冠军技术方案解读 新一代实验分析引擎:驱动履约平台的数据决策 大众点评技术部包揽KDD 2024 OAG-Challenge Cup赛道全部3项冠军 ACL 2024 | 美团技术团队精选论文解读 KDD 2024 | 美团技术团队精选论文解读 基本功 | 一文讲清多线程和多线程同步 小程序可测性能力建设与实践 SIGIR 2024 | 美团技术团队精选论文解读 Spark向量化计算在美团生产环境的实践 CVPR 2024 | 美团技术团队精选论文解读 基于多模态信息抽取的菜品知识图谱构建 DDD在大众点评交易系统演进中的应用 美团外卖基于GPU的向量检索系统实践 美团大规模KV存储挑战与架构实践 基于接口数据变异的App健壮性测试实践 美团技术年货 | 600+页电子书,前端、后端、算法、测试、运维系列大合集 美团RASP大规模研发部署实践总结 2023 | 美团技术团队热门技术文章汇总 美团到店终端从标准化到数字化的演进之路 AIOps在美团的探索与实践——事件管理篇 美团技术博客十周年,感谢一路相伴 基于UI交互意图理解的异常检测方法 如何利用「深度上下文兴趣网络」提升点击率? 基于模式挖掘的可靠性治理探索 代码变更风险可视化系统建设与实践 美团多场景建模的探索与实践 MJDK 如何实现压缩速率的 5 倍提升? 如何提供一个可信的AB测试解决方案 KDD 2023 | 美团技术团队精选论文解读 美团前端研发框架Rome实践和演进趋势 斩获CVPR 2023竞赛2项冠军|美团街景理解中视觉分割技术的探索与应用 MySQL自治平台建设的内核原理及实践(下) CVPR 2023 | 美团技术团队精选论文解读 超大规模数据库集群保稳系列之三:美团数据库容灾体系建设实践 超大规模数据库集群保稳系列之二:数据库攻防演练建设实践 Robust 2.0:支持Android R8的升级版热修复框架 超大规模数据库集群保稳系列之一:高可用系统 一次「找回」TraceId的问题分析与过程思考 基于AI+数据驱动的慢查询索引推荐 SOTA!目标检测开源框架YOLOv6 3.0版本来啦
深度学习及AR在移动端打车场景下的应用
大卫 余烜 魏博 · 2018-02-02 · via 美团技术团队

本文内容根据作者在美团Hackathon 4.0中自研的项目实践总结而成。作为美团技术团队的传统节目,每年两次的Hackathon已经举办多年,产出很多富于创意的产品和专利,成为工程师文化的重要组成部分。本文就是2017年冬季Hackathon 4.0一个获奖项目的实践总结。

前言

2017年在移动端直接应用AI算法成为一种主流方向。Apple也在WWDC 2017上重磅推出Core ML框架。准备Hackathon的过程中,我们就想能否基于Core ML的深度学习能力,结合AR,做酷一点的产品。我们观察到在晚上下班时间,是公司的打车高峰时段,这时候经常会有一堆车在黑暗中打着双闪,你很难通过辨认车牌去找到你叫的专车,所以我们把产品定向为一个打车时帮助用户找到车的App。

很快我们就把上面的想法落地实现了,开发了一个叫做WhereAreYou的简单App应用,相当于AR版本的微信共享位置,只要打开摄像头就可以看到小伙伴们的方位和远近。当然了,应用于打车场景下,就是让用户知道目标车辆从何驶来、距离多远。程序大概结构如图1所示:

图1

远距离下使用AR帮助用户找到目标方位

我们用Node.js写了一个简单的服务,用户可以创建一个共享位置的group,其他用户拿到groupID后可以加入这个组,接着程序会通过服务来共享他们各自的GPS信息,同一个group内的成员可以在地图上看到其他成员的位置。值得一提的是,我们添加了一个AR模式,成员点击AR按钮后可以进入,此时摄像头会被打开,如果同一个组的其他小伙伴方位距离此用户很近,屏幕上就会出现一个3D模型,告诉用户附近有某某小伙伴,距离此地的远近等信息。主要过程和效果如图2所示:

图2

项目做到这里都很顺利,接下来就遇到了一些难点,主要是利用ARKit渲染模型的部分。其中有一个问题是如何把两个GPS空间上的方位反映到用户屏幕上,经过一些努力,我们终于攻克这个难关,这里可以分享一点干货:

  1. 首先考虑空间上的两个点 \(P_0\)、\(P_1\),以 \(P_0\) 为原点,横轴代表纬度,纵轴代表经度,这样我们可以求得两点位于正北的偏角 \(\theta\);

图3

  1. 然后通过陀螺仪可以得到当前手机正方向的朝向 \(\alpha\);

图4

  1. 之后只要将 3D 模型渲染在屏幕正中央俯视偏角 \(\gamma = \alpha - \theta\) 处就可以了。

图5

那么问题来了,如何将一个3D模型显示在屏幕正中央 \(\gamma\) 处呢?这里就用到了ARKit的ARSCNView中的模型渲染API,跟OpenGL类似,ARSCNView从创建之初会设置一个3D世界原点并启动摄像头,随着手机的移动,摄像头相当于3D世界中的一个眼睛,可以用一个观察矩阵[camera]表示。这样在屏幕正中央俯视偏角 \(\gamma\) 处渲染一个3D节点的问题,其实就是如何才能把观测坐标转换为世界坐标的问题。我们首先将物体放在手机前3米处,然后直接根据下图所示公式就可求得最终坐标:

图6

下面是在ARSCNView每次重新渲染回调中设置模型位置的逻辑:

  func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
          guard let renderLocations = self.netGroupInfo?.locations?.filter({ (userLocation) -> Bool in
              return userLocation.userId != GroupMenberManager.sharedInstance.getCurrentUserID()
          }) else {
              return
          }
          DispatchQueue.main.async {
              guard let camera = self.sceneView.pointOfView else { return }
              //当前用户定位
              let currentLocation = UserLocation() 
              currentLocation.latitude = GroupMenberManager.sharedInstance.userLatitude
              currentLocation.longitude = GroupMenberManager.sharedInstance.userLongitute
              // 循环处理当前组内其他成员
              for renderLocation in renderLocations {
                // 两点间距离公式求得距离用来控制3D模型字体大小,直观的反应距离的远近
                  let distance = currentLocation.distanceFrom(renderLocation)
                // 求得两个用户间的坐标关系
                  let angle = currentLocation.angleFrom(renderLocation)
                // 根据上述公式求得3D模型要渲染的最终位置  compassAngle为实时获取的陀螺仪指南针方向
                  var position = SCNVector3(x: 0, y: 0, z: -3).roateInHorizontalPlaneBy(angle: self.compassAngle - angle)
                  position = camera.convertPosition(position, to: nil)
                //稳定在水平上
                  position.y = 0;
                //更新位置
                  self.virtualObjectManager.findVirtualObject(renderLocation.userId ?? "")?.scnNode.position = position
                //根据距离更新模型文字和大小
                  self.virtualObjectManager.findVirtualObject(renderLocation.userId ?? "")?.changeNodeTextAnSize(text: renderLocation.userTitle, distance: distance)
              }
          }
      }

写了一个周末差不多把上面功能完成,这个时候对于参赛获奖是没有任何底气的。因为其实这个点子并不十分新颖,技术难点也不够。最主要的痛点是,我们真机联调测试的时候发现,在10m范围内GPS定位的精度完全不可靠,屏幕中渲染的点位置经常错乱。我们之前知道近距离GPS定位会不准,却没想到3D模型在屏幕上对误差的反应这么敏感,这样的话比赛时现场演示是绝对不行的。

既然GPS近距离定位不准无法解决,我们决定在近距离时放弃GPS用另一种方式提醒用户目标在哪里。

近距离下使用AI算法找到目标

我们做了一个设想,就是让程序在10米范围能够智能地去主动寻找到目标,然后在手机屏幕上标注出来。

之后我们对视觉算法在移动端实现的现状进行调研,发现随着近几年计算机视觉飞跃式发展,网上各种开源图片分类识别算法有很多,加上2017 年年初Apple推出了非常靠谱的Core ML,所以在短时间内实现一个移动端的“目标发现”算法是可行的。

在确定WhereAreYou需要添加的功能后,我们立足于打车找车这个问题进行调研开发,最后终于实现了一个稳定、高效、实时的基于多种CNN模型混合的车辆发现跟踪算法,下面GIF可以看到效果。

图7

在使用完Core ML之后,真心觉得它确实如Apple在WWDC 2017上所言,性能十分优越。由此可以预见之后几年,在移动端直接应用AI算法的优秀App会层出不穷。

扯远了,上点干货吧!

在说我们的《基于多种CNN模型混合的车辆发现跟踪算法及其移动端实现》之前,先说一下Apple的Core ML能帮我们做到哪一步。

Core ML 是一个可以让开发者很容易就能在应用中集成机器学习模型(Machine Learning Models)的应用框架,在 iOS、watchOS、macOS和tvOS上都可以使用它。Core ML使用一种新的文件格式(.mlmodel),可以支持多种类型的机器学习模型数据,比如一些深度神经网络算法(CNN、RNN),决策树算法(boosted trees、random forest、decision trees),还有一些广义的线性模型(SVM、Kmeans)。Core ML models以.mlmodel文件的形式直接集成到开发应用中,文件导入后自动生成对应的工具类可直接用于分类识别等AI功能。

我们知道通过Keras、Caffe、libsvm 等开源学习框架可以生成相应的模型文件,但这些模型文件的格式并不是.mlmodel。Core ML Tools可以对这些文件进行转换,生成.mlmodel文件,将目前比较流行的开源学习框架训练出的模型直接应用在Core ML上,如图8所示:

图8

coremltools本身是一个Python工具包,它可以帮我们完成下面几件事情:

  • 第一点就是刚刚提到的将一些比较出名的开源机器学习工具(如Keras、Caffe、scikit-learn、libsvm、XGBoost)训练出来的模型文件转换为.mlmodel。
  • 第二点是提供可以自定义转换的API。打个比方,假设Caffe更新到了Caffe 3.0,本身模型的文件格式变了,但coremltools还没来及更新,这时就可以利用这些API自己写一个转换器。
  • coremltools工具本身可以使用上述所说的各种开源机器学习工具训练好的模型进行决策。

看到这里是不是内心很澎湃?是的,有了这个工具我们可以很方便地把训练好的模型应用到Apple设备上,所以赶紧安装吧!步骤很简单,机器上有Python(必须是Python 2.X)环境后执行pip install -U coremltools就好了。

那如何进行转换呢?举一个例子:

我们可以到Caffe Model Zoo上下载一个公开的训练模型。比如我们下载web_car,这个模型可以用于车型识别,能够区分奔驰、宝马等诸多品牌的各系车型约400余种。下载好web_car.caffemodel、deploy.prototxt、class_labels.txt这三个文件,写一个简单的Python脚本就可以进行转换了。

import coremltools

# 调用caffe转换器的convert方法执行转换
coreml_model = coremltools.converters.caffe.convert(('web_car.caffemodel', 'deploy.prototxt'), image_input_names = 'data', class_labels = 'class_labels.txt')

# 保存转换生成的分类器模型文件
coreml_model.save('CarRecognition.mlmodel')

coremltools同时还提供了设置元数据描述的方法,比如设置作者信息、模型输入数据格式描述、预测输出张量描述,较为完整的转换脚本如下:

import coremltools

# 调用caffe转换器的convert方法执行转换
coreml_model = coremltools.converters.caffe.convert(('googlenet_finetune_web_car.caffemodel', 'deploy.prototxt'), image_input_names = 'data', class_labels = 'cars.txt')

# 设置元数据
coreml_model.author = 'Audebert, Nicolas and Le Saux, Bertrand and Lefevre Sebastien'
coreml_model.license = 'MIT'
coreml_model.short_description = 'Predict the brand & model of a car.'
coreml_model.input_description['data'] = 'An image of a car.'
coreml_model.output_description['prob'] = 'The probabilities that the input image is a car.'
coreml_model.output_description['classLabel'] = 'The most likely type of car, for the given input.'

# 保存转换生成的分类器模型文件
coreml_model.save('CarRecognition.mlmodel')

上面所说的“可以让开发者很容易地在应用中集成机器学习模型”是什么意思呢?是指如果你有一个CarRecognition.mlmodel 文件,你可以把它拖入到Xcode中:

图9

Xcode会自动生成一个叫做CarRecognition的类,直接使用其预测方法就好了。比如对一个汽车图片做识别,像这样:

let carModel = CarRecognition()
let output = try carModel.prediction(image: ref)

基于上述Core ML提供的功能结合一些开源模型算法我们完成了《基于多种CNN模型混合的车辆发现跟踪算法及其移动端实现》。

首先说一下大概的算法流程,还记得本文一开始在图1中提到的WhereAreYou程序结构图吗?现在我们在AR模块中添加主动寻找目标的功能。当目标GPS距离小于50米时,算法被开启。整个识别算法分为目标检测、目标识别以及目标追踪。当摄像头获取一帧图片后会首先送入目标检测模块,这个模块使用一个CNN模型进行类似SSD算法的操作,对输入图片进行物体检测,可以区分出场景中的行人、车辆、轮船、狗等物体并输出各个检测物体在图片中的区域信息。

我们筛选所有汽车目标,将对应物体的图片截取后送入目标识别模块,对车型进行识别。之后拿到识别出的车型跟车主上传的车型进行对比,如果车主的车型跟识别出的结果一致,就将当前帧和目标区域送入目标跟踪模块,并对当前车辆进行持续跟踪。当然如果跟踪失败就从头进行整个过程。具体如图10所示:

图10

下面说一下为什么要结合这三种算法进行“寻找车主汽车”这个任务:

大家应该还记得刚刚介绍coremltools的时候举的一个例子,在例子中我们在Caffe Model Zoo下载了一个车型识别的算法模型。没错,我们这个结合算法其目标识别模块中用的车型识别正是这个模型。最初调研时,在caffe上找到这个开源模型很开心,觉得把这个模型下载好后转换一下应用到工程中就完事了。结果发现,实际上将拍摄到的整幅图片送入这个模型得到的识别正确率几乎为零。分析原因是因为这个模型的训练数据是汽车的完整轮廓,而且训练图片并无其它多余背景部分。而现实中用户不可能只拍汽车,场景中汽车只是很小的一个区域,大部分还是天空、马路、绿化带等部分,整幅图片不做截取直接进行处理识别率当然不行。所以只有先找到场景中的车在哪,然后再识别这个是什么车。

在一副图片中标定场景中出现的所有车辆的位置,其实就是SSD问题(Single Shot MultiBox Detector),进一步调研可以了解到近几年基于CNN的SSD算法层出不穷,各种论文资料也很多。其中要数康奈尔大学的YOLO算法尤为出名。更重要的是原作者提供了一个他训练好的模型,这个模型在GitHub上就可以下载,没错我们结合算法其目标检测中的模型算法就是使用的这个→_→ 。

YOLO算法的一个特性就是其检测识别速度十分快,这是由其网络结构和输入结构决定的。YOLO模型输出张量结构决定了在屏幕上如何截取对应图片区域,这里简单介绍一下,概念不严谨之处还请各位不吝赐教。如图11所示,YOLO算法将输入图片分为13 × 13个小块,每张图片的各个小块对应到其所属物体的名称和这个物体的范围。打个比方图11中狗尾巴处的一个小块对应的是狗和这个狗在图片中的位置(dog、x、y、width、height),算法支持20种物体的区分。通过网络预测得到的张量为13 × 13 × 125。

其具体意义是一张图片中所有小块(共13 × 13个)每次预测得到5组结果,每组结果对应一个矩形区域信息(x、y、width、height)代表本小块所属的目标区域,同时给出这个区域确信是一个目标的概率(confidence,这里的“确信是一个目标”是指20种物体任意一个即可),还有 20种物体各自的确信概率。即125 = 5 × 25(x、y、width、height、confidence、Class1Confidence、Class2Cconfidence……)。了解这点后我们就不难截取最终识别结果所对应的图片区域了(当然只选取置信率比较高的前几个)。

图11

图12展示了YOLO高效地执行结果,图13展示了YOLO目标检测与车辆识别结合后的执行效果。

图12

图13

算法到此时可以算是差不多了,但从图13中还是可以看到一些问题:

识别的结果并不是每帧图片都是对的,而且也并不是每帧图片都能检测出场景中的每一个车辆。这样就会导致在屏幕上标注车辆位置提示用户时会出现断断续续。经过调研后我们又加入了目标跟踪的模块。目标跟踪的任务比较好理解,输入一帧图片和这张图片中的一个区域信息,要求得出下一帧中这个区域对应图像所在位置,然后迭代此过程。目标跟踪算法在深度学习火起来之前就比较成熟了,文献和开源实现都比较多,我们选用 CoreML官方提供的跟踪模块进行处理,实验效果发现还不错,最终结果如上(图7)所示。

各个模块执行时间统计如下:

图14

总结

《基于多种CNN模型混合的车辆发现跟踪算法及其移动端实现》这个项目由于时间原因还有很多缺陷,诚如当时评委意见所说的那样“核心算法都是使用网上现有模型,没有自己进行训练”,此算法可以提高优化的地方有很多。比如添加车辆颜色、车牌等检测提高确认精度,优化算法在夜间、雨天等噪声环境下的表现等。

最后,通过这个项目的开发实现让我们知道在移动端应用CNN这样的学习算法已经十分方便,如图15这样构建的移动端AI程序的执行速度和效果都很不错。希望我们的WhereAreYou项目就像能够帮助用户更快找到车一样,给前端工程师提供多一些灵感。相信未来前端工程师能做的可以做的需求会越来越有趣!

图15

参考文献

作者简介

  • 大卫,美团前端iOS开发工程师,2016年毕业于安徽大学,同年加入美团到店餐饮事业群,从事商家移动端应用开发工作。