自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(116)
  • 收藏
  • 关注

原创 Linux C++(QT) 下获取 CPU 序列号(processor serial number)

Linux C++(QT) 下获取 CPU 序列号(processor serial number)亲测(Intel core-i)可用。#include <cpuid.h>#include <sstream>std::string GetCPUId(){ std::string strCPUId; unsigned int level = 1; unsigned eax = 3 /* processor serial number */, eb

2021-01-08 12:06:44 69

原创 C++ 中 map 容器的内存释放机制及内存碎片管理

C++ 中 map 容器的内存释放机制及内存碎片管理C++ 中的容器很好用,比如 vector, map 等,可以动态扩容,自己管理内存,不用用户关心,但是在某些极端情况下,如果内存比较紧张的情况下,可能用户对于这些容器自己的管理规则(主要是释放规则)就不太满意了。1. erase, clean通常在使用 map 的时候直接通过 erase,或者 clean 方法就可以删除数据,如果结合智能指针,用户不用关心内存的问题。但是需要注意的是,调用 erase 或者 clean 方法后,内存并没有立马释放,

2021-01-08 11:59:36 80

原创 数据增强(Data Augmentation)系列: SnapMix 原理及应用

数据增强(Data Augmentation)系列: SnapMix作者:Shaoli Huang发表时间:2020Paper 原文: SnapMix: Semantically Proportional Mixing for Augmenting Fine-grained Data、官方开源代码:https://github.com/Shaoli-Huang/SnapMixSnapMix 是由 Shaoli Huang 等人提出的一种针对细粒度数据增强的方法。论文于 2020 年 12 月 9

2020-12-28 23:55:47 313 1

原创 霍夫变换圆检测原理及 OpenCV API 应用

霍夫变换圆检测原理及 OpenCV API 应用1. 霍夫圆变换霍夫圆检测和霍夫直线检测的原理类似。建议先理解霍夫直线检测的原理,再来看霍夫圆检测。圆在极坐标下的数学表达式如下:{x=a+r⋅cosθy=b+r⋅sinθ\left\{ \begin{aligned}x = a + r\cdot cos\theta \\y = b + r\cdot sin\theta \\\end{aligned}\right.{x=a+r⋅cosθy=b+r⋅sinθ​其中 a,ba, ba,b 是

2020-11-30 14:40:47 84

原创 霍夫变换直线检测原理及 OpenCV API 应用

霍夫变换直线检测原理及 OpenCV API 应用1. 霍夫变换霍夫变换(Hough Transform)于1962年由Paul Hough 首次提出,后于1972年由Richard Duda和Peter Hart推广使用,是图像处理领域内从图像中检测几何形状的基本方法之一。经典霍夫变换用来检测图像中的直线,后来霍夫变换经过扩展可以进行任意形状物体的识别,例如圆和椭圆。霍夫变换运用两个坐标空间之间(图像空间和霍夫空间)的变换,将在一个图像空间中具有相同形状的曲线或直线映射成霍夫空间的一个点,从而把检测

2020-11-30 14:35:58 77

原创 角点检测(Harris & Shi-Tomas)的原理及OpenCV API 的应用

角点检测(Harris & Shi-Tomas)的原理及OpenCV API 的应用这篇博客的内容主要时对参考中多篇博客的总结。1. 角点在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。关于角点的具体描述可以有几种:1). 一阶导数(即灰度的梯度)的局部最大所对应的像素点;2). 两条及两条以上边缘的交点;3). 图像中梯度值和梯度方向的变化速率都很高的点;4).角点处的一阶导数最大,二阶导数为零,指示物体边缘变化不连续的方向。从求解思路上可以分为

2020-11-29 23:10:13 73

原创 C++ 调用 Python 脚本,并把 cv::Mat 类型传参到 Python 端

C++ 调用 Python 脚本,并把 cv::Mat 类型传参到 Python 端前言查看了很多参考,最后找到一个完整的示例并且跑通,在开始这个任务之前,首先应该确保你的环境是没有问题的,比如:C++ 和 Python 直接可以传递简单类型的参数C++ 端独立通过 opencv 加载图像是没有问题的Python 端 import 独立加载图像是没有问题的具备上面这些条件后,可以参考下面的代码,将 cv::Mat 类型的参数传递到 Python 端。代码这部分主要参考 sending M

2020-10-30 14:26:36 181

原创 CUDA Installer 前面的 X

