自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(45)
  • 资源 (1)
  • 收藏
  • 关注

原创 TR5 - Transformer的位置编码

在NLP任务中,单词的序列顺序是非常重要的,将单词的顺序重新排列,整个句子的意思可能会发生改变。在RNN循环神经网络中,有着处理序列顺序的内置机制。Transformer通过引入位置编码机制来保存文本中字符的位置信息。位置编码记录了文本中字符的位置信息,它并没有使用单个数字(例如索引值)的形式来记录位置信息。对于长序列,索引的大小可能会变得很大,不利于存储。将索引值规范化到0-1之间,可能会为可变长度序列带来问题(它们的标准化方式不同)。

2024-04-19 14:28:18 712

原创 TR4 - Transformer中的多头注意力机制

多头注意力机制可以说是Transformer中最主要的模块,没有之一。这次我们来仔细分析一下注意力机制与多头注意力机制。通过对多头注意力机制的学习,有一个让我印象深刻的地方就是,它的多头注意力机制不是像其它模块设计思路一样,对同一个输入做了多组运算,而是将输入切分成不同的部分,每部分分别做了多组运算。由于自然语言处理中,一个单词的词向量往往是很长的,所以这种方式比CV的那种堆叠的方式能减少很多计算量,并且在效果方面不会损失太多。

2024-04-12 17:03:02 736

原创 TR3 - Transformer算法详解

本周在理论上学习了Transformer模型的结构、组成、训练过程。让我印象最深刻的就是Seq2Seq模型不仅有一个输入头,它的编码器是和CV模型共通的,但是编码器也有输入,并且先每个时间步只输出一个单词,这点和RNN一样并没有什么变化。这也制约了NLP任务的训练和推理。另外我没想到它的损失函数竟然和最基础的分类网络一样,用简单的交叉熵损失就可以。

2024-04-05 20:02:29 681

原创 TR2 - Transformer模型的复现

类似于残差的连接在Transformer中也十分常见,还有先缩小再放大的Bottleneck结构。整个Transformer模型的核心处理对特征的维度没有变化,这一点和CV模型完全不同。Transformer的核心是多头自注意机制。

2024-03-29 20:32:56 431

原创 TR1 - Transformer起源与发展

自监督学习(Self-supervised Learning)是一种机器学习方法,其特点在于从数据本身自动生成标签或监督信号,无需人工标注。简单来说就是让机器利用数据本身的结构或特征来进行学习,从而不依赖于外部标签或监督信号。

2024-03-21 18:01:43 773

原创 J9 - Inception v3算法

通过对InceptionV1和InceptionV3的对比可以发现,InceptionV1的模型结构十分简单,InceptionV3模型的结构就复杂了很多。然而InceptionV3的性能在InceptionV1的基础上略有提升,但不不是非常明显。是并行1xn和nx1的卷积来替换nxn卷积,在精度不变的情况下可以降低很多参数量和计算量。

2024-03-15 12:32:44 814

原创 J8 - Inception v1算法

通过50次迭代的结果发现,模型在测试集上的准确率已经可以达到90.4%。对比之前的ResNeXt有精度提升。另外,通过对Inception结构的学习,学到了一些模型优化的思路:1. 是并行,将过长的网络,通过一定的策略,修改成并行计算,可以减少网络层数2. 是将NxN的卷积变成1xN->Nx1来减少参数量3. 是在卷积操作前,通过1x1卷积降维。

2024-03-06 14:04:11 545

原创 让人头大的深度学习环境

当前已经有许多的深度学习框架,例如 tensorflow、pytorch、mxnet、paddle等。众所周知,深度学习离不开显卡,对于普通的研究者来说,离不开Nvidia的显卡。光有了硬件还不行,显卡大爷岂是你随随便便就能驱使的,它还需要显卡驱动(Driver)Cuda(Compute Unified Device Architecture)计算库CUDNN(CUDA Deep Neural Network library)深度学习库。

2024-02-27 11:28:56 394

原创 J7 - 对于ResNeXt-50算法的思考

J6周有一段代码如下。

2024-02-23 22:03:55 349

原创 J6 - ResNeXt50模型的实现

从结果上来看,模型的过拟合问题严重,可以发现,参数量大的时候,训练集的正确率会达到很高的高度,但是可能只是因为数据集太小,模型记住了所有的训练集导致的,就像这个模型, 在测试集上的表现并不突出。

2024-02-02 23:26:32 471 1

原创 J5 - DenseNet与SE模块相结合

