seo自动发布外链工具_【ECCV2020】 自动化所&QMUL联合发布 lightreid:首个轻量化行人重识别开源工具箱!...

lightreid是ECCV2020上发布的首个轻量化行人重识别工具箱,包含light-model、light-feature和light-search模块,旨在加速特征提取和搜索,减少精度损失。通过模型蒸馏、特征二值量化和层级搜索策略,实现3x的特征提取速度提升和20x的搜索速度提升。
摘要由CSDN通过智能技术生成
导读 中国科学院自动化研究所&QMUL联合发布了基于 Pytorch 的轻量化行人重识别(person re-identification, reid)开源工具箱 light-reid。不同于已有开源 reid 工具箱往往关注于精度,该工具箱在保证精度的同时,可以一键加速 reid 模型,推理3x、图像搜索20x。应用于该工具箱的部分加速模块已经被 ECCV2020 接收。 (注:本文 reid 特指 person reid,即行人重识别) 61bdb341c5c20e4cf314a1f6a65bbc77.png
GitHub:https://github.com/wangguanan/light-reidPaper:https://arxiv.org/abs/2008.06826
———————————————————————————————————————— 作者介绍 2897184366ff1c3ee889ee986a5acdee.png王贯安,中国科学院自动化研究所博士,英国伦敦玛丽王后学院(Queen Mary University of London,QMUL)访问学者。研究方向为计算机视觉,特别是行人重识别、哈希、生成对抗网络等,目前已发表顶级论文9篇,包括CVPR/ICCV/ECCV/AAAI/IJCAI等。个人主页:https://wangguanan.github.io/————————————————————————————————————————

什么是reid,如何实现

        d361e5dd6a70aa15b7dcd3e15abe6944.png 图:行人重识别(来自于网络)         简单理解就是,我们需要根据某行人A的图像,在图像候选集中找到该行人A的其他图像。 reid 技术在实际场景中有着很重要的作用。reid 技术可以在一个监控系统中,构建行人的运动轨迹,并应用到各种下游任务。         比如在小区监控系统中,我们在某个时刻锁定犯人A,根据 reid 算法,我们就可以在整个监控系统的中,自动的找出犯人A在整个小区监控中出现的图片,并确定他的运动轨迹,最终辅助警察抓捕。 再比如在智慧商业场景中,我们可以根据 reid 算法描绘出每个消费者的商场运动轨迹和区域驻留时间,从而优化客流、辅助商品推荐等。         reid 算法可以分解为以下3步:
  • 特征提取:给定一个查询图片(query image)和大量的数据库图片(gallery images),提取出它们的语义特征。在这个特征空间,同一个人的图片距离尽可能小,不同人图片距离尽可能大。目前主流的 reid 算法使用深度卷积神经网络(CNN,如 ResNet50)提取特征。
  • 距离计算:得到查询特征(query feature)和数据库特征(gallery features)后,计算查询图片和数据库图片的距离。通常使用欧式(euclidean)、余弦(cosine)距离等。
  • 排序返回:得到距离后,我们可以使用排序算法对样本进行排序,通过卡距离阈值或者K近邻的方法,返回最终样本。一般使用快速排序算法(QuickSort),其复杂度是 O(NlogN),N 为数据库图片数量。

