七月份,我已经完成了Python基础语法的学习,并计划进行复习。通过尚硅谷的视频课程,我开始了Django的入门学习。我在B站上学习了深度学习的基础知识,并用PyTorch训练了分类模型。
我收集了花卉图片数据并进行了清洗,剔除了无法打开的图片。模型训练过程中遇到一些问题,但通过查阅资料基本解决了。接下来,我计划利用周末时间进一步学习基础知识,熟悉几个模型的基本流程,并在下周深入学习PyTorch。
此外,我巩固了深度学习的基本知识,并了解了多模态模型的概念。目前,我在B站学习人脸识别检测项目的实战课程,学习了AdaBoost的相关内容。完成了一个手写数字识别模型。重新学习了PyTorch后,我做了一个关于嘟嘴表情的简单人脸识别项目,包括模型搭建、训练和测试。本周,我还打算学习NumPy和Pandas,并可能找一个PyTorch的实战项目课程学习。
最后一周我学习了NumPy和Pandas库,并通过CSDN资源做了一个基于SqueezeNet的眼疾识别项目,了解了TensorFlow 2.0的相关内容。
我阅读了YOLOv1和ResNet的论文,并计划下周学习YOLO的更高版本。此外,我对图像分割有了一定了解,接下来将深入学习语义分割。我还阅读了YOLOv2的相关内容,并在掘金平台上找到了一些关于语义分割的知识。
我学习了YOLOv5的环境配置和源码解读,同时了解了如何使用LabelImg制作自己的深度学习目标检测数据集。为了理顺YOLOv5的知识点,我整理了自己的博客笔记。
七月份学习的基础知识:
· Python基础知识
- · 基本语法
- Django基础
· 深度学习
- · 基础知识
- 多模态模型
- 图像分割(语义分割)
· PyTorch
- · 基础知识
- 分类模型训练
- 实战项目(例如嘟嘴表情识别)
· NumPy和Pandas
- · NumPy库使用
- Pandas库使用
· 机器学习算法
- · AdaBoost
· 目标检测和图像识别
- · 人脸识别检测
- 手写数字识别模型
- 眼疾识别项目(基于SqueezeNet)
· YOLO系列
- · YOLOv1、YOLOv2、YOLOv5的相关知识
- YOLOv5环境配置和源码解读
· 深度学习工具和数据处理
- · TensorFlow 2.0
- LabelImg制作数据集
基本语法
深度学习
- · 基础知识
常见的分类算法
SVM、
神经网络:
卷积神经网络:
- 输入层:输入数据
- 卷积层:提取图像特征
- 池化层:压缩特征
- 全连接层:为输出准备,形同一维神经网络
池化
在图像处理中,由于图像中存在较多冗余信息,可用某一区域子块的统计信息(如最大值或均值等)来刻画该区域中所有像素点呈现的空间分布模式,以替代区域子块中所有像素点取值,这就是卷积神经网络中池化(pooling)操作。
池化操作对卷积结果特征图进行约减,实现了下采样,同时保留了特征图中主要信息。比如:当识别一张图像是否是人脸时,我们需要知道人脸左边有一只眼睛,右边也有一只眼睛,而不需要知道眼睛的精确位置,这时候通过池化某一片区域的像素点来得到总体统计特征会显得很有用。
特征
特征意为可作为事物特点的象征、标志等。在一些实际问题中,我们得到的样本数据都是多个维度的,即一个样本是用多个特征来表征的。比如在预测房价的问题中,影响房价y的因素有房子面积x1、卧室数量x2等,我们得到的样本数据就是(x1,x2)这样一些样本点,这里的x1、 x2又被称为特征。
为什么要进行特征选择?
在现实生活中,一个对象往往具有很多属性(以下称为特征),这些特征大致可以被分成三种主要的类型:
• 相关特征:对于学习任务(例如分类问题)有帮助,可以提升学习算法的效果;
• 无关特征:对于我们的算法没有任何帮助,不会给算法的效果带来任何提升;
• 冗余特征:不会对我们的算法带来新的信息,或者这种特征的信息可以由其他的特征推断出。
但是对于一个特定的学习算法来说,哪一个特征是有效的是未知的。因此,需要从所有特征中选择出对于学习算法有益的相关特征。
特征选择
(1)定义
从N个特征中选择其中M(M<=N)个子特征,并且在M个子特征中,准则函数可以达到最优解。用具体函数评价系统所采取策略优劣的准则时,称为准则函数。
特征选择想要做的是:选择尽可能少的子特征,模型的效果不会显著下降,并且结果的类别分布尽可能的接近真实的类别分布。
随机森林、逻辑回归、KNN、贝叶斯
常见的监督学习算法
感知机、SVM、人工神经网络、决策树、逻辑回归
特征提取: 是通过属性间的关系,如组合不同的属性得到新的属性,这样就改
变了原来的特征空间。
特征选择: 是从原始特征数据集中选择出子集,是一种包含的关系,没有更改原始的特征空间。
手写数字识别 1.4 LeNet-5_哔哩哔哩_bilibili
卷积神经网络3D可视化网址 3D Visualization of a Convolutional Neural Network
- 多模态模型
- 图像分割(语义分割)
最近邻 nearest neighbor
从训练样本中找到与查询点在距离上最近的预定数量的多个点,然后依据这些点的标签来预测查询点的标签。
如果我想要学习多模态模型的话需要先掌握哪些知识
学习多模态模型(Multimodal Models)涉及多个领域的知识。以下是一些先决知识点和学习顺序的建议:
1. 机器学习基础
- 线性代数:矩阵运算、特征值分解等是理解模型运作的基础。
- 概率论与统计学:理解概率分布、贝叶斯定理、假设检验等概念。
- 优化算法:梯度下降法、随机梯度下降(SGD)、Adam优化器等。
2. 深度学习
- 神经网络基础:感知机、多层感知机(MLP)、激活函数等。
- 卷积神经网络(CNN):用于处理图像数据。
- **循环神经网络(RNN)**及其变种(如LSTM、GRU):用于处理序列数据,如文本。
- Transformer模型:现代深度学习模型的基础,尤其是在自然语言处理(NLP)和多模态模型中。
3. 自然语言处理(NLP)
- 文本预处理:分词、词嵌入(如Word2Vec、GloVe)等。
- 语言模型:BERT、GPT等基于Transformer的模型。
4. 计算机视觉(CV)
- 图像预处理:图像增强、归一化、滤波等。
- 图像分类、目标检测与分割:熟悉常用的CNN架构如ResNet、VGG、YOLO、Mask R-CNN等。
5. 多模态学习基础
- 数据对齐与联合表示:理解如何将不同模态的数据(如文本和图像)进行对齐和联合表示。
- 注意力机制(Attention Mechanism):用于处理不同模态间的依赖关系。
- 跨模态对比学习:如CLIP模型,能够将图像和文本数据映射到同一嵌入空间中。
6. 实践
- 数据集:熟悉常用的多模态数据集,如COCO、Flickr30k、VQA等。
- 框架与工具:熟练使用TensorFlow、PyTorch等深度学习框架,掌握Hugging Face的Transformers库。
掌握以上知识后,你可以进一步研究最新的多模态模型和应用领域,如文本生成、视觉问答(VQA)、多模态搜索等。多阅读相关的学术论文,并通过实际项目来加深理解。
感知机是什么
ChatGPT 说:
ChatGPT
感知机(Perceptron)是最早期的人工神经网络模型之一,由弗兰克·罗森布拉特(Frank Rosenblatt)在1957年提出。它是一个二分类的线性模型,用于解决线性可分的分类问题。
感知机的结构
感知机的基本结构可以理解为一个具有单层神经元的神经网络,它包括以下部分:
-
输入层(Input Layer):
- 感知机接受多个输入,这些输入可以是特征值的集合。每个输入都有一个对应的权重。
-
权重(Weights):
- 每个输入都有一个关联的权重,用于决定该输入对最终决策的影响大小。权重值可以是正的、负的或零。
-
加权和(Weighted Sum):
- 感知机计算所有输入的加权和,即将每个输入乘以其权重,然后将这些乘积相加。
-
激活函数(Activation Function):
- 计算完加权和后,感知机会将结果输入到激活函数中,常用的是阶跃函数(Step Function)。如果加权和大于某个阈值,则输出1;否则输出0。这一过程相当于决定输入属于哪个类别。
-
输出层(Output Layer):
- 激活函数的结果就是感知机的最终输出,通常是二分类的结果(例如0或1)。
感知机的工作原理
感知机的训练过程涉及调整权重,以便让模型对训练数据做出正确的分类。具体过程如下:
- 初始化权重:随机初始化权重。
- 计算输出:对每个输入样本,计算加权和,并通过激活函数得到输出。
- 权重更新:如果输出与实际标签不符,根据错误大小调整权重。这个过程通常通过梯度下降法来实现。
- 重复:不断重复以上步骤,直到模型在训练集上的错误率足够低或达到预设的训练次数。
感知机的局限性
感知机只能处理线性可分的问题,即数据可以通过一条直线(在二维情况下)或一个超平面(在高维情况下)分隔开。如果数据是非线性可分的(例如XOR问题),感知机就无法正确分类。这也是后来多层感知机(即深度神经网络)发展的原因,它们通过引入更多的隐藏层和非线性激活函数来处理更复杂的任务。
总结
感知机是一个简单但重要的模型,它是理解更复杂神经网络模型的基础。虽然感知机本身的能力有限,但它的概念和原理在深度学习中得到了广泛的延伸和应用。
多层感知机(MLP)是什么
ChatGPT 说:
ChatGPT
多层感知机(Multilayer Perceptron,简称 MLP)是神经网络的一种,是感知机的扩展版。与单层感知机相比,MLP 通过增加多个隐藏层,使得它可以处理非线性可分的问题。MLP 是最基本的前馈神经网络结构之一,在深度学习中具有重要的地位。
MLP 的结构
MLP 由以下几部分组成:
-
输入层(Input Layer):
- 输入层接收输入数据,每个输入对应一个神经元。
-
隐藏层(Hidden Layers):
- 隐藏层位于输入层和输出层之间。一个 MLP 通常包含一个或多个隐藏层,每层由若干神经元组成。
- 隐藏层的每个神经元都与前一层的所有神经元相连,并且计算前一层的输出与对应权重的加权和,再通过激活函数进行非线性变换。
-
输出层(Output Layer):
- 输出层负责产生最终的输出结果,输出的维度取决于具体任务。例如,二分类任务的输出层通常只有一个神经元,使用Sigmoid激活函数输出一个0到1之间的概率值;而多分类任务的输出层则可能有多个神经元,每个神经元代表一个类别,通常使用Softmax激活函数。
-
权重(Weights)和偏置(Biases):
- 每个连接都有一个权重,神经元还通常有一个偏置项。权重和偏置是通过训练调整的参数。
-
激活函数(Activation Function):
- 激活函数引入非线性,使得网络能够学习和表示复杂的非线性关系。常见的激活函数包括ReLU(Rectified Linear Unit)、Sigmoid、Tanh等。
MLP 的工作原理
MLP 的工作原理包括前向传播(Forward Propagation)和反向传播(Backpropagation)两个过程:
-
前向传播(Forward Propagation):
- 数据从输入层开始,经过隐藏层,再到输出层。每一层的神经元计算前一层的输出与对应权重的加权和,并通过激活函数得到输出,最终生成输出层的结果。
-
反向传播(Backpropagation):
- MLP 的训练过程通过反向传播算法来更新权重和偏置。反向传播通过计算输出误差的梯度,逐层传播误差,并根据误差调整各层的权重和偏置。常用的优化方法包括梯度下降(Gradient Descent)及其改进版本如Adam、RMSProp等。
MLP 的优势和局限性
优势:
- 非线性可分问题:由于引入了隐藏层和非线性激活函数,MLP 可以处理非线性可分的数据。
- 普适性逼近定理:理论上,只要有足够的隐藏层和神经元,MLP 可以逼近任何连续函数。
局限性:
- 计算复杂度:随着隐藏层数量的增加,计算复杂度显著增加。
- 梯度消失/爆炸:深层网络中,梯度在反向传播过程中可能逐渐消失或爆炸,导致模型难以训练。这是后续深度学习研究中引入特殊架构(如卷积神经网络、残差网络)和优化方法的原因。
总结
多层感知机是深度学习的基础模型,通过引入隐藏层和非线性激活函数,MLP 能够解决更复杂的任务。虽然 MLP 仍有一些局限性,但它为更复杂的神经网络模型奠定了基础,并且在许多应用中仍然非常有效。
Sigmoid激活函数 是什么
ChatGPT 说:
ChatGPT
Sigmoid激活函数是一种常用的激活函数,尤其是在早期的神经网络中。它将输入映射到一个特定的范围(通常是0到1之间),使得输出可以解释为概率。Sigmoid 函数的数学表达式为:
σ(x)=11+e−x\sigma(x) = \frac{1}{1 + e^{-x}}σ(x)=1+e−x1
Sigmoid 激活函数的特性
-
输出范围:
- Sigmoid 函数将输入值映射到 000 到 111 之间,因此特别适合用于需要将输出解释为概率的场景,例如二分类问题中的输出层。
-
平滑性:
- Sigmoid 函数是平滑的、连续的,并且可导。其导数可以表示为:
这一特性使得 Sigmoid 函数在反向传播算法中计算梯度时非常方便。
-
单调性:
- Sigmoid 函数是单调递增的,这意味着随着输入值的增加,输出值也会增加。
-
非线性:
- Sigmoid 函数引入了非线性,可以帮助神经网络学习和表示复杂的非线性关系。
Sigmoid 激活函数的优缺点
优点:
- 概率输出:由于输出范围在 000 到 111 之间,Sigmoid 函数在二分类任务中特别有用,因为它可以直接输出概率值。
- 平滑和可导:Sigmoid 函数平滑且可导,适合用于梯度下降等优化算法。
缺点:
- 梯度消失问题:当输入值很大或很小时,Sigmoid 函数的导数会接近0,这导致在深层网络中可能会出现梯度消失问题,影响训练效果。
- 输出非零中心:Sigmoid 函数的输出在 000 到 111 之间,这意味着输出总是非零中心的(即不对称地分布在零的两侧),这可能会影响梯度的更新效率。
Sigmoid 激活函数的应用场景
- 二分类问题:在神经网络的输出层,尤其是在二分类问题中,Sigmoid 激活函数常被用来生成0到1之间的概率值。
- 隐藏层的激活函数:在早期的神经网络中,Sigmoid 函数也常用于隐藏层的激活函数,但由于其梯度消失问题,现在通常用 ReLU 等其他激活函数来替代。
总结
Sigmoid 激活函数是一种重要的激活函数,尤其适用于生成概率输出的场景。虽然在深层神经网络中可能存在梯度消失的问题,但它在一些特定任务中仍然非常有用,特别是在二分类任务的输出层。
图像分割(语义分割)
ChatGPT 说:
ChatGPT
图像分割(Image Segmentation)是计算机视觉中的一个重要任务,旨在将图像划分为多个部分或区域,以便更好地理解图像的内容。图像分割根据目标的不同,可以分为两种主要类型:语义分割(Semantic Segmentation) 和 实例分割(Instance Segmentation)。
语义分割(Semantic Segmentation)
语义分割是一种高级的图像分割技术,目标是将图像中的每个像素分类到某个特定的类别中。例如,在一张街景图像中,语义分割的任务是将所有道路的像素标记为“道路”,所有建筑物的像素标记为“建筑物”,所有行人的像素标记为“行人”,等等。语义分割并不区分相同类别的不同实例,即不会区分图像中的每一个“行人”对象。
语义分割的技术原理
语义分割的实现通常依赖于深度学习技术,特别是卷积神经网络(CNN)。以下是语义分割的关键技术和模型:
-
卷积神经网络(CNN):
- CNN 是语义分割的核心,擅长从图像中提取空间特征。
-
全卷积网络(FCN):
- 全卷积网络(Fully Convolutional Network, FCN)是第一个将标准的卷积神经网络扩展用于语义分割的架构。FCN 将传统 CNN 的全连接层替换为卷积层,输出与输入图像相同大小的特征图,然后通过上采样将其恢复到原始图像的分辨率,生成每个像素的分类结果。
-
U-Net:
- U-Net 是一种广泛用于医学图像分割的网络结构,它采用了对称的编码器-解码器架构。编码器逐渐减少空间维度(即下采样),提取高层次特征;解码器逐步恢复空间维度(即上采样),并结合编码器的特征图,以精确定位边界。
-
DeepLab:
- DeepLab 系列模型使用了空洞卷积(Atrous Convolution)来扩大卷积核的感受野,同时保持较高的分辨率。此外,DeepLab 还引入了条件随机场(CRF)后处理步骤,以进一步优化分割结果。
-
Mask R-CNN:
- 虽然主要用于实例分割,Mask R-CNN 也可以用于语义分割任务。它在 Faster R-CNN 的基础上添加了一个分支,用于生成目标的像素级别的掩码。
语义分割的评估指标
语义分割的性能通常通过以下指标进行评估:
-
交并比(IoU, Intersection over Union):
- 交并比衡量预测结果与实际标签的重叠程度,是语义分割中最常用的指标。
-
像素精度(Pixel Accuracy):
- 像素精度是正确分类的像素数与总像素数的比例。
-
平均交并比(Mean IoU):
- 平均交并比是对所有类别的 IoU 取平均值。
-
频权交并比(Frequency Weighted IoU):
- 该指标考虑了类别的像素数权重,避免小类别的 IoU 对总体结果影响过大。
语义分割的应用
语义分割在许多领域有广泛的应用,包括:
- 自动驾驶:通过对道路、车辆、行人等进行分割,语义分割为自动驾驶系统提供环境感知。
- 医学影像分析:在医学图像中分割出器官、肿瘤等,辅助医生诊断。
- 遥感影像处理:分割地物(如建筑、道路、植被)用于土地利用分类、灾害监测等。
- 增强现实(AR):通过分割背景和前景,使虚拟物体与现实世界无缝融合。
总结
语义分割是一种精细的图像处理任务,旨在将图像中的每个像素分类到特定类别中。随着深度学习技术的发展,语义分割的效果不断提升,并在自动驾驶、医学影像分析等多个领域中得到了广泛应用。