Pytorch模型通过TensorRT部署推理---HRNet

一、Pytorch模型转换成onnx格式使用Pytorch自带的torch.onnx.export函数即可将Pytorch模型转换成onnx格式。images = Variable(images).float().cuda()os.environ['CUDA_VISIBLE_DEVICES'] = '0'config = yaml.load(open('brick_hrnet.yaml'))net = HighResolutionNet(config)net.float().cuda()n
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

relu\max pooling\argmax是如何进行反向传导的

众所周知,在神经网络中,进行反向传导需要计算梯度,这也就要求函数本身可导,但是relu、max pooling、argmax都是不可导的函数,既然不可导(或者不连续可导),也就无法求解梯度(或者无法在某一点上求解梯度),那这些函数是如何实现反向更新参数的呢?ReluRelu在x=0处是不可导的,其采用的方法是次梯度.对于ReLU函数, 当x>0的时候,其导数为1; 当x<0时,其导数为0. 则ReLU函数在x=0的次梯度是 [0,1] ,这里是次梯度有多个,可以取0,1之间的任意值.
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

论文解读:MnasFPN: Learning Latency-aware Pyramid Architecture for Object Detection on Mobile Devices

摘要尽管在资源受限的环境中架构搜索前瞻性任务取得了巨大的成功,但设备上对象检测架构的设计大部分还是手动完成的。很少有自动搜索工作以非移动友好搜索空间为中心,或者不受设备延迟的影响。我们提出了MnasFPN,这是用于检测头的移动友好搜索空间,并将其与延迟感知体系结构搜索相结合,以生成有效的对象检测模型。当与MobileNetV2主体配合使用时,学习到的MnasFPN头在性能上要比MobileNetV3 + SSDLite高1.8mAP。在Pixel上也有类似的延迟。与NAS-FPNLite相比,它既准确1m
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

论文解读:Key Points Estimation and Point InstanceSegmentation Approach for Lane Detection

这是一篇很有意思的车道线分割的论文,作者把车道线分割的问题转换成关键点检测,主要流程就是把512256的图片通过压缩网络变成6432的大小,然后经过4个Hourglass的沙漏模块(每一个沙漏模块都可以单独输出结果),获取关键点的置信度图+偏移量+特征向量,置信度不用说了,大小就是6432,偏移量是每一像素点对应偏移量两个值x,y,这个偏移量是用于纠正相对应于大网格的偏移,就是在6432的特征图上,一个像素对应原图8*8,所以x,y都是0~8之内的值(通过限制在0 ~1以内,然后乘以8就可以做到),然后特征
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

libfacedetection源码阅读

