ai机器视觉落地(本周AI开源项目分享)
ai机器视觉落地(本周AI开源项目分享)使用py-motmetrics通过Jetson Xavier NX上的MOT17数据集评估性能。当使用来自MOT17的公开检测时,MOTA分数接近最新的跟踪器。跟踪速度最高可达到38 FPS,具体取决于对象的数量。在台式机CPU / GPU上,FPS应该更高。性能:深度学习模型通常是Deep SORT的瓶颈,这使得Deep SORT无法用于实时应用程序。此项目协议可以在Jetson上显着加快整个系统的实时运行速度。它也提供了足够的灵活性来调整速度精度的权衡,而无需轻量级的模型。为了实现更快的处理,跟踪器每N帧仅运行一次检测器和特征提取器。然后使用光流填充间隙。在Deep SORT中交换了特征提取器,以获得更好的ReID模型OSNet。还添加了一项功能,可以重新识别移出框架的目标,以便跟踪器可以保留相同的ID。在CrowdHuman(82%mAP@0.5)上训练了YOLOv4,而SSD是Te
文末彩蛋:七月在线干货组最新升级的《2021大厂最新AI面试题 [含答案和解析 更新到前121题]》免费送!
项目一:FastMOT 基于 YOLO、深排序和光流的高性能多对象跟踪项目地址:
github/GeekAlexis/FastMOT
FastMOT 是一个自定义多个对象跟踪器,可以实现:
- YOLO探测器
- SSD探测器
- 深度排序 OSNet REID
- KLT光流跟踪
- 相机运动补偿
深度学习模型通常是Deep SORT的瓶颈,这使得Deep SORT无法用于实时应用程序。此项目协议可以在Jetson上显着加快整个系统的实时运行速度。它也提供了足够的灵活性来调整速度精度的权衡,而无需轻量级的模型。
为了实现更快的处理,跟踪器每N帧仅运行一次检测器和特征提取器。然后使用光流填充间隙。在Deep SORT中交换了特征提取器,以获得更好的ReID模型OSNet。还添加了一项功能,可以重新识别移出框架的目标,以便跟踪器可以保留相同的ID。在CrowdHuman(82%mAP@0.5)上训练了YOLOv4,而SSD是TensorFlow的预训练的COCO模型。
检测器和特征提取器均使用TensorRT后端并执行异步推理。此外,使用Numba对大多数算法(包括卡尔曼滤波器,光流和数据关联)进行了优化和多线程处理。
性能:
使用py-motmetrics通过Jetson Xavier NX上的MOT17数据集评估性能。当使用来自MOT17的公开检测时,MOTA分数接近最新的跟踪器。跟踪速度最高可达到38 FPS,具体取决于对象的数量。在台式机CPU / GPU上,FPS应该更高。
这意味着即使跟踪器运行速度更快,它仍然非常准···确。更轻量级的探测器/功能提取器可能用于获得更多的速度。请注意,普通的深度排序 YOLO很难在大多数边缘设备和台式机上实时运行。
系统环境:
- CUDA >= 10
- cuDNN >= 7
- TensorRT >= 7
- OpenCV >= 3.3
- PyCuda
- Numpy >= 1.15
- Scipy >= 1.5
- TensorFlow < 2.0 (for SSD support)
- Numba == 0.48
- cython-bbox
此项目支持多类别跟踪,因此可以轻松扩展到自定义类别(例如,车辆)。需要在对象类上训练YOLO和ReID模型。检查Darknet以训练YOLO,并检查fast-reid以训练ReID。训练后,将模型转换为ONNX格式,并将其放置在fastmot /模型下。要将YOLO转换为ONNX,tensorrt_demos是一个很好的参考。
项目二:Objectron 以对象为中心的视频剪辑的数据集项目地址:
github/google-research-datasets/Objectron
Objectron数据集是一个短的,以对象为中心的视频剪辑的集合,这些剪辑带有AR会话元数据,其中包括相机姿势,稀疏点云以及周围环境中平面的特征。在每个视频中,摄像机都会在物体周围移动,从不同角度捕获物体。数据还包含每个对象的手动注释的3D边界框,这些边界框描述了对象的位置,方向和尺寸。数据集包括15K带注释的视频剪辑,并补充了以下类别中的超过4M带注释的图像:自行车,书籍,瓶子,照相机,谷物盒,椅子,杯子,笔记本电脑和鞋子。此外,为了确保地理多样性,我们的数据集是从五大洲的10个国家/地区收集的。与数据集一起,我们还将共享针对四类对象的3D对象检测解决方案-鞋子,椅子,杯子和照相机。这些模型是使用此数据集进行训练的,并在MediaPipe中发布,MediaPipe是Google的开源框架,用于跨平台可定制的ML解决方案,用于实时和流媒体。
关键特性:
- 15000个带注释的视频和4M带注释的图像。
- 所有样本均包括高分辨率图像,对象姿态,相机姿态,点云和表面平面。
- 准备使用各种tf.record格式的示例,可以在Tensorflow / PyTorch中使用。
- 以对象为中心的多视图,从不同角度观察同一对象。
- 准确的评估指标,例如面向3D边界框的3D IoU。
原始数据集大小为 1.9TB(包括视频及其注释)。总数据集大小为 4.4TB(包括视频、记录、序列等)。此项目提供分析数据集所需的模式和工具。
项目三:basketballVideoAnalysis 体育视频分析项目地址:
github/stephanj/basketballVideoAnalysis
球场检测及球场造影图:
基于Mask R-CNN的人员检测及动作分类:
项目四:SparrowRecSys 深度学习电影推荐系统项目地址:
github/wzhe06/SparrowRecSys
SparrowRecSys是一个电影推荐系统,名字SparrowRecSys(麻雀推荐系统),取自“麻雀虽小,五脏俱全”之意。项目是一个基于maven的混合语言项目,同时包含了TensorFlow,Spark,Jetty Server等推荐系统的不同模块。
项目详细讲解了SparrowRecSys的所有技术细节,覆盖了深度学习模型结构,模型训练,特征工程,模型评估,模型线上服务及推荐服务器内部逻辑等模块。
环境要求:
- Java 8
- Scala 2.11
- Python 3.6
- TensorFlow 2.0
项目数据:
项目数据来源于开源电影数据集MovieLens,项目自带数据集对MovieLens数据集进行了精简,仅保留1000部电影和相关评论、用户数据。全量数据集请到MovieLens官方网站进行下载,推荐使用MovieLens 20M Dataset。
技术架构:
SparrowRecSys技术架构遵循经典的工业级深度学习推荐系统架构,包括了离线数据处理、模型训练、近线的流处理、线上模型服务、前端推荐结果显示等多个模块。以下是SparrowRecSys的架构图:
深度学习模型:
- Word2vec (Item2vec)
- DeepWalk (Random Walk based Graph Embedding)
- Embedding MLP
- Wide&Deep
- Nerual CF
- Two Towers
- DeepFM
- DIN(Deep Interest Network)
项目地址:
github/WuHuRestaurant/xf_event_extraction2020Top1
主要思路:
将任务分割为触发词抽取,论元抽取,属性抽取。具体而言是论元和属性的抽取结果依赖于触发词,因此只有一步误差传播。因 time loc 并非每个句子中都存在,并且分布较为稀疏,因此将 time & loc 与 sub & obj 的抽取分开(role1 提取 sub & obj;role2 提取 time & loc)
模型先进行触发词提取,由于复赛数据集的特殊性,模型限制抽取的事件仅有一个,如果抽取出多个触发词,选择 logits 最大的 trigger 作为该句子的触发词,如果没有抽取触发词,筛选整个句子的 logits,取 argmax 来获取触发词;
然后根据触发词抽取模型抽取的触发词,分别输入到 role1 & role2 & attribution 模型中,进行后序的论元提取和属性分类;四种模型都是基于 Roberta-wwm 进行实验,加入了不同的特征。
最后将识别的结果进行整合,得到提交文件。
trigger提取器:
trigger 提取采用的特征是远程监督 trigger,把所有标注数据当做一个知识库,对当前文本进行匹配。注:在训练时,需要排除自身的label,我们采用的是KFold的训练集 distant trigger 构造,即将训练集分成K份,用前K-1份的所有label当做后一份的知识库,构造训练数据的distant trigger;test 时候采用所有 trigger。在测试时若出现预测为空,选取 distant trigger logits 最大的解码输出 trigger。
role提取器:
role 采用的特征是trigger的相对距离,然后采用了苏神的 Conditional Layer Norm 来让整个句子融入 trigger 信息,同样采用 Span 解码的方式。由于数据中 subject/object 分布相似,同时与 time/loc 分布相差很大,我们进一步进行了优化,将前两者和后两者的抽取分开,防止 time/loc 的数据对 subject/object 的 logits 稀疏化。
attribution分类器:
attribution 分类器并没有进行特殊优化,采用了一个动态窗口的方法,我们认为某一 trigger 的 tense & polarity 只与其附近的语境有关,因此我们设定了一个窗口,对该窗口内进行 pooling 操作,然后利用 pooling 后的 logits 进行多任务学习,同时分类出 tense 和 polarity。因属性数据类别不均及其严重,最后我们用 ERNIE 模型做了一个10折交叉验证,有较大的提升。
数据增强:
本次比赛主要的上分点在于数据增强的工作,初赛和复赛数据的分布差别极大,一起训练反而会导致结果下降。因此我们做了一个初赛数据筛选的工作,筛选出与复赛数据分布相近的数据进行增量训练。主要流程详见PPT中基于标签验证的数据增强部分。
系统环境:
- transformers==2.10.0
- pytorch_crf==0.7.2
- numpy==1.16.4
- torch==1.5.1 cu101
- tqdm==4.46.1
- scikit_learn==0.23.2
- torchcrf==1.1.0
项目地址:
github/OAID/AutoKernel
简介:
随着人工智能的普及,深度学习网络的不断涌现,为了让各硬件(CPU GPU NPU ...)能够支持深度学习应用,各硬件芯片需要软件库去支持高性能的深度学习张量运算。目前,这些高性能计算库主要由资深HPC工程师(高性能计算优化工程师)进行开发,为了加快开发进程,缩短深度学习应用落地周期,自动化算子优化是一个趋势。
AutoKernel是由OPEN AI LAB提出的高性能算子自动优化工具,可以自动优化调度策略、生成底层优化代码,大幅减少各硬件芯片算子开发成本,提升算子优化效率,让工程师更快实现深度学习算法在各硬件芯片上的高性能部署。
AutoKernel架构:
AutoKernel分为三个模块:
算子生成器:
- 该模块使用了开源项目Halide;Halide是业界广泛使用的自动代码生成项目,它首次提出将计算和调度分离。该模块的输入是和硬件无关的算子计算描述,输出是相应后端的优化汇编代码/目标文件;
自动搜索模块:
- 该模块可以通过最优化算法/搜索算法/机器学习/强化学习搜索出相应后端的最优算子的调度策略参数(该模块仍在开发中);
算子部署插件( AutoKernel Plugin):
- Tengine是OPEN AILAB开源的深度学习推理框架,实现了AI算法在不同硬件的快速高效部署。该模块实现了将自动生成的优化算子代码以plugin的形式一键集成到Tengine中,实现自动优化算子的一键部署;
评论区回复 “121”,七月在线干货组最新升级的《2021大厂最新AI面试题 [含答案和解析 更新到前121题]》,免费送!
持续无限期更新大厂最新面试题,AI干货资料,目前干货组汇总了今年3月-6月份,各大厂面试题。