两步法行人搜索实验流程

本文详细介绍了如何使用两步法进行行人搜索实验,包括训练行人检测器、测试与剪裁、标注、归类以及构建和测试ReID数据集的过程,涉及MMDetection和不同参数调整。
摘要由CSDN通过智能技术生成

行人重识别是给定一张query,从若干张剪裁好的行人中识别出query。

行人搜索是给一张query和多张包含很多人的大图作为gallery,从大图中检测并识别出query。

行人搜索分为端到端(end to end person search)方法和两步法(two step person search)方法。

端到端方法的代码现在已经公开了很多,但是两步法没有公开代码,如果自己想做实验实践一番,该怎么做呢?以下是我总结出来的步骤:

两阶段流程

1.训练,在行人搜索数据集上训练检测器,比如faster
项目可以是PSTR-main(数据集类 配置文件都方便改)
得到epoch_xx.pth

训练命令示例
cd /home/Projects/PSTR-main; nohup python tools/train.py --config configs/pstr/prw_faster_rcnn_r50_fpn_2x_coco.py  \
--work-dir  /home/Newdisk/exprlogs/twosteppsnsch/PRW_first --gpu-ids 1   \
> /home/Newdisk/exprlogs/twosteppsnsch/exproutput/PRW_first.txt 2>&1 &

这一步训练时,建议使用mmdet,里面有多种检测器可以选择。训练时需要CoCo版本的数据集标注,这个在AlignPS中已经提供好了,可以直接用。上面的PSTR也可以换成AlignPS。


2.测试,对测试集的gallery经过检测,得到每张图上的行人坐标及其得分。
得到faster.pkl文件。

测试命令示例
bash /home/Projects/twostage_mmdetection-2.25.2/tools/dist_test.sh /home/Projects/PSTR-main/configs/pstr/prw_faster_rcnn_r50_fpn_2x_coco.py   \
 65511 /home/Newdisk/exprlogs/twosteppsnsch/PRW_first/epoch_24.pth 2  \
--work-dir  /home/Newdisk/exprlogs/twosteppsnsch/PRW_first/test_0d5_scores --eval bbox \
--out /home/Newdisk/exprlogs/twosteppsnsch/PRW_first/test_0d5_scores/PRW_first_score_0d5.pkl --score-thresh 0.5

行人搜索中召回率也很重要,因为最终的AP=初始AP*召回率。调整召回率就对应上面score-thresh参数(前景得分阈值)。如果前景得分阈值设置低了,那么会保留更多的proposal,召回率更高。也就是说有ID的行人被检测器保留下来的更多,副作用就是也会带来更多的无ID的行人图像,测试时干扰图像就更多。自己权衡一下收益选择合适的值。


3.剪裁,根据检测框把gallery中行人剪裁出来,命名为imgname_index.jpg,imgname是图像原始名称,index为当前行人是该场景图第几个行人。
Crop_and_Label_Imgs_PRW.crop_testimgs(crop_img_save_dir, fg_score_thresh, pklpath, model=None)
得到剪裁的图像集合
比如 /home/Newdisk/exprlogs/twosteppsnsch/PRW_first/test_0d5_scores/Faster_imgs_PRW_fgscore_0d5/faster

4.标注,把剪裁的图像根据它和GT的IOU是否大于0.5,决定要不要对其赋予真值ID。
Crop_and_Label_Imgs_PRW.assign_id_all_IoU_gt_thresh(crop_img_save_dir, fg_score_thresh, iou_thresh, record_dir,pklpath=None, mdl=None)

得到分配ID后的剪裁图像集合
比如 /home/Newdisk/exprlogs/twosteppsnsch/PRW_first/test_0d5_scores/Faster_imgs_PRW_fgscore_0d5/faster

5.归类,CUHK系列的数据集测试时非全集测试,而是TestG100,因此需要把每个gallery上检测的几个人都归在一类。PRW不需要,本身就是全集测试

6.ReID测试,先构造检测器版的ReID数据集,其中训练集和query用GT剪裁的训练集,测试集的gallery用上面第四步或第五步的结果。每张图都要用Market的形式命名,最终组织成Market1501的格式在ReID模型上测试。三个数据集的测试流程在evaluate_in_CUHK_SYSU_settings,evaluate_in_drsu_settings,eval_in_PRW_settings里面放着。
注意点:
        各个数据集的训练集需要ID重映射为0开始的连续ID,便于训练时分类头的学习和定义。
ReID测试时难免出现ReID版数据集上训练好的模型分类器ID数和检测器生成的ReID数据集上ID数不一致的问题,可能是数据集划分时考虑不严谨。
问题不大,把根据GT剪裁的ReID版数据集的训练集直接搬运到检测器版ReID训练集上就行,因为我测试时不需要训练集,也不需要训练集上学习的分类头,只借你的主干网络用用。
        另外,不同于ReID排除-1的样本,CUHK数据集和PRW都得留着ID=-1的样本。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值