自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 【C/C++/CUDA C/Python】CPU/GPU 程序块运行时间多种计算方法全解析

1.CPU程序块运行时间计算2.GPU程序块运行时间计算2.1 cuda计时事件 cudaEvent_t

2020-10-18 22:28:24 4038

原创 Python3 迭代器(iter-next)与 生成器(yield)详解

1. 迭代器在了解迭代器之前我们要知道上面是魔法方法,python中有些名称很特别,开头和结尾都是两个下划线(如__future__、__init__)。这样拼写表示名称有特殊意义,因此绝不要在程序中创建爱你这样的名称。在这样的名称中,很大一部分都是魔法(特殊)方法的名称。如果你的对象实现了这些方法,它们将在特定情况下(具体是那种情况取决于方法的名称)被python调用,而几乎不需要直接调用。对于魔法方法,迭代器只介绍__iter__,它是迭代协议的基础。1.1 迭代器协议迭代(itera...

2020-09-03 11:34:53 1211

原创 Python函数参数全攻略——(*args与**kwargs参数的用法)位置参数、关键字参数、收集参数与分配参数

收集参数

2020-08-14 20:59:12 776 2

原创 物体检测的评价指标——IOU(交并比)、FP、FN、TN、mAP(mean Average Precision)与R(召回率,Recall)、P(准确率,Precision)、P-R曲线

目录1.IOU(Intersection of Union,交并比)对于物体检测模型输出是非结构化的,事先并无法知道输出物体的数量、位置、大小等,因此物体检测的评价算法稍微复杂些。下面我将目前公用的几乎所有评价指标都进行解释说明,部分指标附上实现代码。1.IOU(Intersection of Union,交并比)对于具体的某个物体,我们可以从预测框与真实框的贴合程度判断检测的质量,这个指标就是IoU(Intersection of Union,交并比),用于量化两个框的贴合程度。...

2020-08-09 14:33:22 2325

原创 空间分辨率和灰度分辨率

1. 空间分辨率空间分辨率是图像中可辨别的最小细节的度量。在数量上,空间分辨率可以有很多方法表示。其中每单位距离线对数和每单位距离点数(像素数)是最通用的度量。每单位距离点数是印刷和出版业中最常用的图像分辨率的度量。在美国,这一度量通常使用每英寸点数(dpi)来表示。例如,报纸用75dpi的分辨率印刷,杂志是133dpi,光鲜的小册子是175dpi,《数字图像处理》书页是以2044dpi印刷的。空间分辨率的度量必须针对空间单位来规定才有意义。图像大小本身并不会告诉我们全部内容。如果没有规定图像包含的

2020-08-04 16:42:08 15971

原创 TensorFlow 1.x 迭代器(Iterator)

TensorFlow(tf)读取数据的方式主要有两种:供给数据,即每一步让python程序供给数据,这种方式仅限于测试与实验 tf.data模块读取数据,tf.data模块类似管理水库放水的管道管理着数据读取tf.data模块主要包括以下类:class Dataset:数据集合,注意写成DataSet可能报错(我的版本tensorflow-gpu 1.12.0下会) class FixedLengthRecordDataset:从二进制文件读取固定长度 class Iterator:可以理解

2020-05-23 21:18:49 2571 2

原创 C++ const限定符

有时候我们希望定义这样一种变量,它的值不能被改变。例如,用一个变量来表示缓冲区的大小。使用变量的好处是当我们觉得缓冲区大小不再合适时,很容易对其进行调整。另一方面,也应随时警惕防止程序一不小心改变了这个值。为了满足这一要求,可以用关键字const对变量的类型加以限定:cosnt int buffSize = 512; //输入缓冲区的大小这样就把buffSize定义成了一个常量。任何试图为buffSize赋值的行为都将引发错误:buffSize = 1024; // 错误:试图向

2021-06-23 20:47:24 284 2

原创 C++复合类型(compound type)——引用和指针

复合类型(compound type)是指基于其他类型定义的类型。C++语言中有几种复合类型,最常用的引用和指针。一个简单的声明语句由一个数据类型和紧随其后的一个变量名列表组成。其实更通用的描述是,一条声明语句由一个基本数据类型(base type)和紧随其后的一个声明符(declarator)列表组成。每个声明符命名了一个变量并指定该变量为与基本数据类型有关的某种类型。我们更常见到的声明语句中,声明符其实就是变量名,此时变量的类型也就是声明的基本数据类型。其实还可能有更复杂的声明符,它基于基本数据

2021-06-22 23:18:55 454 1

原创 单阶多层检测器SSD(Single Shot MultiBox Detector)的Pytorch实现

SSD(Single Shot MultiBox Detector) 算法借鉴了Faster RCNN与YOLO的思想,在一阶段网络的基础上使用了固定框进行区域生成,并利用了多层的特征信息,在速度与检测精度上都有了一定的提升。1. SSD算法流程SSD算法流程如上图,输入图像首先经过VGG的基础网络,在此之上又增加了几个卷积层,然后利用3×3的卷积核在6个大小与深浅不同的特征层上进行预测,得到候选框的分类与回归预测值,最后直接预测出结果,或者求得网络的损失。SSD的算法思想,主要可以分为4.

2021-06-21 22:06:35 265

原创 【算法】十大排序算法原理分析与C++实现

对于排序算法,不但要知道其是如何实现的,同时也要知道它是怎么来的,应该在什么样的情况下使用,时间复杂度和空间复杂度以及优缺点。0.前言对于常见的排序算法的运行时间,总结如下表。其中,n表示要排序的数据项数量。对于计数排序,数据项均在集合{0,1, ..., k}内。对于基数排序,每个数据项都是d位数字的整数,每位数字可能取k个值。对于桶排序,假定关键字是半开区间[0, 1)内服从均匀分布的n个实数。表的最右一列给出了平均情况或期望运行时间,可能与最坏运行时间不同。再次不对堆排序的平均运行时间进...

2021-05-27 22:39:00 161

原创 【数据结构】树状数组(Binary index tree,BiT)

文本:https://zhuanlan.zhihu.com/p/93795692视频:https://www.bilibili.com/video/BV1pE41197Qj?from=search&seid=12104701230398103081

2021-05-13 22:58:14 177

原创 【算法】深入理解动态规划

动态规划(Dynamic Programming)技术广泛应用于组合优化问题的算法设计中,比如图的多起点与多终点的最短路径问题、矩阵链的乘法问题、最大效益投资问题、背包问题、最长公共子序列问题、图像压缩问题、最大子段和问题、最优二分检索树、RNA的最优二级结构问题等。...

2021-05-13 22:53:25 125

原创 【算法】C++ 二叉树的深度优先搜索与广度优先搜索(前序遍历搜索、中序遍历搜索、后序遍历搜索)的递归与迭代实现

目录1. 深度优先搜索1.1 前序遍历1.1.1 递归法1.1.2 迭代法1.2 中序遍历1.2.1 递归法1.2.2 迭代法1.3 后序遍历1.3.1 递归法1.3.2 迭代法2. 广度优先搜索2.1 递归法2.2迭代法1. 深度优先搜索1.1 前序遍历1.1.1 递归法1.1.2 迭代法1.2 中序遍历1.2.1 递归法1.2.2 迭代法1.3 后序遍历1.3.1 递归法1.3.2 迭代法2. 广度优..

2021-04-09 23:05:34 192

原创 【算法】动态规划——将问题转化为小问题

1 背包问题假设你是个小偷,背着一个可装4磅重东西的背包。你可以盗窃的商品有如下三件。为了让盗窃的撒谎给你品价值最高,你该选择哪些商品?1.1 简单算法最简单的算法如下:尝试各种可能的商品组合,并找出价值最高的组合。这样可行,但速度非常慢。在有3件商品的情况下,你需要计算8个不同的集合;有4件商品时,你需要计算16个集合。每增加一件商品,需要计算的集合数都将 !这种算法的运行时间为O(2ⁿ),真的是慢如蜗牛。只要商品数量多到一定的程度,这种算法就行不通。当然,我们可以...

2021-03-16 14:18:34 454 1

原创 【算法】贪婪算法——每步都是最优解

1.教室调度问题假设有如下课程表,你希望将尽可能多的课程安排在某间教室上课。但是没有办法让这些课都在这间教室上,因为有些课的上课时间有冲突。你希望在这间教室上尽可能多的课。如何选出尽可能多且之间不冲突的课程呢?这个问题好像很难,实际上,算法可能简单得让你大吃一惊。具体做法如下:...

2021-03-04 10:16:48 1310 1

原创 【算法】狄克斯特拉算法——加权图的最短路径问题

1. 前言前面,我们讲过非加权图的最短路径问题,它是借助队列进行广度优先搜索实现的(链接在此)。广度优先搜索算法可以很好地解决如下非权重图的最短路径问题。这是最短路径

2021-03-03 15:08:02 978 1

原创 【统计学】深入理解最大似然估计(MLE, maximum likelihood estimation)

1. 前言最大似然估计就是利用已知的样本结果,在使用某个模型的基础上,反推最有可能导致这样的结果的模型参数。2. 理论阐述假设我们有一个独立同分布的样本。假设是从某个定义在参数θ上的已知概率密度族p(x|θ)中抽取的实例: ~p(x|θ)我们希望找出这样的θ,使得尽可能像是从p(x|θ)抽取的。因为是独立的,所以给定参数θ,样本X的似...

2020-12-13 17:16:44 5967 1

原创 【Opencv4 C++】图像存储容器——Mat类

以前都是使用Python下的Opencv,numpy的强大矩阵运算似的使用opencv时甚至没有感觉到图像数据的一系列基础操作。但对于C++的Opencv,就不得不考虑数据类型以及定义与赋值等接本操作。在C++中,Opencv提供了一个Mat类用于存储矩阵数据。1. Mat类介绍2. Mat类构造与赋值3. Mat类支持的运算col row colRange rowRange4. Mat类元素的读取...

2020-11-25 20:47:51 443

原创 【数据结构】图——网络模型的基础

图是一种相对复杂的数据结构由顶点和连接每队顶点的边构成的图形就是图。1. 基础背景假设你居住在旧金山,要从双子峰前往金门大桥。你想乘公交车前往,并希望换乘最少。可以做的公交车如下所示:为了找到换乘最少的乘车路线,你将用什么样的算法?一步就能到达金门大桥吗?下面突出了所有一步就能到达的地方。金门大桥未突出,因此一步无法到达那里,两步能吗?金门大桥也未突出,因此两步无法到达那里,三步呢?金门大桥突出了!因此从双子峰出发,可以沿下面的路线三步到达金门大桥。...

2020-11-21 17:12:23 553

原创 【数据结构】哈希表(也称散列表)——入门这一篇就够了!

在讲散列表之前,我们先回顾总结下两种最基本数据结构——数组和链表的基本特点。数组:寻址容易,插入和删除元素困难;链表:寻址困难,插入和删除元素容易。 数组 链表 读取 O(1) 插入 删除 ...

2020-11-20 22:54:35 546

原创 【算法】欧几里德算法——求两个整数的最大公约数

目录1. 算法简介2. 算法实现2.1 暴力穷举法2.2 欧几里德算法1. 算法简介欧几里德(Euclidean)算法,又被称辗转相除法,是求最大公约数的算法。两个数的最大公约数是指能同时整除它们的最大正整数。欧几里德算法的基本原理是:两个数的最大公约数等于它们中较小的数和两数之差的最大公约数。例如:252和105的最大公约数是21(252 = 21 × 12;105 = 21 × 5);252 − 105 = 147,所以147和105的最大公约数也是21;147

2020-11-10 17:03:14 2993

原创 【算法】深度理解 递归算法

1. 什么是递归?下面先描述一个递归可能应用的实际场景:我们有一个神秘的盒子,有一把钥匙在这个盒子里。这个盒子 里有盒子,而盒子里面又有盒子。钥匙可能就在某一个盒子中。为了找到钥匙,有两种解决思路。下面是第一种解决方式:创建一个要查找的盒子堆; 从盒子堆取出一个盒子,在里面找; 如果找到的是盒子,则将盒子加入盒子堆中,以便以后再查找; 如果找到钥匙,则大功告成! 回到第二步。另一种解决方法则更为清晰:检查盒子中的每样东西; 如果是盒子,就回到第一步; ...

2020-11-09 22:33:55 395

原创 【算法】排序算法——选择排序、快速排序、合并排序

1. 选择排序假设你的计算机内存储了很多歌曲,每首歌曲都记录了播放次数。需要将这个列表按照播放次数从多到少的顺序排列,从而将你喜欢的乐队排序。一种办法是遍历这个列表,找出作品播放次数最多的乐队,并将该乐队添加到一个新列表中。再次这样做,找出播放次数第二多的乐队。继续这样做,最后得到一个有序的列表。下面来看看这样做需要多久时间。O(n)意味着查看列表中的每个元素一次。例如,对乐队列表进行简单查找时,意味着每个乐队查看一次。要找出播放次数最多的乐队,必须检查列表中的每...

2020-11-08 22:25:56 664

原创 【算法】旅行商问题——运行时间为O(n!)的算法

旅行商问题是一个运行时间极长的算法。这个算法是计算机科学领域非常著名的旅行商问题,其时间增长得非常快,而且即使非常聪明的人也没有改进空间。旅行商问题是这样的:有一个旅行家,他需要前往5个城市。这位旅行商要前往5个城市,同时要确保旅程最短。为此,可考虑前往这些城市的各种可能顺序。对于每种顺序,他都计算总旅程,再挑出旅程最短的路线。5个城市有120种不同的排列方式。因此,在涉及5个城市时,解决这个问题需要执行120次操作。涉及6个城市时,需要执行720次操作(有720种不同的排列方式)。涉及7个城.

2020-11-08 20:45:13 617

原创 【算法】时间复杂度/运行时间——大O表示法

对于所有算法,我们都要讨论其运行时间。一般而言,应该选择效率最高的算法,以最大程度地减少运行时间或占用空间。大O表示法是一种特殊的表示法,指出了算法的速度有多快。大O表示法 并不能表示具体算法任务运行的时间,这也没有意义,因为任务量总是在变。我们需要知道运行时间如何随任务量增长而增长,这正是大O法的用武之地。大O法表示指出了算法有多快。例如,假设列表包含n个元素。简单查找需要检查每个元素,因此需要执行n次操作。使用大O表示法,这个运行时间表示为O(n)。并没有时间单位s,这是因为大O法指的并非以秒为单.

2020-11-06 15:02:20 2046

原创 【Pytorch Debug】加载保存模型 每次推理结果都不同 / unexpected_keys或者missing_keys / torch.nn.DataParallel( ).cuda()

【bug描述】:模型为仅保存参数的模型,已确定加载语句 “没有问题” ,且每次测试的图片数据固定,但是每次推理得到的结果都不一样。【bug分析】:实际上在加载模型并不是完全没有问题,在使用如下加载语句时出现cnn.load_state_dict(torch.load(os.path.join(MODEL_PATH,"model.pth"))['model'])#保存语句如下:#torch.save({# 'model':cnn.state_dict(),# 'optimiz.

2020-10-29 23:02:49 2260

原创 Python3 特性(property)、静态方法(@staticmethod)和类方法(@classmethod)、__getattr__、__setattr__

cc

2020-09-03 21:59:52 549

原创 上采样(upsampling)(图像内插)——最邻近内插法、双线性内插法与双三次内插法

1. 基本概念内插是在诸如放大、收缩、旋转和几何校正等任务中广泛应用的基本工具,内插是基本的图像重采样方法。从根本上来看,内插是用已知数据来估计未知位置的数值的处理。2. 最邻近内插法、双线性内插法与双三次内插法假设一幅大小为500×500像素的图像要放大1.5倍到750×750像素。一种简单的方法就是创建一个假想的750×750的网格,它与原始图像有相同的间隔,然后将其收缩,使它准确地原图像匹配。显然,收缩后的750×750网格的像素间隔要小于原图像的像素间隔。为了对覆盖的没一个点赋以灰度值,

2020-08-04 20:28:25 2776

原创 OpenCV 图像梯度 :cv2.Sobel(),cv2.Schar(),cv2.Laplacian() + 数据类型设置:cv2.CV_8U,cv2.CV_16S,cv2.CV_64F

原理:梯度本质上就是导数。OpenCV 提供了三种不同的梯度滤波器,或者说高通滤波器:Sobel,Scharr 和Laplacian。Sobel,Scharr 其实就是求一阶或二阶导数。Scharr 是对Sobel(使用小的卷积核求解求解梯度角度时)的优化。Laplacian 是求二阶导数。1.Sobel 算子和Scharr 算子Sobel 算子是高斯平滑与微分操作的结合体,所以它的抗噪声能力很好。你可以设定求导的方向(xorder 或yorder)。还可以设定使用的卷积核的大小(ksize).

2020-07-31 15:18:29 6098

原创 Python3 面向对象:多态、封装、继承

面向对象的编程中,对象意味着一系列数据(属性)以及一套访问和操作这些数据的方法。

2020-07-25 15:04:52 167

原创 无监督学习之K-Means算法python实现

1.定义无监督学习:无明确的惩罚,以某种形式的回报激励决策,典型代表有K-Means聚类与主成分分析,无监督学习的目标是使得奖励最大化,被视为人工智能的实现方法。 K-Means聚类:将无标注的样本通过迭代聚类称为k个簇。2.K-Means算法实现步骤 选定k个簇心(可随意) 分别计算每个样本到簇心距离,并进行归属 重新计算簇重心,更新k个簇心 反复迭代知道达到终止条件 3.Python实现代码import numpy as npimport mat.

2020-07-13 21:56:48 374 1

原创 Python3自定义包的使用及import A.b与from A import b的区别

1.python自定义包的使用包实际就是另一种模块(模块就是程序,如为了加法运算写了一个add.py模块以多次使用)。包可以包含多个模块。模块存储在一个.py的文件中,而包则是一个目录。要被Python视为包,目录下必须包含__init__.py。如果将模块加入包中,只需将模块放在包目录中即可,也可在包中嵌套其他包。下面为一个简单包的布局:文件目录(unix路径名) 描述 ~/python/ PYTHONPATH中的目录 ~/python/drawing/ 包目录(包dra

2020-07-08 20:49:24 1151

K-Means.rar

原创K-Means聚类算法python实现,包含kmeans.py与data.txt,具体介绍可见我的另一篇博客 https://blog.csdn.net/weixin_46318945/article/details/107326010 。之所以上传文件,是为了需者方便快速复用。kmeans_refer为他人更高级api实现,更加简单可参考。

2020-07-13

空空如也

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

TA关注的人

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