编程
文章平均质量分 57
编程思想,技巧
maxruan
站在巨人肩上,集大成于一身
展开
-
CUDA共享内存详解
对于CUDA,一个grid 有多个Block 块,一个block块多个线程。共享内存只是Block 块内的线程共享,不同Block块之间的共享内存是不会共享的。shared。原创 2023-06-19 13:04:46 · 1119 阅读 · 0 评论 -
CUDA reduce 并行规约求和
例如, 1024 * 1024 大小的数据, 每一个block处理1024个数据, 一共1024 个block, 处理完后剩下1024个数据, 接着在处理, 就有加速的效果:每一个block 块作为。原创 2022-12-28 22:47:36 · 1054 阅读 · 1 评论 -
CV::Mat数据拷贝 memcpy 踩坑
cv::Mat img1(h, w, CV_8UC3);cv::Mat img1(h, w, CV_8UC3, data);一般cv::mat 初始化后数据内存 data 段都是连续的, 可以用isContinuous()函数判断存储是否连续。切记!切记!切记!不连续不能当一维数组处理一般经过裁剪的Mat图像,都不再连续了,如cv::Mat crop_img = src(rect);crop_img 是不连续的Mat图像,如果想转为连续的,最简单的方法,就是将不连续的crop_img 重新clon原创 2022-06-27 15:35:41 · 3249 阅读 · 2 评论 -
CUDA 二维、三维数组遍历
一个 Grid 分成 按维度分成多个Block,Block 个数为 GridDim.x * GridDim.y遍历: blockIdx.x , blockIdx.y一个Block 按维度分成多个Thread,Thread个数为 BlockDim.x * BlockDim.yThread 是最小的运行单元遍历:threadIdx.x , threadIdx.ycudaMemcpy2D( d_A, // 目的指针d_pitch, // 目的pitchbmp1, // 源原创 2022-06-26 23:04:57 · 1256 阅读 · 0 评论 -
C++时间统计
1、clock_gettime2、std::chrono::system_clock3、clock()不准确,不建议使用time_t t1 = clock()原创 2022-06-15 16:31:14 · 659 阅读 · 0 评论 -
PsROI Pooling 深入理解,附代码
faster rcnn 和 rfcn 的最大不同点在于rfcn采用了PsROI Pooling 保留了局部区域的位置敏感性。输入batch_size = N 的批次训练图像。假设我们通过 RPN 层网络获取了 M 个 rois, 每个 rois 用 1*5 的向量表示,**第0 个数表示rois 所属于的图像id,**对roi 进行pooling 时要到特征图对应的batch 中。例如 rois = [[0, 1,4,6,8],[0,2,3,7,9],[1,3,5,7,9]],有3个roi,其中两个原创 2022-01-18 12:04:59 · 3147 阅读 · 0 评论 -
linux 下 CUDA + Opencv 编程 之 CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 2.8)PROJECT(medianFilterGPU)# CUDA packageFIND_PACKAGE(CUDA REQUIRED) INCLUDE(FindCUDA)# CUDA include directoriesINCLUDE_DIRECTORIES(/usr/local/cuda/include)# OpenCV packageFIND_PACKAGE(OpenCV REQUIRED) # OpenCV in原创 2021-09-27 15:35:43 · 414 阅读 · 0 评论 -
Pytorch 模型训练入门
定义是否使用GPU可有可无,默认为 cpudevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")训练数据:BATCH_SIZE = 64 :批处理尺寸,即一次处理图像的张数加载训练数据 : 以cifar10 为例trainset = torchvision.datasets.CIFAR10(root=...原创 2019-12-20 12:29:31 · 237 阅读 · 0 评论 -
ResNet解读和pytorch实现
为什么ResNet1 . 简单地增加卷积层导致梯度发散或梯度爆炸2. 残差网络可以消除这种现象ResNet 思想网络输出为 恒等映射 + 残差映射ResNet通过改变学习目标,即由学习完整的输出变为学习残差,解决了传统卷积在信息传递时存在的信息丢失核损耗问题,通过将输入直接绕道传递到输出,保护了信息的完整性。此外学习目标的简化也降低了学习难度。...原创 2019-12-19 22:21:44 · 886 阅读 · 0 评论 -
Pytorch 模型保存
方式1 :保存整个模型使用时无需自定义网络模型,保存时已把网络结构保存,不方便调整网络结构。torch.save(modelname, 'model.pkl')model = torch.load('model.pkl')方式2:保存模型参数使用时需要自己定义网络,并且其中的参数名称与结构要与保存的模型中的一致(可以定义部分网络,比如只使用VGG的前几层),相对灵活,便于对网络进行修改...原创 2019-12-19 16:04:57 · 151 阅读 · 0 评论 -
用cupy实现python + cuda编程
1 . 编写核函数进行数据处理kernerl.py 文件kernel_img = '''extern "C"__global__ void medianfilter( const float *input, float *output, const int w...原创 2019-12-05 10:07:11 · 2436 阅读 · 0 评论 -
CUDA 图像编程
CUDA 图像编程一个 Grid 分成 按维度分成多个Block,个数为 GridDim.x * GridDim.y遍历: blockIdx.x , blockIdx.y一个Block 按维度分成多个Thread,个数为 BlockDim.x * BlockDim.yThread 是最小的运行单元遍历:threadIdx.x , threadIdx.y图像处理中,一个像素对应到一个...原创 2019-12-04 20:57:18 · 1340 阅读 · 0 评论