CUDA Installer 前面的 X这里的X表示 execute,安装的意思,并非叉叉。所以下面表示不安装驱动。

2020-10-27 16:42:52 280

原创 C++ 多线程基础及 C++11 多线程库总结

1. 多线程基础1.1 进程与线程根本区别:进程是操作系统资源分配的基本单位,线程是任务调度和执行的基本单位开销方面:每个进程都有自己独立的代码和数据空间,程序之间的切换开销较大。线程可以看作是轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器,线程之间切换开销小。所处环境:一个操作系统能同时运行多个进程(程序)。在一个进程中,可以有多个线程同时执行。内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间。对线程而言,系统不会为

2020-10-22 22:56:15 175

原创 C++11 中的 Smart Pointer(shared_ptr/weak_ptr/unique_ptr) 总结

Smart PointerC++ 111. shared_ptrShared Ownershipsource code1.1 constructshared_ptr<int> p = make_shared<int>(88);shared_ptr<int> p1(new int(88));auto p2 = make_shared<int>(88);auto p3(p2);1.2 why make_shared is

2020-10-22 21:31:25 35

原创 C++11 中 vector 的基本操作及使用注意事项

STL_vector1. 基本操作1.1 初始化std::vector<int> a (5); //0,0,0,0,0std::vector<int> b (5,1); //1,1,1,1,1std::vector<int> c = {1,2,3,4,5,6};1.2 赋值std::vector<int> foo (3,0);std::vector<int> bar (5,0);bar = foo; //Copies all

2020-10-22 21:21:21 249 1

原创 C++ 中的二阶构造模式详解

C++ 中的二阶构造模式1. 半成品对象构造函数能决定的只是对象的初始状态,而不是对象的诞生,所以如果构造函数没有按照预期执行完毕,但是对象依然会被构造。比如在对象的构造过程中由于某些原因(比如对写文件,申请内存等)导致构造函数没有按照预期执行完毕,但是对象依然被构造了,这样的对象叫作半成品对象。半成品对象是合法的 C++ 对象,也是 Bug 的重要来源,因为难以 debug。下面是一个半成品对象的示例。#include <iostream>class Test{privat

2020-10-15 23:11:43 46

原创 Anaconda 使用常用命令

Anaconda 使用常用命令虚拟环境# 创建conda create --name pytorch python=3.6# 查看已有环境conda env list# orconda info -e# 激活source activate your_env_name# orconda activate your_env_name# 退出source deactivate your_env_name# orconda deactivate your_env_name#

2020-10-07 21:47:23 55

原创 Visdom 安装下载文件的问题的解决办法(downloading scripts, this may take a little while)

Visdom 安装下载文件的问题的解决办法(downloading scripts, this may take a little while)1. 问题visdom 安装(可以参考安装指引)之后, 运行如下代码测试时,一直提示 “downloading scripts, this may take a little while”,或者下载失败,主要原因还是网络问题。python -m visdom.server2. 解决办法2.1 从其他途径下载文件github上面的链接提供了相关的文

2020-08-18 21:19:22 1232

原创 pytorch 中的 transforms.TenCrop 和 transforms.FiveCrop 讲解

pytorch 中的 transforms.TenCrop 和 transforms.FiveCrop 讲解1. transforms.TenCrop 和 transforms.FiveCrop 在干什么?这一点官方文档写的很清楚。transforms.FiveCrop 就是在原图片的四个角和中心各截取一幅大小为 size 的图片, 而 transforms.TenCrop 就是在 transforms.FiveCrop 基础上再进行水平或者竖直翻转(Flip),默认为水平翻转。torchvisio

2020-06-13 16:40:12 1729

原创 深度学习中的图像数据扩增(Data Augmentations)方法总结:常用传统扩增方法及应用

深度学习中的图像数据扩增(Data Augmentations)方法总结:传统扩增方法及应用1. 前言这篇文章主要参考 A survey on Image Data Augmentation for Deep Learning, 结合 pytorch 和总结了常用的传统扩增方法及其应用时的注意事项。这里的传统方法指不包括基于深度学习(比如 GAN)等新的扩增方法。另外需要注意的是,虽然对于不同的任务,比如对于分类,检测任务,不同的任务在采用某一个具体的扩增方法的时候会有所不同,比如对于检测任务需要考虑

2020-06-06 17:04:05 3648

原创 交叉熵损失函数总结: 定义、应用及求导

