class AlignedTripletLoss(nn.Module):def __init__(self, margin=0.3):super().__init__()# margin就是三元组损失中的边界αself.margin = margin# 计算三元组损失使用的函数self.ranking_loss = nn.MarginRankingLoss(margin=margin)def forward(self, inputs, local_features, targets):"""输入:1.全局特征张量inputs2.局部特征张量local_features3.真实行人IDtargets输出:1.全局特征损失global_loss2.局部特征损失,local_loss"""# 获取批量n = inputs.size(0)# 将局部特征张量进行维度压缩local_features = local_features.squeeze()"""计算图片之间的欧氏距离矩阵A,B欧氏距离等于√(A^2 + (B^T)^2 - 2A(B^T))"""# 计算A^2distance = torch.pow(inputs, 2).sum(dim=1, keepdim=True).expand(n, n)# 计算A^2 + (B^T)^2distance = distance + distance.t()# 计算A^2 + (B^T)^2 - 2A(B^T)#distance.addmm(1, -2, inputs, inputs.t())distance.addmm_(mat1 = inputs, mat2 = inputs.t(), beta = 1, alpha = -2)# 计算√(A^2 + (B^T)^2 - 2A(B^T))distance = distance.clamp(min=1e-12).sqrt()  # 该distance矩阵为对称矩阵# 获取正负样本对距离,使用难样本挖掘dist_ap, dist_an, p_inds, n_inds = hard_example_mining(distance, targets, return_inds=True)p_inds, n_inds = p_inds.long(), n_inds.long()print(p_inds)print(n_inds)# 根据难样本挖掘计算得到最小相似度正样本与最大相似度负样本索引,提取对应难样本的局部特征p_local_features = local_features[p_inds]n_local_features = local_features[n_inds]# 对难样本局部特征使用局部对齐最小距离算法计算样本对距离local_dist_ap = batch_local_dist(local_features, p_local_features)local_dist_an = batch_local_dist(local_features, n_local_features)# y指明ranking_loss前一个参数大于后一个参数y = torch.ones_like(dist_an)# 全局特征损失global_loss = self.ranking_loss(dist_an, dist_ap, y)# 局部特征损失local_loss = self.ranking_loss(local_dist_an, local_dist_ap, y)return global_loss, local_loss
if __name__ == '__main__':target = [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8]target = torch.Tensor(target)features = torch.rand(32, 2048)local_features = torch.randn(32, 128, 8, 1)a = AlignedTripletLoss()g_loss, l_loss = a.forward(features, local_features, target)print(g_loss)print(l_loss)

输出结果:难样本挖掘 p_index,n_index(调用hard_example_mining()太麻了…[这个东西暂时没看懂])

tensor([ 2,  0,  0,  0,  7,  4,  5,  4,  9, 10,  9,  9, 15, 14, 13, 12, 17, 16,19, 18, 22, 23, 20, 21, 25, 26, 25, 25, 31, 31, 29, 29])
tensor([13, 13,  4, 22, 27, 27, 18, 16,  7,  4, 20, 17, 17,  7, 27, 10,  7, 11,6,  6,  7, 17, 24, 24, 22, 13, 20,  4, 23, 24,  4, 11])
tensor(0.9186)
tensor(1.1561)

Aligned TripletLoss相关推荐

  1. NARF(Normal Aligned Radial Feature)关键点

    NARF(Normal Aligned Radial Feature)关键点是为了从深度图像中识别物体而提出的,对NARF关键点的提取过程有以下要求: a) 提取的过程考虑边缘以及物体表面变化信息在内 ...

  2. Boost:aligned alloc对齐分配的测试程序

    Boost:aligned alloc对齐分配的测试程序 实现功能 C++实现代码 实现功能 aligned alloc对齐分配的测试程序 C++实现代码 #include <boost/ali ...

  3. Boost:aligned delete对齐删除的测试程序

    Boost:aligned delete对齐删除的测试程序 实现功能 C++实现代码 实现功能 aligned delete对齐删除的测试程序 C++实现代码 #include <boost/a ...

  4. Boost:assume aligned假设对齐的测试程序

    Boost:assume aligned假设对齐的测试程序 实现功能 C++实现代码 实现功能 assume aligned假设对齐的测试程序 C++实现代码 #include <boost/a ...

  5. 单片机(MCU)如何才能不死机之对齐访问(Aligned Access)

    从一个结构体说起.如下,在 STM32F0 的程序中,我们定义了一个结构体My_Struct ,那么这个结构体占用多少内存呢? struct Struct_Def { uint8_t Var_B; u ...

  6. LaTeX:equation, aligned 书写公式换行,顶部对齐

    使用aligined 函数,其中aligned就是用来公式对齐的,在中间公式中,\ 表示换行, & 表示对齐.在公式中等号之前加&,等号介绍要换行的地方加\就可以了. \begin{e ...

  7. glm编译错误问题解决 formal parameter with __declspec(align(#39;16#39;)) won#39;t be aligned...

    參考:http://stackoverflow.com/questions/25300116/directxxmmatrix-error-c2719-declspecalign16-wont-be-a ...

  8. Aligned公司在凤凰城建设数据中心将采用微电网的电力

    日前,美国亚利桑那州凤凰城地区建设了一个63MW的新型柴油动力微电网,可以使数据中心在电网的拥堵时段或遇到其他问题的时候脱离电网,采用微电网的电能. 亚利桑那州公共服务电力公司为Aligned公司设计 ...

  9. Latex aligned

    \begin{align} f_X(x)&=\int_0^1f(x,y)dy\nonumber\\ &=\int_0^1\frac{3(x^2+y)}{11}dy\nonumber\\ ...

最新文章

  1. java编写斐波那契数列,实战案例
  2. red hat linux 远程,Red Hat Linux 远程桌面 – 如何设置
  3. 齐头并进(51Nod-1649)
  4. js中split,splice,slice方法之间的差异。
  5. 启动和停止一个服务,修改服务的启动类型 Start and Stop Service for windows
  6. MYSQL Training: MySQL I
  7. 还在担心机器人?人工智能目前水平还不如初中生
  8. STM32F205通过SDIO和SPI读写SD卡文件
  9. gnu nano显卡测试软件,买不到了 篇四:站内首发——RX VEGA NANO评测
  10. js实现音乐列表循环播放或单曲循环
  11. 2021.12.10 vue vue-cil (12)
  12. CAD填充块Hatch的深度解析
  13. 网络下载的图始终与北京坐标有偏移,坐标对不准,用arcgis自带的WGS84与beijing54坐标转换2解决
  14. 如何在vscode中优雅的编写C语言
  15. 查看自己电脑的主板支持多大的内存
  16. Amazon AWS
  17. StackFrame
  18. 马云卸任:中国企业如何走出“创始人驱动”?
  19. BOS金蝶云星空二开常用接口插件
  20. Java实现三人年龄

热门文章

  1. 【codevs3147】矩阵乘法2,”名“不副”实“
  2. C ++基础 | 格式化输出,文件输入输出(File IO),头文件(Header Files)_3
  3. 2017.8.8 loli测试
  4. 8086架构/流水线及其优化
  5. 万能监控摄像头app软件下载_360eyes官方下载安装最新版本-360eyes摄像头手机app下载v3.7.8.40 安卓版...
  6. python读行-Python如何一次读取N行
  7. iPhone 6S三大性能实测
  8. UE4 Slate概述
  9. Oracle数据库实现主键自增(利用sequence)和分页查询(利用rownum)
  10. 视+AR正式发布EasyAR引擎2.0版,并宣布开放AR相机平台