自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 PyTorch 源码解读之 nn.Module:核心网络模块接口详解

目录0 设计1 nn.Module 实现1.1 常用接口1.1.1 __init__ 函数1.1.2 状态的转换1.1.3 参数的转换或转移1.1.4 Apply 函数1.2 属性的增删改查1.2.1 属性设置1.2.2 属性删除1.2.3 常见的属性访问1.3 Forward & Backward1.3.1 Hooks1.3.2 运行逻辑1.4 模块存取1.4.1 Hooks1.4.2 功能实现1.4.3 _load_from

2021-06-22 09:27:01 1466

转载 Transformer模型有多少种变体?复旦邱锡鹏教授团队做了全面综述

自提出至今,Transformer 模型已经在自然语言处理、计算机视觉以及其他更多领域「大展拳脚」,学界也提出了各种各样基于原始模型的变体。但应看到,学界依然缺少系统全面的 Transformer 变体文献综述。复旦大学邱锡鹏教授团队的这篇综述正好弥补了这一空缺。自 2017 年 6 月谷歌发布论文《Attention is All You Need》后,Transformer 架构为整个 NLP 领域带来了极大的惊喜。在诞生至今仅仅四年的时间里,Transformer 已经成为自然语言处理领域的主流模

2021-06-21 13:04:06 705

转载 [PyTorch]PyTorch的C++前端和模型部署

一.前言差不多一年前的这个时候,在狗厂实习的时候,主要用PyTorch做一些事情。那个时候针对PyTorch的模型部署问题,主要讨论ONNX。想像一下今天的DL框架格局,PyTorch,Tensorflow,Keras,Caffe,Caffe2等,持久化模型之间不兼容。常见的一种情况是,一篇论文基于不同框架写不同版本的代码。那么,很显然的一个需求是:一个框架下的模型如何可以转化为另一个框架下的模型?相关工作有一些,ONNX是其中一个,微软也做过类似工作。但是问题是总会遇到一些无法直接转换的组件。

2021-06-18 20:31:21 696

转载 gdb调试coredump(原理篇)

上一篇博客里我们通过3个例子介绍了gdb调试coredump的时候,比较常用到的一些命令和定位方法。这篇内容里,我们将尝试去探讨gdb调试coredump的原理,以及它们背后的一些东西。Coredump 的原理1、coredump简介上一篇博客,我们也提到coredump叫做核心转储,实际上也就是进程运行过程中的一个内存快照,当进程crash的时候,操作系统接收异常指令之后,在进程crash之前,会把进程做一个内存快照,将这些信息保存在一个文件中,这个文件就是coredump文件。...

2021-01-22 20:44:29 2094

原创 c++智能指针转化:static_pointer_cast、dynamic_pointer_cast、const_pointer_cast、reinterpret_pointer_cast

C++基类和派生类的智能指针转换:static_pointer_cast、dynamic_pointer_cast、const_pointer_cast、reinterpret_pointer_cast当我们用“裸”指针进行类层次上的上下行转换时,可以使用dynamic_cast。当然我们也可以使用static_cast,只是dynamic_cast在进行下行转换的时候(即基类到派生类)具有类型检查功能,而static_cast没有。因此存在安全问题。当我们使用智能指针时,如果需要进行类层次上的上下

2020-09-06 09:12:46 24517 3

原创 ubuntu下 Qt+OpenCV4.4测试YOLOV4目标检测模型

1、在github下载opencv4.4.tar.gz+opencv_contrib-4.4.0.tar.gz,然后解压,把opencv_contrib-4.4.0放入到oepncv4.4.0文件夹中。2、在opencv4.4根文件目录下创建build目录,这里编译opencv4.4同时编译cuda模块,cmake的选项如下。***:~/opencv4.4.0/opencv-4.4.0/build$ cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE

2020-08-22 16:09:06 2122 4

转载 径向基函数(RBF)神经网络

