自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

念去去的博客

杨柳岸,晓风残月。

  • 博客(44)
  • 问答 (1)
  • 收藏
  • 关注

原创 提取excel中的图片

Excel里插入图片是悬浮在单元格上的,如果超出格子大小了还不能跟着排序,而单元格大小是有上限的,用openxyl也查看不到图片,所以就想办法把图片提取出来。首先先把后缀改成zip,然后解压缩,就可以看到图片都在xl/media这个目录里放着了但是图片的顺序是按照插入时间来排的,并不一定是按照行列,如果你就是按顺序插入的话就可以直接用了,但如果不是的话,就还需要找到对应的行列号。方法就是查看xml文件,这个文件是xl/drawings/drawing1.xml,这里面包含了row和col,还有rId,

2021-07-26 13:40:28 1570

原创 一个程序的诞生

一个C程序从代码到一个可执行程序需要精力四个阶段,分别是预处理 编译 汇编 链接预处理其中预处理是把代码中的#开头的命令处理一下,例如#include,就是去找到对应的头文件#define就是去替换代码中所有宏定义部分的内容,这一步没有任何程序转化发生,完全是在文本层面的,例如#define就是对宏定义的内容进行文本替换,#include就是直接把头文件的内容复制过来,它生成的结果也是一个文本文件,通常用.i作后缀例如原本有一个hello world程序长这样#include <stdio.h

2020-12-28 17:43:09 245

转载 opencv实现二维码检测

title: opencv实现二维码检测date: 2020-07-03 14:03:44tags: [opencv]categories:图像处理opencv调用opencv从4代之后推出了二维码识别接口.调用方法是这样的.‘’’import cv2img = cv2.imread(‘data/qrcode.jpg’)img = cv2.imread(‘qrcode/11.jpg’)qrcode = cv2.QRCodeDetector()result, points, c.

2020-07-03 20:07:03 18664 2

原创 caffe源码阅读《六》base_conv_layer