对比三种模块发现,在最后一层中添加SE模块的效果是最好的。我猜测是因为最后一层DenseBlock的结果就相当于特征提取完成了,按正常的步骤后缀就是进入classifier的全连接层,针对任务进行特征使用。这时候对特征进行SE模块的操作,可以压缩特征表达,把无关的通道的权重减少,有关通道权重加大,得到的特征会有更好的表现力。最后是三个模型的精确度都超过了89%。

2024-01-24 14:50:37 910

原创 J4 - ResNet与DenseNet结合

虽然大幅度的降低了模型的规模,实际的总参数还是数倍于DenseNet121。然而,模型似乎比DenseNet121的泛化性能好不少,训练和验证的Gap比DenseNet121小很多,甚至有的时候验证集上的表现比训练集还好。直接使用ResNet的ResidualBlock实现DenseNet会让参数量迅速的膨胀。接下来再改进,应该从如何压缩DenseNet的参数量的角度来考虑。

2024-01-19 23:05:34 422

原创 J3-DenseNet实战

包引用全局设备对象数据准备从K同学提供的网盘中下载乳腺癌数据集,解压到data目录下,数据集的结构如下:其中1是乳腺癌,0不是乳腺癌,这个目录结构可以使用torchvision.datasets.ImageFolder直接加载随机打印5个图像的尺寸发现输入并不是224大小的三通道图像,所以我们可以在数据集处理时需要Resize这一步3. 随机打印20个图像然后通过加载文件夹从数据中提取图像不同的分类名称,并转换成文字划分训练集和验证集最后,将数据集划分批次模型构建首先编写De

2024-01-12 22:40:48 957

原创 J2 - ResNet-50v2实战

可以发现逆置了BN和ReLU之后,模型的收敛速度更快,然后在测试集上的效果也更好。和作者的相比,我的效果提升给加明显。分析原因是作者的模型训练层数较深,提升的是模型的上限,而我的应该还没有收敛。由此可以得出结论逆置的BN和ReLU具有更强的特征提取能力,也有一定的表达能力的提升。

2024-01-05 22:13:05 899

原创 J1 - ResNet-50实战

一开始使用了0.1这样的大学习率,训练完全无法进行。后来发现loss初始值就非常小,只有1.5左右,于是改用小学习率,模型才train起来。IdentityBlock和ConvBlock中都有1x1卷积压缩特征图后进行实际的特征提取/处理操作然后再通过1x1卷积恢复原体积的特征图,目前对这个缩小后再放大的操作非常迷茫,既然特征的计算已经在低维度进行过了,再基于此放大特征也不可能有新的特征出现,反而会多了很多噪声,是不是这个噪声是必须。

2023-12-29 18:06:45 932

原创 YOLOv8重要模块解读

yolov8的模块代码解读

2023-12-15 21:24:57 976

原创 YOLOv8配置文件yolov8.yaml解读

通过对比最上面的scales和上面两个输出,可以发现,卷积核大小被width来控制,模块重复次数由depth来控制,对照可以写下v8l的输出。根据提供的yolov8n yolov8s的模型输出,推测yolov8l的模型输出。这里配置的是模型的head部分,其结构和使用规则与backbone一致。

2023-12-08 19:20:49 2097 1

原创 使用YOLOv8训练自己的数据集

使用脚本split_train_val.py,从标注xml文件中抽取出图像的列表和标签信息,并保存到相应的文件中。通过上面训练结束可以看出,总体上达到了98.7%的准确率,99.7%的召回率,效果还是非常不错的。因为YOLO框架使用的是VOC格式的数据集,因此需要生成一个VOC格式的数据文件。下载数据集zip包,并解压,数据集的地址在原作者博客中有。在项目根目录下创建一个文件data.yaml。以下操作全部在fruit_data目录下。使用脚本voc_label.py。

2023-12-01 21:58:36 487

原创 修改YOLOv5的模型结构第三弹

它的kernelsize是3,stride是2,这是一个会让特征图的尺寸缩小一半的卷积,由于我们删除了它,后面的流程中特征图的尺寸会和原来有所不同,最终导致错误。通过对前面知识的回顾,Concat模块会引用上层的模块的输出,体现在配置文件中,就是会引用数组中的下标,但是我们在数组中删除了两个元素,会使数组原本的索引失效。在head的第一层中,使用了一个1x1的卷积,我们把它修改为kernelsize=3,stride=2的卷积。所有的修改至此就完成了,使用train.py脚本训练一下修改后的模型。

2023-11-24 16:49:11 1138 1

原创 修改YOLOv5的模型结构第二弹

上节说到了通过修改YOLOv5的common.py来修改模型的结构,修改的是模块的内部结构,具体某些模块组织顺序等,如插入一个新的模型,则需要在yolo.py文件中修改。

