![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
深度学习
Tchunren
本人喜欢运动,热爱生活
展开
-
广义交叉熵 GCE Generalized Cross Entropy Loss 的解释
Generalized Cross Entropy Loss for Training Deep Neural Networks with Noisy Labels论文链接:https://arxiv.org/pdf/1805.07836.pdfGCE的定义如下所示:Lq(f(x),ej)=(1−fj(x)q)qL_q(f(x),e_j)=\frac{(1-f_j(x)^q)}{q}Lq(f(x),ej)=q(1−fj(x)q)MAE损失定义如下:LMAE(f(x),ej)=2(1−fj(原创 2022-04-18 09:44:40 · 2611 阅读 · 3 评论 -
如何将python print出来的内容存储到log中
from __future__ import absolute_importimport osimport sysimport os.path as ospdef mkdir_if_missing(dir_path): try: os.makedirs(dir_path) except OSError as e: if e.errno != errno.EEXIST: raiseclass Logger(object):原创 2022-04-06 16:45:54 · 2257 阅读 · 0 评论 -
特征多样性学习
1 Hierarchical Pyramid Diverse Attention Networks for Face Recognition从多尺度,多样性,以及多特征如何进行融合三个角度进行的行文。多尺度中是在网络的不同layer提取特征,并且利用了注意力机制;多样化是是指对注意力机制中的不同mask进行了差异性学习,这里的学习要注意的一点是,就是将不同的mask拉到一定的距离就完事了,没有无止境地拉,这是为什么呢,为什么不尽量拉的越来越远呢,这和triplet loss中的margin就有点类似了,这原创 2021-09-03 10:32:44 · 766 阅读 · 0 评论 -
pytorch使用动量更新方式对模型进行更新
在训练模型的过程中,有时候我们需要设置两个模型,一个是随着训练数据的加入进行参数更新的model,另一个模型是作为model的平均模型model_ema,对model_ema进行更新的时候,采用的方式为:θtmodel_ema=βθt−1model_ema+(1−β)θtmodel\theta_t^{model\_ema} =\beta\theta_{t-1}^{model\_ema}+(1-\beta)\theta_t^{model}θtmodel_ema=βθt−1model_ema+(1−β)θ原创 2021-08-31 21:35:02 · 1623 阅读 · 0 评论 -
macbook m1安装anaconda
m1 芯片安装Miniforge 最好,直接安装anaconda 可能存在兼容性的问题,到这里来下载:https://github.com/conda-forge/miniforge#download下载标记的那个文件然后进入到对应的文件夹下面,执行 sh Miniforge3-MacOSX-arm64.sh一路yes到底然后更换源地址conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/原创 2021-08-14 15:14:31 · 3134 阅读 · 0 评论 -
pytorch 交叉熵不收敛
这两天利用pytorch搭建模型,训练分类网络,模型没问题,代码没问题,但是损失就是死活不收敛。看一下代码吧:src_prec, _ , src_feat = self.model(src_imgs)loss_src_ce = self.criterion_ce(src_prec[:, :self.src_classes], src_labels, weight_src)死活不好使,搞不清楚,可是我后来稍微一改,改成下面的:src_prec, _ , src_feat = self.model(s原创 2021-07-02 09:05:16 · 1616 阅读 · 0 评论 -
windows 下使用anaconda指南
1 创建python 环境我创建一个虚拟环境,名字为pytorch_gpu ,搭配的Python环境为 3.7,命令如下所示: conda create -n pytorch_gpu python=3.72 查看都有哪些虚拟环境的指令: conda info --env3 激活某个环境的指令 conda activate pytorch_gpu...原创 2020-11-21 15:01:06 · 276 阅读 · 0 评论 -
好的网上资料总结
1. 深度学习超参数简单理解------>learning rate,weight decay和momentum链接:https://zhuanlan.zhihu.com/p/23906526原创 2020-11-19 10:05:43 · 168 阅读 · 0 评论 -
pytorch 如何在训练过程保证分类层的分类中心保持为单位化的中心
在分类问题中,最后的一层线性分类层,里面的每个向量相当于是各个类的中心,为了让不同类之间的类中心保持一致的范数,也就是都保证其为单位向量,我们可以在每次进行forward()之前进行一个分类层的参数标准化操作,这个操作不需要在优化器内进行,可以在forward()函数中进行,例子如下:self.classifier.weight.data.copy_(F.normalize( self.classifier.weight.data ,dim=1))这样就能保持每次进行分类计算的时候,分类中心都是标原创 2020-11-17 10:41:43 · 313 阅读 · 0 评论 -
pytorch 优化器优化模型参数的数据分析
一直有一个疑问,我们生成一个模型,这个模型的参数传递给了优化器,优化器在优化的时候,模型的参数会有变化,这之间的关联到底是怎样的呢?如果想改变模型的参数,只能通过优化器更新吗?如果在优化器外面更新了,这个时候的参数会在模型中、优化器中同时起作用吗?答案是会的,因为我们传递给优化器的模型参数包括了模型参数的地址,我们在这个地址上进行更改,则全局都会同步产生变化。其实我要解决的一个问题就是,我想在优化器对模型进行更新的情况下,我自己也对模型增加一个更新。下面是我的代码: class Net(nn原创 2020-11-17 10:24:37 · 1385 阅读 · 1 评论 -
深度学习模型搭建以及训练技巧 trick deep learning 行人重识别 REID
1. 在使用resnet50的全链接层之前的特征作为分类特征的时候,最好在gap后进行一下batchnorm,单单是使用这样一个bn层,就能将性能提升很多个点。2. 同样的使用resnet50的全链接层前面的特征作为分类特征,直接就将这个2048维的向量送入分类层就完事了,不要再增加embedding 层了,嫁了之后性能很不好,原因可能是这个embeding 层相当于是又增加了一个随机出来的线性层,对于结果没什么卵用,大概率还会拖累网络。...原创 2020-11-14 21:24:04 · 1049 阅读 · 1 评论 -
解决输出为nan的问题
在训练网络的时候,发现输出全都是nan,这个时候很大可能是数值不稳定,比如除数太小,不稳定,或者是log里面的参数太小,不稳定,这个时候在可能出现运算不稳定的地方增加一些稳定系数就好了,比如:1.在分母的位置增加一个稳定数exp_st_sum = exp_st_with_target.sum(dim=1, keepdim=True) + 1e-6exp_st_rate = exp_st_with_target / exp_st_sum 2.在log里增加稳定系数loss_gt原创 2020-11-07 10:16:00 · 10039 阅读 · 0 评论 -
解决交叉熵损失不收敛的问题
最近在训练一个分类类网络的时候,发现损失不收敛,网络的各个部分没有问题,输入输出都是正常的情况,但就是网络的损失不收敛,最开始的交叉熵损失在6左右,一直到50个epoch以后,损失依然是5左右,map 和rank1都很扎心。后来分析后发现,最后的分类网络送出来的各个值都太小了,使得经过softmax后的各个类别的概率差异不大,为了解决这个问题,在将分类网络送出的结果,在送入交叉熵损失函数之前,加一个temperature就可以了。1.下面的代码是不收敛的一个伪代码,分类网络送出来以后,直接送入了交叉原创 2020-11-07 10:07:16 · 5261 阅读 · 4 评论 -
torch.save() torch.load()
在使用pytorch进行深度学习训练的时候,经常会有些内容需要保存下来,保存到硬盘张,不管什么时候我们都可以读取到,那么这个时候,使用torch.save()就可以将内容存储器来,使用torch.load()就可以将存取的内容读取出来。1.torch.save()使用方法torch.save()使用的时候需要往里面放进去两个参数,分别是要存储的内容和存储的地址。下面是个例子:import torchstatemement = {'name':'dalishi','age':19}torc原创 2020-11-06 09:57:17 · 2373 阅读 · 0 评论 -
计算机视觉常用公开数据集
1CelebA :CelebA是CelebFaces Attribute的缩写,意即名人人脸属性数据集,其包含10,177个名人身份的202,599张人脸图片,每张图片都做好了特征标记,包含人脸bbox标注框、5个人脸特征点坐标以及40个属性标记,CelebA由香港中文大学开放提供,广泛用于人脸相关的计算机视觉训练任务,可用于人脸属性标识训练、人脸检测训练以及landmark标记等,官方网址:http://mmlab.ie.cuhk.edu.hk/projects/CelebA.html..原创 2020-11-05 17:12:53 · 1251 阅读 · 0 评论 -
cvpr2020图像分类分类文章
Interpretable and Accurate Fine-grained Recognition via Region GroupingExploring Self-attention for Image RecognitionCompositional Convolutional Neural Networks: A Deep Architecture with Innate Robustness to Partial OcclusionSpatially Attentive Outpu原创 2020-11-05 16:03:31 · 1035 阅读 · 0 评论 -
pytorch 查找指定元素的索引
在pytorch中,我们经常需要查找tensor中某一个元素的索引,可能是在向量中查找索引,也可能是在矩阵中查找索引,下面分贝举例子:1.在矩阵中查找某个指定元素的索引:import torchimport numpy as npa = torch.tensor( [[1,2,3],[4,5,6],[5,6,7],[6,7,8]] )a_t2n = a.numpy()index = np.argwhere( a_t2n>4 )print(index)运行结果如下:[原创 2020-11-04 11:02:35 · 25883 阅读 · 4 评论 -
论文学习记录
1 20201103 CurricularFace: Adaptive Curriculum Learning Loss for Deep Face Recognition是一片人脸识别的论文,主要研究内容是在训练过程的不同阶段,如何给不同难易程度的样本进行加权学习,是将课程学习的思想嵌入到损失函数中,以实现一种新的深度人脸识别训练策略。该策略主要针对早期训练阶段的易样本和后期训练阶段的难样本,使其在不同的训练阶段,通过一个课程表自适应地调整简单和困难样本的相对重要性。也就是说,在每个阶段,不同的样本.原创 2020-11-03 09:26:19 · 740 阅读 · 0 评论 -
pip安装 gpu 版本 faiss
pip --default-time=1000 install -i https://pypi.tuna.tsinghua.edu.cn/simple faiss-gpu原创 2020-10-28 10:32:58 · 2073 阅读 · 0 评论 -
pytorch可视化工具
visdomTensorboardX原创 2020-10-26 21:36:16 · 147 阅读 · 0 评论 -
ubuntu 安装ignite pytorch 深度学习使用
经常在代码中看到下面的代码,这个库怎么安装呢?from ignite.engine import EngineFrompip:pip install pytorch-igniteFromconda:conda install ignite -c pytorch官网为:https://pytorch.org/ignite/原创 2020-10-12 14:02:33 · 2015 阅读 · 0 评论 -
ptorch F.softmax() 梯度信息为None
我在进行一个测试梯度实验的时候,发现,当原始变量流经F.softmax以后,原始变量的梯度就无法获得了,例子如下:import torch.nn.functional as Fimport torchx = torch.randn(1,5,requires_grad=True)print(x)# x = F.softmax(x,dim=1)# print(x)l = 0for i in range(5): l = l + x[0][i]print(l)l.backwar原创 2020-10-09 17:21:40 · 1178 阅读 · 1 评论 -
eccv2020 行人重识别文章类型内容简介
Joint Disentangling and Adaptation for Cross-Domain Person Re-Identification https://arxiv.org/pdf/2007.10315.pdf 源码:https://github.com/NVlabs/DG-Net-PP解决跨域问题,也是属于图片迁移的,将特征分为身份相关信息和不相关信息,其实就是结构特征和外观颜色特征,然后用源域标签作为监督信息在目标域上训练。Identity-Guided Human...原创 2020-09-09 19:00:40 · 379 阅读 · 0 评论 -
map指标详解
一张图片的解释特别明朗、准确原创 2020-09-05 21:03:04 · 1228 阅读 · 0 评论 -
torch.nonzero()
pytorch中的torch.nonzero(),就是返回张量中元素不为0的元素的索引。举例子如下:import torchx = torch.tensor([4,0,1,2,1,2,3])result = 1==x print(result)print(result.nonzero()) #输出了不为0值的索引print(result.nonzero().view(-1))#将结果转为一维的张量...原创 2020-08-26 11:26:36 · 901 阅读 · 0 评论 -
torch.unique()
torch.unique()的功能类似于数学中的集合,就是挑出tensor中的独立不重复元素。这个方法的参数在官方解释文档中有这么几个:torch.unique(input, sorted=True, return_inverse=False, return_counts=False, dim=None)input: 待处理的tensorsorted:是否对返回的无重复张量按照数值进行排列,默认是生序排列的return_inverse: 是否返回原始tensor中的每个元素在这个无重复的张量原创 2020-08-26 10:54:46 · 33213 阅读 · 8 评论 -
[Invariance Matters: Exemplar Memory for Domain Adaptive Person Re-identification 魔改代码
最近在看这篇文章,以及试着整改代码,按照最初的github设定,跑出来的性能和论文中是一样的,由于论文说了使用camstyle 后的生成图片,我就在想,如果不用这个部分会怎样,我就取消了使用这个数据,结果就直接拉垮了,看一下跑出来的性能吧。Mean AP: 20.0%CMC Scores top-1 46.7% top-5 63.3% top-10 70.3% top-20 77.3%我在加入了一个自己设定的损失原创 2020-08-11 14:16:03 · 203 阅读 · 1 评论 -
对于pytorch中的detach copy 讲解很好的一篇博文
https://blog.csdn.net/guofei_fly/article/details/104486708原创 2020-08-07 22:52:14 · 228 阅读 · 0 评论 -
pytorch 实现 GRL Gradient Reversal Layer
在GRL中,要实现的目标是:在前向传导的时候,运算结果不变化,在梯度传导的时候,传递给前面的叶子节点的梯度变为原来的相反方向。举个例子最好说明了:import torchfrom torch.autograd import Functionx = torch.tensor([1.,2.,3.],requires_grad=True)y = torch.tensor([4.,5.,6.],requires_grad=True)z = torch.pow(x,2) + torch.pow(原创 2020-08-07 21:51:49 · 5212 阅读 · 9 评论 -
ECCV 2020 REID 行人重识别论文汇总
Joint Disentangling and Adaptation for Cross-Domain Person Re-Identification https://arxiv.org/pdf/2007.10315.pdfIdentity-Guided Human Semantic Parsing Learning for Person Re-Identificationhttps://arxiv.org/pdf/2007.13467.pdfDo Not Disturb Me: Pers...原创 2020-07-31 23:00:13 · 2906 阅读 · 0 评论 -
使用python opencv 将duke reid 图片规范化为固定的尺寸
最近在做dukereid数据集的时候,想尝试着先将图片进行规范化,将所有的图片都设置为固定的大小,首先统计了一下所有图片的平均width和height, 使用平均值,将图片的height设置为218,width设置为84,具体的代码如下面的代码所示:def source_img_2_normal(img_path, base_dir): # img = cv.imread(img_path) h, w, _ = img.shape dst_img = np.zeros((2原创 2020-07-06 16:21:07 · 478 阅读 · 0 评论 -
利用memory bank 存储特征,进行REID跨域问题的研究
Invariance Matters: Exemplar Memory for Domain Adaptive Person Re-identification考虑了target域中Exemplar-invarianceCamera-invarianceNeighborhood-invariance三个一致性代码在这了:https://github.com/zhunzhong07/ECN原创 2020-06-30 16:38:39 · 1386 阅读 · 0 评论 -
行人重识别分类总结
一.总体说明行人重识别,可以简化为这样的过程:将原始图片数据进行特征提取,之后送入目标函数并对其进行优化。这个过程涉及三个重要部分:数据、特征、目标函数。因此将REID方法,根据研究的关注点,分为三类。分别别是基于数据的研究、基于特征的研究和基于目标函数的研究。我们定义:行人重识别的目的是在某个数据集上进行测试时,使得性能尽量的好。(rank 1 , mAP)分类如下: 1 数据:指真实意义上的图片images,分类依据是研究侧重点在数据的准备上 2 特征:指经过CNN后...原创 2020-06-09 13:57:03 · 1510 阅读 · 1 评论 -
SELECTION VIA PROXY: EFFICIENT DATA SELECTION FOR DEEP LEARNING 思考REID 数据考量
前几天对行人重试别进行了分类,从数据、特征、目标函数角度作为研究的重点。这篇文章给涉及到训练数据的选择,可不可以在target中寻找少数量的样本进行标记,但是却能达到很好的效果呢?...原创 2020-06-02 18:42:51 · 333 阅读 · 1 评论 -
cvpr2019 reid
Oral:Joint Discriminative and Generative Learning for Person Re-identification.Zhedong Zheng; Xiaodong Yang; Zhiding Yu; Liang Zheng ; Yi Yang ; Jan Kautzhttps://arxiv.org/abs/1904.07223代码:https://github.com/NVlabs/DG-Net Unsupervised Person Re-ident...原创 2020-05-24 20:59:10 · 530 阅读 · 0 评论 -
backbone、head、neck等深度学习中的术语解释
我们在阅读文章的时候,经常看到backbone head neck 这一类的术语,但是我们可能并不知道是什么意思,这篇文章就是对这些术语进行解释:backbone:翻译为主干网络的意思,既然说是主干网络,就代表其是网络的一部分,那么是哪部分呢?翻译的很好,主干部分,哈哈哈哈,文字游戏了哈。这个主干网络大多时候指的是提取特征的网络,其作用就是提取图片中的信息,共后面的网络使用。这些网络经常使用...原创 2020-04-25 10:51:29 · 50252 阅读 · 4 评论