径向基函数(RBF)神经网络RBF网络能够逼近任意的非线性函数,可以处理系统内的难以解析的规律性,具有良好的泛化能力,并有很快的学习收敛速度,已成功应用于非线性函数逼近、时间序列分析、数据分类、模式识别、信息处理、图像处理、系统建模、控制和故障诊断等。简单说明一下为什么RBF网络学习收敛得比较快。当网络的一个或多个可调参数(权值或阈值)对任何一个输出都有影响时,这样的网络称为全局逼近网络。由于对于每次输入,网络上的每一个权值都要调整,从而导致全局逼近网络的学习速度很慢。BP网络就是一个典型的例子。

2020-07-20 07:32:00 5641 1

转载 C++引用和指针的区别

作者:RainMan链接:https://www.zhihu.com/question/37608201/answer/545635054来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。引用是C++引入的重要机制(C语言没有引用),它使原来在C中必须用指针来实现的功能有了另一种实现的选择,在书写形式上更为简洁。那么引用的本质是什么,它与指针又有什么关系呢?1.引用的底层实现方式引用被称为变量的别名,它不能脱离被引用对象独立存在,这是在高级语言层面的概念和理.

2020-07-10 14:51:40 7319 1

原创 C++11中std::reference_wrapper()和std::ref()

std::reference_wrapper是C++11引入的新特性,定义在<functional>头文件中template< class T >class reference_wrapper;reference_wrapper 将一个引用包装成一个可拷贝的,可分配的对象,是引用的包装器,她通常作为一种将引用存储在标准容器(比如std::vector)中的的机制,因为标准容器通常是无法存储引用的。reference_wrapper是一个可拷贝构造和可赋值构造的包装器,.

2020-07-04 21:34:10 2212

原创 cmake CheckSymbolExists

Provides a macro to check if a symbol exists as a function, variable, or macro inC.check_symbol_existscheck_symbol_exists(<symbol> <files> <variable>)Check that the<symbol>is available after including given header<fil...

2020-06-30 09:50:09 3022

转载 使用Boost::Python在C++应用程序中嵌入Python

使用Boost::Python在C++应用程序中嵌入Python:第一部分翻译: Leon Lee([email protected])原文:在此在本系列教程的简介中,我说了将Python代码集成到Granola代码库中的动机。简而言之,它可以使我使用Python语言和标准库的好处来完成在C++中通常很痛苦或笨拙的任务。当然,底线是我不必移植任何已有的C++代码。今天,我们看一下使用boost::python在C++中嵌入Python并与Python对象交互的基本步骤。我已将此部分中的所有代码放

2020-06-27 12:58:51 1667

原创 卡尔曼滤波算法-Kalman Filter Algorithm

Kalman滤波是一种递归过程,主要有两个更新过程:时间更新和观测更新,其中时间更新主要包括状态预测和协方差预测,主要是对系统的预测,而观测更新主要包括计算卡尔曼增益、状态更新和协方差更新,因此整个递归过程主要包括五个方面的计算:1)状态预测;2)协方差预测;3)卡尔曼增益;4)状态更新;5)协方差更新;用数学公式表示,如下:状态预测:(1)其中,X(k|k)是k时...

2020-06-20 23:33:22 24601 4

转载 轻松理解卡尔曼滤波

此前学习和实现卡尔曼滤波花费了很多时间,其实想要理解其原理并不算很复杂。只是简单套用卡尔曼滤波的公式,而没有系统理解公式里面每个变量的缘来,不去理解卡尔曼滤波器的迭代过程和原理,在实现和调试系统的时候无疑是会找不着北的。本文将指引你轻松理解卡尔曼滤波。1. 一个简单的场景假设我们开发了一台无人机(假设它的名字是Eva),想要用它来在城市中送快递,Eva身上有一些传感器,可以让我们知道它的速度v(比如三维空间中沿x,y,z各轴的速度大小),同时Eva身上还有GPS系统、气压计等设备,可以获知它的位置p

2020-06-20 22:53:46 2082

转载 C/C++ 宏定义高级用法

