计算机视觉:从0基础开始的奋斗历程
文章平均质量分 83
锌a
如博客有问题可以评论留言,或邮件联系[email protected],看到必回
展开
-
NTU RGB-D 60 骨架数据集3D可视化
NTU RGB-D 60数据集可视化原创 2023-03-31 12:04:13 · 2271 阅读 · 20 评论 -
Pytorch使用permute后再reshape会修改张量的值,维度虽然对齐但仍需小心
permute函数和reshape函数原创 2022-09-26 11:05:43 · 757 阅读 · 0 评论 -
RuntimeError: CUDA error: device-side assert triggered CUDA kernel errors might be asynchronously re
CUDA error原创 2022-09-25 11:34:27 · 2421 阅读 · 2 评论 -
面试快速复习(三):概率论与数理统计
概率论的简要大概原创 2022-07-22 17:16:30 · 1194 阅读 · 0 评论 -
面试快速复习(二):交叉熵为什么有用
交叉熵的原理原创 2022-07-15 17:28:46 · 448 阅读 · 0 评论 -
面试快速复习(一):SVM通俗理解
SVM的整体通俗理解,包括硬间隔,软间隔、核函数原创 2022-07-13 18:03:54 · 359 阅读 · 0 评论 -
对于论文中Pytorch代码爱因斯坦求和einsum的理解
einsum求和的理解原创 2022-06-15 16:00:46 · 721 阅读 · 0 评论 -
Python手撸机器学习系列(十六):循环神经网络RNN的实现
目录循环神经网络RNN1.公式推导2.代码实现循环神经网络RNN1.公式推导对于该循环神经网络,以中间的RNN单元为例,推导前向传播:对于Layer-1:zh=wix+whah−1z^h = w^ix+w^ha^{h-1}zh=wix+whah−1ah=σ(zh)a^h = \sigma(z^h)ah=σ(zh)这里σ\sigmaσ是sigmoid(⋅)sigmoid(·)sigmoid(⋅)激活函数对于Layer-2:zo=woahz^o = w^oa^hzo=woahpred=ao原创 2022-05-02 14:03:27 · 4273 阅读 · 9 评论 -
Python手撸机器学习系列(十五):简单神经网络
神经网络1.简单算法推导搭建一个将二维平面坐标点分开的简单神经网络,输入维度为2*1(特征为2),神经网络结构如下图:则网络第一层Layer_1的输出为:L1=f(w1x1+w3x2+b1)L2=f(w2x1+w4x2+b2)L_1 = f(w_1x_1+w_3x_2+b_1)\\L2 = f(w_2x_1+w_4x_2+b_2)L1=f(w1x1+w3x2+b1)L2=f(w2x1+w4x2+b2)其中f(⋅)f(·)f(⋅)表示sigmoidsigmoidsig原创 2022-04-26 19:28:37 · 2359 阅读 · 2 评论 -
机器学习分类常见评价标准
目录1.准确率(Accuracy)2.精确率(Precision)3.召回率(Recall)4.PR曲线与F1值(F1 Score)5.ROC曲线与AUC评价分类器性能的指标一般是分类准确率(accuracy),但对于二分类问题,其评价指标为精确率(precision)与召回率(recall),除此之外还有F1值(F1 Score)、PR曲线、ROC曲线、AUC等帮助理解的评估标准。首先了解一下假阴性、假阳性这些基本概念:TP——True Positive——真阳性——真实标签为真,模型预测也为真T原创 2022-04-23 13:30:47 · 2856 阅读 · 0 评论 -
Python手撸机器学习系列(十四):提升树算法实现
目录一、提升树1.1 提升树概述1.2 提升树代码实现二、梯度提升决策树2.1 GBDT概述2.2 GBDT代码实现一、提升树1.1 提升树概述待更1.2 提升树代码实现为与李航《统计学习方法》第168页例8.2一致,回归树简化为只有一个根节点连接两个叶子结点的结构,因为只有一个特征。当有多个特征的情况下应该递归生成回归树,但特征的划分方法与下面的代码一致。import numpy as np#单棵回归树,回归树本应递归生成,但这里为了与课本一致,简化成只有一个特征,即根节点带两个叶子结点原创 2022-04-15 19:36:40 · 1918 阅读 · 0 评论 -
Python手撸机器学习系列(十二):连续特征决策树与缺失值决策树实现
连续值与缺失值决策树本节代码和理论主要参考自周志华《机器学习》ID3、C4.5以及CART决策树和剪枝代码请参考我的上一篇博客https://blog.csdn.net/qq_43601378/article/details/121360503?spm=1001.2014.3001.55021. 连续值决策树对于连续特征,不能再根据连续属性的可取值对节点进行划分,而是应该使用取值范围进行划分。最简单的策略是二分法,即先将所有样本的取值排序,然后去两个样本取值的中点作为一个切分点,如有n个样本,则共计原创 2022-04-08 20:26:33 · 4699 阅读 · 4 评论 -
ID3决策树与极大似然法的联系
标题来源于李航《统计学习方法》第二版p76页5.3.1第一段最后一句话。但问题在于,这本书和西瓜书都只介绍了信息增益的计算过程与决策树的构建过程,没有详细阐述ID3与极大似然法的联系。参考https://blog.csdn.net/qq_44204370/article/details/103035932,现反推如下:对于一棵决策树,其损失函数可以写作:Cα(T)=∑t=1∣T∣NtHt(T)+α∣T∣C_\alpha(T) = \sum_{t=1}^{|T|}N_tH_t(T)+\alpha|T转载 2022-03-29 16:58:30 · 296 阅读 · 0 评论 -
Python手撸机器学习系列(十一):KNN之kd树实现
一、概述原理及一般实现较为简单,本文主要讨论KD树实现。KNN的主要要点如下:本质:利用训练数据集对特征向量空间进行划分特点:不具备显示的学习过程K值的影响:K值越大,表明单个样本的影响越小,且划分的空间少了,模型变得越简单,近似误差越大,估计误差越小,模型更容易欠拟合;K值越小,表明单个样本的影响越大,且划分的空间变多了,模型变得越复杂,近似误差越小,估计误差越大,模型更容易过拟合;近似误差与估计误差通俗理解:近似误差可以理解为模型估计值与实际值之间的差距,估计误差可以理原创 2022-03-24 17:24:34 · 3282 阅读 · 4 评论 -
Python手撸机器学习系列(十):软间隔SVM
目录软间隔SVM1.1 软间隔SVM模型原理1.2 软间隔SVM模型求解1.3 代码实现1.4 参考文献:软间隔SVM对于硬间隔SVM,其目标函数为:minw,b12wTws.t.yi(wTxi+b)≥1\min\limits_{w,b} \frac{1}{2}w^Tw\\s.t. y_i(w^Tx_i+b)\geq1w,bmin21wTws.t.yi(wTxi+b)≥1具体细节可参考https://blog.csdn.net/qq_43601378/article/details原创 2021-12-29 16:36:00 · 3267 阅读 · 5 评论 -
人体动作识别、预测常用骨架数据集小结
目录NTU RGB D 60数据集简介评估方式SYSU 3D HOI数据集简介评估约定数据分析CMU其他说明NTU RGB D 60数据集简介包含了由微软Kinect v2从三个不同的角度收集的56880个视频片段,共有40名实验人员执行了60个动作类别。视频的每一帧由25个关节点信息组成,动作分为单人执行和双人执行,所以一帧中的骨架数量为为1或2,每个视频仅包含一个动作。评估方式有两组分类方式:cross-subject:通过将40个受试者分为2组,使得40320个视频片段被用于训练,剩原创 2021-12-26 23:36:57 · 2848 阅读 · 0 评论 -
Python手撸机器学习系列(九):硬间隔SVM(对偶形式SMO算法求解)
硬间隔SVM对偶形式求解原始形式梯度下降法求解请参考我的上一篇博客:硬间隔SVM原始形式梯度下降法求解1、对偶形式求解原理引入拉格朗日乘子法L(w,b,λ)=12∣∣w∣∣2+∑i=1Nλi(1−yi(wTxi+b))L(w,b,\lambda) = \frac{1}{2}||w||^2+\displaystyle\sum_{i=1}^N\lambda_i(1-y_i(w^Tx_i+b))L(w,b,λ)=21∣∣w∣∣2+i=1∑Nλi(1−yi(wTxi+b))则原问题可以写作:原创 2021-12-19 17:52:26 · 1906 阅读 · 8 评论 -
Python手撸机器学习系列(八):硬间隔SVM(原始形式梯度下降法求解)
目录一、硬间隔SVM1.1 原始形式1.2 原始形式代码实现(梯度下降)1.3 参考文献一、硬间隔SVM话不多说,直接上图:最基本的原理如图所示,即找一条最好的线把两边的点分开(本文以二维坐标点为基础举例)复习一下线性可分的定义:给定数据集{(x1,y1),(x2,y2),...,(xN,yN)}\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}{(x1,y1),(x2,y2),...,(xN,yN)},其中yi∈{+1,−1}y_i\in\{+1,-1\}y原创 2021-12-16 11:52:00 · 2881 阅读 · 4 评论 -
Python手撸机器学习系列(七):聚类(Kmeans)
聚类一、Kmeans聚类1.1 原理属于原型聚类的一种,较为简单给定样本集D={x1,x2,...,xm}D=\{x_1,x_2,...,x_m\}D={x1,x2,...,xm},对于聚类,可以划分为簇C={C1,C2,..,Ck}C = \{C_1,C_2,..,C_k\}C={C1,C2,..,Ck},即将原数据划分为kkk类,然后最小化平方误差:E=∑i=1k∑x∈Ci∣∣x−μi∣∣22\large E =\displaystyle\sum_{i=1}^k\displayst原创 2021-12-11 22:01:52 · 1587 阅读 · 0 评论 -
Python手撸机器学习系列(六):决策树(附Python实现西瓜书决策树构建及剪枝代码)
目录决策树一、ID3决策树1.1 信息熵1.2 信息增益1.3 ID3决策树代码实现二、CART决策树决策树根据划分方法不同可以分为ID3、CART、C4.5三种决策树一、ID3决策树1.1 信息熵决策树算法的关键在于如何选择最优划分属性。一般而言,我们希望决策树的分支节点所包含的样本尽可能属于同一类别,即其纯度越高越好。通常,使用信息熵(information entropy)来作为度量样本纯度的标准,计算公式为:Ent(D)=−∑k=1∣y∣pklog2pkEnt(D) = -\disp原创 2021-11-16 17:13:50 · 9510 阅读 · 18 评论 -
Python手撸机器学习系列(五):线性回归与岭回归(最小二乘法求解)
线性回归目录线性回归一、原理1.1 数据输入1.2 最小二乘法一般解法1.3 最小二乘法的几何理解二、代码实现2.1 梯度下降法 、直接计算法求解:三、结语一、原理线性回归应该是最简单的机器学习算法了,我们以最小二乘法为基础来进行求解1.1 数据输入设数据表现形式为:Data=(x1,y1),(x2,y2),...,(xN,yN)Data = {(x_1,y_1),(x_2,y_2),...,(x_N,y_N)}Data=(x1,y1),(x2,y2),...,(xN,yN)其中x原创 2021-11-12 17:39:13 · 1728 阅读 · 1 评论 -
Python手撸机器学习系列(四):朴素贝叶斯(华强买瓜版)
目录一、原理二、代码实现2.1 数据集2.2 代码一、原理待更二、代码实现2.1 数据集周志华机《机器学习》第84页表4.3西瓜数据集:色泽,根蒂,敲声,纹理,脐部,触感,好瓜青绿,蜷缩,浊响,清晰,凹陷,硬滑,1乌黑,蜷缩,沉闷,清晰,凹陷,硬滑,1乌黑,蜷缩,浊响,清晰,凹陷,硬滑,1青绿,蜷缩,沉闷,清晰,凹陷,硬滑,1浅白,蜷缩,浊响,清晰,凹陷,硬滑,1青绿,稍蜷,浊响,清晰,稍凹,软粘,1乌黑,稍蜷,浊响,稍糊,稍凹,软粘,1乌黑,稍蜷,浊响,清晰,稍凹,硬滑,1原创 2021-11-02 20:44:58 · 2260 阅读 · 11 评论 -
Python手撸机器学习系列(三):线性判别分析(Fisher究极详解,看不懂你锤死我)
目录1.原理概述2.原理详解2.1 输入2.2 投影2.3 求解www3.代码实现1.原理概述我们的目的是将高维的数据投影到一维直线上并在投影的值中取一个阈值进行分类,如下图所示:(绘画水平有限,将就着看)在上图,很明显左边的投影更适合分类,因为两种类别(o和x)在投影直线上能轻松地找到一个阈值将其区分开来,而右边的投影方向则不适合当前分类。所以我们需要求解一个适合的投影方向www在理解fisher的时候,我遇到了很多不理解问题,在经过多本书籍的对比之后终于搞懂了,其大致的思路如下:问题的初原创 2021-10-31 18:32:50 · 1906 阅读 · 0 评论 -
Python手撸机器学习系列(二):逻辑斯蒂回归(Logistic Regression)(附Python实现坐标点分类及鸢尾花分类)
逻辑斯蒂回归(Logistic Regression)一、原理1.1 将回归变为分类逻辑斯蒂回归是一个经典的二分类模型,它的精髓在于用线性回归做二分类(或多分类,本文以二分类为主)。线性回归的输出为没有约束的连续值,而分类在于0和1两个值,如何从回归值到分类值就需要一个映射,于是引入了sigmoid函数:sigmoid(z)=1e−z\large sigmoid(z) = \frac{1}{e^{-z}}sigmoid(z)=e−z1画出图像为:即可以将回归输出映射到0-1之间。我们的原创 2021-10-21 17:38:22 · 2006 阅读 · 5 评论 -
Python手撸机器学习系列(一):感知机 (附原始形式和对偶形式Python实现代码)
感知机1.感知机的定义感知机是二分类的线性模型,是神经网络和SVM的基础。输入特征x∈Xx∈Xx∈X,输出y={+1,−1}y = \{+1 , -1\}y={+1,−1}那么感知机算法可以表示为f(x)=sign(w⋅x+b)f(x) = sign(w·x+b)f(x)=sign(w⋅x+b),相当于一个简单的线性函数其中sign(a)={+1,if a≥0−1,if a<0 sign(a)= \begin{cases} +1, & \text {if a$\ge原创 2021-10-13 16:02:18 · 1232 阅读 · 1 评论 -
如何用Matplotlib优雅地实现NTU-RGB D骨架可视化
如何用Matplotlib实现NTU-RGB D骨架可视化1.简介骨架数据集由于其强鲁棒性而被广泛运用于动作识别和预测等领域,其中NTU RGB-D数据是最常用的骨架动作数据集。无论是在论文中描述自己的数据,亦或是分析特征变化过程,可视化都是必不可少的一步,本文将以NTU RGB-D数据集为基准使用Python的Matplotlib库对骨架数据进行可视化2.数据分析NTU RGB-D的数据集非常规范,其文件后缀名为‘.skeleton’,用记事本直接打开结果如下:从上到下依次为帧数、骨架数量(不原创 2021-10-08 17:00:09 · 2072 阅读 · 16 评论 -
神经网络为什么觉得你的猫是猫:神奇的类激活图CAM技术(附Pytorch实现代码)
1 引言对于一般的分类而言,我们将数据导入神经网络,神经网络告诉我们这是哪一类,而对于一些必要情况下,我们更需要知道神经网络如何做出判断,输入数据的哪些参数影响着神经网络的判断。于是,Bolei Zhou等人发表的论文Learning Deep Features for Discriminative Localization提出了类激活图技术,告诉我们为什么神经网络觉得你的猫是一只猫。2 类激活图的原理原论文中的解释为:我们对卷积特征图执行全局平均池化,并将其用作产生所需输出(分类或其他)的全连原创 2021-09-08 20:37:21 · 1055 阅读 · 0 评论 -
为什么pytorch在定义模型和损失函数时能直接输入数据
想到这个问题主要在于有个朋友问我为什么定义MSE时,损失函数定义为loss = torch.nn.MSELoss(),使用时却可以直接输入数数据loss(x,y),这个问题和定义网络的时候一样,在定义的时候只需要写网络层是什么。,而使用时只需要输入x很显然,定义是__init__干的活,而计算则是__forward__干的活,但问题就在于为什么网络能够自动唤起forward而不需要调用,我们类比损失函数和自定义损失函数:通过查找函数,发现Pytorch给定的损失函数,如MSE等都继承自class _L原创 2021-08-12 14:46:25 · 221 阅读 · 0 评论 -
Python使用for循环定义二维数组和使用 * 定义二维数组的问题与区别
发现这个问题在于LeetCode写算法时明明和题解一模一样但结果就是不对,排查发现问题出在定义数组上我们先来看两个数组:两个数组看似完全一致,使用 == 也输出True但使用起来却不一致,将两个数组的【1,1】位置设置值,可以看到a数组将【0,1】和【1,1】位置都设置成了1,而b数组则是正确的将【1,1】位置设置为1根据我的猜测,使用 * 来定义二维数组时会复制之前的一维数组,即一维数据都会指向同一地址,每一行都是一样的。所以[[0]*3]*2并不能当做我们所熟知的二维数组,建议以后定义二维原创 2021-08-11 17:09:21 · 2241 阅读 · 0 评论 -
关于GCN和CNN中耦合聚集与解耦合的理解
目录1.序言2.GCN中的耦合聚集3.CNN中的解耦合1.序言最近读论文看到很多论文提到了耦合与解耦合的概念,实在不懂,就细细看了一下,下面是我的理解,如有不对欢迎指出。本文参考论文:Cheng K, Zhang Y, Cao C, et al. Decoupling gcn with dropgraph module for skeleton-based action recognition[C]//Computer Vision–ECCV 2020: 16th European Conferen原创 2021-08-05 17:46:14 · 2018 阅读 · 2 评论 -
Pytorch采坑
问题:Pytorch指定显卡无效,仍然只使用GPU 0 ;原因:Pytoch在加载与训练模型时会先把预训练模型放到GPU0上,如果此时GPU0被占满,则会提示显存不够而报错解决:在程序开头加一句os.environ["CUDA_VISIBLE_DEVICES"] = "2,3" 强制指定2,3号显卡待更新...原创 2021-07-28 19:36:13 · 357 阅读 · 2 评论 -
Pytorch手撸交叉熵CrossEntropyLoss并修改one-hot输入
目录1 前言2 交叉熵的实现过程3完整的自定义交叉熵4.使用自己one-hot的交叉熵1 前言楼主最近要修改一下one-hot然后送入交叉熵中,由于pytorch的torch.nn.CrossEntropyLoss()已经封装好了one-hot,所以需要自定义重写交叉熵,这里主要是多级交叉熵,而不是二分类交叉熵。2 交叉熵的实现过程首先看多级交叉熵的计算过程:L=−1N∑iN∑c=1Myiclog(pic)L = -\frac{1}{N}\displaystyle\sum_i^N\display原创 2021-07-15 14:53:15 · 4367 阅读 · 6 评论 -
清晰图解,一图看懂图卷积GCN、时空图卷积ST-GCN
目录1.前言2.普通卷积与图卷积2.1 普通卷积2.2 图卷积3.ST-GCN图卷积的公式解读4 ST-GCN图卷积的代码解读5 参考文献6 联系方式1.前言本文为我阅读论文 Spatial Temporal Graph Convolutional Networks for Skeleton-Based Action Recognition 和代码后的所思所想,仅代表我个人观点2.普通卷积与图卷积2.1 普通卷积在理解图卷积之前,需要认识一下传统的卷积。对于一个3×3的卷积操作而言,相当于把3×3原创 2021-06-15 00:11:01 · 7659 阅读 · 21 评论 -
深度神经网络学习 :使用tensorflow2.1识别手势0-5
标题1.前言2.训练过程2.1 准备数据2.21.前言该项目是吴恩达深度学习第二课的课后作业,数据来源百度网盘,提取码:dvrc,请在开始之前下载好所需资料,本文参考自百度网盘,由于是第一次训练神经网络,不足之处恳请大家指出。2.训练过程2.1 准备数据下载数据集和读取数据的代码后,先对代码进行处理。首先将读入数据和、分为训练集和测试集,随后可以选择是否打乱数据集。由于数据是64*64的图片,训练集1080张,测试集120张,这里我们将训练集X和测试集X分别拉伸为(12288,1080)和(1原创 2020-07-28 22:20:13 · 1337 阅读 · 5 评论 -
Python + OpenCv实现视频中的车辆检测计数(车流量统计) (2020.7.15已更新源码)
文章目录1.序言2.设计思路以及遇到的问题3.实现过程4. 总结&吐槽1.序言最近由于毕业设计相关,疯狂学习计算机视觉的相关内容,该博文为我毕业设计的初步结果,由于尚未完全解决,因此这里主要说一下遇到的问题以及想法,如有问题欢迎大家指正。2.设计思路以及遇到的问题第一步是完成物体(也就是车辆)的检测,这里有两种解决办法,第一种办法是使用opencv的形态学处理,比如背景消除、做帧...原创 2020-03-30 01:10:26 · 28628 阅读 · 59 评论