自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 背包问题总结

1、0-1背包问题有 N 件物品和一个容量是 V 的背包。每件物品只能使用一次。第 i 件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。可以建立一个dp[N][V]的二维数组,状态转移方程如何推理?如果不选第i件物品,则dp[i][j] = dp[i-1][j]如果选第i件物品,且第i件物品体积能装入背包,即j > vi。如果要装入vi,则上一个体积状态为j - vi,状态转移方程:dp[i][j

2021-03-21 18:20:28 156

原创 vulkan通用计算学习

当前学习状态为计算机图形学为0,关于着色器、纹理等概念不是很清楚,目前在尝试使用vulkan完成通用计算,sample code参考github,只不过自己重新照着抄了一份,代码如下:#include <vulkan/vulkan.h>#include <stdio.h>#include <stdlib.h>#include<windows.h>unsigned long long GetTime(void){ LARGE_INTEGER m

2021-02-08 09:58:45 2090 5

原创 inline asm进阶

1、如何传入一个neon的向量寄存器,并在此寄存器的基础上进行修改?假设传入一个float32x4_t的数据,经过asm处理该数据后返回:float a[4] = { 1.0,2.0,3.0,4.0 };float32x4_t v_tmp = vdupq_n_f32(100.0);__asm__ volatile( "ld1 {v0.4s},[%[src]] \n" "fadd %[dst].4s, %[dst].4s,v0.4s" :[src]"=r"(a), [dst]"=w"(v_t

2021-01-07 16:58:01 541

转载 neon指令整理

参考:https://blog.csdn.net/ywl0424151906/article/details/99640855vtrnvtrn实现transpose

2020-12-24 16:06:43 319 1

原创 图像格式转换

UYVY数据格式:UYVY格式I420数据格式:I420格式UYVY格式转换为I420格式:Y通道值不变,按序排放,UV则是相邻两行求均值获取的。如,

2020-12-24 15:51:37 308

原创 resize area

resize area在放大的时候效果应该与resize nearest类似,在缩小的时候主要是计算输入的目标区域,根据该目标区域计算面积。如src width=16,height=16,dst width=4,dst height=4,scale_h/w = 4当计算dst_h = 0,dst_w=0时,计算流程:src_h0 = 0 * scale_h + 1,src_h1 = 1 * scale_h + 1src_w0 = 0 * scale_w + 1,src_w1 = 1 * sc

2020-12-17 14:13:56 477

原创 关于pytorch的upsample_bilinear2d的align_corners和half_pixel等参数确定

代码位置在:aten/src/Aten/native/cpu/UpSampleMoreKernel.cpp,关于bilinear的坐标计算过程:template <typename scalar_t>static inline scalar_t area_pixel_compute_source_index( scalar_t scale, int64_t dst_index, bool align_corners, bool cubic) { if.

2020-12-01 15:06:02 1789

原创 pytorch的模型解析

如何获取pytorch的动态图?model = torch.jit.load("test.pth")graph = model.graph.copy()torch._C._jit_pass_inline(graph)node_list = graph.nodes()加载模型后,获取模型的graph,这个graph就是需要的动态图。graph node就是计算图的计算节点(有序),关于各个层的相关参数都可以从node节点中获取,各个参数的相对位置需要查找一下该op的实现。需要注意的是,需要

2020-11-13 11:10:42 2177 5

原创 json的使用(python写,c++读)

准备用json存一个网络结构,每个网络包含各个层的信息,如卷积层,池化层等。最初的打算是通过这样的方式写:json_file = open("json.json","w")conv_dict = { "type":"conv"}input_dict = { "type":"input"}output_dict = { "type":"output"}json.dump(input_dict,json_file,indent=4);json_file.write(

2020-11-06 15:21:16 481

原创 struct.pack使用错误的记录

先把struct的fmt列出来:1、struct.error: bad char in struct format:tmp = [1,2,3,4,5]data = struct.pack("<i"*5,*tmp)上述代码出现该问题是因为fmt为"<i"*5,即fmt为“<i<i<i<i<i”。如果要设置byte order、size和对齐方式,则需要在字符串开始位置指定。The optional first format ch...

2020-11-06 10:52:12 2612

原创 pytorch安装遇到的问题记录

E:Error, pkgProblemResolver::Resolve generated breaks, this may be caused by helsudo apt-get dist-upgrade

2020-10-26 10:04:22 208

原创 生成onnx模型过程记录

onnx::ModelProto mymodel; onnx::GraphProto graph; mymodel.clear_graph(); mymodel.set_producer_name("pytorch 1.3");//important onnx::OperatorSetIdProto* myopset = mymodel.add_opset_import(); //important mymodel.set_allocated_graph(&graph); gr.

2020-10-19 09:34:13 6234

原创 模型链接

https://github.com/anilsathyan7/Portrait-Segmentation

2020-10-16 13:48:32 239

原创 tf算子计算流程统计

tf.depth_to_space()import numpy as npimport tensorflow.compat.v1 as tftf.disable_v2_behavior()if __name__ == "__main__": block_size = 3 i1 = tf.linspace(1.0,288.0,288) i2 = tf.reshape(i1,[1,4,4,18]) i3 = tf.depth_to_space(i2,block_size=block_si.

2020-10-15 16:20:30 261

原创 ncnn试用

参考ncnn的example,该代码关闭了默认half计算,需要注意的是,在extract之前必须设置input,否则在匹配输入blob时会出现匹配不上的err,计算结果与caffe对比,误差很小。具体代码如下:#include "net.h"#include <stdio.h>#if 1int main(){ ncnn::Net TestNet; TestNet.opt.use_vulkan_compute = true; TestNet.opt.use_fp16_sto

2020-10-12 14:23:40 632

原创 动态加载动态库(windows/linux)

在读TNN/MACE代码时总看到动态加载相关代码,因此在这做一个总结和试用。代码参考windows动态加载和linux动态加载通过dlsym/getprocaddress获取动态库的函数地址,然后利用该地址进行其它相关操作(重命名函数之类的)。#ifdef WIN32#include <windows.h>#else#include <dlfcn.h>#endif#include <stdio.h>#include <stdlib.h>

2020-10-12 10:56:42 1370

原创 图像编解码

https://www.w3.org/TR/PNG/https://www.cnblogs.com/senior-engineer/p/9548347.htmlhttps://blog.csdn.net/blues1021/article/details/45274509https://www.cnblogs.com/en-heng/p/4992916.htmlhttps://www.cnblogs.com/dylancao/p/8472879.html

2020-09-11 09:38:39 294

转载 bank conflict

存储体冲突(bank conflict):当被访问的存储体没有恢复时又出现对该存储体新访问的现象。简介  目前 CUDA 装置中,每个 multiprocessor 有 16KB 的 shared memory。Shared memory 分成 16 个 bank。如果同时每个 thread 是存取不同的 bank,就不会产生任何问题,存取shared memory 的速度和存取寄存器相同。不过,如果同时有两个(或更多个) threads 存取同一个 bank 的数据,就会发生 bank confl

2020-08-28 09:33:38 960

原创 双三次插值计算流程

双三次算法与双线性插值相比,需要计算相邻16个点的输入像素,即w方向坐标分别为w - 1、w、w + 1、 w + 2;h方向坐标分别为h -1、h、 h + 1、h + 2。如何计算每个点对应的权重呢?opencv的计算方法是这样的:fx = (float)((dx+0.5)*scale_x - 0.5);sx = cvFloor(fx);fx -= sx;BiBubic(ii - fx); //ii值为-1/0/1/2#define ALPHA -0.75/* (a +..

2020-08-17 18:17:40 931

原创 Python / C API 相互调用

最近需要将库封装为python可调用的库。目前验证是可以直接使用静态库封装,如果想使用动态库,linux可以使用以下指令生成动态库。ar -x mylib.agcc -shared *.o -o mylib.so封装过程中遇到undefined reference to symbol '_ZTVN10__cxxabiv117__class_type_infoE类似问题,则需要将gcc改为g++就可以了。动态库的使用方法参考博客以下所有问题都可以从python官网和中文链接中找到问题答案,封装

2020-08-05 16:13:43 439

原创 python封装c函数库的调用

主要使用ctypes,具体内容参考项目中可能会经常用到第三方库,主要是出于程序效率考虑和节约开发时间避免重复造轮子。无论第三方库开源与否,编程语言是否与当前项目一致,我们最终的目的是在当前编程环境中调用库中的方法并得到结果或者借助库中的模块实现某种功能。这个过程会牵涉到很多东西,本篇文章将简要的介绍一下该过程的一些问题。1.背景多语言混合编程可以弥补某一种编程语言在性能表现或者是功能等方面的不足。虽然所有的高级语言都会最终转换成汇编指令或者最底层的机器指令,但是语言本身之间的千差万别很难一言以蔽之

2020-07-29 15:10:23 1134

原创 C语言学习#pragma pack和宏使用

#pragma pack(push)让编译器将当前对齐状态保存下来#pragma pack(pop) 让编译器恢复保存的状态#pragma pack(n) 让编译器按照n字节对齐#include <stdio.h> #define CLASS(a) typedef struct a a; \ struct a{ \ a##_FIELDS; \ };#define ALIGN_SET(n) __pragma(pack(push, n))#define ALIGN_RE

2020-07-27 16:34:10 600 2

原创 腾讯开源框架TNN调用过程

第一步:模型转换,按照github一步一步来就ok了~此处无坑第二步:cmake建立vs工程,需要在cmakelist里面需要使用的accelerator,否则在getdevice会返回NULL值第三步:调用#include "tnn/utils/dims_vector_utils.h"#include "tnn/utils/blob_transfer_utils.h"#include "tnn/core/tnn.h"#include <fstream>static voi

2020-07-21 15:24:56 1413 1

原创 GPU与CPU之间的区别

关于缓存:CPU遵循缓存一致性:一个内存的写操作需要通知所有核的各个级别的缓存。无论何时,所有处理器核看到的内存视图是完全一样的。随着处理器中核的数量的增加,这个“通知”开销也随之增大,使得缓存一致性成为限制处理器中核数不能太多的一个重要因素。缓存一致最坏的情况:一个内存写操作会强迫所有核的缓存都进行更新,因此每个核都要对相邻的内存单元进行写操作。GPU不遵循缓存一致性:一个内存的写操作不会更新其它核的缓存。所以GPU能够具有很多的核心(流处理器簇)...

2020-07-13 10:08:19 684

原创 TNN conv2d_1x1 opencl计算流程

首先说一下feature map的数据存储格式:(b*h) * (w4* c /4),dim0如下表,dim1为b*h,这点与mace相同。w0 w1 ... wn w0 w1 ... c0 c1 c2 c3 c0 c1 c2 c3 ... c0 c1 c2 c3 c4 c5 c6 c7 c4 c5 c6 c7 ... weight的存储格式:(c_out/4)*(c_in * 4)c_in_0 c_in_1

2020-07-08 14:43:41 610

原创 No matching distribution found for onnxruntime

使用pip install onnxruntime报错:ERROR: Could not find a version that satisfies the requirement onnxruntime (from versions: none)ERROR: No matching distribution found for onnxruntime看了onnxruntime issue建议使用pip3安装但是当时的安装环境(python3.5)安装pip3有403的error,查看当时

2020-07-01 10:00:15 10515

原创 tensorflow resize代码解析

tensorflow resizebilinear函数为例,其scale的计算与resize函数的align_corner有关:inline float CalculateResizeScale(int64 in_size, int64 out_size, bool align_corners) { return (al...

2019-09-25 14:08:41 3203 1

原创 tf conv2d_transpose计算过程

tf的反卷积计算如何做到卷积计算呢?1、将卷积核反转:7 9 2 1 4 3 0 8 6 6 8 0 3 4 1 2 9 7 卷积核1 ...

2019-09-19 11:01:06 585

转载 SVN服务器搭建

参考:https://blog.csdn.net/qsir/article/details/81063913 以及https://blog.csdn.net/weixin_37657720/article/details/79501507详细安装过程可参考上述链接。注意安装svn_server(VisualSVN-Server)...

2019-09-10 11:21:40 76

原创 tensorflow量化部分整理ing

主要量化要求https://github.com/tensorflow/tensorflow/blob/a290c288bd05b76b22b273797833749018657e30/tensorflow/lite/g3doc/performance/quantization_spec.md1、卷积的量化参数(权重、输出的min max由fakequant给定)2、Pooling、Res...

2019-08-14 15:36:21 1004

原创 tensflow SpaceToBatchND + conv + BatchToSpaceND

参考博客1、https://blog.csdn.net/murdock_c/article/details/874702482、https://blog.csdn.net/silence2015/article/details/79748729总结一下:以一个1x6x6x1(nhwc)为例,假如卷积核大小3x3,stride = 1,dilation=2的卷积。输入kernel...

2019-07-19 14:56:20 1028

原创 使用protobuf解析tensorflow pb模型

1、安装protobuf,使用protoc把tensorflow模型中的proto文件转换为对应的.h和.cc,如下图所示:解析用到的proto位置大概在tensorflow\core\framework和tensorflow\core\protobuf,当然这里面的proto比较多,只要把graph.proto包含的proto文件用到就可以了。proto里面有syntax = "pr...

2019-06-27 09:50:42 1232

原创 python broadcast机制的模拟实现

tensorflow的算术操作:mul/add/sub等op都支持broadcast机制,该机制支持不同维度的计算,但是在对维度进行逆向比较时需要满足以下要求:1)二者维度相同2)二者维度有一个为13)如果维度大小不一致,需要用1来对维度小的数据进行扩展,在进行上述判断;如:a:[256,256,3]、b:[3]这样的维度,需要先将b扩展至与a一致,将b扩展至[1,1,3],再对a...

2019-06-27 09:50:17 249

原创 tensorflow pb Conv2DBackpropInput与fusedbatchnorm的合并

tensorflow pb中用的op是Conv2DBackpropInput,如下所示:filter格式是[filter_h,filter_w,c_out,c_in] (hwnc)解析时先把这个格式转换为[c_out,filter_h,filter_w,c_in](nhwc),目的是和tflite对比数据转换是否正确,并对上述参数进行scale,和卷积的合入类似。做完上述操作以后,关键...

2019-06-27 09:49:23 3252 4

原创 std::map的遍历及删除

在list内容中指定需要删除的key,在Map中找到并删除。最初做法如下:std::map<std::string, Node>::iterator it_map,tmp;std::string node_name;std::vector<std::string>::iterator it_list;for (it_map = node_map->begi...

2019-05-29 10:44:19 12113

原创 tensorflow pb中的FakeQuantWithMinMaxVarss计算scale和zeropoint

最近在解析tensorflow pb文件时,发现FakeQuantWithMinMaxVarss给出的min-max无法计算得到tflite的scale和zeropoint;用的计算方式是这样的:(8bit quantization)然而再使用toco转换成tflite,发现权重scale、zeropoint计算错误。最后发现tensorflow的计算方法(tensorflow/l...

2019-05-17 15:53:47 2127 1

原创 C嵌入汇编之vld1.f32和vst1.f32指令理解

想完成类似与memcpy,使用arm的neon指令完成,第一次代码关键点第一点:add %0,%0,#32,表示每次移动32/4=8个float第二点:subs r0,r0,#1才能改变状态标志位,sub不行第三点:vld1.f32 {d16-d17},[%0:128]add %0,%0,#16 //16=128/32*4,移动%0到第四个位置与vl...

2018-01-07 16:41:10 6127 2

原创 图像卷积的fft实现验证(python)

1、Caffe的卷积操作时间主要在矩阵乘法,假设一个m*n卷积核,且输入通道数为1,输出特征图大小为h*w,则乘法个数m*n*h*w,这里的优化仅限于对矩阵的乘法优化,因此,只要选择适合的矩阵计算库就可以了。2、若使用FFT来计算图像卷积。其主要步骤如下。假设输入图像的大小为len=h*w,卷积核大小k_len=m*n;通常len&gt;&gt;k_len; 对输入图像A做FFT,其...

2017-09-21 15:10:20 5254 11

空空如也

空空如也

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

TA关注的人

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