自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hsqyc的博客

小学老师说,一个知识点你要是能把同学教会,你就算是真正学会了

  • 博客(28)
  • 收藏
  • 关注

原创 图解ncnn实现Winograd卷积

图解ncnn实现Winograd卷积前言上一篇讲了Winograd的基本实现思路, 提到ncnn的实现是使用结论公式描述计算的流程, 用固定已知系数的加法代替矩阵乘法, 除此之外, ncnn的实现还涉及到一系列的内存重排配合SIMD操作提高效率. 本文用多幅图描述ncnn实现Winograd的详细流程. 希望能够帮助大家更好的理解.流程概述Y=AT[(GgGT)⊙(BTdB)]A=AT[U⊙V]A=ATMA(1)Y=A^T[(GgG^T)⊙(B^TdB)]A =A^T[U⊙V]A=A^TMA \t

2021-04-27 17:12:26 1342 4

原创 三种思路实现Winograd卷积, 配上代码的保姆级教程

三种思路实现Winograd卷积, 配上代码你一定能看得懂前言一般我们实现卷积的时候大多采用的方案是im2col+gemm, 除此之外, 还有一种加速方案, 就是Winograd卷积, 目前几乎在所有推理框架里都能找到其实现. Winograd卷积出自一篇2016CVPR论文. 网上相关的博客挺多的, 但是都几乎只是几个公式配几个图, 看完后似懂非懂, 没有对应代码总是会感觉少了点什么, 想去看各个推理框架的代码吧, 又对应不上, 看不懂. 本人经过一段时间的硬啃, 最终实现了Winograd多个思路的

2021-04-25 19:27:39 3976 12

原创 序列化与反序列化之Flatbuffers(二):深入剖析

序列化与反序列化之Flatbuffers(二):深入剖析一: 前言上一篇介绍了Flatbuffers的基本情况和基本使用方法, 现在我们对这个序列化的过程比较感兴趣, 或者说想要知道序列化后这个信息是以什么样形式存储起来了. 在网上也看到一些讲Flatbuffers内部保存结构的, 基本都用的下面这样一张图. 这张图基本意思是对了, 但是细节上不对的!!!我不知道是否是因为版本迭代的缘故, 至少目前2021年4月最新的Flatbuffers细节上与那张图不一样.二: 回顾table Person

2021-04-15 11:11:46 1916 1

原创 序列化与反序列化之Flatbuffers(一):初步使用

序列化与反序列化之Flatbuffers(一):初步使用一: 前言在MNN中, 一个训练好的静态模型是经过Flatbuffers序列化之后保存在硬盘中的. 这带来两个问题: 1.为什么模型信息要序列化不能直接保存 2.其他框架如caffe和onnx都是用Protobuf序列化, 为什么MNN要用Flatbuffers, 有啥优势? 在解答这两个问题之前, 我们先要了解什么是序列化和反序列化.二: 什么是序列化和反序列化什么是序列化和反序列化:序列化是指把一个实例对象变成二进制内容,本质上就是一个

2021-04-15 11:07:27 5785 2

原创 nc4hw4排布配合neon加速im2col+gemm的卷积推理

nc4hw4排布配合neon加速im2col+gemm的卷积推理一:前言一个tensor常见的内存排布有nchw和nhwc,除此之外,MNN还有一种内存排布方式叫做nc4hw4,如何理解这个排布呢?这种排布对性能又有什么提升呢?二:什么是nc4hw4概念本身很简单,两幅图就很能说明.其实nc4hw4准确的说应该是n(c/4)h(w*4).一句话来说就是:沿着c方向取4个数按照w方向排列.如果c不是4的倍数,则全用0补上.三:nc4hw4如何提升卷积推理性能nc4hw4的出现就是为了配合矢量操

2021-04-11 17:08:52 1101

原创 模型的图优化

