ReID实战推荐——罗浩——常用的骨干网

阅读: 评论:0

ReID实战推荐——罗浩——常用的骨干网

ReID实战推荐——罗浩——常用的骨干网

课程中常用的代码句

1. pid, _ = map(int, pattern.search(img_path).groups())#当后面的语句返回多个东西时,我只想要一个值,就可以用‘_’来不取
2. from IPython import embed#加断点,查询网络的进展情况embed() #可同时加多个embed,用exit退出到下一个embed 
3.in_size=x.size(0)#x会返回(b,c,w,h)这里返回第一个维度batch的大小
4.torch.cat(outputs,dim=1) #输出size[b,c,w,h],所以dim=1沿着第一个维度C拼接
5.input=torch.Tensor(input).view(1,1,5,5)#B*C*W*H压缩成4维f = x.view(x.size(0), -1)#将x变成2维,第一维大小为x.size(0)=batch,第二维(-1)自动压缩
6.x.shape#查看tensor的大小
7.conv_layer.weight.data = kernel.data #直接对某个层.weight.data赋值
8.self.base = nn.Sequential(*list(resnet50.children())[:-2])#不要restnet50的最后两行,自己添加下面两行
#用nn.Sequential来包裹model的两层参数,每次更新只更新这两层# optimizer = init_optim(args.optim, nn.Sequential([v2])
9.调试代码时,可自己生成数据
只有torch.Tensor,torch.randn用来生成数据&#sor(labels)是转化为tensor数据格式
imgs=torch.Tensor(32,3,256,128)#全0矩阵
x = torch.randn(32,2048)#均值为0的矩阵
labels=torch.Tensor(labels)#生成数据带点
labels&#sor(labels)#生成数据不带点
10.assert len(x.size()) == 3#判断上面的输入是不是3维
11.调用要从最初的文件夹开始:from luohao_person_reid.AlignedReID_master.aligned.local_dist import *
12. # 保存网络训练最好的权重best_model_wts = copy.deepcopy(model.state_dict())best_acc = 0.0# 保存测试阶段,准确率最高的模型if phase == 'val' and epoch_acc > best_acc:best_acc = epoch_accbest_model_wts = copy.deepcopy(model.state_dict())model.load_state_dict(best_model_wts)# 最后网络导入最好的网络权重13.[model.state_dict()和model.parameters()两个方法的差异比较](=102&utm_term=model.state_dict%28%29%E5%92%8Ccnn.paramet&utm_medium=distribute.pc_-task-blog-2~all~sobaiduweb~default-0-103544175&spm=1018.2118.3001.4187)14. a=torch.Size([32, 3, 128, 128]),a[0]=torch.Size([3, 128, 128])取出第一张图片的信息15. 两种save图片方式对比:数据类型不同,通道不同法1:image_PIL = transforms.ToPILImage()(image_tensor[0])#取出第一张图片image_tensor[0].shape=torch.Size([3, 128, 128]) image_PIL.save(os.path.sult_path, 'img%d.png' % (i + 1)))type(image_PIL)=PIL.Image.Image   <PIL.Image.Image image mode=RGB size=128x128 at 0x205F779ACF8>法2:cv2.imwrite(os.path.sult_path, 'cam%d.png' % (i + 1)), result)#(128, 128, 3),result=numpy.ndarray
a=tensor a.numpy()变成numpy

罗浩github---------ReID课程教学

目录

  • 1. Reid简介
    • 难样本提取
    • rank+map计算
    • center loss
  • 2. 表征学习
  • 3. 度量学习
  • 4. 全局特征+局部特征
    • 1. 水平切块算法
      • Aligned ReID
      • PCB
      • ICNN
      • SCP NET
    • 2. 姿态信息
      • PIE
      • SPINDLE NET
      • PDC
      • GLAD
      • PABP
    • 3. 分割信息
    • 4. 网格特征
  • 5. 序列重识别
  • 6. 基于GAN
      • GAN+LSRO
      • Cycle Gan
      • PTGAN
      • PNGAN(生成8姿态)
  • 7. Ptorch应用
  • 8. 工程trick

1. Reid简介



数据集

一次投放5个样本,一个样本只检测出一次。


rank1+rank2+rank3+…=CMC

难样本提取

rank+map计算

center loss


2. 表征学习








3. 度量学习

度量学习不需要表征学习的FC(用来分类),直接对比特征图就行





python实现距离矩阵,用于难样本的选择

import torch
inputs&#sor([[1.,1.,2.],#这里注意tensor数据类型数字要加点,否则后面运算会出现错误RuntimeError: log_vml_cpu not implemented for 'Long'[1,0,1],[1,2,1],[1,3,2]])
dist = torch.pow(inputs, 2).sum(dim=1, keepdim=True).expand(4, 4)
dist = dist + dist.t()
dist.addmm_(1, -2, inputs, inputs.t())dist=dist.clamp(min=1e-12).sqrt()#裁剪防止有0存在,梯度会存在问题
print(dist)

4. 全局特征+局部特征

  1. 全局

  2. 局部




1. 水平切块算法

Aligned ReID

这种情况更适合真实的环境(不对齐现象),而用的数据集是经过手动处理过的。


实现

我认为DMLI只用用于解释才产生的这个名词,代码直接将32x128x8变成32x8x128用于local distance训练,并未体现DMLI

PCB

Aligned和PCB都是经过水平池化生成g
不同之处Aligned用vector_h 生成距离矩阵,用于hard triple loss
PCB将vector_h 的多个分支送到FC,用于ID交叉熵loss

PCB_github

ICNN

SCP NET

2. 姿态信息

PIE

SPINDLE NET

PDC

GLAD

PABP

前面几种是part级别,PABP是像素级别

3. 分割信息



SPReID

4. 网格特征



5. 序列重识别


提取序列特征的方法
1.

2.

6. 基于GAN


不同GAN解决不同问题




应用于ReID

GAN+LSRO

Cycle Gan



PTGAN


PNGAN(生成8姿态)



7. Ptorch应用

tensorflow静态图,只能看到是结点,但是不知道结点里是啥

8. 工程trick

本文发布于:2024-01-31 02:43:23,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170664020624769.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:实战   骨干网   常用   ReID   罗浩
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23