行人ReID网络:MGN 2018
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了行人ReID网络:MGN 2018相关的知识,希望对你有一定的参考价值。
参考技术ALearning Discriminative Feature with Multiple Granularities for Person Re-Identification
Global和partial feature结合。提出了MGN: Multiple Granularity Network,多分支的深度网络:一个 全局特征 (global feature representation)分支,两个 局部特征 分支。本文将图片(抠出来的人物图)统一分割成几个区域,并在不同的局部特征分支上改变number of parts,来实现多细粒度。
在Market-1501, DukeMTMC-reid 和 CUHK03三个数据集上达到了SOTA。
行人ReID的主要挑战来自于人体不同的姿态,遮挡,衣物,背景的杂乱信息,以及detector的漏检等。
一个直觉性的提取行人特征的方法是直接对检测框抠图出来的所有行人图片进行特征提取,也就是全局特征。全局特征的目的是捕捉不同行人间最明显的特征来代表这个人,比如衣服的颜色。但这个方法在大型场景下(行人多而复杂)有局限性。在一个场景中学到的全局特征,也往往不好迁移到别的场景去。
为了缓解这些问题,一些方法提出可以先去定位突出的身体部分,每一个身体部分只包含这一部分的局部信息,而不会包含其他部分的干扰信息。这样我们就能训练局部特征更多地集中在identities,并让其对全局信息起到辅助作用。
基于身体部分的行人ReID方法大致可以分为三种:
但是这些方法也有明显的缺点:
第一,姿态或者遮挡的变化会影响局部特征的稳定性(比如当严重遮挡时你分割出来的身体部分可能已经完全不是目标任务的身体部分了)
第二,these methods almost only focus on specific part with fixed semantics , but cannot cover all the discriminative parts
第三,大多数的前作都不是端到端训练,这增加了模型学习的难度。
本文提出了一个结合全局信息和不同细粒度的局部信息的特征学习策略,如 Fig 1 所示:
不同的分割区域数量就引入了不同的细粒度。本文定义 Global Branch 仅仅包含整个人物的图片(不分割),随着被分割的区域个数增多,局部特征包含的更精细的区分信息就越多(其他身体部分的信息都会排除掉了)。既然深度学习机制可以在整张抠图上捕捉人体上的大致注意力信息,那么它也可以捕捉到局部特征中更集中的显著性偏好。MGN就是基于这样的idea,把整个网络分成了一个全局和两个局部分支。
MGN的每个局部分支中,我们把 globally-pooled feature maps 分成了不同数量的stripes,作为部分人体的区域,来单独学习局部特征。和其他方法相比,本文的局部特征只利用了 equally-divided parts ,却超过了之前的方法。
如 Fig 2 所示:
Backbone 是 ResNet-50,在此网络的 res_conv4_1 residual block之后,网络结构被分成了3个分支,每个分支和原始的ResNet的后续结构类似。之后各自经过 1x1 conv 层减少channel数,最后concat起来成为一个代表当前行人的完整的feature map。
分类 -> Softmax Loss
metric-learning -> Triplet loss
Diversity of granularity
3个分支实际上学到的不同的重点的feature representation。全局分支有着大一点的感受野和global max-pooling,它捕捉到的是整体性的、稀疏的特征。而局部分支中没有用strided convolution,且作用在人体部分的图片上,得到的特征更加精细(但是没有全局信息)。不同分支学到了不同侧重点的东西可以有互补作用,这可能是本模型表现提升的原因。
yolov5_reid附代码,行人重识别,可做跨视频人员检测
该项目利用yolov5+reid实现的行人重识别功能,可做跨视频人员检测。
应用场景:
可根据行人的穿着、体貌等特征在视频中进行检索,可以把这个人在各个不同摄像头出现时检测出来。可应用于犯罪嫌疑人检索、寻找走失儿童等。
支持功能:
1.reid训练
2.人员标注
3.人员查找(可做跨视频人员检测)
目录
Reid训练
ps:Reid理论部分参考:Reid理论视频参考课程
项目支持多网络,如resnet50, resnet50_ibn_a, se_resnext50等主干网络。
下载代码后输入:
python tools/train.py --config_file configs/softmax_triplet.yml MODEL.DEVICE_ID "('0')" DATASETS.NAMES "('market1501')" DATASETS.ROOT_DIR "(r'./data')
其中softmax_triple.yml是配置文件(里面包含了训练epochs,学习率,优化器等参数配置)。
训练可选参数 :
参数说明:
--config_file: 配置文件路径,默认configs/softmax_triplet.yml
--weights: pretrained weight path
--neck: If train with BNNeck, options: bnneck or no
--test_neck: BNNeck to be used for test, before or after BNNneck options: before or after
--model_name: Name of backbone.
--pretrain_choice: Imagenet
--IF_WITH_CENTER: us center loss, True or False.
配置文件的修改:
(注意:项目中有两个配置文件,一个是config下的defaults.py配置文件,一个是configs下的yml配置文件,一般配置yml文件即可,当两个配置文件参数名相同的时候以yml文件为主,这个需要注意一下)
configs文件:
以softmax_triplet.yml为例
SOLVER:
OPTIMIZER_NAME: 'Adam' # 优化器
MAX_EPOCHS: 120 # 总epochs
BASE_LR: 0.00035
IMS_PER_BATCH: 8 # batchCHECKPOINT_PERIOD: 1 # 权重保存周期
LOG_PERIOD: 1 # 日志周期
EVAL_PERIOD: 1 # 测试周期,测map
TEST:
IMS_PER_BATCH: 4 # test batch
RE_RANKING: 'no'
WEIGHT: "path" # test weight path
FEAT_NORM: 'yes'
OUTPUT_DIR: "/logs" # model save path
=> Market1501 loaded
Dataset statistics:
----------------------------------------
subset | # ids | # images | # cameras
----------------------------------------
train | 751 | 12936 | 6
query | 750 | 3368 | 6
gallery | 751 | 15913 | 6
----------------------------------------
Loading pretrained ImageNet model......
2023-02-24 21:08:22.121 | INFO | engine.trainer:log_training_loss:194 - Epoch[1] Iteration[19/1484] Loss: 9.194, Acc: 0.002, Base Lr: 3.82e-05
2023-02-24 21:08:22.315 | INFO | engine.trainer:log_training_loss:194 - Epoch[1] Iteration[20/1484] Loss: 9.156, Acc: 0.002, Base Lr: 3.82e-05
2023-02-24 21:08:22.537 | INFO | engine.trainer:log_training_loss:194 - Epoch[1] Iteration[21/1484] Loss: 9.119, Acc: 0.002, Base Lr: 3.82e-05
训练好的权重会自动保存在logs下。
人员标注
可将视频中嫌疑人(特定人员),可以运行person_search/get_query.py,按住鼠标左键不放,拖动进行人员款选标注,标注后的人员会自动保存在query文件中(命名格式为markt1501),按空格键继续播放视频。
也可以直接将图像放在query文件中,但名字也需要按mark1501命名。
人员查找(yolov5+Reid)
参数说明:
--weights: yolov5权重路径
--source: video/file/ path
--data: data/coco128.yaml
--imgsz: 输入图像大小,默认(640,640)
--conf_thres:置信度阈值
--iou_thres:iou阈值
--classes:过滤的类
--half:半精度推理
--dist_thres:reid对比的距离阈值(小于该阈值判断为同一个人)
--save_res:保存视频图像
python search.py --weights yolov5s.pt --source 0 --dist_thres 1.5
如果需要检测视频或者多视频(跨视频检测),需要指定source路径。
代码:
git clone https://github.com/YINYIPENG-EN/yolov5_reid.git
权重下载:
检测:将 ReID_resnet50_ibn_a.pth放在👂person_search/weights文件下,yolov5s.pt放person_search下
训练:将 r50_ibn_2.pth,resnet50-19c8e357.pth放在yolov5_reid/weights下
注意:训练和检测(person_search)是两个独立的项目!!
链接:百度网盘 请输入提取码 提取码:yypn
以上是关于行人ReID网络:MGN 2018的主要内容,如果未能解决你的问题,请参考以下文章