图优化在各种开源推理框架中,我们总能看到有一种graph optimizer技术,主要是对用户想要运行的网络模型进行一种网络结构层面的优化,剔除不需要的Op、融合某些特定的相邻Op、转换某些框架不支持或者实现效率较低的Op等。但是目前网上貌似系统的介绍图优化方向的文章较少,本文是在整理了目前几个开源框架MNN、NCNN、ONNX-Runtime中关于图优化技术后所完成,希望能让大家对图优化有一个大略的了解。前言本文着重介绍是图优化,对于本文出现的Op的定义不作介绍.这些Op名可能是来自于各种框架.

2021-04-06 23:07:59 1140 2

原创 NEON加速im2col+gemm的卷积推理

前言主流框架包括caffe、tf、darknet实现卷积的时候不是直接进行卷积计算,而是往往采用im2col+gemm的方式来进行加速,加速的思路是“空间换时间”提高读取数据过程cache的命中。本文主要利用ARM的NEON汇编指令来加速darknet框架的CPU卷积计算darknet相关卷积实现原理具体的im2col原理卷积实现时,卷积核第一个元素与经过im2col操作后的feature map的第一行对应的的每个元素先后分别相乘,结果值分别存到不同位置,如图中所示。然后以此类推,卷积核第二个

2020-09-26 22:28:34 2206

原创 gdb远程调试

前言学会调试生成的程序是一种能力,而使用好工具更是能力的体现。想必gdb不用过多介绍。本文主要介绍如何用gdb命令行远程调试目标板上的程序以及如何配合vscode可视化远程调试目标板上的程序编译安装下载链接我下载的是7.8.1,好像说新版的不太好。下载好之后解压进入,执行下述命令进行配置安装:hsq@ares:~$ cd gdb-7.8.1/hsq@ares:~/gdb-7.8.1$...

2020-04-29 13:44:32 6504 1

原创 NEON初步使用

前言指令集并行是CPU的优化加速的一个方向,在ARM芯片主要是利用NEON指令集实现指令集并行NEON简介NEON就是高级SIMD,单指令多数据,适用于图像、音频等数据处理。ARMv6就叫SIMD,ARMv7开始叫NEON,aarch64又有点不一样,下文只针对ARMv7或者ARMv8 aarch32的NEON进行NEON有32个64位长的寄存器(D0-D31,每个D可以装2个浮点数据)...

2020-04-28 22:43:00 1869

原创 aarch64下运行aarch32程序

前言能否在arm芯片的aarch64模式下运行aarch32的程序呢?查看我们先查看两个分别用gcc-arm-linux-gnueabihf和aarch64-linux-gnu编译出来两个程序文件appv7和appv8的文件信息hsq@ares:~$ file appv7#查看appv7的文件信息appv7: ELF 32-bit LSB executable, ARM, EABI5 v...

2020-04-26 23:15:31 5879 1

原创 树莓派3B+的uboot启动内核

前言  入手一个树莓派Raspberry 3B+后准备拿来当学习嵌入式Linux及深度学习边缘计算的板子,从BootLoader到Linux内核再到深度学习推理框架。本文主要是让树莓派启动Linux内核后开启一个命令行窗口,旨在了解系统启动过程。不用树莓派官方提供图形界面系统。中间走了很多坑,让我们一步步来捋一捋。树莓派的启动流程分析启动流程[1]First stage bootlo...

2020-04-25 22:22:56 7343 5

原创 GCC和Makefile

前言大型项目往往会用到Makefile或者CMake。对于个人而言除了只会make之外,平时用Makefile来管理不大的项目确实很方便,可以让我们告别各种IDE的配置。该文仅作为个人学习记录常用GCC编译选项在使用gcc、g++编译C/C++程序的时候会涉,下面列出常用选项参考链接-o 指定文件名gcc test.c -o test#指定生成的可执行文件的文件名-W 指定警告信...

2020-03-12 15:48:54 372

原创 树莓派SD卡手动格式化

