2020 年 6 月,京东 AI 研究院公布了基于 PyTorch 的通用指标重辨认(ReID)开源库 FastReID。通过了最近半年的继续优化,2021 年 1 月 18 日京东 AI 研究院公布了更新版本 FastReID V1.0。在京东外部,FastReID 曾经取得宽泛地利用于智能园区、智能楼宇、智能供应链、线下批发等理论我的项目中。
*GitHub 链接:https://github.com/JDAI-CV/fa…
“口罩辨认”,这或者是国内抵制疫情流传工作中,最根本也是最常见的信息核实伎俩。除此之外,高速路车流车牌监控、公共场所安防侦察 …… 这些大部分人都不会刻意关注的利用,同样在给生存带来越来越多的便当。
但在“无意遮挡”以及隐衷平安的把控上,这项技术的“便当”总随同着一些危险与挑战。而通用指标重辨认(ReID)正是其中最不可或缺的技术。
为满足通用实例重辨认日益增长的利用需要,京东 AI 研究院于 2020 年 6 月公布基于 PyTorch 的通用指标重辨认(ReID)开源库 FastReID, 并受到了许多用户的欢送与反馈。通过半年多继续优化,2021 年 1 月 18 日 FastReID V1.0 携重大更新“惊艳亮相”。
在理解 FastReIDV1.0 带来了哪些新性能与新思路之前,咱们先来“破破冰”,理解一下到底什么是通用指标重辨认(ReID)。
通用指标重辨认(ReID)是什么
通用指标重辨认(ReID)又称跨境追踪,全称 Re-identification,也就是重辨认的意思。 简略了解就是对于一个特定的指标(可能是行人、车辆或者其余特定物体),在候选图像集中检索到它,或称图像中指标的实例级检索。
再艰深一些,ReID 算法可能通过视频监控零碎,在跨摄像头的条件下,对无奈获取清晰拍摄的特定指标进行跨摄像头间断跟踪,大大拓展摄像资源的利用深度,加强数据的时空连续性,并升高人力老本。
ReID 能够作为辨认技术的重要补充,晋升对特定指标的辨认追踪能力,实用于更多新的利用场景,将人工智能的认知程度进步到一个新阶段。
举个例子, 下图是由四张图片形成,黄衣女子为某犯罪案件中重点察看对象。此人呈现在多个摄像头画面中,但多张图像都极其含糊,仅有几个像素大小,导致辨认算法生效,减少警察刑侦难度。这时,ReID 技术就能够依据行人的衣着、体貌,在各个摄像头中去检索,将其在各个不同摄像头呈现的视频段关联起来,造成轨迹帮助破案。
此外, 在新批发场景中,ReID 技术也能够让“人”与“场”之间的关系数据有方法被收集并以可视化的形式重现。商家对用户画像和用户行为有更强的感知,从而可能做出更精确的商业决策。同时,也为线下针对用户的个性化服务和精准营销提供了可能。
什么是 FastReID?
目前,ReID 往往被利用到不同规模的特定指标轨迹剖析上,这就会导致系统解决的数据规模疾速成倍的增长,模型的推理速度变慢,最终使得 ReID 算法的性能不能被齐全施展。此外,ReID 畛域中的学术研究与工程模型部署存在着较大的差距,代码对齐问题使得学术研究成绩很难间接转化为可落地的产品,限度其在大规模商业化场景中的利用。
为减速学术界钻研人员和工业界工程师对重辨认技术的倒退,FastReID 代码开源库应运而生。
参照了 Detectron2 的整体概念和设计哲学,FastReID 设计成了一个高度模块化和可拓展的架构,从而能够让钻研人员疾速的实现新的 idea;更重要的是,该框架敌对的管理系统配置和工程部署函数能够让工程师疾速的部署它。FastReID 开源库可针对 ReID 工作提供残缺的工具箱,包含模型训练、模型评估、模型部署等模块,并且实现了在多个工作中性能当先的模型。
下图,残缺列出了 FastReID 各个模块,高低别离为训练和推理。训练阶段包含模块: 图像预处理 (Preprocssing)、骨干网 (Backbone)、聚合模块 (Aggregation)、Head 模块、训练策略、损失函数; 在推理阶段蕴含模块:度量局部,以及度量后处理指对检索后果的解决,包含 K -reciprocal coding 和 Query Expansion (QE) 两种重排序办法。
具体架构解析可见:
???? FastReID:首个产业级通用指标重辨认开源库?
基于此,在 V1.0 的全新降级中,FastReID 通过对以上各个模块的优化,更新了 FastReID V1.0 版本,不仅实现了更快的分布式训练和测试,提供模型一键转码(模型一键导出 caffe/onnx/tensorRT)等性能外,而且还实现了模型蒸馏,主动超参搜寻以及更多任务的扩大,有后劲做更多的事件,也有了更多的利用场景。
FastReID V1.0 更新详解
1. 模型蒸馏:小模型部署取得更大的精度晋升
深度神经网络个别有较多的信息冗余,同时模型太大会导致推理速度变慢,耗费更多计算资源,并且升高整个零碎的响应速度。所以开发者通常须要在模型部署的时候,思考对模型进行压缩,减小模型的参数量。
目前行业里有较多的模型压缩形式,比方剪枝,量化,蒸馏等等,其中蒸馏能够保障模型不须要进行构造批改的状况下, 取得进一步的精度晋升,从而能够在应用小模型部署时取得更好的性能。
尽管蒸馏倒退了数十年,但通过大量的试验发现 Hinton 的 Distilling the Knowledge in a Neural Network 还是最 solid 的抉择。基于这篇 paper 的形式,进一步将本来的蒸馏 KL Div loss 优化为具备对称性的 JS Div loss,同时还优化了蒸馏的 soft label 生成形式。
不同于 softmax 分类 loss,在 embedding 工作中通常会应用成果更好的 margin-based softmax,比方 arcface 等等,这时间接应用基于 margin 的 logits 生成 soft label 成果很不好,所以将 soft label 批改为去掉 margin 的 logits 输入。
除了能够对 label 进行蒸馏之外,也能够对 feature 进行蒸馏。 通过试验了一大堆不 work 的特色蒸馏办法之后,FastReID 发现 overhaul-distillation 能够在 loss 蒸馏的根底上进一步对网络进行晋升,所以也将该办法退出其中。因为 overhaul 须要对 backbone 进行一些批改,取得激活函数 relu 之前的 feature,通过构建了一个新的 project 去批改 backbone 而不是间接去 FastReID 外面批改 backbone,这样能够防止影响其余的 project 和以前训练的模型。
要在 FastReID 中应用蒸馏也非常简单,只须要首先依照失常的形式训练一个 teacher model,如果只想应用 loss 蒸馏,能够应用 Distiller 作为 meta_arch。如果心愿加上 overhaul 进行 feature 蒸馏,也只须要应用 DistillerOverhaul 作为 meta_arch 就能够。最初再指定 teacher model 的配置文件和训好的 weights 就能够了。
举个例子,用 R101_ibn 作为 teacher model,R34 作为 student model:
1 teacher model training
2 python3 projects/FastDistill/train_net.py
3 --config-file projects/FastDistill/configs/sbs_r101ibn.yml
4 --num-gpus 4
5
6 # loss distillation
7 python3 projects/FastDistill/train_net.py
8 --config-file projects/FastDistill/configs/kd-sbs_r101ibn-sbs_r34.yaml
9 --num-gpus 4
10 MODEL.META_ARCHITECTURE Distiller
11 KD.MODEL_CONFIG projects/FastDistill/logs/dukemtmc/r101_ibn/config.yaml
12 KD.MODEL_WEIGHTS projects/FastDistill/logs/dukemtmc/r101_ibn/model_best.pth
13
14 # loss+overhaul distillation
15 python3 projects/FastDistill/train_net.py
16 --config-file projects/FastDistill/configs/kd-sbs_r101ibn-sbs_r34.yaml
17 --num-gpus 4
18 MODEL.META_ARCHITECTURE DistillerOverhaul
19 KD.MODEL_CONFIG projects/FastDistill/logs/dukemtmc/r101_ibn/config.yaml
20 KD.MODEL_WEIGHTS projects/FastDistill/logs/dukemtmc/r101_ibn/model_best.pth
2. 定位转型:最全最多的工作反对
FastReID V1.0 优化了整体的代码构造,不仅可能同时兼顾算法钻研和业务落地,还能使开发者更加不便地扩大不同的自定义工作,并能基于 FastReID 外部的外围代码,用大量代码即可实现一个新我的项目的开发。 优化后的算法库不仅可能进行指标重辨认的工作,同时还反对行人属性辨认、地标检索、行人和车辆跟踪、图片分类等等工作。
其实,在之前的版本中,FastReID 重视为算法钻研提供便当,然而面对高速开发的业务,FastReID 发现用户须要额定破费很多的工夫去做雷同的事件。这就意味着,FastReID 不仅须要保留很好的灵活性可能反对算法钻研,还须要有很强的扩展性可能反对大量自定义的业务疾速开发。
然而,每种工作都有属于本人的一些特殊性,把这些特殊性全副往 FastReID 外面“塞”必定不事实。为了不引入冗余性,咱们通过对每种 task 独自构建 project 的形式对 FastReID 进行扩大,同时也为开发者提供了一些扩大工作的参考写法和 example。
对于自定义的我的项目,开发者只须要判断是否须要退出新的配置文件、是否须要退出新的数据集、是否须要退出新的网络结构、是否须要退出新的测试协定等内容。如果这些内容在 FastReID 外面曾经有现成的实现,那么间接将 FastReID 作为一个库导入相应的模块即可。对于外部没有实现的内容,开发者能够本人实现一个最小化的版本,与 FastReID 提供的内容进行拼接,这样就可能实现一个残缺的自定义我的项目开发。
3. 面向开发者更敌对:主动超参搜寻
自开源至今,FastReID 始终在致力思考如何让开发者上手更加容易。之前的版本中,FastReID 具备扩大各种工作的能力,但却无奈提供一些参考案例和 demo。并且,因为之前的版本次要集中在指标重辨认相干畛域的模型训练和开发,FastReID 所提供的配置文件和默认的超参数往往是针对重辨认工作的,对于扩大的工作其实并不具备指导意义。
在新版的降级中,FastReID V1.0 不仅为开发者提供了更多通用工作的最小实现模板,还提供了相应的配置文件和参数设定, 不便开发者可能基于模板进行特定工作的简略批改。此外,为开发者在应用 FastReID 开发新我的项目时提供 baseline 后果,还可能防止开发者破费大量精力对不相熟的工作进行调参。
家喻户晓,“炼丹”始终困扰着各位“调参侠”,特地是每次遇到新的场景,就须要从新调参来适应新的数据分布,十分浪费时间。而在 FastReID V1.0 中退出主动超参搜寻的性能,就能解放各位“调参侠”的双手。
举个例子,如果你想用 Bayesian 超参搜寻跑 12 组试验,能够应用上面的代码就能够开始主动分布式训练,如果有 4 张卡,那么能够 4 个试验同步一起跑。
1 python3 projects/FastTune/tune_net.py
2 --config-file projects/FastTune/configs/search_trial.yml
3 --num-trials 12 --srch-alog "bohb"
更具体的应用形式,请参考:https://github.com/JDAI-CV/fa…。
总结
自 2020 年 6 月开源至今,FastReID 在各种工作中的评测后果都体现得非常抢眼。这个 SOTA 级的 ReID 办法汇合工具箱(SOTA ReID Methods and Toolbox),已面向学术界和工业界落地,并在京东外部该开源库曾经成为了京东外部 ReID 技术钻研和开发的外围引擎。
2021 年,FastReID 打算持续退出更多先进的算法,一直进步性能,提供更欠缺的文档、参考案例和 demo,同时进一步优化计算效率,进一步晋升大规模数据下的稳定性。
咱们也热诚欢送集体、实验室应用 FastReID,相互交换,互相合作。心愿在给 ReID 社区提供稳固高效代码实现的同时,大家也可能基于 FastReID 去做算法钻研,扩大到更多其余工作上,独特减速人工智能钻研,独特实现技术冲破。
举荐浏览
- FastReID:首个产业级通用指标重辨认开源库
- 产业实际推动科技翻新,京东科技团体 3 篇论文入选 ICASSP 2021
- 京东科技团体 21 篇论文高票入选国内顶会 AAAI 2021
欢送点击【 京东科技 】,理解开发者社区
更多精彩技术实际与独家干货解析
欢送关注【京东科技开发者】公众号