- 博客(77)
- 资源 (2)
- 收藏
- 关注
原创 AI模型边缘端部署全流程二(工具篇)
搞AI模型的大部分都是从pycharm或者其他python的IDE入坑的,因此在跑程序的时候用断点调试非常的得心应手。而且断点调试利于追踪数据流也非常的适合用以问题分析。然而在边缘端部署的时候就很难再像使用pycharm一样进行远程的断点调试了。归根结底是因为边缘端不能进行代码编译只能跑应用程序。因此这就引申到了如何在远程端(我常用的是Windows)进行边缘端部署的应用程序的断点调试。
2023-11-02 10:08:00
782
原创 anaconda使用小tricks
此方法主要用于协同办公等情况,因为有些环境配置起来比较麻烦,或者为了保证代码在不同PC下能正常运行所以需要此方案,虽然可以通过生成requiresment来实现,但是有的包需要某些前置安装等,所以无法完全通过requiresment来实现环境分享。首先虚拟环境默认为创建在envs文件夹下。但有时候有人有特殊需求。
2023-09-19 16:18:12
159
原创 RT-DETR个人整理向理解
在开始介绍RT-DETR这个网络之前,我们首先需要先了解DETR这个系列的网络与我们常提及的以及存在着何种差异。首先我们先简单讨论一下以及两者的差异与共性:1、两者差异:顾名思义,这两者一个显而易见的差别就是有无anchor,是需要手工选取不同比例大小的anchor来得到proposals,而则不需要。当然两者具体差异肯定不是这么几句话就能说的清的,这里不做详细讨论所以按下不表。2、两者共性:两者虽然在获取proposals。
2023-09-07 15:22:10
3431
7
原创 Repvgg推理时融合BN
Batch Normalization是谷歌研究员于2015年提出的一种归一化方法,其思想非常简单,一句话概括就是,对一个神经元(或者一个卷积核)的输出,这个过程就完成了。一般而言BN层是在训练是更新均值μ、方差σ2γβ。是一直在更新的。但是在推理的时候通常是要BN参数是固定的,均值方差是来自于训练样本的数据分布。(有想关注训练阶段BN层以及BN具体公式推导的可以观看吴恩达视频或者其他博客,此处就不再做详细介绍了)因此在介绍BN融合时,训练阶段是的构造,而在推理阶段才是构造。
2023-01-10 15:07:16
565
1
原创 关于深度学习与机器学习的一些理解
1.Gradient Bossting与残差模块首先解释一下梯度提升(Gradient Bossting)算法:1.梯度下降法:用泰勒公式表示损失函数,用更数学的方式解释梯度下降法:这里多说一点,我为什么要用泰勒公式推导梯度下降法,是因为我们在面试中经常会被问到GBDT与XGBoost的区别和联系?其中一个重要的回答就是:GBDT在模型训练时只使用了代价函数的一阶导数信息,XGBoost对代价函数进行二阶泰勒展开,可以同时使用一阶和二阶导数。当然,GBDT和XGBoost还有许多其它的区别与联系,
2021-11-19 15:57:41
414
原创 关于python的一些小tricks
数据清理方面1.清除某些数据来源于:更着李沐学AIabnormal = (data[area[1]]<10) | (data[area[1]]>1e4])data = data[~abnormal] # 消除符合条件数据sum(abnormal) #获取abnormal个数
2021-11-12 20:07:02
609
转载 半监督学习中的伪标签(Pseudo-Labelling)
最近在做东西过程中接触到了半监督学习,所以以此篇博客记录个人觉得写的很好的一篇博客,以防遗忘。如若侵权请联系删除。什么是伪标签技术伪标签的定义来自于半监督学习,半监督学习的核心思想是通过借助无标签的数据来提升有监督过程中的模型性能。举个简单的半监督学习例子,我想去训练一个通过胸片图像来诊断是否患有乳腺癌的模型,但是专家标注一张胸片图像要收费,于是我掏空自己的钱包让专家帮我标注了10张胸片,可是我这10张图片又要划分训练集测试集,咋训练看着都要过拟合哇,这可咋办?聪明的我问了问专家,说不标注的胸片要钱
2021-09-25 17:17:12
5916
1
转载 齐次坐标系(转载如有侵权请联系删除)
问题:两条平行线可以相交于一点在欧氏几何空间,同一平面的两条平行线不能相交,这是我们都熟悉的一种场景。然而,在透视空间里面,两条平行线可以相交,例如:火车轨道随着我们的视线越来越窄,最后两条平行线在无穷远处交于一点。欧氏空间(或者笛卡尔空间)描述2D/3D几何非常适合,但是这种方法却不适合处理透视空间的问题(实际上,欧氏几何是透视几何的一个子集合),2维笛卡尔坐标可以表示为(x,y)。如果一个点在无穷远处,这个点的坐标将会(∞,∞),在欧氏空间,这变得没有意义。平行线在透视空间的无穷远处交于一点,但
2021-09-17 20:20:44
191
原创 图像的秩与矩阵的秩
矩阵的秩矩阵的秩 = 最大的线性无关的行(或列)向量的个数。对于图像而言,秩可以表示图像中包含信息的丰富程度、冗余程度、噪声。秩越小:基的个数少数据冗余性大图像信息不丰富图像噪声少低秩矩阵概念当矩阵的秩较低时(r << n, m),就可以视其为低秩矩阵。低秩矩阵意味着,此矩阵中有较多的行(或列)是线性相关的,即:信息冗余较大。作用利用低秩矩阵的冗余信息,可以对缺失数据进行恢复,此问题叫做 “低秩矩阵重构” ,即:“假设恢复出来的矩阵是低秩的,利用已有的矩阵元素,恢复出
2021-08-26 10:15:02
1516
原创 python部份命令使用规范(不定期更新)
1.@property装饰器详解@property既要保护类的封装特性,又要让开发者可以使用“对象.属性”的方式操作操作类属性,除了使用 property() 函数,Python 还提供了 @property 装饰器。通过 @property 装饰器,可以直接通过方法名来访问方法,不需要在方法名后添加一对“()”小括号。@property 的语法格式如下:@propertydef 方法名(self)代码块例如,定义一个矩形类,并定义用 @property 修饰的方法操作类中的 area 私
2021-07-10 14:52:53
138
原创 pytorch部份函数使用(不定时更新)
1.expand_as()函数expand_as将张量扩展为参数tensor的大小。>>> x = torch.randn(1, 3, 1, 1)>>> y = torch.randn(1, 3, 3, 3)>>> z = x.expand_as(y)>>> print(x)tensor([[[[ 0.4383]], [[-1.5909]], [[ 0.0814]]]])>&
2021-07-09 14:56:31
65
原创 numpy部份函数或命令用法(不定时更新)
numpy数组中":“和”-"的意义分片功能a[1: ] 表示该列表中的第1个元素到最后一个元素,而,a[ : n]表示从第0个元素到第n个元素(不包括n)import numpy as npPOP_SIZE = 3total_size = 10idx = np.arange(total_size)good_idx_1 = idx[-POP_SIZE:]good_idx_2 = idx[:-POP_SIZE]good_idx_3 = idx[POP_SIZE:]good_idx_4 =
2021-07-09 14:44:42
92
原创 关于python中使用os组合路径读取报错记录(windows下)
1.关于Windows下使用os会出现\ \与 / 的问题如标题所示,当出现这种问题的时候经常会出现以下错误(此处仅针对Windows平台,Linux平台不会出现这种问题),当然如果你运气号也有可能不会出现这种问题。FileNotFoundError: [Errno 2] No such file or directory: 至于为什么会报这种错,通过可视输出结果便一目了然import osfrom PIL import Imageimport xml.etree.ElementTree as
2021-03-16 18:11:17
476
原创 关于python中*与**以及魔方类的使用规范
一.关于*与**的使用规范其在运算符下的使用规范不做详细说明,具体就是乘与次方,没什么好解释的。1.问题场景经常会在程序中见到在函数中使用*与** 号的,都知道 *与 ** 其实归根结底其都是一种传参的运用,基本都是运用在循环传参的场景中。不过两者存在着不同...
2021-03-09 10:02:58
81
原创 关于faster-rcnn中anchor box与bbox
问题提出情况在学习理解faster-rcnn网络时,都有出现anchor box这一个概念,然而anchor box的大小却是一个确定的值。那么假如你标注的目标框比anchor box小很多的情况下那不是预测得到的检测框不是划出了过多的无效值了吗?为了解决这个问题在这就需要先了解锚框这个概念一.锚框(anchor box)/先验框(prior bounding box)在众多经典的目标检测模型中,均有先验框的说法,有的paper(如Faster RCNN)中称之为anchor(锚点),有的pape
2021-03-04 15:59:46
3478
1
原创 AttributeError: module ‘torch.distributed‘ has no attribute ‘deprecated‘问题解决方案
问题在参加一个分类比赛的时候down了一套demo用来做比赛,但是在导入from apex.parallel import DistributedDataParallel as DDP的时候提示错误:AttributeError: module ‘torch.distributed‘ has no attribute ‘deprecated‘解决方法:AttributeError: module ‘torch.distributed‘ has no attribute ‘deprecated‘首
2021-01-12 15:01:52
15405
12
原创 对于使用pandas的loc以及reset_index进行索引重置
1.pandas.DataFrame.loc按标签或布尔数组访问一组行和列。.loc[ ] 主要是基于标签的,但也可用于布尔数组。允许输入包括:单个标签,例如 或 (请注意,该注释被解释为索引的标签,并且永远不会作为沿索引的整数位置)。5’a’5标签的列表或数组,例如 。[‘a’, ‘b’, ‘c’]具有标签的切片对象,例如 。‘a’:‘f’与被切片的轴长度相同的布尔数组,例如 。[True, False, True]可对齐的布尔系列。键的索引将在遮罩之前对齐。可对
2021-01-07 15:07:15
1824
原创 数据增强
1.垂直镜像对称(Mirroring)2.随机修剪(Random Cropping)随机修建并不是一个完美的数据增强方法。3.色彩转换(Color shifting)在实践中对R、G、B的变换是基于某种分布的。其他方案旋转(Rotation),剪切图像(Shearing)、局部弯曲(Local warping)在实践中因为太复杂所以用的比较少...
2020-12-07 19:25:39
577
原创 关于迁移学习
什么是/为什么要迁移学习?迁移学习(Transfer learning) 顾名思义就是就是把已学训练好的模型参数迁移到新的模型来帮助新模型训练。考虑到大部分数据或任务是存在相关性的,所以通过迁移学习我们可以将已经学到的模型参数(也可理解为模型学到的知识)通过某种方式来分享给新模型从而加快并优化模型的学习效率不用像大多数网络那样从零学习(starting from scratch,tabula rasa)。1.训练集很小的情况下在进行tigga和misty以及neither的三分类问题时(自己拥有的数据
2020-12-07 16:38:46
365
原创 模型容量
简介通过调节机器学习模型的容量,可以控制模型是否偏于过拟合还是欠拟合。模型容量容量从本质上说是描述了整个模型的拟合能力的大小。如果容量不足,模型将不能够很好地表示数据,表现为欠拟合;如果容量太大,那么模型就很容易过分拟合数据,因为其记住了不适合与测试集的训练集特性,表现为过拟合。因此控制好模型的容量是一个关键问题。控制方法容量的控制可以通过多种方法控制,包括:控制模型的假设空间。添加正则项对模型进行偏好排除。相关结论当机器学习算法的容量适合于所执行任务的复杂度和所提供训练数
2020-11-23 09:59:04
1482
原创 Pytorch对于使用多GPU的注意事项
1.关于模型的打印或保存问题首先对于多GPU的使用分两种方案一种是简单的DP方案一种是复杂的DDP方案,在此处我们使用的是DP方案: if t.cuda.device_count() > 1: model = nn.DataParallel(model,device_ids=[0, 1]) if opt.use_gpu: model.cuda()由于两张卡所以我直接定义的 device_ids=[0, 1],若不定义此项dataparallel会自动分配所有GPU
2020-11-20 13:37:55
359
原创 神经网络改进方案:全局平均池化替代全连接层
基本原理全局平均池化英文名为:global average pooling简称为GAP其具体实现过程在原文 << Network In Network >> 中为:可以看出其是将矩阵中的 [w,h] ,进行平均池化变为一个单元。也即进行Flattrn和FC。其详细原理的图形示例可参考下图:其实也就是通过池化层将原有的输入为 [b,c,h,w] 减少成 [b,c,1,1] 的尺寸也即上文提到的将 [w,h] 进行平均池化变为一个单元。与FC层区别在常见的卷积神经网络中
2020-11-18 16:15:37
13078
10
原创 pytorch 使用dataparallel时不支持 nccl
问题出现在我将torch1.5.1升级到1.7.0时,使用分布式计算出现了不支持nccl,从而无法进行单机多卡计算。所以这提醒我们环境能用的情况下千万千万不要去更新(未更新之前我是可以使用分布式计算的。。。)。扯远了,回归正题。当出现这个问题的时候我先将cuda10.1与对应的cudnn重新安装。然后重新跑程序发现还是不能进行分布式。然后我将torch1.7.0退回1.5.1再跑,发现还是不能进行分布式,而且还出现了新问题:RuntimeError: CUDA out of memory. T
2020-11-14 20:48:27
2923
3
原创 RuntimeError: CUDA out of memory. Tried to allocate 2.18 GiB (GPU 0; 15.92 GiB total capacity; 13.71
如题这是经常遇见的显存不够问题,一般分为train阶段与valid阶段,我曾经在valid阶段时因为没有进行手动的梯度清零而导致显存不够,加上with t.no_grad:问题迎刃而解。 with t.no_grad(): for ii, data in enumerate(dataloader): input, label = data val_input1 = Variable(input, volatile=True)
2020-11-14 20:37:37
2337
2
原创 利用python将不同目录下的文件夹写入同一个txt
话不多说直接上代码,其中使用三个for循环的原因是因为在with as命令下file.write可以正常按序读写,因此可以使用三个for循环一次导入。另外有试过将for循环直接定义成def但是却无法将目录下的所有文件夹一次导入了,只能导入一个,或许可以尝试将for循环内的内容def,而不是直接将整个for循环def。import osfilePath = 'D:/新平扫/平扫系统_20201104'filePath1 = 'D:/新平扫/平扫系统_20201106'filePath2 = 'D:
2020-11-10 13:49:02
545
原创 深度学习基础理论篇之机器学习基础
1.任务T通常机器学习任务定义为机器学习系统应该如何处理样本。样本是指我们从某些希望机器学习系统处理的对象或事件中收集到的已经量化的特征的集合。我们通常会将样本表示为一个向量x∈Rnx\isin\Reals^nx∈Rn,其中向量的每一个元素xix^ixi是一个特征。例如,一张图片的特征通常是指这张图片的像素值。2.交叉验证2.1 LOOCV首先,我们先介绍LOOCV方法,即(Leave-one-out cross-validation)。像Test set approach一样,LOOCV方法也包含
2020-08-02 15:40:22
265
原创 训练神经网络时,训练集loss下降,但是验证集loss一直不下降
可以判定问题的原因来自两方面,一方面是模型过拟合,另一方面是训练集和测试机的数据域不同。一、问题定位:至于问题的定位排查,建议按照先易后难的角度,也就是先排查训练集和测试集是否存在数据域的不同,再排查模型是否过拟合。1.关于数据域的排查具体来讲就是查验训练集和测试集的数据分布不一致,具体来说有如下几点(1)数据源分布不一样:例如在图像处理中,训练集的图像采集使用的是摄像头A拍摄的,而测试集是摄像头B拍摄的,但是摄像头A和B的拍摄效果差别较大(例如:图像成图的清晰度、对比度等);在语音识别中,训练集
2020-07-22 14:39:44
18310
原创 解决pytorch的RuntimeError: CUDA out of memory.以及loss出现超级大的原因
当我在完成第一个epoch的训练转入第一个epoch的验证的时候,跑了没多久pytorch就报错内存不足。然后上网查了一些解决方案,其中有使用pytorch的多GPU并行的方案来解决: if t.cuda.device_count() > 1: model = nn.DataParallel(model) if opt.use_gpu: model.cuda()然而其带来的结果也就是多跑了几组batchsize的验证。就继续报错。接着又尝试了pytorch fo
2020-07-17 19:16:21
5928
3
原创 pytorch的nn.module中input的四个维度含义以及实现各种操作
在使用pytorch的nn.module 的时候从使用说明上可以知道其标准输入为 [B, C, H, W], 其具体含义是:B - batchsize,例如你在使用dataloder的时候设置的batchsize是64那么此项则为64C - channel,也就是输入的矩阵的通道数,若你输入的是RGB图片,那么此项为3H - high,也就是你输入矩阵的高。W - width,也就是你输入矩阵的宽针对四个维度来达到你要实现的目标由于数据在经过net后输出并不一定满足满足期望输出的
2020-07-15 20:03:20
8660
原创 关于pytorch中关于nn.module的type问题。
RuntimeError: Input type (torch.cuda.DoubleTensor) and weight type (torch.cuda.FloatTensor) should be the same.如题所示的错误为input的type时double的而weight的type时float的(weight的type在pytorch中默认为float),因此遇到这种问题一般有两种解决方案1.将input的type由double更换为float示例:input = Variable(
2020-07-14 20:40:26
1397
原创 记录在使用sklearn中趟过的雷
使用sklearn是为了读取自制数据集中使用一些预处理操作,虽然pytorch的包中含有一些预处理操作,但并不全因此使用到了sklearn。此处记录一下在使用sklearn使用中趟的雷。1.MaxAbsScaler()MaxAbsScaler是将数据归一化到[-1,1],然而在此处使用中需要注意的是Max操作不能针对二维以上的矩阵,若是需要对三维矩阵进行的话,需要将三维矩阵安排为二维矩阵,自己使用的方法为:echo_trans = echo.reshape(echo.shape[0],-1)echo
2020-07-07 19:51:46
166
原创 Python中常出现TabError: inconsistent use of tabs and spaces in indentation错误解决方法(spyder ide)
TabError: inconsistent use of tabs and spaces in indentation这个错误目前笔者在Subline3遇到的都是看似空格实则没有空格引起的::解决方法:就是打开subline的空格制表显示就可以清楚的显示出自己是否真的空格了。首先说一下参考博客中的解决方案,(ide是subline):上面的1方框中显示横线就表示真实空格了而下面的2方框中的方法,看似空格了,实际上并没有空格成功,这通过subline的空格制表显示一下就可以看出来。Sublin
2020-07-07 09:54:37
1071
原创 记录使用pytorch过程中踩过的坑之全连接层
在进行一篇文章的网络结构复现时,其网络结构有一部分是vgg结构。在使用tensorboard对整体网络结构进行可视化的时候发现vgg结构的FC层疯狂报错。先贴出源码: ''' 这是网络设置部份 ''' self.maxpool = nn.MaxPool2d(2, 2) # conv1 self.conv1_1 = nn.Conv2d(2, 64, 3, padding=1)
2020-06-22 23:05:35
4230
转载 SAR成像学习信号到原始数据&原始数据到图像
SAR成像处理包括:信号生成、混频、发射、后向散射、接收信号、正交解调(得到复数信号)、采样和数字处理。下面将其分成两部分分别介绍。1 信号到复数数据-原始数据是怎么来的SAR原始数据、SAR信号数据或SAR相位历程是SAR系统通常记录的下传的信号。由于方位向信号常有一个非零的多普勒中心频率,该信号只在距离向上基带信号。1.1 粗略的过程雷达信号有许多,其中一种是线性调频信号:u(t)=ej2π(ft+0.5at2)u(t)=e^{j2\pi(ft+0.5at^2)}u(t)=ej2π(ft+0.
2020-06-22 14:30:43
1826
转载 Python numpy.transpose 详解
正文Numpy 文档 numpy.transpose 中做了些解释,transpose 作用是改变序列,下面是一些文档Examples:代码1:x = np.arange(4).reshape((2,2))输出1:#x 为:array([[0, 1], [2, 3]])代码2:import numpy as npx.transpose()输出2:array([[0, 2], [1, 3]])对于二维 ndarray,transpose在不指定参数
2020-06-15 14:23:51
1375
转载 Python格式化字符串f-string概览
https://blog.csdn.net/sunxb10/article/details/81036693
2020-06-13 13:28:38
218
原创 关于验证集以及训练集的loss/accuracy的使用问题
在训练过程中需要用验证集上的某个指标来调整学习率等参数,这个指标一般用验证集上的准确率,此时不需要计算验证集上的损失函数。但当验证集不够大的时候,准确率的波动可能太过剧烈,此时也可以用验证集上的损失函数作为调整学习率等参数的指标。意思也就是说验证集的loss有调整超参数的作用综上所述:可以不计算验证集上的loss,验证集上的loss不会参与模型的训练;不过,和validation accuracy一样,可以通过观察validation loss的下降趋势来调整学习率和训练轮数等超参数.参考链接:知乎回
2020-06-12 16:41:46
8940
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人