前言在使用树莓派利用SD卡启动系统的过程中,如何配置一张新买的空SD卡也是一个必不可少的技能。本文主要是介绍如何将SD卡分成boot和root两个分区,操作流程主要分为分区、格式化两步操作流程分区查看插入的SD卡情况,可以看出目前插入了一张32G(29G)的SD卡,系统分配给其的名字是/dev/sdb,目前存在1个分区,名字分别为/dev/sdb1,格式是W95 FAT32 (LBA)...

2020-03-07 21:11:57 9903

原创 交叉编译器命名规律及使用

什么是交叉编译器交叉编译器可以使我们在主机上编译出可以在嵌入式设备上运行的程序下载地址arm官方提供的下载地址在这:链接 linkubuntu直接apt-get下载sudo apt-get install gcc-aarch64-linux-gnu#安装64位用于操作系统的交叉编译器,gcc版本是5.4,安装位置在/usr/bin sudo apt-get instal...

2020-03-06 23:34:54 842

原创 ARM芯片名字关系

前言  一款ARM芯片相关的名字太多,经常搞不清楚都分别代表什么,本文就是梳理一下名字的含义层次并着重回顾一下芯片架构。  BCM2837是产品的名字,是博通公司的一款SoC(CPU+RAM等外设都封装在一块SoC芯片里),这款SoC包含的CPU架构是ARMv8,这个CPU的名字是ARM Cortex-A53,aarch64和aarch32是ARMv8架构处理器的两种可选的执行状态,aarc...

2020-01-02 22:40:53 1414

原创 C/C++库文件全了解(包含静态库、动态库,包含windows、linux,包含dll、lib、so)

目录C/C++库文件全了解一. 前言二. 名词解释2.1. windows的静态库:xxx.lib2.2. windows的动态库:xxx.dll2.3. linux的动态库:libxxx.so2.4. linux的静态库:xxx.a三. 自己编译库3.1 编译产生windows的静态库3.1.1代码准备:3.1.2 static_lib.cpp:3.1.3 static_lib.h:3.2 编译...

2019-03-01 14:52:39 9637 1

原创 论文品读:Stability Based Filter Pruning for Accelerating Deep CNNs

2018年的论文,提出了一种新的评价卷积核重要程度的方式。主要思想是比较改变损失函数前后训练得到的两套参数,如果某个位置的参数改变的幅度大,就认为该参数是敏感的不稳定的,那就是不重要的,优先裁剪。具体过程如下1.正常训练得到基础模型参数。2.改变损失函数并训练1到3个epoch得到新的模型参数,新的损失函数为左边公式的L,C是原始损失函数,K代表网络有几层,S通过右边公式得到。右边...

2019-01-19 11:28:56 360

原创 win10、ubuntu局域网共享

前提,电脑都得连在同一个局域网下。 linux共享出文件夹:右击要共享的文件夹,选择Local Network Share,选中share this folder和allow others to create delete files in this folder和允许访客访问guest access(必须点这个,不然之后别人访问不了),然后点击create share,第一次可能会提...

2018-12-14 13:51:36 4124

原创 论文品读:Pruning Convolutional Neural Networks for Resource Efficient Inference

 模型裁剪系列相关论文品读博客:1.论文品读:Learning both Weights and Connections for Efficient Neural Networks https://blog.csdn.net/hsqyc/article/details/834210612.论文品读:Network Trimming: A Data-Driven Neuron Pruni...

2018-12-12 14:37:04 3652 4

原创 论文品读:Pruning filters for effecient convnets

https://arxiv.org/abs/1608.08710本文提出了一种基于L1的通道裁剪的方法,在VGG16上降低34%的计算量,ResNet-101降低38%计算量 本文说权重裁剪只能稀疏化矩阵,不能降低计算量从而提速,并且稀疏化会需要BLAS稀疏计算库。并且论文提出了不用一层层迭代裁剪,而是直接one-shot一次裁剪,可以节省裁剪、训练时间。最后,作者还发现了即使ResN...

2018-11-13 15:12:58 1353 1

原创 论文品读:Network Trimming: A Data-Driven Neuron Pruning Approach towards Efficient Deep Architectures