2023-11-17 19:58:59 221

原创 修改YOLOv5的模型结构

common.py中实现了yolov5所用到的一些模块将卷积、归一化、和激活函数合并成一个Conv模块将通道数先缩小后放大的Bottleneck模块结合跳跃连接、Conv、Bottleneck模块的C3模块为了下采样、降低计算量用的Focus模块融合多尺度特征的SPP(Sptaial Pyramid Pooling,空间金字塔)模块然后在上层又创建了AutoShape进行非模型本身的预处理、后处理过程;创建了Detections用于控制检测的过程,记录状态等;

2023-11-03 20:46:22 402

原创 YOLOv5配置文件之 - yaml

在YOLOv5的目录中,models文件夹里存储了YOLO的模型配置。定义了YOLOv5s网络结构的定义文件。

2023-10-27 22:03:49 335

原创 使用YOLOv5的backbone网络识别图像天气 - P9

YOLOv5的骨干网络中大量使用了1x1卷积,只用来将特征图重新映射到不同通道的特征图中,执行效率比执行大核卷积快骨干网络中特征图大小的缩减并没用像普通的卷积网络一样使用池化层,而是使用卷积通过调整stride和padding属性来实现,这样做会比直接使用池化层多一些可训练参数,可能会增加一些模型的拟合能力通过本次任务学习到了跳跃连接应该怎样编写代码,还有SPPF模块的实现模型的评估应该不包含训练集中的数据,不然展示的结果并不真实。

2023-09-29 22:02:17 319

原创 使用YOLOv5-C3模块识别图像天气 - P8

1x1卷积用来操作通道数,此时特征图的大小不变bottleneck先将特征图通道数做压缩然后再还原到输入的通道数深层的卷积神经网络保留多尺度特征的方式有两个:1. 高层特征,低层特征直接相加 2. 高层特征,低层特征堆叠在一起使用的网络有8000万参数量,效果还不如前面的30万参数量的模型,不知道是否有一种粗略的标准,来拟合相同能力的模型参数量和数据量的对应关系。还有一种原因可能是C3模型被YOLO用来做目标检测,多尺度特征捕捉的能力在天气识别任务中可以说是毫无用处。

2023-09-22 21:41:08 409

原创 卷积神经网络实现咖啡豆分类 - P7

因为目前网络还是很快就收敛到一个很高的水平,所以应该还有很大的精简的空间,但是可能会稍微牺牲一些正确率。模型的选取要根据实际任务来确定,像咖啡豆种类识别这种任务,使用VGG-16太浪费了。在精简的过程中,没有感觉到训练速度有明显的变化 ,说明参数量和训练速度并没有直接的相关关系。连续多层参数一样的卷积操作好像比只用一层效果要好。

2023-09-15 21:31:56 433

原创 卷积神经网络实现好莱坞明星识别 - P6

首先是1:1复刻了一下VGG16网络模型,然后发现在没有预训练的情况下,效果并不是很好。猜测是因为数据量的原因,模型没有很好的学到识别一个人的一些关键特征。其次是在没有增加BatchNorm模块和归一化时,模型完全无法训练。猜测是因为一开始随机初始化的模型权重距离最优解较远,有时间调大一下学习率尝试一下。

2023-09-08 10:18:01 177 1

原创 卷积神经网络实现运动鞋识别 - P5

整个模型设计的思路其实是模仿了vgg16模型,在卷积层的数量和通道上做了简化。轻量级的任务可以首先试着减少池化层间的卷积次数,减少模型中最大的特征图的通道数对图像的归一化操作很重要。在没有归一化前,模型的最佳正确率只能达到80%,推测可能是因为未做归一化的图像值域范围太大,不方便收敛,归一化后,原始图像中的输入特征值范围变成0~1,模型的权重变化更易作用到特征上。

2023-09-01 16:04:13 513 1

原创 卷积神经网络实现猴痘疾病图像分类 - P4

因为在模型的调试阶段要跑很多次,所以已经要注意每次重新跑的时候重置一下模型的权重(我一般直接重新定义模型)。不然可能无法对比出改动对当前任务是否有效,一定要注意。刚开始模型训练了20个epoch,通过折线图可以看出验证集上的正确率还处于上升状态,于是将训练的epoch修改为50,可以看出,训练的末期验证集上的正确率已经不再增长,甚至有所下降,说明模型已经收敛,此时的正确率如果还不符合要求,就需要对模型结构进行改进了。

2023-08-25 14:55:39 223 1

原创 卷积神经网络实现天气图像分类 - P3