回顾已有reid工具箱

        截至目前,学术界、工业界已经发布了多个 reid 工具箱,这些工具箱极大的推动了 reid 技术的发展,为 reid 社区做出了重大的贡献。我们简单回顾一下目前已有的 reid 工具箱:
  • torchreid:torchreid 发布于2018年05月,由萨里大学(University of Surrey, UK)的 Kaiyang Zhou 博士发布并维护,是发布最早、最完善、受关注度最高的reid工具箱之一。它提供了良好的模块封装(包括数据、模型、损失函数、训练引擎、测试协议),部分最新reid模型的实现,预训练模型,结果可视化等。除此之外,它还提供了详细的文档支持,目前该库在 github 上已经收获了超过 2.3k 的star,其影响力可见一斑。
  • fastreid:fastreid (Lingxiao He, Xingyu Liao, Wu Liu etc.) 发布于2020年6月,由 JDAI-CV 实验室支持并维护。该库是第一个工业级别 reid 工具箱,它不仅具有简单好用的优势,更集成的 ONNX/TensorRT 模块用于工程部署。除此之外,该库提供了YAML文件来轻松定义数据、模型、目标函数等。即使是小白也可以轻松训练自己的 reid 模型。该库在发布短短3个月的时间内,github star 数已经超过 1.1k。
  • open-unreid:open-unreid 工具箱主要关注于无监督 reid (即只有训练数据,没有训练标签)。研究无监督 reid (unsupervised reid)的小伙伴们可以多多关注这个工具箱。
        除了 reid 工具箱,很多学者也公开了一些简单且高性能的 reid baseline(基础模型)。这些 reid baseline 用非常简单的结构达到了较好的精度。基于这些 baseline,研究人员可以快速地验证自己的 idea,避免重复刷点等体力劳动。同时由于简单稳定优点,这些方法也收到了工业界的青睐。
  • reid_baseline:reid_baseline 是一个基于pytorch实现的,小巧、友好并且强大的 reid baseline。它的性能媲美当前最好的公开方法(强大),支持fp16精度用2GB显存进行训练(小巧),并且提供了一个8分钟快速教程入门reid(新手友好)。该 baseline 由 Zhezhong Zheng 博士于2017年发布,至今 github star 数量已经超过 2k。
  • bagtricks_reid:bagtricks_reid 在 reid_baseline 中集成了众多简单好用的技巧,并在行人reid,车辆reid等多个任务上。该 baseline 由 Hao Luo 博士发布并维护,发布时间是2019年,目前在 github 上已经获得 star 数超过1.3k。
  • agw: agw 相比 bagtricks_reid, 不仅加入了更多的技巧,取得了更高的性能,同时将该模型应用到多模态reid(cross-modality visible-infrared reid) 中,取得了优异的成绩。该方法由 起源人工智能研究院(IIAI)的 Mang Ye 博士提出。
  • sbs(stronger_baseline): sbs  由 JDAI-CV 实验室发布,由 fastreid 工具箱实现。该方法基于前三者的基础,同时加入了 circle loss/ arcface 等损失函数,使得其不仅在公开学术数据集上取得了目前最好的性能,更在大规模数据集上得到了验证。
说了这么多,就是希望通过回顾和总结已有的 reid 工具箱,一是向 reid 社区的建设者聊表敬意,二是为刚入门 reid 的同学提供一个选择。

为什么要 light-reid

        通过回顾已有的 reid 工具箱我们可以发现,目前的 reid 工具箱/基础模型 全部关注 reid 精度(CMC,mAP)。除了精度,速度也是一个非常重要的指标。尤其是在实际业务场景中,在计算资源有限的情况下,快速的推理、搜索显得尤为重要。为了补齐目前 reid 工具箱的短板,我们提出的 light-reid 工具箱关注精度的同时,更可以加速推理和搜索。         结合以上3个目前已有个 reid 工具箱,我们的 light-reid 可以完善 reid 工具箱的生态,从精度,到速度,再到工业应用,形成良好闭环。这也是我们提出 light-reid 工具箱的初衷与动机。 light-reid 提供了针对 reid 任务的完整的工具箱,包括数据准备、模型搭建、训练、评估、加速等。它具有如下特点:
  • 模块化和灵活的设计:方便研究者快速将新的模块插入和替换现有流程中,帮助学界快速验证新思路;
  • 众多State-of-the-art预训练模型:我们初步实现了2个 reid baseline,包括 bagtricks 和 agw ,未来将会实现更多 reid baseline。
  • 一键加速:轻松的对现有 reid 模型进行轻量化改进,提高其特征提取(feature extraction)速度和图像检索(image retrieval)速度。

什么是light-reid

132cb0ed4cf63e57db8935518e403bfc.png图:light-reid 框架

        light-reid 框架如上图所示, 一共分为3个模块,分别是 light-model (轻量化模型),light-feature(轻量化特征)以及 light-search(轻量化搜索):
  • light-model (轻量化模型):轻量化模型模块通过使用模型蒸馏的方法,学习到性能较好、计算量较小的 reid 模型。实验结果表明,该模块可以对特征提取加速3x(resnet18 v.s. resnet50),且精度(mAP)降低控制在 2% 左右。
  • light-feature (轻量化特征):light-feature 通过对实值(real-value)特征进行二值量化(binarization),降低存储空间并加速距离计算。实验结果表明,相比 float64 型实值编码,二值编码存储空间降低64倍,距离计算加速4x精度损失几乎为零
  • light-search (轻量化搜索):light-search 通过我们在ECCV2020上提出的层级搜索策略,更多的利用短码进行快速粗排,仅对少量候选样本进行精排序。实验结果表明,该方法可以加速搜索5x左右,精度降低控制在2%。
  • light-reid(轻量化行人重识别):以上三个模块构成了我们的轻量化行人重识别,同时使用,可对特征提取加速3x对搜索加速20x,精度损失仅在4%左右。