交叉熵损失函数总结: 定义、应用及求导先说熵(entropie),熵最早出现在热力学中,用于度量一个热力学系统的无序程度。后来熵被引入到信息论里面,表示对不确定性的测量。为了弄清楚交叉熵,首先需要弄清楚交叉熵相关的几个概念。1.1 信息量信息量用于刻画消除随机变量X在x处的不确定性所需的信息量的大小。也就是说不确定性越高,信息量越大。信息量的数学表达式如下,其中 ppp 为随机变量 XXX 的概率分布,即 p(x)p(x)p(x) 为随机变量 XXX 在 X=xX=xX=x 处的概率密度函数值。I

2020-05-28 21:48:33 327

原创 Ubuntu 下不同版本 cuda 和 cudnn 切换

Ubuntu 不同版本 cuda 和 cudnn 切换可能不同的软件对与 cuda 和 cudnn 的版本有不同的要求,所以需要根据具体的要求来切换其版本。ubuntu 是支持安装多个版本的 cuda 的,需要使用某个的版本时切换就可以了。对于 cudnn 则是直接重装,所谓的重装其实就是 copy 后创建个软链接就可以了。安装 cuda 比较容易,直接运行下载的 sh 文件就可以了。sudo sh cuda_9.0.176_384.81_linux.run1. 切换 cuda首先应该确保环境

2020-05-23 10:27:51 210

原创 FPN(Feature Pyramid Networks) 网络

FPN 网络1. 前言通常在神经网络中,浅层特征图(feature maps)的感受野比较小,包含语义信息比较少,但是其空间位置信息准确,而深层网络,感受野大,语义信息强,但是由于 pooling 等造成了像素位置信息丢失等,所以空间位置信息比较粗糙。但是对于检测任务,往往既需要语义信息(分类),也需要位置信息(bbox),此外由于深层特征图往往被压缩到比较小的size,也会影响小目标的检测,...

2020-04-03 21:46:52 473

原创 目标检测模型的评价指标(Acc, Precision, Recall, AP, mAP, RoI)

目标检测模型的评价指标(Acc, Precision, Recall, AP, mAP, RoI)对于一个目标检测模型的好坏,总的来说可以从以下三个方面来评估:分类的精度如何。一般可以用准确度(Accuracy),精度(Precision),召回率(Recall Rate), PR 曲线,AP,mAP等定位的精度如何。比如 IoU运行的速度如何。比如 fps,一秒处理几张图。严格说某...

2020-03-24 21:56:51 2191 2

原创 深度学习目标检测之 R-CNN 系列:用 Faster R-CNN 训练自己的数据(caffe 版)

深度学习目标检测之 R-CNN 系列:用 Faster R-CNN 训练自己的数据深度学习目标检测之 R-CNN 系列包含 3 篇文章:从 R-CNN 和 Fast R-CNN 到 Faster R-CNNFaster R-CNN 网络详解用 Faster R-CNN 训练自己的数据1. 前言由于 原文 中提到了三种训练方法,在 py-faster-rcnn 中给出了两种训练方法,...

2020-03-19 23:18:10 394 3

原创 深度学习目标检测之 R-CNN 系列:Faster R-CNN 网络详解

深度学习目标检测之 R-CNN 系列:Faster R-CNN 网络详解深度学习目标检测之 R-CNN 系列包含 3 篇文章:从 R-CNN 和 Fast R-CNN 到 Faster R-CNNFaster R-CNN 网络详解用 Faster R-CNN 训练自己的数据1. 前言这一篇文章主要是深入的理解 Faster R-CNN 网络。并基于 caffe 利用 Faster ...

2020-03-19 23:11:57 302

原创 深度学习目标检测之 R-CNN 系列: 从 R-CNN 和 Fast R-CNN 到 Faster R-CNN

深度学习目标检测之 R-CNN 系列: 从 R-CNN 和 Fast R-CNN 到 Faster R-CNN深度学习目标检测之 R-CNN 系列包含 3 篇文章:从 R-CNN 和 Fast R-CNN 到 Faster R-CNNFaster R-CNN 网络详解用 Faster R-CNN 训练自己的数据1. 前言这一篇文章主要是从 R-CNN 的发展历程来介绍各个版本的 R...

2020-03-19 23:05:57 225

原创 C++单例模式实例——如何管理内存及线程安全(代码)

