自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(109)
  • 收藏
  • 关注

原创 读python、pytorch代码时代码函数记录

在读取pytorch训练代码时,作为小白的自己,总是碰到一些没用过的函数和语法,这里记录学习下:

2024-06-07 10:08:49 303 2

原创 TensorRT部署中函数解析

初步学习TensorRT部署的时候,遇到很多不知道什么意思的函数,这里用来纪录一下。

2024-05-30 14:19:42 479

原创 记录训练的几个tricks(以后慢慢尝试)

在训练CNN模型的时候,从小的图片尺寸开始,逐渐调整到大的图片尺寸,例如:刚开始使用64x64来训练网络,然后使用该权重接着在128x128的图片上训练,也可以调整图片大小接着训练。从较小的学习率开始学习,缓慢提高至较高的学习率,然后再慢慢下降,周而复始,每个周期的长度略微缩短,在训练的最后部分,允许学习率比之前的最小值降得更低。图像增强,毋庸置疑,非常重要,除了常用的随机翻转、随机对比度、随机亮度,随机旋转等等,还需要进一步理解cutmix、mixup、cutout、mosaic等。

2024-05-10 12:00:09 373

原创 yolo系列配置文件解析,内容来自官方

yolo系列配置文件解析

2022-09-15 09:49:32 1094 1

原创 softmax(三):softmax交叉熵的缺点

还是废话不说,直接上峰神的链接Softmax理解之Smooth程度控制softmax交叉熵我们经常使用,但是为啥有的任务,用softmax交叉熵效果很好,有的任务用效果却不怎么样。在实际项目中,分析softmax交叉熵的缺点,才能知道,什么时候有用,失效的怎么去优化。不要总是当个黑盒子,什么情况下都用,精度上不去的时候,又不知道怎么去优化。softmax交叉熵为啥会有不管用的时候呢,原因很简单,因为它不是我们真正的目标函数,是目标函数smooth过来的,为了方便求导和计算,那么我们就要和真正的目标函

2022-05-12 16:17:05 1525

原创 softmax(二):softmax交叉熵不是真正的目标函数

最近一直在消化、吸收大神的输出,在这里主要把思路捋顺,试着增加自己的理解和扩展。首先,上链接,还有我的膝盖,拜王峰大神,可以直接看大神的文字!从最优化的角度看待Softmax损失函数Softmax理解之Smooth程度控制一、优化的目标函数做分类的都知道,softmax交叉熵,是常用的分类损失函数,那么,它是怎么来的呢?用CNN提取n维特征之后,我们想要拿这个n维特征,去预测,是狗,是猫,还是人?怎么预测呢,总不能直接拿n维特征吧,我们想要只想知道,是狗,是猫,还是人。为了解决这个问题,我们将n

2022-05-10 14:36:13 666

原创 求导公式推导

softmax + cross_entropy 求导loss=−∑j=13yj∗log(pj) loss = - \sum_{j=1}^3y_j*log(p_j)loss=−j=1∑3​yj​∗log(pj​)其中 y=[1,0,0],pi=ezi∑k=13ezky = [1, 0, 0],p_i = \frac{e^{z_i}}{\sum_{k=1}^3e^{z_k}}y=[1,0,0],pi​=∑k=13​ezk​ezi​​,所以:loss=−y1∗log(p1)\begin{aligned}

2022-05-08 09:36:59 419

原创 softmax(一):从梯度的角度分析,softmax与sigmoid在损失函数中的不同

面试的时候讨论过这个问题,我觉得这个问题可以深度思考一下,顺便回顾一下梯度的计算方法1、softmax+cross_entroy这里只考虑后面的损失函数,前面的卷积输出,由模拟数据代替,这里z1,z2,z3z_1, z_2,z_3z1​,z2​,z3​是网络最后一层的输出,这里我给出了虚假数据z1=−1.4694,z2=−2.2030,z3=2.4750z_1= -1.4694,z_2 = -2.2030,z_3 = 2.4750z1​=−1.4694,z2​=−2.2030,z3​=2.4750,z1