4步入门 light-reid

        light-reid 提供了简单灵活的模块,方便使用者构建数据集、搭建模型,进行训练、测试以及可视化。通过使用 light-reid 工具箱,我们可以快速构建一个 reid 模型。 构建训练和测试集
# build datasetdatamanager = lightreid.data.DataManager(       sources=lightreid.data.build_train_dataset([args.dataset]),       target=lightreid.data.build_test_dataset(args.dataset),       transforms_train=lightreid.data.build_transforms(img_size=[256, 128], transforms_list=['randomflip', 'padcrop', 'rea']),       transforms_test=lightreid.data.build_transforms(img_size=[256, 128], transforms_list=[]),       sampler='pk', p=16, k=4)
构建模型、损失函数和优化器
# build modelbackbone = lightreid.models.backbones.resnet50(pretrained=True, last_stride_one=True)pooling = nn.AdaptiveAvgPool2d(1)head = lightreid.models.BNHead(in_dim=backbone.dim, class_num=datamanager.class_num)model = lightreid.models.BaseReIDModel(backbone=backbone, pooling=pooling, head=head)# build losscriterion = lightreid.losses.Criterion([       {'criterion': lightreid.losses.CrossEntropyLabelSmooth(num_classes=datamanager.class_num), 'weight': 1.0},       {'criterion': lightreid.losses.TripletLoss(margin=0.3, metric='euclidean'), 'weight': 1.0},])# build optimizeroptimizer = torch.optim.Adam(model.parameters(), lr=0.00035, weight_decay=5e-4)lr_scheduler = lightreid.optim.WarmupMultiStepLR(optimizer, milestones=[40, 70], gamma=0.1, warmup_factor=0.01, warmup_epochs=10)optimizer = lightreid.optim.Optimizer(optimizer=optimizer, lr_scheduler=lr_scheduler, max_epochs=120)
构建引擎(可选是否使用 light-reid)
# build enginesolver = lightreid.engine.Engine(    results_dir=args.results_dir, datamanager=datamanager,         model=model, criterion=criterion, optimizer=optimizer, use_gpu=True,     light_model=args.lightmodel, light_feat=args.lightfeat, light_search=args.lightsearch)
运行(训练、测试、可视化)
# trainsolver.train(eval_freq=10)# testsolver.resume_latest_model()solver.eval(onebyone=True)# visualizesolver.visualize()

实验结果

        基于 light-reid 实现的 bagtircks 方法在 Market1501 的数据库上的测试结果如下图所示。light-reid 可以加速搜索 22x,特征提取速度 3x,精度损失大约在 4%. 更多实验结果请参考 github。
  • light model 加速特征提取 3x:特征提取速度从79ms 加速到 23ms,搜索速度从 382ms 加速到 59ms,而精度损失控制在2%左右;
  • light feature 加速搜索 4x,精度损失几乎为零:搜索速度从 382ms 加速到 83ms,精度几乎不会降低;
  • light search 加速搜索 22x:搜索速度从382ms 加速到 17ms,精度损失大约在2%;

606d52fcc36f1745ae7fbc829cd7629b.png

图:在Market上实验结果

总结

        reid 社区目前已经多个工具箱以及 baseline,它们极大的促进了 reid 技术的发展。但美中不足的是,它们主要关注精度,却忽视了速度这个重要指标。我们提出的 light-reid 工具箱在关注精度的同时,提供了一键式的加速算法,提高推理以及搜索速度。结合已有 reid 工具箱,我们的 light-reid 完善了 reid 工具箱的生态,从精度,到速度,再到工业应用,形成良好闭环。

Author :https://wangguanan.github.io/ GitHub :https://github.com/wangguanan/light-reid Pap er :https://arxiv.org/abs/2008.06826

652d07fc01e8af74273108347e3e1fc3.gif

专知,专业可信的人工智能知识分发,让认知协作更快更好!欢迎注册登录专知www.zhuanzhi.ai,获取5000+AI主题干货知识资料! cc6a4bddded912aa290125420394203d.png 点击“ 阅读原文 ”,了解使用 专知 ,查看获取5000+AI主题知识资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值