通过对训练过程的观察,训练过程中的数据波动很大,并且验证集上的最好正确率只有82%。目前行业都流行小卷积核,于是我把卷积核调整为了3x3,并且每次卷积后我都进行池化操作,直到通道数为64,由于天气识别时,背景信息也比较重要,高层的卷积操作后我使用平均池化代替低层使用的最大池化,加大了全连接层的Dropout惩罚比重,用来抑制过拟合问题。return x然后增大训练的epochs为30,学习率降低为1e-4训练结果如下可以看到,验证集上的正确率最高达到了95%以上。

2023-08-17 16:23:02 829 1

原创 卷积神经网络实现彩色图像分类 - P2

通过本周的学习,掌握了使用pytorch编写一个完整深度学习的过程,包括环境的配置、数据的准备、模型定义与训练、结果分析呈现等步骤,并且掌握了通过pytorch的API组建一个简单的卷积神经网络的过程。

2023-08-09 10:45:47 534 1

原创 卷积神经网络实现MNIST手写数字识别 - P1

通过整个过程可以发现,手写数字的识别还是非常简单的,训练的效率比较快,结果也不错。非常适合拿来练手,学习一些基本概念、深度学习框架和分类任务实践过程等。

2023-08-05 13:58:35 911 1

原创 给运行中的docker容器开放新的端口

docker 临时开放容器端口映射到宿主机

2022-02-22 10:02:38 4819

原创 java strem 分组并提取对象中的某个字段

先上代码import java.util.*;import java.util.stream.Collectors;/** * @author caojingchen * @date 2021/3/10 11:11 */public class Demo { static class DemoClass { private Integer key; private String value; public DemoClass(I

2021-03-10 11:25:06 7204

原创 spring boot 使用log4j2做日志打印,并在配置文件中引用pom变量的解决

笔者最近创建了一个新的spring boot 工程,项目要发布到测试环境用docker来跑,日志需要输出到指定目录映射出来查看,就想着配置一下log。引入log4j2首先介绍如何引入log4j2,spring boot 不做修改默认使用的是logback,性能不如log4j2优秀,所以我们换成log4j2。我们要在pom中先将默认的logging(里面用的Logbak)包排除,排除的方法有很多,由于笔者采用分模块打包的形式,所有项目有一个根pom,我选择在根pom的dependenc..

2020-07-09 11:01:13 2653 1

原创 spring boot maven打包时排除资源目录

因为最近想弄一个自己的脚手架项目,顺带着想学一下先进的前端框架Vue.js,所以在springboot中整合了Vue.js。我把Vue.js 的前端项目放在了resources/webapp目录下,当Vue.js build出结果到resources/statics下以后,这个webapp作为源码目录是不应该被打包到最后部署的jar包中的。于是想把这个resource/webapp目录给屏蔽掉。我...

2018-04-20 12:36:30 28524 8

原创 关于利用快排思想求第K小数的分析

最近复习快排算法,记得当时最有意思的是可以用快排的partition函数求出第K小数于是上网搜索一番,发现都只是贴出了代码。无奈只好自己研究了下利用快排partition求第k小数不得不从partition函数开始说:快速排序的思想是在一组待排序的数中,找出一个数作为分界,使得它前面的数都比它小,后面的数都比它大。这个数叫做枢轴当求出一组数的枢轴以后,一组数就可以以枢轴为界

2014-11-30 22:49:49 1490

原创 如何正确地动态申请二维数组

最近复习考研,重新看了一遍C语言,在学到二维数组的时候,想着如何能够动态的申请二维数组呢于是上网搜索了一下,网上大部分答案我是不敢苟同的,他们是这么实现的(以建立一个3*4数组为例):int **p = malloc(3*sizeof(int*)),i;for(i=0;i<4;i++){ p[i]=malloc(4*sizeof(int));先不说这方式根儿上的毛病,就看它如

2014-10-18 19:58:03 1142

原创 Eclipse For C++编译报错 undefined reference to 'WinMain@16'

百度的各种方法都好像和我的问题没关系最后我打算直接用命令行编译,突然发现我的

2014-09-14 14:37:01 2673 4

原创 关于VMware NAT Services服务自动关闭的非完美结局方案

最近重装完系统之后,发现VMware虚拟机的NAT服务老是自动关闭。上网搜索一番没有好的解决wang

2014-06-29 22:05:21 7203 1

原创 HDU 1002 之常见WA(C++描述)

最近在思考考研与就业,最后决定

2014-04-22 18:42:37 1213 1

中国移动应用商场 MM 的应用内计费基本机制

中国移动应用商场 MM 的应用内计费基本机制

2014-05-11

空空如也

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

TA关注的人

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