本文主要是介绍半自动的行人重识别数据标注算法Tracking + infomap,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Fast-ReID系列文章目录
文章目录
- 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:continuecv2.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 argsargs = parser.parse_args()label_path = Nonepred_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)
这篇关于半自动的行人重识别数据标注算法Tracking + infomap的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!