c/c++ 宏定义高级用法1.ANSI标准五个预定义的宏名 __LINE__ 表示该行代码的所在行号 __FILE__ 表示源文件的文件名 __DATE__ 表示源文件被编译的日期,格式(月/日/年) __TIME__ 表示源文件被编译成目标代码的时间,格式(时:分:秒) __STDC__ 表示编译器是否标准,标准时表示常量1,非标准则表示其它数字测试用例#include <stdio.h>#include <stdlib.h&g...

2020-05-23 23:38:25 2917

转载 caffe的反向传播的实现

1、反向传播的实现反向传播算法理论摘自“http://ufldl.stanford.edu/wiki/index.php/Backpropagation_Algorithm”假定我们有一个固定的训练集,有m个训练样本。我们可以使用“batch gradient descent”来训练我们的神经网络。详细的,对一个单一的训练样本(x,y),我们定义了它对应的损失函数如下:...

2020-05-22 10:01:03 394

原创 C++定时器实现定时任务

1、单次定时任务实现 boost的asio库里有几个定时器,老的有deadline_timer, 还有三个可配合 C++11 的 chrono 使用的high_resolution_timer、steady_timer和system_timer。deadline_timer是asio早期版本提供的定时器,使用boost.date_time库提供时间支持,deadline_timer会被逐渐淘汰。仅仅固定时间后去执行某任务,可以使用boost中的asio库提供了steady_ti...

2020-05-17 16:58:46 20277 3

转载 Linux信号(signal) 机制分析

【摘要】本文分析了Linux内核对于信号的实现机制和应用层的相关处理。首先介绍了软中断信号的本质及信号的两种不同分类方法尤其是不可靠信号的原理。接着分析了内核对于信号的处理流程包括信号的触发/注册/执行及注销等。最后介绍了应用层的相关处理,主要包括信号处理函数的安装、信号的发送、屏蔽阻塞等,最后给了几个简单的应用实例。【关键字】软中断信号,signal,sigaction,kill,sigqueue,settimer,sigmask,sigprocmask,sigset_t1...

2020-05-15 10:27:46 296

原创 C++扫描文件夹中的文件,并对文件名字符串排序

最近遇到一个需求,需要读取文件夹中的所有图片,并根据图片名字对图片进行排序。这里利用boost::filesystem库对文件夹进行扫描,然后把对应图片后缀的文件名(绝对路径)放入一个容器中,再对容器中的元素进行排序,排完序在做后处理,具体实现如下:#include <iostream>#include <vector>#include <st...

2020-05-07 10:55:31 2966 2

原创 C++内存分配函数std::calloc()

函数:void* calloc(size_t num,size_t size); num为元素个数,size为每个元素的字节长度。头文件 malloc.h在内存的动态存储区中分配n个长度为size的连续空间,函数返回一个指向分配起始地址的指针;如果分配不成功,返回NULL。用于在取得一块数组空间,数组元素初始化为0.一般使用后要使用 free(起始地址的指针) 对内存进行释放。跟m...

2020-05-05 08:17:51 3055

原创 ros C++解析bag包

ros中的bag包是按逐帧序列存储的,解析的时候创建View类可以逐帧把数据读取出来,然后按照对应topic数据做相应的处理,一下demo是一个小案例,如何解析一个bag包。#include <rosbag/bag.h>#include <rosbag/view.h>#include <std_msgs/Int32.h>#include <st...

2020-04-03 23:57:35 5469 2

转载 百度 Apollo Cyber RT简介、基本概念以及与 ROS 对照

一,背景ROS 应用于自动驾驶领域的不足:调度的不确定性:各节点以独立进程运行,节点运行顺序无法确定,因而业务逻辑的调度顺序无法保证; 运行效率:ROS 为分布式系统,存在通信开销二,Cyber RT 框架从下到上依次为: 基础库:高性能,无锁队列; 通信层:Publish/Subscribe机制,Service/Client机制,服务自发现,自适应的通信机制...

2020-03-10 12:37:02 3656 1

转载 在 Caffe 中如何计算卷积?