C++单例模式实例——如何管理内存(代码)前言单例模式是设计模式中比较简单的一种模式,也是实际使用中比较常用的一种。比如可以用单例模式来管理一些全局信息。对于单例模式中的内存管理,大致有三种做法:直接交由系统,程序退出时自动释放内存手动 delete自动 delete其中第三种做法比较巧妙。代码下面的代码给出了第二种和第三种方法的实现。sp.hpp#include<i...

2020-01-16 22:36:23 224

原创 Caffe编译时提示 CUDNN 版本不兼容的解决办法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入欢迎使用Ma...

2020-01-02 22:01:41 320

原创 MobileNet实战:基于 MobileNet 的人脸微表情分类(Caffe)

MobileNet实战:基于 MobileNet 的人脸微表情分类(Caffe)这一部分内容总共由下面四篇文章组成:MobileNet 进化史: 从 V1 到 V3(V1篇)MobileNet 进化史: 从 V1 到 V3(V2篇)MobileNet 进化史: 从 V1 到 V3(V3篇)MobileNet实战:基于 MobileNet 的人脸表情分类1. 前言前面我们已经简要介...

2019-12-21 22:10:51 660

原创 Jupyter NoteBook 中使用 cv2.imshow 显示图片

Jupyter NoteBook 中使用 cv2.imshow 显示图片有两种办法:用 cv2.imshow时加入cv2.destroyAllWindows()用 plt.imshow() 代替 cv2.imshow1. cv2.imshow加入 cv2.destroyAllWindows() 后可以解决 crash 或者图片显示不出来的问题。import cv2%matplot...

2019-12-02 23:29:36 9727 2

原创 MobileNet 进化史: 从 V1 到 V3(V3篇)

MobileNet 进化史: 从 V1 到 V3(V3篇)这部分内容总共由如下 3 篇文章构成。MobileNet 进化史: 从 V1 到 V3(V1篇)MobileNet 进化史: 从 V1 到 V3(V2篇)MobileNet 进化史: 从 V1 到 V3(V3篇)1. 前言V3 保持了一年一更的节奏,Andrew G. Howard 等于 2019 年又提出了 MobileN...

2019-11-26 23:34:43 976

原创 MobileNet 进化史: 从 V1 到 V3(V2篇)

MobileNet 进化史: 从 V1 到 V3(V2篇)这部分内容总共由如下 3 篇文章构成。MobileNet 进化史: 从 V1 到 V3(V1篇)MobileNet 进化史: 从 V1 到 V3(V2篇)MobileNet 进化史: 从 V1 到 V3(V3篇)1. 前言Andrew G. Howard 等于 2018 年在 MobileNet V1 的基础上又提出了改进版...

2019-11-26 23:25:51 1009

原创 MobileNet 进化史: 从 V1 到 V3(V1篇)

MobileNet 进化史: 从 V1 到 V3(V1篇)这部分内容总共由如下 3 篇文章构成。MobileNet 进化史: 从 V1 到 V3(V1篇)MobileNet 进化史: 从 V1 到 V3(V2篇)MobileNet 进化史: 从 V1 到 V3(V3篇)1. 前言MobileNet V1 是 Andrew G. Howard(Google Inc.) 等人于 201...

2019-11-26 23:22:15 561

原创 手撕神经网络:从零开始实现一个简单的神经网络(python)

手撕神经网络:从零开始实现一个简单的神经网络1. 前言现在有很多深度学习平台可以用,甚至我们根本不需要知道网络背后是怎么运行的,就可以训练出我们想要的模型,但是从学习的角度,从零开始写一个简单的神经网络是有必要的,它将有助于理解神经网络的工作原理。之前有写过基于 TF 的全连接神经网络的实现,可以参考深度学习笔记——全连接神经网络样例程序及详细注释。但是这里将不借助任何深度学习平台来实现一个...

2019-11-14 22:24:38 540

原创 深度学习中常用的优化算法(SGD, Nesterov,Adagrad,RMSProp,Adam)总结

深度学习中常用的优化算法(SGD, Nesterov,Adagrad,RMSProp,Adam)总结1. 引言在深度学习中我们定义了损失函数以后,会采取各种各样的方法来降低损失函数,从而使模型参数不断的逼近于真实数据的表达。不过损失函数的数值只是我们用来优化模型中参数的一个参考量,我们是通过优化损失函数来间接地优化模型参数,并提高模型的度量指标。而优化算法的作用就是加快模型的收敛,取得最优值。...

