-
背景 2022年惊讶的发现,当时竟然没有写关于softmax的笔记,因此来补充一下。 proto 还是先看proto 12// Message that stores parameters used by SoftmaxLayer, SoftmaxWithLossLayer 3message SoftmaxParameter {4 enum Engine {5 DEFAULT = 0;6 CAFFE = 1;7 CUDNN = 2;8 }9 optional Engine engine = 1 [default = DEFAULT];1011 // The axis along which to perform the …
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 -
背景 虽然不太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 -
背景 最近在魔改 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 -
caffe中卷积运算的实现 暴力实现的卷积大概是这样子的 1 2for w in 1..W 3 for h in 1..H 4 for x in 1..K 5 for y in 1..K 6 for m in 1..M 7 for d in 1..D 8 output(w, h, m) += input(w+x, h+y, d) * filter(m, x, y, d) 9 end 10 end 11 end 12 end 13 end 14end 15 这种方式的效率显然很低,不意外地,caffe中并不是这样实现的. 注释里面说: Caffe convolves by reduction to matrix …
Read More -
在看过caffe代码的三个核心部分,blob,layer,net之后,陷入了不知道以什么顺序继续看的困境。 blob,layer,net只是三个最基本的概念,关键还是在于各个layer. 但是layer这么多,要怎么看呢? 想了一下决定把相同作用的layer放在一起分析。 今天打算先分析一下激活函数。 sigmoid 表达式为 f(t) = 1/(1+e^-t) caffe GPU实现,非常直接 1 2template <typename Dtype> 3__global__ void SigmoidForward(const int n, const Dtype* in, Dtype* out) { 4 …
Read More