1.caffe中通过构造两个矩阵实现:Caffe中的卷积计算是将卷积核矩阵和输入图像矩阵变换为两个大的矩阵A与B,然后A与B进行矩阵相乘得到结果C(利用GPU进行矩阵相乘的高效性),三个矩阵的说明如下:(1)在矩阵A中 M为卷积核个数,K=k*k,等于卷积核大小,即第一个矩阵每行为一个卷积核向量(是将二维的卷积核转化为一维),总共有M行,表示有M个卷积核。(2)在...

2020-02-22 22:45:53 229

原创 C++ 11 创建和使用 unique_ptr

unique_ptr 是 C++ 11 提供的用于防止内存泄漏的智能指针中的一种实现,独享被管理对象指针所有权的智能指针。unique_ptr对象包装一个原始指针,并负责其生命周期。当该对象被销毁时,会在其析构函数中释放掉关联的原始指针的动态内存,并删除关联的原始指针。这样不管函数正常退出还是发生异常,都会释放delete掉动态内存,不会造成内存的泄露。unique_ptr具有-&gt...

2020-01-20 22:06:13 1066

原创 C/C++ 引用作为函数的返回值

(1)什么是引用?引用就是变量的别名,操作一个变量的引用也就相当于操作变量本身,这一点跟指针很类似,但是操作引用不用像操作指针一样,利用取地址符号,很不方便。而操作引用的话,则跟操作普通变量一样,所以C++之中更加鼓励使用引用。(2)C++函数为什么要使用引用?C语言之中大量利用指针作为形参或者函数返回值,这是由于值拷贝会有很大的消耗(比如传入传出一个大的结构体)。所以在C++之中使用...

2020-01-20 10:55:04 2186

转载 std::chrono时间

头文件:#include <chrono>c++11的时间库chrono均位于名字空间std::chrono下。命名空间:using namespace std::chrono;宏定义:#define _XTIME_NSECS_PER_TICK 100#define _XTIME_TICKS_PER_TIME_T (long long)10000000时钟c...

2020-01-20 10:27:21 3839

转载 C和C++中的左值和右值

