深度学习
文章平均质量分 72
学习深度学习在计算机视觉方向的研究和应用。
蔡逸超
yichaocai.com
展开
-
Pytorch搭建模型需要注意一个问题
通过结果可以发现,就算指定了model.eval()并且加上了torch.no_grad()限制,若不使用torch定义的容器存放子模块,它是无法同步模型的training和evaluation状态的。此种情况下,当需要针对子模块在训练和推理阶段做不同操作时就会产生错误。最初直接用的list,出现了子模块的self.training属性无法和模型自身同步的问题。需要将list转为torch.nn.ModuleList类别,才能同步self.training属性。原创 2023-02-02 17:25:18 · 291 阅读 · 1 评论 -
keras2onnx转换时出现AttributeError: ‘KerasTensor‘ object has no attribute ‘graph’错误
【问题】keras2onnx转换时出现AttributeError: ‘KerasTensor’ object has no attribute 'graph’错误 File "D:\conda\lib\site-packages\keras2onnx\_parser_tf.py", line 304, in build_layer_output_from_model graph = model.outputs[0].graph AttributeError: 'KerasTensor'原创 2021-09-13 10:31:04 · 3265 阅读 · 2 评论 -
理解梯度下降算法中的动量
理解梯度下降算法中的动量在深度学习优化算法中,常用的梯度下降算法中一般会有一个参数 —— 动量(momentum)。此文章记录动量算法的原理,以及使用它的目的。N.B. 此处的梯度下降算法是广义的,包括一般我们使用的是mini-batch SGD。梯度下降:GD, SGD, mini-batch SGD在理解动量之前,我们有必要先了解梯度下降算法随机梯度下降算法。我们先假设,优化的目标函数为:f(x⃗):ℜd→ℜwhere,x⃗=[x1,x2,...,xd]T\begin{matrix}f原创 2021-09-03 11:30:37 · 1312 阅读 · 0 评论 -
为什么深度学习模型很难找到局部最优?
深度学习的最终目标是让模型在预测时的误差很小。而在训练过程中,我们需要制定一个损失函数,使训练过程中的函数值“最小”。这时候,我们可以把该损失函数看做一个目标函数。从优化的思路上来讲,我们尽可能地降低训练误差就是最小化这个目标函数的过程。在深度学习过程中,要找到最小化损失函数不是那么容易的。要理解这个概念,首先需要了解 —— 对于一个多元函数,我们如何确定其极小值(局部最小值),也就是找到其局部最优。我们很容易知道,梯度为0是极值的一个必要条件,但非充分条件(还可能是鞍点)。于是,我们需要掌握理解一个数原创 2021-09-01 09:57:26 · 775 阅读 · 0 评论 -
理解CNN中的Batch Normalization
理解CNN中的Batch Normalization批归一化处理(Batch Normalization, BN层)通常用于深层的神经网络中,其作用是对网络中某层特征进行标准化处理,其目的是解决深层神经网络中的数值不稳定的问题,是的同批次的各个特征分不相近,网络更加容易训练。BN层一般是放在仿射变换,FC或CONV,层后,在非线性激活单元之前(也有一些实现放在线性激活单元后,但是普遍用法是前者)。深层网络的数值不稳定的问题是,随着网络层数加深,训练过程中参数的更新容易造成靠近输出层的特征输出产生剧烈地原创 2021-08-24 15:33:54 · 1819 阅读 · 2 评论 -
[pytorch学习]利用torch实现CPU版的2D卷积
为了熟悉torch的tensor操作和基本函数,我实现了一个卷积的流程。有兴趣的同学可以看看,熟悉下流程和接口。代码如下:import torchfrom torch import nn import numbersdef cpu_correlation(X, K, s=(1, 1), p=(1, 1)): """基于cpu的相关操作""" kch, kh, kw = K.shape # 卷积核尺寸 ich, ih, iw = X.shape # 输原创 2021-08-20 18:34:13 · 495 阅读 · 0 评论 -
mlflow server搭建及mlflow api调用示例
1 搭建mlflow tracking server1.1 搭建MinIO搭建MinIO的目的是为了给mlflow提供模型数据的存储后台,此案例的mflow的元数据存储采用mysql。step 1 安装并启动Docker服务若已安装docker服务请忽略,若未安装:# 设置yum源yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://downlo原创 2021-06-08 16:10:08 · 2879 阅读 · 1 评论 -
分类器模型好坏「和」分类器的评价指标
分类器模型好坏「和」分类器的评价指标1. 为什么需要评价?训练目标函数只是理想目标函数的一种近似。评价指标可以量化模型在不同方面的表现(查全、查准…)。Rank,可以帮助算法人员在特定的目标上不断前进(刷榜)。量化模型期望表现与baseline之间的差距,量化期望表现与实际表现的差距。如果最终目标就是分类,可以帮助调试代码。2. 从二分类开始输入为 X, 输出Y为0或1, 二分类模型为:Y^=h(X)\hat{Y} = h(X)Y^=h(X)这样的分类模型包括原创 2020-12-24 16:05:07 · 1725 阅读 · 1 评论 -
使用YOLOv4训练DeepFashion2数据集
文章目录1 DeepFashion2数据集介绍2 数据集格式转换2.1 DeepFashion 标注格式转为COCO标注格式2.2 转换成YOLO格式3 使用YOLOv4模型进行训练4 Reference1 DeepFashion2数据集介绍 该数据集包含19W+训练样本和3W+测试样本,样本中包含各类服装的买家秀和卖家秀图像。并且,数据集包含style,bounding-box,dense landmarks和masks多种标签,可以用于训练服装检测、实例分割、关键点检测等多种任务的模型。数据集中原创 2020-12-01 15:38:16 · 3544 阅读 · 12 评论 -
弱监督检测初识——Weakly Supervised Deep Detection Networks解读
文章目录1 WSDDN模型1.1 预训练CNN1.2 CNN特征描述1.2.1 区域推荐算法1.2.2 Spatial partial pooling1.2.3 推荐区域的特征描述1.3 分类和检测分支2 模型训练2.1 损失函数2.2 检测框规则化3 局限与未来方向4 Reference弱监督检测是一个很有前景的研究方向——仅通过样本的类别标签就可以实现目标检测任务(乍一看有点类似之前的Classification and localization任务,但是要难很多)。目前,弱监督检测的精度还处于比较低原创 2020-11-26 18:11:26 · 3463 阅读 · 0 评论 -
【深度学习基础】PyTorch实现ShuffleNet-v2亲身实践
代码已同步到Github:https://github.com/EasonCai-Dev/torch_backbones1 论文关键信息论文链接:ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design论文主要提出了ShuffleNet-v2的轻量级网络结构,并针对如今CNN网络常用的深度分离卷积(depthwise separable convolutions)、分组卷积(group convoluti.原创 2020-10-10 17:19:55 · 2828 阅读 · 12 评论 -
【目标检测】YOLOv4网络结构可视化解析
这篇博客给出了YOLOv4网络整体结构的可视化解析。原创 2020-10-09 10:13:13 · 1770 阅读 · 1 评论 -
【目标检测】YOLOv4特征提取网络——CSPDarkNet结构解析及PyTorch实现
【YOLOv4 backbone】PyTorch实现CSP-DarkNet网络结构及相关讨论1 YOLOv4目标检测模型1.1 Mish激活函数1.2 CSP结构和DarkNet1.3 CSP-DarkNet【讨论】2 PyTorch实现CSPDarkNet2.1 Mish激活函数和BN_CONV_Mish结构2.2 Basic block2.3 CSP-DarkNet2.4 测试网络结构1 YOLOv4目标检测模型自从Redmon说他不在更新YOLO系列之后,我一度以为这么好用的框架就要慢慢淡入历史了原创 2020-09-30 14:10:41 · 19552 阅读 · 8 评论 -
【深度学习基础】CSPNet——PyTorch实现CSPDenseNet和CSPResNeXt
这篇博客讨论了CSPNet思想和block结构,以及基于pytorch实现了CSP结构的DenseNet和ResNeXt搭建。原创 2020-09-29 18:46:39 · 13366 阅读 · 15 评论 -
【深度学习基础】PyTorch实现DarkNet-53亲身实践
这篇博客讨论了DarkNet-53的结构,并基于PyTorch实现了它。原创 2020-09-28 11:02:02 · 3287 阅读 · 2 评论 -
【深度学习基础】SENet——PyTorch实现CNN的SE结构改造
这篇博客主要介绍了Squeeze and Exitation的思想和SE结构,并且基于PyTorch改造了ResNe(X)t。原创 2020-09-17 18:54:16 · 4056 阅读 · 2 评论 -
【深度学习基础】PyTorch实现DPN亲身实践
这篇博客讨论了Dual Path的思想并介绍了其block结构,然后基于PyTorch实现了DPN的实现。原创 2020-09-16 18:08:04 · 918 阅读 · 1 评论 -
【深度学习基础】PyTorch实现DenseNet亲身实践
这篇博客主要讨论了Dense block的思想,并基于PyTorch实现了DenseNet。原创 2020-09-15 16:33:30 · 6468 阅读 · 8 评论 -
【深度学习基础】PyTorch实现ResNeXt亲身实践
这篇博客介绍了ResNeXt的block结构及其思想,基于PyTorch实现了ResNeXt。原创 2020-09-14 15:52:37 · 1666 阅读 · 10 评论 -
【深度学习基础】基于PyTorch实现Inception-v4, Inception-ResNet-v1, Inception-ResNet-v2亲身实践
这篇博客主要介绍了几种新的Inception block结构,以及论文如何结合Residual block的思想优化网络,并基于PyTorch实现了Inception-v4,Inception-ResNet的网络结构。原创 2020-09-11 20:22:06 · 6553 阅读 · 21 评论 -
【深度学习基础】PyTorch实现GoogleNet亲身实践
这篇博客主要介绍了Inception block结构,并基于PyTorch实现了Inception -v1, v2, v3的网络结构。原创 2020-09-10 20:39:11 · 701 阅读 · 0 评论 -
【深度学习基础】PyTorch实现VGG亲身实践
这篇博客介绍了VGG的核心思想——用多层小尺寸卷积替代大尺寸卷积来减少参数量并提升感受野,并基于PyTorch实现了VGG的搭建。原创 2020-09-09 20:30:08 · 1085 阅读 · 0 评论 -
【深度学习基础】PyTorch实现ResNet亲身实践
这篇博客介绍了CNN的重要里程碑Residual block,并基于PyTorch实现了ResNet的网络结构。原创 2020-09-08 19:50:52 · 3290 阅读 · 6 评论 -
【深度学习基础】深度学习中的各种卷积操作计算指南
这篇博客翻译了一篇我觉得非常好的关于卷积的CNN入门指南,看完之后相信大家对卷积神经网络会有初步的认识和兴趣。原创 2020-09-05 16:31:10 · 2179 阅读 · 0 评论 -
利用Torch搭建与数据集尺寸匹配的CNN,以AlexNet为例
[CNN基础] 搭建与数据集尺寸匹配的CNN,以pytorch实现AlexNet为例1 实践中的困扰:网络与输入尺寸不匹配2 pytorch搭建适应32x32尺寸输入的AlexNet2.1 搭建标准的AlexNet2.2 适当调整结构1 实践中的困扰:网络与输入尺寸不匹配BackBone网络往往是针对特定数据集提出的。我们在工程实践中利用这些网络训练自己的数据集时,很可能会遭遇数据集与网络提出所用数据集输入尺寸不一致的问题。在遇到这种情况时,有两种方案可供我们选择:-> (1)在数据输入网络之前原创 2020-08-24 19:50:25 · 1663 阅读 · 0 评论 -
【深度学习基础】对于模型结构、感受野和复杂度的初步认识
[CNN基础]对于模型结构、感受野和复杂度的初步认识一、CNN基础1、输出尺寸2、感受野(Receptove Field)3、参数量4、FLOPs二、算一算,以LeNet为例三、关于感受野的一点讨论· 有人说,计算无外乎 y = wx + b。· 控制论的一个角度:非线性模型,往往不可满足可加性,所以我们要将它线性化,尽可能逼近这个模型。· 我们认为AI看似很容易做到的事情,往往是研究人员多年的目标——向他们致敬。————————————一、CNN基础1、输出尺寸(1) 卷积层(convo原创 2020-08-12 18:01:05 · 940 阅读 · 0 评论 -
[Keras 模型训练] Thread Safe Generator
最近,在玩语义分割的模型。利用GPU训练的时候,每次跑几个epochs之后,程序崩溃,输出我说我的generator不是线程安全的。查看 trace back发现model.fit_generator在调用自己写的generator出现问题,需要将自己的generator写成线程安全的。 参考keras的#1638 issue找到解决方案。如下图,需要在代码中添加以下内容,然后在自己写的生成器函数上面加上修饰符 @threadsafe_generator:threa...原创 2020-08-11 15:49:00 · 1663 阅读 · 5 评论