BaseConvolutionLayer是所有卷积层的基类。为什么卷积层还需要基类呢?因为再caffe里除了 ConvolutionLayer还有 DeconvolutionLayerBaseConvolutionLayer 类BaseConvolutionLayer 构造函数 explicit BaseConvolutionLayer(const LayerParameter& ...

2020-04-07 15:48:38 413

原创 caffe源码阅读《六》im2col

卷积的过程卷积实际上就是两个矩阵对位相乘,然后再把积求和的一个过程[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4AFCKOUB-1583380530882)(https://blog.357573.com/2020/02/08/%E4%BB%80%E4%B9%88%E6%98%AF%E5%8D%B7%E7%A7%AF%E5%91%A2/0.png)]im2c...

2020-03-05 11:55:27 431 3

原创 caffe源码阅读《五》solver

SolverAction最开始定义了一个枚举/** * @brief Enumeration of actions that a client of the Solver may request by * implementing the Solver's action request function, which a * client may optionally provid...

2020-02-29 23:41:49 254

原创 caffe源码阅读《四》net

caffe的net是一个网络架构,串联起所有的blob,支撑着整个神经网络前向和反向传播的一个结构。他也是分为hpp和cpp文件的。首先看注释/** * @brief Connects Layer%s together into a directed acyclic graph (DAG) * specified by a NetParameter. * * TODO(d...

2020-02-28 23:24:04 344

原创 caffe源码阅读《一》训练入口

随着工作的深入,很多时候调参不仅仅局限于乱改学习率上面了,阅读caffe源码变得至关重要,而我又比较讨厌盯着虚无的代码看,总想跑个程序跟着debug走,所以就选择了训练程序作为入口。caffe的训练程序在tools目录里,名字就叫做caffe.cpp训练的时候需要几个参数,最重要的有两个,一个是train还是test,另一个就是solver.prototxt文件了。只到这个后,我们跟着源码走...

2020-02-27 08:48:10 319

原创 caffe源码阅读《三》blob

今天来阅读的是caffe的blob部分,这个blob它是有cpp的,因为这个blob是caffe核心的数据存储结构,后面所有的操作都会用到这个地方的,所以这里是caffe官方来实现的。首先看hpp文件。他是有个Blob的类/** * @brief A wrapper around SyncedMemory holders serving as the basic * com...

2020-02-26 15:45:17 201

原创 caffe源码阅读《二》layer

title: caffe源码阅读《二》layerdate: 2020-02-25 09:41:56tags: [caffe]categories:caffe源码解读首先layer这个类是一个基类,所以他是没有cpp实现的,可以看一下它的cpp代码#include "caffe/layer.hpp"namespace caffe {INSTANTIATE_CLASS(La...

2020-02-25 16:23:25 237

原创 目标检测-Faster RCNN

哈喽大家好,我是蒙特卡洛家的树。时间到了2016年,fastrcnn问世一年,何凯明老师就立刻提出了更快的算法,fast的名字被占用了,所以干脆就叫faster rcnn了。之前fastrcnn上说他跑一帧只需要0.几秒,其实这里玩了一个文字游戏,因为这里跑一帧只是神经网络部分,并没有涵盖region proposal的时间。而fast rcnn最耗时的部分就是region proposal部分...

2019-12-27 16:31:01 827

原创 目标检测-Fast RCNN

哈喽大家好,我是蒙特卡洛家的树,时间来到2015年,经历了一年的发展,官方版的快速RCNN问世了。这次出的这个fast rcnn主要借鉴了SPP的方法,共享了featuremap,大大提升了RCNN的效率,另外他自己也有一些创新。就是舍弃了之前的SVM和bbox回归两步,直接在神经网络中完成分类和回归。他的过程分这么几步。首先是CNN,整张图片输入到神经网络中,算出一个大的featuremap。...

2019-12-27 14:15:09 368 1

原创 目标检测-SPPNet

RCNN横空出世之后,人们开始把目标检测的重心放在了神经网络上。但是RCNN有个非常明显的缺点,就是速度慢,以为有2000个候选框需要计算,所以跑了2000次前向传播。这样跑一张图片就需要五十多秒。何凯明老师提出了一种新的思想,大大的提升了性能,这个方法叫做空间金字塔池化。这个空间金字塔池化使用了比例池化,可以不关心输入大小,也能够输出固定维度的特征,从而代替全连接层.其实就是规定把图片分成几份...

2019-12-09 08:46:02 493

原创 目标检测-RCNN

rcnn首先会做一个region proposal,也就是任意的找到一些疑似完整物体的区域,这一步是任意的,根据梯度信息找到一些边缘,然后就圈出来了。这一步会找到非常多的区域作为候选框,给接下来的分类提供素材。论文说的是找了两千多个接着把那些候选框一个一个输入神经网络,算出特征接着把算出的特征交给svm去做分类,得到分类与置信度。最后每个类别在训练出四个向量,保证预测的时候特征这四个向量可...

2019-12-06 15:31:14 305

原创 c++ CUDA编程《一》 计算矩阵加减乘除

#include "calculator.h"#include &lt;cuda_runtime.h&gt;#include "iostream"bool InitCUDA(){ //used to count the device numbers int count; // get the cuda device count cudaGetDeviceCount(&amp...

2018-11-06 19:08:20 2991

原创 caffe测试程序《一》softmax

最近训练了一个人脸识别模型,使用的是VGGFace2,使用了1000类来训练,今天介绍一下训练好的模型如何使用。首先是deploy文件,注意这个deploy不是train.prototxt,一定是单独的deploy.prototxt,他的开头和结尾和train.prototxt是不一样的。具体在于data层,deploy的data层就是inputinput: "data"input...

2018-10-16 14:45:32 692

原创 机器学习-代价函数和激活函数组合效果

均方差代价函数 + sigmoidC=(y−a)22C=(y−a)22C=\frac {(y−a)^2} 2 其中,z=wx+b, 而a是经历了激活函数的z,a=σ(z)。 那么这个的梯度,对w和b分别求导,得到: ∂C∂w=(a−y)σ'(z)x=aσ'(z)∂C∂w=(a−y)σ′(z)x=aσ′(z)\frac{∂C} {∂w} =(a−y)σ′(z)x=aσ′(z) ∂C∂b...

2018-07-29 18:02:13 1293

原创 机器学习-损失函数

softmaxsoftmax作为分类网络的最后一层,输出所有分类的概率,比方说存在猫狗鼠等十种分类,那么就会输出十个数字,分别按顺序的代表可能是猫狗鼠的概率。算法是这样的ai=ezi∑n1zkai=ezi∑1nzka_i=\frac{e^{z_i}}{\sum_1^n{z_k}},也就是e的当前这项值次方除以e的每项值次方的和。这样保证了所有加起来为一。...

2018-07-04 11:38:39 289

原创 从RCNN到FAST RCNN、FASTER RCNN再到MASK RCNN

RCNN首先RCNN的R是region的意思,也就是region selective search + CNN 具体解释就是先使用区域搜索方法找出若干个可能是物体的区域,一般通过纹理颜色直方图之类的来挑选出来。然后交给改进版的alexnet来提取特征(这里输入应该是通过resize方法适应网络的),在第五个池化层把输出交给SVM,SVM判断是不是物体,以及物体的种类。 然后使用一个线性回归...

2018-07-02 11:27:23 989

原创 极简解释inception V1 V2 V3 V4

Inception v1inception的核心就是把google net的某一些大的卷积层换成1*1, 3*3, 5*5的小卷积,这样能够大大的减小权值参数数量。直接上一张完整的图片 可以看到,卷积了几步之后就开始出现并行的过程,换成几个1*1, 3*3, 5*5的卷积并列。然后再把分别卷积的结果作为层数维度上的合并。 比方说这一层本来是一个28*28大小的卷积核,一共输出224层,...

2018-06-24 15:34:32 35681 10

原创 git pro笔记 《Git 分支》

如果想要创建一个叫做testing的分支,则使用 git branch testing 不过执行完之后只是创建了一个分支,但是并没有切换到testing分支去,如果想切换过去,执行 git checkout testing 我觉得分支的作用也是分支这一节的重点,所以我把git pro中的话也摘录下来了 *现在让我们来看一个简单的分支与合并的例子,实际工作中大体也会用到这样的工作流程...

2018-06-01 23:52:40 265

原创 git pro笔记 《Git 基础》

git state会显示当前在哪个分支,哪些文件修改了没有添加到暂存区,哪些添加了没有提交。git add readme.md就会把一些文件添加到暂存区(stage)了这个时候再运行git state就会显示readme.md是newfile状态了如果没有add就会告诉你它是modified状态,会问你要不要添加这个文件到缓存区如果add完之后你又修改了这个文件,再使用state会出现两个状态ne...

2018-05-31 23:20:30 256

原创 PCL入门<九> 输入与输出

今天讲解一下PCL的输入输出。首先是输入,从pcd文件中读取点云 pcl::PointCloud::Ptr cloud(new pcl::PointCloud); if (pcl::io::loadPCDFile(pcd_file, *cloud) == -1) { std::cout << "Cloud reading failed." << std

2018-05-08 16:03:59 1793

原创 PCL入门<八> RANSAC的实现

之前发国一篇文章讲解了ransac的基本原理,PCL也有相应的代码的实现,今天来讲以下如何使用。先看PCL官网的示例:#include &lt;iostream&gt;#include &lt;pcl/ModelCoefficients.h&gt;#include &lt;pcl/io/pcd_io.h&gt;#include &lt;pcl/point_types.h&gt;#inclu...

2018-04-24 09:35:13 10045 4

原创 PCL入门<七> 可视化PCLVisualizer

PCL的点云可视化的一种最常用的方法就是PCLVisualizer它是基于VTK的可视化类,需要引入头文件#include 通常用法是pcl::visualization::PCLVisualizer::Ptr viewer (new pcl::visualization::PCLVisualizer ("3D Viewer"));viewer->addPointClou

2018-02-10 21:43:10 6267 1

原创 PCL入门<六>使用Region growing进行平面分割

很多时候我们需要分割平面,检测每个平面,这个时候可以使用PCL自带的区域增长方法。话不多说直接上代码: pcl::search::Search&lt;pcl::PointXYZ&gt;::Ptr tree = boost::shared_ptr&lt;pcl::search::Search&lt;pcl::PointXYZ&gt; &gt; (new pcl::search::KdTree&lt...

2017-12-31 12:15:05 5522 6

原创 PCL入门<五>使用VOXEL稀疏点云

在使用PCL的处理点云时,很多时候我们不需要有太过高的分辨率,因为点云过多会造成计算变慢,并且更加消耗计算资源,所以我们需要把点云变稀,voxel就是一个很好的方法。

2017-12-31 11:28:51 10389 4

原创 PCL入门<四>根据向量做点云旋转

已知旋转前的参照物的向量,和旋转后的向量,根据四元数进行旋转。

2017-11-08 11:10:39 8101 12

原创 KDTree简单理解

简单的介绍KDTree的含义

2017-10-22 17:49:55 3898

原创 蒙特卡洛算法简单理解与demo

 所谓蒙特卡洛算法,实际上就是用频率估计概率。 首先我们知道一个边长为2的正方形面积是2*2=4,他的内接圆的面积是π*1,那么我们在这样一个正方形内随机生成10000个点,落在圆里的点的个数/10000就应该是π/4,所以我们可以估计出π是落在圆里的点的个数*4/10000.直接看程序: import numpy as npradius=1test_num=100...

2017-10-21 10:04:20 24142 4

原创 PCL入门<三>平面的法线

介绍PCL法线的求法

2017-10-16 11:10:24 9082

原创 PCL入门<二>点云的滤波

介绍PCL提供的两种滤波方法

2017-09-28 15:52:33 3149

原创 解释一下全连接层

解释全连接层的意义与原理

2017-09-28 11:07:27 81750 29

原创 PCL入门<一> 点云的数据结构

PCL点云入门基础点云的创建及显示

2017-09-24 19:09:13 6896

原创 pooling池化操作的代码详解

池化这个操作原理非常简单,相信大家都很容易搞懂,那么这篇博客就主要从代码来谈谈吧。首先还是简单介绍一下原理(不是我偷懒想要简单介绍,是因为这个东西介绍起来本身就很简单)所谓的池化目的就是抽象,把一大片面积总结成一个数,比方说一副100*100的图,我们每50*50的区域就取一个最大值,共计能取4个最大值,那么这个2*2的最大值图像就是池化后的图像了。

2017-01-09 20:08:49 10356 1

原创 Gabor滤波的层层总结

声明:这篇博客是我学习gabor滤波的笔记,根据进度层层总结,在完全学会前会看起来很混乱,但是我保证在终止连载以后一定马上整理成Gabor的介绍博客。我学习的起因是阅读了《Human Age Estimation Using Bio-inspired Features》这篇文章。核的大小:文章里面出现了这样一个表格:这个表格的右半部份是gabor滤波的参数,其中含义是当周期

2017-01-08 10:12:16 1246 1

原创 kmeans(最简单的机器学习算法)

kmeans算法作为机器学习的入门算法算是比较不错的选择了,虽然是无监督学习,但是他原理简单,实现起来也非常简单。

2016-12-31 23:36:49 1814

原创 双线性差值

在涉及到坐标的程序中,(不局限于图像处理)经常会遇到计算出来的坐标不是整数的时候,那么那个小数的坐标左上左下右上右下最多有四个点,究竟取哪个点的值呢,亦或者自己计算一个相对公平的值,这里提供了一种叫做双线性差值的方法。双线性差值无非就是用两次线性差值而已,线性差值很好理解,就是等比平均。比方说一条线段中间一点的值就是左右两个端点的平均值。如果是靠近左右二八开那么就用二八加权平均,离的近的权值大

2016-12-20 15:41:40 2730

原创 关于LBP(Local Binary Pattern)特征<二> 几种变种

旋转不变的LBP:  关于旋转不变,其实很好解决,那就是让不管如何旋转结果都一样就可以了(废话),至于怎么一样,我们定义一个规则,通常定义取最小值,也就是对于每幅图,不同角度都做一遍LBP,对于每个点取几遍中的最小值就可以了。实际操作起来其实可以不用做几遍LBP。因为每个点的相对关系做一遍都已经知道了,剩下的就是给他们重新排列一下就可以了。代码随后补上。

2016-12-01 15:19:40 841

原创 关于LBP(Local Binary Pattern)特征

LBP是英文Local Binary Pattern的缩写,顾名思义,他是一个局部的二值特征。所谓局部,就是他的提取方法是根据他附近点的信息来计算的,所谓二值,就是特征只有0和1了。具体操作其实也非常简单,就是做一个判断的滤波器,什么叫判断的滤波器呢?就是判断附近的点是不是比中间的点大,如果大就是1,小就是0,等于的话就看规定了,可以规定0也可以规定1,但是规定一定要统一,不能一会是0一会是1

2016-11-30 19:06:33 1000

空空如也

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

TA关注的人

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