http://cn.arxiv.org/abs/1607.03250文章介绍了一种新的评价参数是否需要被裁剪的标准:AP0Z 公式1给出了AP0Z的定义。代表第i层的第c个通道的输出,M是的维度数。算了,解释起来太麻烦,直接看下图。输入一张图,经过一层卷积,得到右边的feature map,我们计算,也就是输出的第一个通道的APOZ,也就是右边红色。假设红色的部分一半是0,那么这张...

2018-11-13 09:12:26 3690

原创 论文品读:Learning both Weights and Connections for Efficient Neural Networks

https://arxiv.org/abs/1506.02626v3这是一篇关于模型压缩的15年文章,到目前为止(18年11月)有450的被引文章介绍了一种参数剪枝(weights pruning)方法,应该算是最基础的一种方法了,直接按照参数是否大于某个阈值来判断哪些参数是重要的,哪些参数是不重要。文章主要目的是想要压缩模型大小后将模型运行在能耗更小的内部SRAM里,在速度提升上文章没有...

2018-11-01 10:22:09 4524 3

原创 YOLO3的具体实现过程

未完成,待续fun1:y_true = list()y_true.append(np.zeros((batch_size, 52, 52, 3, 4 + 1 + len(labels))))  # 预测矩阵1y_true.append(np.zeros((batch_size, 26, 26, 3, 4 + 1 + len(labels))))  # 预测矩阵2y_true.appe...

2018-10-26 10:06:26 11907

原创 apt-get、conda、pip安装东西的细节

前言:apt-get、conda、pip安装东西确实很方便,可是你有想过他们工作到底是个什么流程么?我的东西被下载到哪里了?又被安装在哪里了?目录前言:一:conda的下载安装细节分析1.环境说明:2.我们先假装要升级一下conda,但是在问你是否升级的时候选择no3.然后我们这次真的升级一下conda4.我们再下载一个新的没有依赖的包_r-mutex5.我们试...

2018-09-29 16:13:22 10952 8

原创 理解目标检测当中的mAP

我们在评价一个目标检测算法的“好坏”程度的时候,往往采用的是pascal voc 2012的评价标准mAP。网上一些资料博客参差不齐,缺乏直观易懂的正确说明。希望这篇博文能够给大家一点帮助。mAP历史目标检测的mAP计算方式在2010年的voc上发生过变化,目前基本都是采用新的mAP评价标准。(我有个小疑问就是明明是2010年修改的,但是貌似现在大家都称这种计算方式为2012)所...

2018-08-16 15:11:54 63682 56

原创 与ubuntu斗智斗勇的日常记录

自从用了ubuntu,我多了好多白头发 情形:根据系统提示升级了一下,然后侧边栏和窗口栏都消失了。试了所有百度、Google到的方法,都不行原因:解决:rm -rf .cache 情形:打开pycharm的时候会有一个提示,虽然好像不影响使用错误提示:GLib-GIO-Message: Using the 'memory' GSettings backend. Your...

2018-07-16 20:10:42 194

原创 在SSD+HDD上安装win10、Ubuntu 16.04双系统

本人在老笔记本和新台式上都装过双系统。每次都是花了一天功夫。所以写下本文一是为了让大家能够有个借鉴,二是为我自己存个档。装双系统首先要知道自己的电脑是什么情况,不同情况会有略微差别。我一开始就是因为没有搞清楚才走了很多坑。科普链接:1.什么是BISO、UEFI谁能给我科普一下UEFI? - 上善若水的回答 - 知乎https://www.zhihu.com/question/27382811/an...

2018-07-16 10:54:12 3895 2

原创 错误解决记录

情形:pip安装tensorlayer的时候出现错误错误提示:Cannot uninstall 'scikit-learn'. It is a distutils installed project and thus we cannot accurately determine which files belong to it which would lead to only a part...

2018-07-08 11:05:55 2343

空空如也

空空如也

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

TA关注的人

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