libfacedetection整体工作的亮点在于:1.加速,使用int8数据类型,运行在CPU上,intel处理器就用SIMD指令加速,arm平台就用neon指令加速,速度快是一个很大的亮点,整体网络的卷积层59层,其中一半是33的卷积核,一半是11的卷积核,参数量确实不大。2.多平台的可移植性,作者给出了ios,antroid的版本,给出了基于opencv dnn\caffe\openvino的部署;3.训练技巧,无论是图像输入的归一化(去掉了mean,直接uint8输入,还是头100个epoch
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

yolact模型详解

摘要我们提出了一个简单的、全卷积的实时实例分割,在coco数据集上获得了29.8map、单个Titan GPU上取得了33.5fps,比之前任何一个有竞争力的方案都要快。我们将实例分割分成两个并行的子任务:(1)生成一系列prototype的mask;(2)预测每一个实例mask的系数;(2)预测每一个实例mask的系数。然后我们生成实例mask通过线性地结合prototype和mask系数;我们发现由于这个过程不依赖于repooling,这个方案可以生成非常高质量的masks.同时,论文提出了一种Fas
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

图像的Blob分析--连通域分析

图像的blob分析是图像处理中应用非常广泛的一种基础算法,所谓的blob,指的是连通区域,同一像素或者相近像素或者说相近纹理邻接构成的区域叫做blob。blob分析的全部流程是:选取阈值进行二值化(可以进行直方图统计,找两个波峰之的最低值),接着计算连通域(这是重点),然后再对不同的连通域(也就是blob)统计中心、置心、形状、面积、周长等参数;本文将重点讲述连通域分析;在此之前,我们先定义两个像素在何种位置情况下会被视为连通,有以下两种(4邻域和8邻域):接下来要强调的一点是,为了符合我们视觉上对
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

solov2网络结构图

分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

DeepLabV3+网络结构

关于这个模型讲的比较好的博客有:https://zhuanlan.zhihu.com/p/62261970
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

如何深度学习CNN在实例分割任务上的误检率

前言误检是实例分割任务当中比较严重的问题,那么,如何消除误检呢?寻找最佳阈值我们可以在后处理的过程中,以一定间隔去遍历所有阈值,获得检出率较高而误检率较低的那个符合预期的阈值;加入负样本如果误检的实例阈值很高,无法通过阈值筛选的方式去除,可以将误检的样本增强后加入到训练集当中训练图片分类网络这是一种非常简单高效的方法;我们训练一个基于resnet的图片分类小网络,放在后处理中,用于判断实例网络输出的实例的图片分类;...
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

关于pytorch nn.MSELoss损失的补充介绍

正常情况下,对于关键点检测网络而言,假设原图大小【550,550】,当关键点的分类为1.输出的特征图大小为【1,550,550】,然后gt也被制作成【1,550,550】的高斯特征图,但是最近的一次实验发现,当输出为【4,550,550】的时候准确率更高,提升了2个百分点,那么【4,550,550】怎样跟【1,550,550】计算MSELoss的呢?不同维度的Tensor之间也能计算MSELoss么?>>> inputtensor([[1., 2.], [3., 4.]
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

对于Transformer在图像中应用的一些理解

RNN/LSTM/Transformer原始的RNN/LSTM主要用于NLP当中,前后词虽然是不同时间输入的,但是需要关联起来去理解整个句子的意义,单纯的RNN对前后隐层的关联是比较单一,所以有LSTM,对于要去掉信息,着重注意哪些信息是可以学习的,相比于RNN,LSTM有了更复杂的设计;RNN的目的在于连接全局信息,不是just local;LSTM在RNN的基础上,加入更强的注意力机制,对于不同前后不同的隐层,基于不同的注意(权重加成和丢弃);Transformer 把LSTM的结构改成可以并行
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

反卷积(Transposed conv deconv)实现原理(通俗易懂)

什么是卷积卷积就是把卷积核放在输入上进行滑窗,将当前卷积核覆盖范围内的输入与卷积核相乘,值进行累加,得到当前位置的输出,其本质在于融合多个像素值的信息输出一个像素值,本质上是下采样的,所以输出的大小必然小于输入的大小,如下图所示:什么是反卷积反卷积和转置卷积都是一个意思,所谓的反卷积,就是卷积的逆操作,我们将上图的卷积看成是输入通过卷积核的透视,那么反卷积就可以看成输出通过卷积核的透视,具体如下图所示:比如左上角的图,将输出的55按照绿色的线的逆方向投影回去,可以得到[[55,110,55],
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

model.eval()跟torch.no_grad()的区别

model.eval() 负责改变batchnorm、dropout的工作方式,如在eval()模式下,dropout是不工作的。batchnorm是固定均值方差的,不会再根据test的输入重新计算均值方差;torch.no_grad()仅仅是关闭梯度计算,节约内存;a) model.eval(),不启用 BatchNormalization 和 Dropout。此时pytorch会自动把BN和DropOut固定住,不会取平均,而是用训练好的值。不然的话,一旦test的batch_size过小,很容易就
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

KCF目标追踪卡尔曼滤波

KCF是一种目标追踪的方法,根据目标在上一帧的位置预测目标在当前帧的位置。以下为KCF流程的代码解读:/*Tracker based on Kernelized Correlation Filter (KCF) [1] and Circulant Structure with Kernels (CSK) [2].CSK is implemented by using raw gray level features, since it is a single-channel filter.KCF
分类: 其他 发布时间: 11-26 09:57 阅读次数: 0

什么是强化学习

强化学习是一种学习方式,跟监督学习、无监督学习并列的学习方式,需要跟环境进行交互,然后更新参数。强化学习是一种通过跟环境交互获取反馈、更新参数的学习方式,目前主要用在游戏中,强化学习算法的思路非常简单,以游戏为例,如果在游戏中采取某种策略可以取得较高的得分,那么就进一步「强化」这种策略,以期继续取得较好的结果。这种策略与日常生活中的各种「绩效奖励」非常类似。我们平时也常常用这样的策略来提高自己的游戏水平。在 Flappy bird 这个游戏中,我们需要简单的点击操作来控制小鸟,躲过各种水管,飞的越远
分类: 其他 发布时间: 11-26 09:56 阅读次数: 0

opencv读取和存储32位图像

读取32位float图像 cv::Mat image = cv::imread(filepath, cv::IMREAD_LOAD_GDAL | cv::IMREAD_ANYDEPTH); cv::Mat image_float(image.rows, image.cols, CV_32FC1, image.data);存储32位float图像 cv::Mat linear_CV8U(image.rows, image.cols, CV_8UC4, linear.data); cv::i
分类: 其他 发布时间: 11-26 09:56 阅读次数: 0

pytorch累计梯度训练

背景在深度学习的训练中,往往我们需要选择一个适中的batch值取获得最好的训练效果,batch不能太小或者太大。但是有时候我们的显卡内存有限,比如我们的显卡只能容纳一个batch,但是单batch的训练效果不稳定,该如何解决呢?解决方案我们可以累计N个batch的梯度之后再更新参数,而不是传统的每个batch都进行参数更新,这样可以等同于batch=N的训练;代码首先,需要明确以下两点:1.optimizer.zero_grad():会把所有的梯度置为02.loss.backward():添加
分类: 其他 发布时间: 11-26 09:56 阅读次数: 0

vit-transformer模型结构及源码解读

vit简介vit模型是transformer在图像分类领域的首次成功尝试;但是其需要基于大量数据去预训练模型;除了训练难度,现有的 Visual Transformer 参数量和计算量多大,比如 ViT 需要 18B FLOPs 在 ImageNet 达到 78% 左右 Top1,但是 CNN 模型如 GhostNet 只需 600M FLOPs 可以达到 79% 以上 Top1。vit网络结构源码解读import torchfrom torch import nnfrom einops
分类: 其他 发布时间: 11-26 09:56 阅读次数: 0

PSA极化注意力机制:Polarized Self-Attention: Towards High-quality Pixel-wise Regression

摘要在计算机视觉任务中,语义分割和关键点检测是具有挑战的,因为既要尽量保持高分辨率、又要考虑计算量,以及尽量连接全局信息得到结果。由于提取全局信息的有效性以及对全局像素special的注意力,attention机制在计算机视觉领域变得非常的流行。CNN本身是卷积共享的核,且具有平移不变性,也就代表其是local且丧失special注意力的。但是long-range的attention参数量大,训练耗时长且难以收敛;很多学者都在研究轻便易于训练的attention机制。本文提出了一种极化注意力机制,其优势在
分类: 其他 发布时间: 11-26 09:56 阅读次数: 0