2022-05-07 11:50:40 755

原创 为什么要归一化

1、为什么要归一化引入归一化,是由于不同的特征之间,其量纲或者量纲单位往往不同,变化区间也处于不同的数量级,若不进行归一化,可能导致某些指标被忽略,影响到数据分析的结果。例如影响房价的两个特征,面积和房间数量,面积有80,90,100等,房间数有1,2,3等,你看,这两个指标度量方式根本不在一个数量级上。为了消除特征之间的量纲影响,需要进行归一化处理,以解决特征指标之间的可比性,原始数据,经归一化处理后,各个指标处于同一种数量级,可以直接对比评价。2、归一化的本质归一化:xi−xminxmax−x

2022-05-04 19:14:08 3929

原创 第一次参加kaggle竞赛:Happywhale - Whale and Dolphin Identification(ID识别问题:top9.4% 150/1558)

本人菜鸟一枚,以前都是在kaggle游荡,浏览别人的帖子,如果不亲自下场打比赛的话,只看其实是没啥用的,所以一直在等合适的赛题开赛,一个赛题,两个月时间,本身有自己的事情干,所以在比赛上的时间还是不太够,争取有个好名次吧。另外开这个博客是为了帮助自己理清思路,尽量少走弯路一、赛题分析1、建立模型的目的:通过某些细微的特征对鲸鱼和海豚进行个体识别2、数据分析:统计学上的数据分布 (需要掌握 panda库)获取图像的 Embeddings特征,并且可视化( Embeddings特征是指分类网络全连

2022-05-04 16:21:06 1643

原创 attention之 CBAM 和SEnet

attention其实就是学习生成一个掩码mask,也可以叫做是权重,这些mask或者权重,决定,输入的特征中,哪些是需要特别关注的。attention机制可以分为:通道注意力机制空间注意力机制混合域注意力机制SENet是Squeeze-and-Excitation Networks,如下图:class SELayer(nn.Module): def __init__(self, channel, reduction=16): super(SELayer, self

2022-05-03 21:23:21 324

原创 Gem pooling、max pooling、average pooling

gem时average pooling 的一般化gem 的公式如下:f(g)=[f1(g)...fk(g)...fK(g)]T=(1∣Xk∣∑xxpk)1pkf^{(g)} = [f_1^{(g)}...f_k^{(g)}...f_K^{(g)}]^T = (\frac{1}{|X_k|}\sum_xx^p{_k})^\frac{1}{p_k}f(g)=[f1(g)​...fk(g)​...fK(g)​]T=(∣Xk​∣1​x∑​xpk​)pk​1​当pk=1p_k=1pk​=1时,gem pool

2022-05-03 16:13:52 2868

原创 L1范数与L2范数

一、范数p范数p范数p范数:x=[x1,x1,...xn]Tx = [x_1,x_1,...x_n]^Tx=[x1​,x1​,...xn​]T那么向量x的p范数p范数p范数就是:∣∣x∣∣p=(∣x1∣p+∣x2∣p+...+∣xn∣p)1/p||x||_p = (|x_1|^p+|x_2|^p+...+|x_n|^p)^{1/p}∣∣x∣∣p​=(∣x1​∣p+∣x2​∣p+...+∣xn​∣p)1/p二、L1范数与L2范数L1范数L1范数L1范数:∣∣x∣∣1=(∣x1∣+∣x2∣+...

2022-05-02 13:24:45 3073

原创 inception 进化史

inception-v1inception-v1大量应用到众人熟知的GoogleNet中,它是2014年ImageNet竞赛的冠军,1、inception 结构引入多尺度感受野和多尺度融合,2、使用1x1卷积进行降维,减少了计算,3、googlenet中使用均值池化替代全连接层。inception-v2在Inception-v2网络,作者引入了BN层inception-v31、采用两个3x3卷积,替换一个5x5卷积,参数量由5x5 = 25 减少到 3x3x2 = 18,但是在感受野..

2022-04-15 16:07:50 123

原创 网络图解析系列之googlenet

2022-04-15 16:06:09 136

原创 网络图解析系列之Alexnet

2022-04-15 16:04:36 269

原创 cv2.imread默认情况下读取的是彩色图片

imread(filename, flags=None)flags是ImreadModes的类型的, 默认情况下是1enum ImreadModes{IMREAD_UNCHANGED = -1,IMREAD_GRAYSCALE = 0,IMREAD_COLOR = 1,IMREAD_ANYDEPTH = 2,IMREAD_ANYCOLOR = 4,IMREAD_LOAD_GDAL

2022-04-15 15:35:25 1869

原创 增加batch_size的一种方法:梯度累加

一、为什么会有batch_size参数经常做训练的童鞋们都知道,batch_size是一个很重要的超参数,每次训练支取batch_size个数据集进行训练,那么,为啥不取全部呢,答案可想而知,应为内存不够呀,放不下呀,小数据集还好,内存勉强够,勉强放的下,但是花费大量的时间加载了数据后,训练了一个epoch之后,发现参数不对,需要重新调参,然后中断训练,花1s调了个参数,花费2h加载了数据,不累么?!所以需要batch_size这个参数。虽然全部的数据集可以更好的确定样本总体的方向,但是一次性处理整个数

2022-03-20 16:29:56 2738

原创 entroy_loss、focal_loss

一、entroy_lossentroy_loss已经讨论了很多了,具体可以看我的这篇博客二、focal_loss说到focal_loss,一定要看的是这张图:从上图可以看到,focal_loss只比entroy_loss多了一个权重α(1−pt)γ\alpha(1-p_t)^{\gamma}α(1−pt​)γ 当ptp_tpt​越大时,赋予的权重越小,focal_loss能够降低简单样本的loss,让网络更偏重与比较难的样本。下面是focal_loss的代码class FocalLoss(nn

2022-03-15 10:20:19 433

原创 pytorch 中 混合精度训练(真香)

一、什么是混合精度训练在pytorch的tensor中,默认的类型是float32,神经网络训练过程中,网络权重以及其他参数,默认都是float32,即单精度,为了节省内存,部分操作使用float16,即半精度,训练过程既有float32,又有float16,因此叫混合精度训练。二、如何进行混合精度训练pytorch中是自动混合精度训练,使用 torch.cuda.amp.autocast 和 torch.cuda.amp.GradScaler 这两个模块。torch.cuda.amp.autoca

2022-03-14 16:17:21 10108 2

原创 终于知道为什么要freeze BN层,以及如何freeze(这个trick真的可以加快收敛)

一、什么是Batch Normalization(BN)层BN层是数据归一化的方法,一般都是在深度神经网络中,激活函数之前,我们在训练神经网络之前,都会对数据进行预处理,即减去均值和方差的归一化操作。但是随着网络深度的加深,函数变的越来越复杂,每一层的输出的数据分布变化越来越大。BN的作用就是把数据强行拉回我们想要的比较好的正态分布下。这样可以在一定程度上避免梯度爆炸或者梯度消失的问题,加快收敛的速度。二、BN是如何操作的Input:B=x1...m;γ,β(parameterstobelearned

2022-03-14 15:08:19 10699 1

原创 终于知道 pytorch怎么取数据了

1、经常使用pytorch的都知道,下面是pytorch加载自己数据的流程代码from torch.utils.data import Datasetfrom torch.utils.data import DataLoaderclass MyDataset(Dataset): def __init__(self) def __len__(self) def __getitem__(self, index)dataset = MyDataset()loader =

2022-02-25 17:27:38 1917

原创 softmax 和 cross_entropy之间的关系

一、理论计算softmax公式:Sj=eaj∑k=1Neak S_j = \frac{e^{a_j}}{\sum_{k=1}^Ne^{a_k}}Sj​=∑k=1N​eak​eaj​​cross_entropy的公式:H=−∑k=1NPKlog(Sk)H = -\sum_{k=1}^NP_Klog(S_k)H=−k=1∑N​PK​log(Sk​)在网络中,softmax+cross_entropy计算loss的过程如下:二、pytorch中的cross_entropypytroch 中的cross

2022-02-25 11:09:47 625

原创 python中repeat、tile、broadcast区别与联系

1、numpy.repeat(a, repeats, axis=None)重复数组中的元素,参数:a:输入序列repeats:每个元素重复的次数axis:要沿其重复值的轴。默认情况下,使用展开的输入数组,并返回展开的输出数组。例1:输入序列3,repeat 4倍,axis使用默认值np.repeat(3, 4)array([3, 3, 3, 3])例1:输入序列[[1,2],[3,4]],维度为2x2,因为axis使用默认值,因此将输入序列铺平,变为[1,2,3,4],维度为4x1,然后r

2022-01-27 10:47:57 706

原创 EfficientDet解读(二):BifPN大解析

2022-01-22 17:47:27 4690

原创 EfficientDet解读(一):backbone之efficientnet大解析

2022-01-21 16:31:37 472 3

原创 代码中的点点记录(积累的力量)

1、assert 使用实例assert True # 条件为 true 正常执行assert False # 条件为 false 触发异常assert 1==2, '1 不等于 2'AssertionError: 1 不等于 22、os.path.existsos.path.exists(path) 路径存在则返回True,路径损坏返回Falseos.path.lexists 路径存在则返回True,路径损坏也返回True3、format{} {}".format("

2022-01-21 11:00:50 640

原创 在mmdetection框架下修改数据增广方法

如何在mmdetection框架下训练自己的voc数据集,可以看我的上一篇博客在mmdetection上用自己的数据集训练了一个初级版本,发现结果不是很理想,分析了一下自己的数据集,需要调整数据增广方式,下面是在mmdetection上修改增广的方式:1、需要了解配置文件进入代码之后怎么被解析的在train.py的90行,代码如下;cfg = Config.fromfile(args.config)cfg中一个需要关注的结构是**_cfg_dict**, 其结构如下:我们需要关注的是其中的t

2022-01-20 20:45:04 1466

原创 yolov4解读(二):从代码中解读数据加载

代码来自:链接1、在pytorch 中继承自己数据集的常用框架class Yolo_dataset(Dataset): def __init__(self, label_path, cfg, train=True): def __getitem__(self, index): def __len__(self):train_dataset = Yolo_dataset(config.train_label, config, train=True)val_dataset = Yol

2022-01-20 20:25:44 3242

原创 目标检测比赛各种tricks(从技术角度出发)

一、Pseudo Labeling这个链接解释Pseudo Labeling解释的很清楚,可以看一看什么是Pseudo Labeling:Pseudo Labeling就是将测试集中,测试结果中分数很高的测试图片,加入到训练集中,再训练。Pseudo Labeling的5个步骤:1、使用原始训练集,训练一个模型,这里最好是比较好的模型;2、使用该模型去测试你的测试集,这里一般是没有标签的测试集;3、把测试集中置信度很高的图片,加入到原始的训练集中;4、使用混合后的数据集再训练一个新的模型。

2022-01-19 10:14:57 1971

原创 yolov4解析(一):网络结构以及与yolov3的区别

SPP模块spp模块由三个并排的maxpooling操作组成,输入是512x13x13,第一个maxpooling,kernel_size=5, stride=1, padding=5 // 2

2022-01-18 15:38:28 3862

原创 Libra R-CNN论文阅读

一、论文提出的问题Sample level imbalance(采样不均衡):训练过程中,难例对于检测性能的提高至关重要,但是训练中的随机采样,使得难例淹没在简单的、已学习过的样本中。OHEM(难例挖掘)用来从所有的样本中,将难例挖掘出来,但是这种对噪声比较敏感,另外费时。Focal loss是用来缓解一阶检测器中的样本不平衡,但是这种方法对于R-CNN这类的二阶检测器,效果不佳,因为大量的容易的样本都是在第二阶段过滤的。Feature level imbalance(特征层的不平衡):高层特征包含更

2022-01-15 14:35:42 11945 1

原创 mmdetection中数据增强的可视化

一、PhotoMetricDistortion函数介绍:class PhotoMetricDistortion: """Apply photometric distortion to image sequentially, every transformation is applied with a probability of 0.5. The position of random contrast is in second or second to last. 1.

2022-01-13 14:51:01 7999 7

原创 python中 list *0 原来是清空,而非所有元素变零

本来我是想生成一个长度为3的列表,然后里面的元素都置0,后来发现,列表中list*0这个操作是将list 清空。a = list(range(0, 3))print (a)[0, 1, 2]b = a * 0print (b)[]那么生成一个元素都是零的列表,应该怎么生成呢?c = 3d =[0]*cprint (d)[0, 0, 0]d =[0]*0print (d)[]python的操作还真是。。。...

2022-01-09 20:54:12 1014

原创 终于知道anchor框为啥这样设计了

一、faster_rcnn中,第一阶段的rpn中的overlaps有很多重复数据可视化overlaps数据的时候,发现里面有很多重复数据,让我百思不得其解,想不明白,gt中的坐标不相同,虽然anchors框的大小不相同,但是anchors坐标不相同,也就是与gt的iou是不相同的,overlaps里面为啥这么多重复数据呢?二、重复数据来自完全包含框当gt框比较大,anchors框比较小,完全在gt框之内时,且 overlap 是两个框的交集除以两个框的并集,这种情况下,并集是gt框面积,交集是an

2022-01-09 17:12:30 717

原创 解读mmdetection中faster_rcnn中生成与使用anchor的代码

一、anchor部分参数的配置上面是faster_rcnn中关于rpn anchor的参数配置,strides = [4, 8, 16, 32, 64] 是5个feature map 由输入尺寸, 下采样的倍数, ratios是同一个位置,长宽比的三种变换, 目前scales这个参数不是很明白。二、生成基础anchors在这个部分,anchors的大小已经决定了,这里anchors的大小是指在输入原图上的stridescalesanchor大小 基于输入原图的048

2022-01-07 17:06:11 1679

原创 天池打比赛之《街景字符编码识别》进阶过程(目标检测,目前最高得分 5名/0.9405)

街景字符编码识别 比赛链接:https://tianchi.aliyun.com/competition/entrance/531795/information一、赛题数据训练集数据包括3W张照片,验证集数据包括1W张照片,每张照片包括颜色图像和对应的编码类别和具体位置,测试集A包括4W张照片。二、初步方案由于主要偏向目标检测方向,所以首先使用mmdetection中的faster_rcnn训练一个检测模型,先上传一个初级分数:版本方案分数v1faster_rcnn_r

2022-01-06 10:55:05 2347

原创 pytorch加载数据集(from torch.utils.data)

方式一:from torch.utils import data class MyDataset(data.Dataset): # 构造函数带有默认参数 def __init__(self): def __getitem__(self, index): return def __len__(self): return train_data = MyDataset()trainloader = data.DataLoade

2021-12-30 10:07:33 1573

原创 numpy 中 reshape 和 repeat结合使用

a = np.array([[324, 277], [415, 282], [478, 132]])print (a)print (a.shape)[[324 277] [415 282] [478 132]](3, 2) A = a.shape[0]b = a.reshape(A, 1, 2)print (b)[[[324 277]] [[415 282]] [[478 132]]]B=5c = b.repeat(B, axis=1)print (c)[[[324

2021-12-22 14:34:25 533

原创 使用mmdetection训练自己voc格式的数据集

下面的例子是使用ssd300训练自己的数据集(voc格式)一、configs/base/datasets/voc0712.py修改data_root为自己数据集的root所有的img_prefix, 都修改为data_root,不需要加’2007’或者’2012’,这里不修改也可以,需要把自己的数据放到一个叫2007或者2012的文件夹中。修改之后,就可以随意的放置自己的数据集了。mmdet/datasets/xml_style.py 中,使用self.img_prefix来找到xml正确的路径

2021-12-06 21:53:34 4451 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除