自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 1*1卷积的作用

1、升维或者降维:一幅1000*1000且depth为100的图像在20个filter上做1*1卷积,结果大小为1000*1000*20。不改变特征图的大小,只改变维度。2、加入非线性:一般卷积层之后都会经过激活层,1*1的卷积在前一层的学习表示上添加了非线性激活( non-linear activation ),提升网络的表达能力;3、跨通道信息交互(channel 的变换)如:使用1*1卷积核,实现降维和升维的操作其实就是channel间信息的线性组合变化...

2021-12-20 14:19:21 451

原创 resnext的pytorch实现

import torchimport torch.nn as nnimport torch.nn.functional as Fclass Block(nn.Module): '''Grouped convolution block.''' expansion = 2 def __init__(self, in_planes, cardinality=32, bottleneck_width=4, stride=1): super(Block, self.

2021-11-12 18:25:00 1063

原创 resnet的pytorch实现

import torchimport torch.nn as nnimport torch.nn.functional as F# 用于ResNet18和34的残差块,用的是2个3x3的卷积class BasicBlock(nn.Module): expansion = 1 def __init__(self, in_planes, planes, stride=1): super(BasicBlock, self).__init__() se.

2021-11-12 14:24:38 358

原创 1.为什么必须在神经网络中引入非线性?

答:如果不用激活函数(其实相当于激活函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。 正因为上面的原因,我们决定引入非线性函数作为激活函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入。 否则,我们将获得一个由多个线...

2020-08-11 18:52:15 2393

转载 linux采用scp命令拷贝文件到本地,拷贝本地文件到远程服务器

1.从服务器复制文件到本地:scp root@192.168.1.100:/data/test.txt /home/myfile/补充:多文件拷贝scp root@192.168.1.100:/data/\{test1.txt,test2.cpp,test3.bin,test.*\} /home/myfile/root@192.168.1.100 root是目标服务器(有你需要拷...

2020-01-10 14:28:29 901

原创 yolov3模型微调相关

使用-clear命令通过模型1训练出的backup或者final.weights文件代替预训练模型darknet53.conv.74,并在训练命令的末尾加上-clear命令,这样模型的训练会从初始状态开始,比如:./darknet cfg/yolo.data cfg/yolo.cfg backup/model_pre.backup -clear这样重新训练的模型2就是在模型1微调的基...

2020-01-09 15:27:20 291

转载 【TensorRT】Ubuntu16.04 + TensorRT-5.1.5.0 + ONNX-TensorRT 安装及 yolov3转onnx

一、软硬件版本已安装 Ubuntu 16.04 python 2.7.16 显卡: Tesla P4 cuda 9.0.176 cudnn 7.5待安装 TensorRT-5.1.5.0二、下载从nvidia官网下载适用 cuda9.0 的 Tar 安装文件 TensorRT-5.1.5.0在这里插入图片描述在这里插入图片描述...

2020-01-07 09:54:08 1146 1

原创 yolov3剪枝

https://blog.csdn.net/xidaoliang/article/details/87877562

2019-12-31 09:37:15 651

原创 ubuntu18.04修改根目录下只读文件

首先要安装一个插件nautilus-admin使用命令sudo apt install nautilus-admin然后重启文件管理器nautilus -q可以在ubuntu中使用右键以管理员方式打开了

2019-12-30 15:05:19 1330

原创 ubuntu编译caffe

https://blog.csdn.net/u011021773/article/details/81298666

2019-12-30 15:04:16 164

原创 Ubuntu18.04下安装ROS

https://blog.csdn.net/haiyinshushe/article/details/84256137

2019-12-26 18:28:57 214

原创 windows下anaconda虚拟环境中安装opencv

1.activate tensorflow2.conda install -c menpo opencv3

2019-10-09 09:53:07 896

转载 基于tensorflow框架下的cascade r-cnn的训练和测试

基于tensorflow框架下的cascade r-cnn的训练和测试github代码:https://github.com/DetectionTeamUCAS/Cascade-RCNN_Tensorflow环境:python = 2.7tensorflow-gpu = 1.3cuda8gpu:1080Ti1.下载预训练模型resnet101:http://do...

2019-09-20 15:47:30 924 2

转载 安装detectron

原文链接:https://blog.csdn.net/weixin_39916966/article/details/99728387 https://blog.csdn.net/qq_34782826/article/details/99883057 https://blog.csdn.net/qq_40306953/article/details/84207960安装Cuda9.0+cuD...

2019-09-20 11:29:17 392

原创 TensorRT对模型加速

TensorRT 使用步骤1.创建Builder2.创建Network3.创建Parser4.绑定输入、输出以及自定义组件5.序列化或者反序列化6.传输计算数据7.执行计算8.传输计算结果...

2019-09-11 18:15:25 408 1

原创 anaconda+win10+pytorch+cpu 安装

在cmd命令行改变当前目录为文件pytorch-nightly-cpu-1.1.0.dev20190528-py3.6_cpu_0.tar.bz2所在的目录,执行conda install --offline pytorch-nightly-cpu-1.1.0.dev20190528-py3.6_cpu_0.tar.bz2进行安装即可成功。但是需要自己去下载pytorc...

2019-07-28 19:30:47 417 1

转载 C++线程安全的单例类

单例模式是一种非常常用的设计模式,几乎在稍大的工程项目中都会用到。单例类保证在全局中只有唯一一个类的实例对象,并且在类的内部提供了获取这个唯一实例的接口。在类中,实例化出一个对象需要调用构造函数,为了防止在类的外部调用构造函数构造出实例,对类的构造函数就应有所限制,可以将构造函数的访问权限设置为private或protected。还要提供一个访问实例的接口,在类中定义一个static函数,返回类内...

2019-07-02 16:49:15 334

原创 C++函数内的静态变量初始化以及线程安全问题

1. 如果是编译时和加载时初始化, 是不会存在线程安全这个issue的; 因为这两种初始化一定发生在Main函数执行之前, 这个时候尚未进入程序运行空间; 而这些初始化一定是在单线程环境下操作的! -- 都是在执行C Runtime的startup代码中的void mainCRTStartup(void)函数时所在的OS系统加载程序时的主线程空间上发生的!2. 如果是运...

2019-07-02 16:23:29 1109

转载 惊群现象

惊群效应也有人叫做雷鸣群体效应,简言之,惊群现象就是多进程(多线程)在同时阻塞等待同一个事件的时候(休眠状态),如果等待的这个事件发生,那么他就会唤醒等待的所有进程(或者线程),但是最终却只可能有一个进程(线程)获得这个时间的“控制权”,对该事件进行处理,而其他进程(线程)获取“控制权”失败,只能重新进入休眠状态,这种现象和性能浪费就叫做惊群。为了更好的理解何为惊群,举一个很简...

2019-07-02 16:18:14 237

原创 程序什么时候应该使用线程,什么时候单线程效率高

1.耗时的操作使用线程,提高应用程序响应2.并行操作时使用线程,如C/S架构的服务器端并发线程响应用户的请求。3.多CPU系统中,使用线程提高CPU利用率4.改善程序结构。一个既长又复杂的进程可以考虑分为多个线程,成为几个独立或半独立的运行部分,这样的程序会利于理解和修改。对于处理时间短的服务或者启动频率高的要用单线程,相反用多线程!...

2019-07-02 16:10:23 2225

转载 用动态规划方法找字符串中最长回文子串

LeetCode中有这么一道题:给定一个字符串s,找到s中最长的回文子串。你可以假设s的最大长度为1000。示例 1:输入: "babad"输出: "bab"注意: "aba"也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"回文串的定义我就不啰嗦了。对于这道题,我的第一反应是用动态规划方法解。假设字符串s的长度为length,建立一个leng...

2019-06-26 16:39:12 195

转载 【深度学习】深入理解Batch Normalization批标准化

转自https://www.cnblogs.com/guoyaohua/p/8724433.htmlBatch Normalization作为最近一年来DL的重要成果,已经广泛被证明其有效性和重要性。虽然有些细节处理还解释不清其理论原因,但是实践证明好用才是真的好,别忘了DL从Hinton对深层网络做Pre-Train开始就是一个经验领先于理论分析的偏经验的一门学问。本文是对论文《...

2019-06-10 10:31:18 90

转载 vector资源释放

1. vector容器的内存自增长与其他容器不同,其内存空间只会增长,不会减小。先来看看"C++ Primer"中怎么说:为了支持快速的随机访问,vector容器的元素以连续方式存放,每一个元素都紧挨着前一个元素存储。设想一下,当vector添加一个元素时,为了满足连续存放这个特性,都需要重新分配空间、拷贝元素、撤销旧空间,这样性能难以接受。因此STL实现者在对vector进行内存分配时,其...

2019-05-14 22:17:26 923

转载 share_ptr的线程安全性

shared_ptr线程安全性分析正如《STL源码剖析》所讲,“源码之前,了无秘密”。本文基于shared_ptr的源代码,提取了shared_ptr的类图和对象图,然后分析了shared_ptr如何保证文档所宣称的线程安全性。本文的分析基于boost 1.52版本,编译器是VC 2010。shared_ptr的线程安全性boost官方文档对shared_ptr线程安全性的正式表述是:...

2019-05-14 22:12:30 1212

原创 成员函数里memset(this,0,sizeof(*this))会发生什么

this里面可能包含string之类的对象,把这些对象清零会导致非法数据。即使一个类现在是POD,维护升级之后可能就不再是POD了。因此memset(this,0,sizeof(*this))是一种危险的写法。没有virtual function,没有vtable,同时class当中没有包含其他class成员的class可以用这个。 ...

2019-05-14 22:10:34 1233

转载 谈谈stl标准库的线程安全性

线程安全规则应用到标准 C++ 库中的所有类,这也包括 shared_ptr,如下所述。 有时提供更强的保证(例如,如下所述的标准 iostream 对象和专门用于多线程的类型,如 中的类型)。从多个线程读取某个对象时,该对象是线程安全的。例如,给定对象 A,可安全地同时从线程 1 和线程 2 读取 A。如果要通过某个线程写入到对象,则必须保护相同线程或其他线程上所有对该对象的读取和写...

2019-05-14 22:07:47 1502 1

原创 虚函数的内存结构,菱形继承的虚函数内存结构

https://blog.csdn.net/u010235142/article/details/78307022

2019-05-14 22:04:27 652

转载 子类不能继承父类的函数有哪些

但是一个派生类的指针可以安全地转化为一个基类的指针。这样删除一个基类的指针的时候,C++不管这个指针指向一个基类对象还是一个派生类的对象,调用的都是基类的析构函数而不是派生类的。如果你依赖于派生类的析构函数的代码来释放资源,而没有重载析构函数,那么会有资源泄漏。所以建议的方式是将析构函数声明为虚函数。也就是delete a的时候,也会执行派生类的析构函数。一个函数一旦声明为虚函数,那么不管你...

2019-05-14 22:01:56 5401

原创 C++中为什么用模板类

1:可用来创建动态增加或减少的数据结构2:它与某种特定类型无关,因此代码可重复使用3:它在编译时检查数据类型而不是运行时检查数据类型,保证了类型的安全4:它是平台无关的,具有很好的移植性...

2019-05-14 21:57:14 2112 1

原创 protected,public,private在继承中的可见性

在C++里,继承有三中方式,public、protected、private三中继承方式,我们需要记住这3种继承的可见性问题,会有两个可见性的问题,一是子类与父类的可见性,二是对象的可见性(具体更多是指对象与父类的成员可见性问题),我们必须记住,三种继承的方式都并不会影响子类成员对父类成员的访问权限,即:父类成员对子类成员的可见性是由父类自身决定的,三种继承的方式只会影响实例对象的访问可见...

2019-05-14 11:12:27 2641 1

转载 说一下C++的返回值优化

前言大家都知道“过早的优化是万恶之源”这句话,然而我相信其中的大多数人都不知道自己是不是在做过早的优化。我也无法准确的定义什么叫做“过早的优化”,但我相信这“过早的优化”要么是得不偿失的,要么干脆是有害无利的。今天我就想举个我认为是“过早的优化”的例子。从函数返回值为了从一个函数得到运行结果,常规的途径有两个:通过返回值和通过传入函数的引用或指针(当然还可以通过全局变量或成员变量,但我...

2019-05-14 11:03:41 556

转载 什么是回调函数,回调函数的使用场景

1.回调函数基本定义-什么是函数指针通俗来说,函数指针是一个指向特定函数的指针。函数的类型由其参数及返回类型共同决定,与函数具体名称无关。示例代码如下:int testFun1(int param1,long param2,float param3); //普通函数定义该函数的类型为int(int,long,float),该类型的函数指针可以定义为如下:int (*pTf)(in...

2019-05-13 21:42:10 2623

原创 如何区分一段代码是C++还是C代码编写的

C与C++在很多地方不同,比如1.最明显的是看输入输出:C用库函数printf()和scanf(),C++用标准流类cout和cin2.最本质的是看有无类class,这也是C++与C最根本的区别当然,有的程序表面上看是C++风格的,但用的是机构化的思想,而不是面向对象的思想。最明显的区别是头文件后面不用加.h,并且C++要有命名空间,而C却没有这个概念....

2019-05-13 21:26:05 7814

转载 标准库函数和系统调用的区别

写在前面:所谓标准库函数,这里暂时讨论C语言的标准库函数。库函数是语言本身的一部分,而系统函数是内核提供给应用程序的接口,属于系统的一部分。函数库调用是语言或应用程序的一部分,而系统调用是操作系统的一部分。一、标准库函数和系统调用的区别 函数库调用 系统调用 在所有的ANSI C编译器版本中,C库函数是相同的 各个操作系统的系统调用是不同...

2019-05-13 21:24:04 349

转载 如何定义一个只能在堆上创建的类,如何定义一个只能在栈上创建的类

1.如何定义一个只能在堆上生成的类方法一:首先我们要在堆上定义一个对象的时候一定要用new ,比如A *a=new A;C++会先在堆上malloc一块内存,然后执行构造函数。相信有些人看到这个题都会这样想:class A{public: A() { return new A; }};看到这里不要笑,...

2019-05-13 21:09:25 502

转载 C++4种类型转换

总 结  去const属性用const_cast。  基本类型转换用static_cast。  多态类之间的类型转换用daynamic_cast。  不同类型的指针类型转换用reinterpreter_cast。static_cast任何具有明确定义的类型转换,只要不包含底层const,都可以使用static_cast;注:顶层const:表...

2019-05-13 20:59:00 163

转载 迭代器和普通自指针有什么区别

迭代器与指针的差别:迭代器:(1)迭代器不是指针,是类模板,表现的像指针。他只是模拟了指针的一些功能,通过重载了指针的一些操作符,->,*,++ --等封装了指针,是一个“可遍历STL( Standard Template Library)容器内全部或部分元素”的对象,本质是封装了原生指针,是指针概念的一种提升(lift),提供了比指针更高级的行为,相当于一种智能指针,他...

2019-05-13 16:00:19 883

转载 为什么需要虚继承,虚继承的实现原理

虚继承和虚函数是完全无相关的两个概念。虚继承是解决C++多重继承问题的一种手段,从不同途径继承来的同一基类,会在子类中存在多份拷贝。这将存在两个问题:其一,浪费存储空间;第二,存在二义性问题,通常可以将派生类对象的地址赋值给基类对象,实现的具体方式是,将基类指针指向继承类(继承类有基类的拷贝)中的基类对象的地址,但是多重继承可能存在一个基类的多份拷贝,这就出现了二义性。虚继承可以解决...

2019-05-12 21:07:54 2689

转载 析构函数可以是纯虚的么

C++中析构函数可以为纯虚函数吗?众所周知,在实现多态的过程中,一般将基类的析构函数设为virtual,以便在delete的时候能够多态的链式调用。那么析构函数是否可以设为纯虚呢?class CBase{ public: CBase() { printf("CBase()\n"); } virtual ...

2019-05-12 19:59:38 5668 1

转载 析构函数可以调用虚函数,构造函数为什么不可以调用虚函数

简要结论:1. 从语法上讲,调用完全没有问题。2. 但是从效果上看,往往不能达到需要的目的。Effective 的解释是:派生类对象构造期间进入基类的构造函数时,对象类型变成了基类类型,而不是派生类类型。同样,进入基类析构函数时,对象也是基类类型。所以,虚函数始终仅仅调用基类的虚函数(如果是基类调用虚函数),不能达到多态的效果,所以放在构造函数中是没有意义的,而且往往不...

2019-05-12 19:50:31 428

空空如也

空空如也

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

TA关注的人

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