2019-11-10 15:14:58 1317

原创 深度学习中的经典基础网络结构(backbone)总结

深度学习中的经典基础网络结构总结1. 深度学习发展历史回顾在开始正式内容之前,首先回顾下深度学习发展史,这将使整体内容更为连贯。上图主要展示了深度学习的 “史前文明”(这里仅仅是开玩笑的说法)。从图中可以看到整个历史始于1943年,有三个发展繁荣期和两个低谷。1943年,心理学家麦卡洛克和数学逻辑学家皮兹发表论文《神经活动中内在思想的逻辑演算》,提出了MP模型。1960年,...

2019-10-28 21:57:04 10694 2

原创 ubuntu自带的merge工具 Meld Diff Tool 无法启动

ubuntu自带的 Meld Diff Tool 无法启动1. 原因ubuntu 16.04 已经自带了 meld, 但是在我的机器上却无法正常启动。原因是因为我修改了默认的 python 版本,变成了 python3,导致无法正常启动。2. 解决方法2.1 将默认 python 版本改回去,显然这个不是好办法。2.2 指定使用 python2 启动 meldsudo gedit /...

2019-10-13 23:13:11 280

原创 一个 python 版本下如何管理多个 caffe 版本

比如我的系统是 Ubuntu16.04, 用的 python 是自带的 3.5, 需要用 caffe, 除了标准的版本之外,可能还需要其他的版本,比如 ssd 的版本,那在同一个版本下,应该如何控制调用的版本了?其实很简单,只需要在调用 caffe 直接添加如下的代码就可以。import syssys.path.insert(0, 'your_location/caffe/helmet-det...

2019-09-28 11:15:43 442

原创 Ubuntu16.04 + Opencv3.4.2 + python3.5 + caffe

https://www.pyimagesearch.com/2016/10/24/ubuntu-16-04-how-to-install-opencv/https://www.pyimagesearch.com/2015/07/20/install-opencv-3-0-and-python-3-4-on-ubuntu/

2019-09-21 11:47:03 438

原创 Ubuntu 16.04 装机指南(分区 + 显卡驱动 + Cuda9.0 + CUDNN7.0)

Ubuntu 16.04 装机指南1. 制作引导盘借助 ultroISO 制作启动盘很简单,这里就不在赘述,可以参考 制作Ubuntu16.04系统安装的U盘(附资源).2. 系统分区关于分区的说法很多,而且基本都还是针对很老旧的配置的,下面说说我自己的做法,经过多次测试暂时没有发现什么不妥。我有一个固态和一个机械硬盘,机械硬盘直接全部划分为主分区。EFI 2G primary Beg...

2019-09-20 23:31:59 341

原创 详说Normalization(Batch Normalization,Layer Normalization,Instance Normalization,Group Normalization)

详说各种 NormalizationBatch Normalization 是 Sergey 等人于2015年在 Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift 中提出的一种归一化方法。在开始讨论之前, 我们需要先探讨一个问题, 对于深度神经网络而言, 什么...

2019-08-27 23:40:06 803

原创 如何调用 caffe 训练好的模型对输入图片进行测试

如何调用 caffe 训练好的模型对输入图片进行测试该部分包括两篇文章win10 下 caffe 的第一个测试程序(附带详细讲解) 主要讲解如何利用 caffe 来训练模型。如何调用 caffe 训练好的模型对输入图片进行测试 主要介绍利用已经训练好的模型进行预测。对 caffe 来说常用的有两种接口,一种是通过 C++ 接口, 另一种是通过 python 接口。这里以 caffe 中...

2019-08-18 20:49:31 1597

原创 深度学习中常用的参数初始化方法及caffe中的初始化方法介绍

深度学习中常用的参数初始化方法及caffe中的初始化方法介绍本文首先介绍了深度学习中常用的权重初始化方法,然后介绍 caffe 中的初始化方法的使用。1. 深度学习中常用的权重初始化方法1.1 随机初始化(Gaussian)顾名思义就是将权重在符合某一分布 (通常是高斯分布) 的情况下进行随机始化。 操作非常的简单, 但是也有它自身的一些问题。当网络的层数比较深时,输出会快速的趋向于零,从...

2019-08-07 22:17:36 858

空空如也

空空如也

空空如也

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

TA关注的人 TA的粉丝

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