一个简单定义这个部分先给出lvalue和rvalue的一个简单定义。文章下面将会详细描述。lvalue(locator value)代。左值、右值  在C++11中所有的值必属于左值、右值两者之一,右值又可以细分为纯右值、将亡值。在C++11中可以取地址的、有名字的就是左值,反之,不能取地址的、没有名字的就是右值(将亡值或纯右值)。左值代表一个在内存中占有确定位置的对象(换句话说就是...

2020-01-17 18:23:48 202

转载 C/C++ 使用mmap/munmap函数分配内存

在C/C++ 中常用的内存分配和管理的方式有很多,如智能指针, STL容器, new/delete, malloc/free, brk, sbrk等,linux有一种比较底层的内存管理方式mmap/munmap,需要完全自己来维护分配的虚拟内存,没有任何其他辅助的数据结构来帮助维护内存空间。mmap系统调用可以分配一段匿名的虚拟内存区域,也可以映射一个文件到内存,这个映射让文件操作像直接操作内存一...

2020-01-14 12:50:11 3069

原创 rosbag Code API

示例来源于:http://wiki.ros.org/rosbag/Code%20APIhttp://wiki.ros.org/rosbag/CookbookExample usage for write:#include <rosbag/bag.h>#include <std_msgs/Int32.h>#include <std_msgs/Str...

2020-01-10 20:29:34 667

转载 C++ 11 Lambda表达式

C++11的一大亮点就是引入了Lambda表达式。利用Lambda表达式,可以方便的定义和创建匿名函数。对于C++这门语言来说来说,“Lambda表达式”或“匿名函数”这些概念听起来好像很深奥,但很多高级语言在很早以前就已经提供了Lambda表达式的功能,如C#,Python等。今天,我们就来简单介绍一下C++中Lambda表达式的简单使用。声明Lambda表达式Lambda表达式完整的声...

2020-01-10 19:36:09 209

原创 caffe中prototxt文件的解析

Net在caffe中代表一个完整的CNN模型,它包含若干Layer实例,一个Net对应一个*.prototxt文件,*.prototxt文件对应ProtoBuffer数据,*.prototxt文件的解析和.bin后缀的ProtoBuffer文件类似。caffe具体的prototxt文件的读写函数,在/caffe/utils/io.cpp中。// 从txt读取proto的定义bool Rea...

2020-01-04 10:35:57 2373 2

转载 ros源码录包r程序编译时rosbag API报 undefined reference to `rosbag::Bag::close()'...

http://wiki.ros.org/rosbag/Code%20APIhttp://docs.ros.org/melodic/api/rosbag_storage/html/c++/https://github.com/sofiathefirst/imagesCpp/tree/master/bagdemo_ros_imgwritebag.cpp#include "ros/ro...

2019-12-23 21:48:25 2130 1

转载 C++虚函数 - 静态函数能否为虚函数

1.virtual与静态函数C++中,静态成员函数不能被声明为virtual函数。例如,下面的程序会编译失败。class Test{ public: // 编译错误:static成员函数不能声明为virtual virtual static void fun() { }};同样地,静态成员函数也不能被声明为const和volatile.下面的...

2019-12-22 14:51:57 2545

原创 boost库中thread多线程中的thread_specific_ptr

大多数函数都不是可重入的。这也就是说在某一个线程已经调用了一个函数时,如果你再调用同一个函数,那么这样是不安全的。举例来说,std::strtok就是不可重入的,因为它使用静态变量来保存要被分割成符号的字符串。 一个不可重入的函数通过连续的调用来保存静态变量或者是返回一个指向静态数据的指针,有两种方法可以让不可重用的函数变成可重用的函数。 方法1:就是...

2019-12-21 18:55:55 1149

转载 ROS的参数服务器使用

1.使用意义参数服务器的使用旨在提高ROS 节点的灵活性和可配置性,其意义从两个方面去理解: 在机器人系统中,参数传递十分重要,机器人工作时,我们有需要对机器人的参数(如传感器参数、算法的参数)进行设置。有些参数(如机器人的轮廓、传感器的高度)在机器人启动时就设定好就行了,有些参数则需要动态改变(特别是在调试的时候)。无论是传感器的设置,还是控制参数的调整,都需要留出方便的参...

2019-12-16 09:59:30 2889 2

转载 图像分类、目标检测、语义分割、实例分割和全景分割的区别

计算机视觉的任务很多,有图像分类、目标检测、语义分割、实例分割和全景分割等,那它们的区别是什么呢?1、Image Classification(图像分类)图像分类(下图左)就是对图像判断出所属的分类,比如在学习分类中数据集有人(person)、羊(sheep)、狗(dog)和猫(cat)四种,图像分类要求给定一个图片输出图片里含有哪些分类,比如下图的例子是含有person、sheep和dog...

2019-12-15 21:48:46 6221

原创 boost学习网站

http://zh.highscore.de/cpp/boost/filesystem.html

2019-12-14 11:36:57 364

原创 boost::filesystem文件操作

#include <boost/filesystem.hpp>#include <iostream>#include <boost/ratio.hpp>#include <map>#include <vector>#include <string>#include <memory>#include ...

2019-12-14 11:11:03 2606

转载 Boost asio 官方教程

7.1. 概述本章介绍了 Boost C++ 库 Asio,它是异步输入输出的核心。 名字本身就说明了一切:Asio 意即异步输入/输出。 该库可以让 C++ 异步地处理数据,且平台独立。 异步数据处理就是指,任务触发后不需要等待它们完成。 相反,Boost.Asio 会在任务完成时触发一个应用。 异步任务的主要优点在于,在等待任务完成时不需要阻塞应用程序,可以去执行其它任务。异步...

2019-12-10 21:46:06 867

原创 动态规划及其在Apollo项目Planning模块的应用

https://blog.csdn.net/davidhopper/article/details/79399640

2019-12-06 21:29:46 351

原创 pcl中文件的转化

1、pcl中pcd文件转换成ply文件int PCDtoPLYconvertor(string & pcdFileName = "./pcdFileName.pcd" ,string& plyFileName = "./polyFileName.ply"){ pcl::PCLPointCloud2 cloud; if (loadPCDFile(pcdFile...

2019-11-13 09:28:52 321

空空如也

空空如也

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

TA关注的人

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