行人图像特征表示提取-Market1501

我要开发同款
匿名用户2024年07月31日
15阅读
开发技术passvitb、pytorch
所属分类ai、PASS-reID、Person Re-Identifica、transformer、Rank-1、mAP、cv
开源地址https://modelscope.cn/models/iic/cv_passvitb_image-reid-person_market
授权协议Apache License 2.0

作品详情

passvitb-image-reid-person 模型介绍

本模型为图像特征表示提取别模型,使用ViT作为主干网络,输入图像,输出图像的特征表示(image embedding),图像的特征表示可以用于计算两张图片之间的相似程度,从而判断两张图片中的人是不是同一个个体。

模型描述

该模型以ViT作为主干网络,使用PASS方法进行自监督预训练,并在下游数据集上finetune。之前的重识别自监督工作,已经证明了在无标签的图片数据上预训练的效果优于直接使用通用分类的预训练模型,但是之前的重识别自监督工作并没有对自监督方法做针对性的改进,而本模型提出的PASS方法结合重识别任务的特点,将人体局部特征引入到自监督的过程中,更加适合重识别任务,最终也达到更好的效果。相应的论文发表于ECCV 2022,在多个数据集上达到SOTA。PASS的整体流程如下图所示:

PASS流程图

期望模型使用方式以及适用范围

该模型适用于行人重识别场景,输入包含人的图像,输出图像的特征表示,可利用该特征表示进行后续的相似度计算和图像排序。

如何使用

在ModelScope框架上,提供输入图片,即可以通过简单的Pipeline调用使用当前模型,得到图像的特征表示,本模型的输出为一个1536维的特征向量。

代码范例

基础示例代码。下面的示例代码展示的是如何通过一张图片作为输入,得到图片对应的特征向量。

from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

model_id = 'damo/cv_passvitb_image-reid-person_market'
input_location = 'https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/image_reid_person.jpg'

image_reid_person = pipeline(Tasks.image_reid_person, model=model_id)
result = image_reid_person(input_location)
print("result is : ", result[OutputKeys.IMG_EMBEDDING])

相似度示例代码。在实际使用过程中,得到图片的特征向量通常不是最终的期望的输出形式,用户可以基于特征向量进行图片之间的相似度计算,进而对图片进行排序,完成最终的图片查询任务。下面是一个简单的求两张图片余弦相似度的示例代码:

import numpy as np

from modelscope.outputs import OutputKeys
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks

model_id = 'damo/cv_passvitb_image-reid-person_market'
input_location_1 = 'https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/image_reid_person.jpg'
input_location_2 = 'https://modelscope.oss-cn-beijing.aliyuncs.com/test/images/image_reid_person.jpg'

image_reid_person = pipeline(Tasks.image_reid_person, model=model_id)
result_1 = image_reid_person(input_location_1)
result_2 = image_reid_person(input_location_2)

feat_1 = np.array(result_1[OutputKeys.IMG_EMBEDDING][0])
feat_2 = np.array(result_2[OutputKeys.IMG_EMBEDDING][0])
print(f'feat_1: {feat_1.shape}')
print(f'feat_2: {feat_2.shape}')
feat_norm_1 = feat_1 / np.linalg.norm(feat_1)
feat_norm_2 = feat_2 / np.linalg.norm(feat_2)
score = np.dot(feat_norm_1, feat_norm_2)
print(f'cosine score is: {score}')

模型局限性以及可能的偏差

本模型基于Market1501数据集进行finetune,在开放场景下的精度会下降。

训练数据介绍

本模型是基于Market1501数据集训练得到,该数据集为重识别领域常用数据集,包含了32668个矩形框标注,共1501个个体。该数据集具有以下两个特点:

  • 数据集中的矩形框是使用Deformable Part Model (DPM)算法检测得到;
  • 除了正确的矩形框,本数据集也保留了一些错误的矩形框作为干扰;

模型训练流程

本模型的训练过程主要分为自监督预训练有监督微调两个阶段,目前暂不支持在线训练。

数据评估及结果

模型在Market1501的验证集上客观指标如下:

Method mAP Rank-1
PASS ViT-B/16 0.933 0.969

相关论文以及引用信息

本模型主要参考论文如下(论文链接:link):

@article{zhu2022part,
  title={PASS: Part-Aware Self-Supervised Pre-Training for Person Re-Identification},
  author={Zhu, Kuan and Guo, Haiyun and Yan, Tianyi and Zhu, Yousong and Wang, Jinqiao and Tang, Ming},
  journal={arXiv preprint arXiv:2203.03931},
  year={2022}
}
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论