半自动的行人重识别数据标注算法Tracking + infomap

Fast-ReID系列文章目录



前言

本人做行人重识别工程的数据准备过程。借鉴人脸的数据聚类清洗方法实现半自动行人重识别数据标注。

一、行人截取

使用行人跟踪算法,讲视频中行人截取出来: 使用yolov5 + deepsort 实现行人跟踪参考此方法Yolov5_DeepSort GitHub,并稍作修改以过滤掉不完整和太小的行人
1. 限制检测到行人的长宽比例和大小

w = x2 - x1
h = y2 - y1
person_rate = h / w
if person_rate > 2.1 and w > 96 and h > 128:
    # print(person_rate)
    if frame_rate % 5 != 0:
        continue
    cv2.imwrite(os.path.join(save_path, '{}{}{}{}{}{}'.format(str(id).zfill(4), '_c2-', video_name, '_', str(person_num), '.jpg')), img[y1:y2, x1:x2])

2. 跳帧截取

if frame_rate % 25 != 0:
    continue

3. 调整行人置信度过滤

parser.add_argument('--conf-thres', type=float, default=0.65, help='object confidence threshold')
parser.add_argument('--iou-thres', type=float, default=0.85, help='IOU threshold for NMS')

4. 通过以上方法再加上人工过滤,就能获得做了部分标注的行人重识别数据集了:
0002:行人ID, c1-1:摄像头号,98:该id下行人图片序号
在这里插入图片描述
但是我们知道跟踪算法很容易出现id切换,就会出现一个视频同一行人有多个ID。那么这时如果人工做去重的话就效率很低,可以借鉴人脸聚类的方法实现行人聚类。

二、行人聚类

人脸聚类方法文章
GitHub
对于给定的大量待聚类行人图片,找一个用开源数据训练的reid模型,本人使用得是用fastreid训练的模型,利用reid特征抽取组件(reid_feature_extract)进行行人特征抽取,并对用抽取的行人特征进行人脸聚类并进行图片归档。
main.py代码如下(示例):

extract_features = torch.nn.functional.normalize(query_feats, dim=1, p=2).data.cpu().numpy()            #替换成行人特征提取
print('features:', extract_features.shape)    # (N, 2048) N:图片数量
with Timer('All Steps'):
    global args
    args = parser.parse_args()
    label_path = None
    pred_label_path = None
    # with Timer('Extract Feature'):   注释掉人脸特征提取
    #     extract_features = extract_fature(args)   
    if eval(args.is_evaluate):
        args.label_path = 'data/tmp/test.meta'
    if not eval(args.is_cuda):
        args.knn_method = 'faiss-cpu'
    with Timer('Face Cluster'):
        cluster_main(args, extract_features)

face_cluster_by_infomap.py代码如下(示例):

def get_dist_nbr(features, args):
    # features = np.fromfile(feature_path, dtype=np.float32)
    # features = features.reshape(-1, 256)  
    features = features.reshape(-1, 2048)  #修改 行人输出2048维特征
    features = l2norm(features)

    index = knn_faiss(feats=features, k=args.k, knn_method=args.knn_method)
    knns = index.get_knns()
    dists, nbrs = knns2ordered_nbrs(knns)
    return dists, nbrs

最后生成如图所示,每个文件夹下保存不同时段不同角度的行人图片,一个文件夹对应一个ID,最后在进行人工筛选。
在这里插入图片描述

聚类优化

reid模型和聚类算法并不能做到完全准确,需要不断的优化reid模型对我们视频场景的泛化能力和调整聚类算法的参数,经过几次迭代后提升聚类准确度。

parser.add_argument('--k', default=80, type=int)
parser.add_argument('--min_sim', default=0.5, type=float)
  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值