Video-based-ReID_TP

前言

接下来,我们就来看看视频行人重识别训练模型的其中一种temporal aggregation method:temporal pooling。
这是比较简单的一种方式,效果也不错,是将通过CNN网络提取到的每一帧T图像特征根据seq_len,使用average pooling融合成每一个clips的特征。
如A部分:
在这里插入图片描述

模型输入

  • imgs
    • imgs.size() = [b,s,c,h,w]
    • 在训练级中 b为batch通常设置为32,seq_len设置为4,c为通道数为3,h图片高,w图片宽

模型初始化参数

        model = models.init_model(name=args.arch, num_classes=dataset.num_train_pids, loss={'xent', 'htri'})
  • name 使用的模型名称
  • dataset.num_train_pids 分类时的分类数
  • loss xent=交叉熵损失 htri=Tripletloss

模型实现

class ResNet50TP(nn.Module):
    def __init__(self, num_classes, loss={'xent'}, **kwargs):
    	# 继承的是ResNet50TP父类的初始化方法
        super(ResNet50TP, self).__init__()
        # 设置loss总类
        self.loss = loss
        # 使用resnet501模型
        resnet50 = torchvision.models.resnet50(pretrained=True)
        # 使用resnet501模型 (除了最后两层)
        self.base = nn.Sequential(*list(resnet50.children())[:-2])
        # 特征维数为2048
        self.feat_dim = 2048
        self.classifier = nn.Linear(self.feat_dim, num_classes)

    # 前向传播 x=imgs=[32,4,3,224,112]  [b,t,c,h,w]
    def forward(self, x):
        # b = 32 batch
        b = x.size(0)
        # t = 4 seq——len
        t = x.size(1)
        # x = [128,3,224,112]
        x = x.view(b*t,x.size(2), x.size(3), x.size(4))

        # resnet
        # x = [128,2048,7,4]  CNN提取features
        x = self.base(x)
        # 平均池化   这里得到的是每一帧的features
        # x = [128,2048,1,1]
        x = F.avg_pool2d(x, x.size()[2:])
        # x = [32,4,2048]  
        x = x.view(b,t,-1)
        # x= [32,2048,4]
        x=x.permute(0,2,1) 
        # 这里对得到的features进行平均池化 得到每个clips的feature
        f = F.avg_pool1d(x,t)
        # f= [32,2048]
        f = f.view(b, self.feat_dim)
        # embed()
        # 不是训练阶段的化 直接使用得到的features
        if not self.training:
            return f
        # 将特征放入全链接层
        y = self.classifier(f)
		# 根据计算loss的方法不同,返回不同的参数
        if self.loss == {'xent'}:
            return y
        elif self.loss == {'xent', 'htri'}:
            return y, f
        elif self.loss == {'cent'}:
            return y, f
        else:
            raise KeyError("Unsupported loss: {}".format(self.loss))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: person_reid_baseline_pytorch是一个基于PyTorch框架的人员识别基线模型。它可以用于训练和测试人员识别模型,以识别不同人员之间的差异和相似之处。该模型提供了一些基本的功能,如数据加载、模型训练、模型测试等,可以帮助用户快速搭建和测试自己的人员识别模型。 ### 回答2: person_reid_baseline_pytorch是一个基于PyTorch框架的人体重识别模型。该模型采用卷积神经网络(Convolutional Neural Network,简称CNN)架构,采用多个卷积层和池化层进行特征提取,最后经过全连接层得到人物特征向量,实现了对人体进行识别。 该模型的训练数据集一般采用Market1501数据集,它包含超过1501个不同身份的超过32000张图片,是一个非常大且具有代表性的数据集,训练出的模型能够具有很好的泛化能力。 在训练过程中,除了使用标准的交叉熵损失作为损失函数外,还使用Triplet Loss作为损失函数的一种变形。该损失函数能够比较好地处理重识别中的最大间隔问题,并且能够实现对同一身份的多张图片之间的特征相似度比较。 对于测试集的预测部分,该模型采用的是余弦相似度进行特征向量相似度计算,相似度越高则说明两个图片中的人物越有可能是同一个人,可以实现良好的识别结果。 总的来说,person_reid_baseline_pytorch基于PyTorch框架实现的人体重识别模型,通过CNN架构进行特征提取,使用Triplet Loss进行训练,使用余弦相似度进行特征向量相似度计算,能够实现对人体进行高效准确的识别。 ### 回答3: person_reid_baseline_pytorch 是一个基于 PyTorch 框架的行人重识别算法基线模型,它实现了一个简单但功能齐全的行人重识别框架,可以训练和测试基于清晰照片的行人重识别任务。 该模型包含了基本卷积神经网络(CNN)的搭建和训练,其中包括几个关键部分:数据加载、模型定义、训练和测试。它使用数据增强技术和三元损失函数来训练模型,目的是使相同人的图像对与不同人的图像对之间的距离最大化。 person_reid_baseline_pytorch 采用 Market-1501 数据集进行测试,并在该数据集上取得了不错的结果。该数据集包含 1501 个行人,共有 12936 张图像,其中包括 6 种视角和多种行为。该算法读取图像数据并将之前处理后的行人图像输入神经网络,以便为每个图像计算行人的特征向量。然后,使用相关算法来比较图像对的距离,并确定它们是否属于同一人。该算法的性能指标包括准确度、精度和召回率等。 总之,person_reid_baseline_pytorch 提供了一个简单但完整的框架和基线模型,可以作为进一步解决行人重识别问题的基础。无论是学术界还是商业界,这种算法都有广泛的应用前景。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值