-
写在前面 主要是需要在jetson nano做模型转换,来记录下踩的坑 目前有两条路径,一条是我们现有的转换路径,也就是pytorch->onnx(->caffe)->trt的路径 在这条路径上踩了比较多的坑,最终暂时放弃,最直接的原因是cudnn8.0升级接口发生改动,编译caffe遇到较多问题 这里其实仍然采用了两条平行的路径,一条是直接在nano上构建环境,另外一种是基于docker(包括构建交叉编译环境用于加快编译速度) 另一条路径是基于torch2trt,是一条直接pytorch->trt的路径 这里主要记录在第一条路径上踩过的坑 环境准备 先过一遍开发者手册 主要是介绍了下nano的硬件 …
Read More -
继续将k8s用于模型转换和部署的自动化流程...然后发现之前安装k8s的文档不work了.. 时间是2020年5月7日,当前最新的k8s版本是 v1.18.2 报错如下: 1 2 3<2kzzqw6rsjid0 --discovery-token-ca-cert-hash sha256:c6c72bdc96c0ff4d59559ff915eee61ba7ac5e8b93c0b2f9e11e813412387ec2 --v=5 4W0507 15:45:12.608784 4768 join.go:346] [preflight] WARNING: JoinControlPane.controlPlane settings …
Read More -
背景 似乎没什么背景,继续看caffe代码 argmax的作用是返回一个blob某个维度或者batch_size之后的维度的top_k的index(或者pair(index,value)) proto 还是先看proto 12message ArgMaxParameter {3 // If true produce pairs (argmax, maxval) 4 optional bool out_max_val = 1 [default = false];5 optional uint32 top_k = 2 [default = 1];6 // The axis along which to maximise -- may …
Read More -
背景 这个layer和reduce layer有一些相似,就干脆一起看了. 作用是输入至少两个blob,然后对每个blob中的元素所一些运算,最后得到一个blob. caffe 支持的运算有"PROD","SUM","MAX"三种 顺便提一句,TensorRT支持的要多一些: 1 2enum class ElementWiseOperation : int 3{ 4 kSUM = 0, //!< Sum of the two elements. 5 kPROD = 1, //!< Product of the two elements. 6 kMAX = 2, …
Read More -
背景 其实没什么背景,继续啃caffe代码而已2333 reduce layer其实就是做reduce操作,把一个任意shape的blob通过某种运算变成一个scalar. caffe目前支持求和(SUM),绝对值的和(ASUM),平方和(SUMSQ),以及对得到的scalar的总数求平均的求和(MEAN). 说句题外话,TensorRT支持的操作是求和,求积,max,min和ave. 还是有一些gap的 proto 先看proto 12message ReductionParameter {3 enum ReductionOp {4 SUM = 1;5 ASUM = 2;6 SUMSQ = 3;7 MEAN = 4;8 }910 …
Read More -
先写个简略版的笔记..看之后的情况要不要读得更精细一点.. 背景 two stage的检测比one stage的检测效果好,原因是啥? 作者认为是正负样本不平衡导致的. two stage的方法在proposal 的时候干掉了大部分负样本,所以效果好. 因为作者提出了一种新的loss,称为Focal Loss 是对交叉熵loss的改进,作用是提高没有正确分类的样本的权重,降低正确分类的样本的权重. 然后设计了个retinaNet 来验证效果. 主要是用了Focal Loss 作为损失函数,以及backbone比起之前的one stage的检测用上了FPN. Focal Loss 一图胜千言 Focal loss是在交叉熵loss的 …
Read More -
背景 虽然不太care 训练的过程,但是由于容易看懂的layer都看得差不多了 所以打算看一下这些loss function. Euclidean Loss (L2 loss) 一般用于“real-valued regression tasks” 。 比如之前的项目上用的人脸年龄模型,就是用了这个Loss 这个loss没什么额外的参数,实现也很简单。 1 2template <typename Dtype> 3void EuclideanLossLayer<Dtype>::Reshape( 4 const vector<Blob<Dtype>*>& bottom, const …
Read More -
背景 ocr组那边有个shuffle net 的网络,里面有个pytorch op叫chunk,转成的onnx对应的op是 split 作用是: Split a tensor into a list of tensors, along the specified 'axis'. Lengths of the parts can be specified using argument 'split'. Otherwise, the tensor is split to equal sized parts. 然后发现这个op模型转换里不支持转到caffe的layer,于是想办法支持了一下. 发现是要转到caffe的slice …
Read More -
前几天装驱动把笔记本搞崩溃了..重新装了kde桌面环境的manjaro 首先根据 Configure NVIDIA (non-free) settings and load them on Startup 直接装驱动。 装之后mhwd -li命令会显示新安装的驱动,带有nvidia字样的。 然而发现inxi -G 命令下,nvidia GPU显示的drivier是 N/A 参考Inxi -G in Terminal: Graphics card N/A? 发现需要手动load driver 执行 sudo modprobe nvidia 后发现inxi -G 命令可以找到驱动了,nvidia-smi也可以正常显示了。 接下来是设置开 …
Read More -
背景 最近在魔改 tensorRT 的caffe parser 之前caffe模型转到trt模型时,有一个修改是需要将reshape layer的param末尾补1,比较繁琐,于是看了下caffe的reshape layer的实现. proto 12message ReshapeParameter {3 // Specify the output dimensions. If some of the dimensions are set to 0, 4 // the corresponding dimension from the bottom layer is used (unchanged). 5 // Exactly one …
Read More