↓ 跳过正文
  1. Posts/

faster rcnn 模型 tensorrt4与tensorrt5 结果不一致 踩坑记录

·699 字·2 分钟

最近有同事report给我们,用同一个模型转换工具,转同一个faster rcnn 模型, 同样的sdk代码,在有些显卡上结果正常,但是再比较新的显卡上(比如Titan V)上 结果完全不正确.

听说之后我的内心其实是 **喵喵喵喵喵?**的

先在模型转换工具中infer了一下,发现…结果竟然真的不一样!

于是又开始了debug faster rcnn 的旅程(奇怪..我为什么要说又)

一份典型的faster rcnn 的

prototxt

按照经验,我们先对照了ROIS,来判断RPN 是否存在问题

惊讶地发现,竟然是没有问题的…

那看一下模型的输出 cls_score 和 bbox_pred好了 发现cls_score 完全对不上,bbox_pred 倒是没问题… 这和之前遇到的情况不太一样啊… 从proposal layer 到 最后… 全都是些很常见的layer… 哪里会有问题呢…

最终发现有问题的layer 是softmax!

cls_score 的维度应该为 N*K*C*H*W

softmax应该按照C这一维度来做,因此softmax_param中axis应该为2.

查阅"tensorrt support matrix" ,发现 tensorrt5中,softmax会按照用户指定的维度进行。

TensorRT 5 · Softmax Axis

而对于tensorrt4.0, softmax layer 与设定的softmax_param无关,只会在channel 的维度上来做softmax.

TensorRT 4 · Softmax Axis

所以,比较好的解决办法是,干脆不写softmax_param这个参数 对于trt4,会直接按照channel 维度来做 对于trt5,会在第N-3的axis上进行。对于SSD的 N*C*H*W或者 faster rcnn 的N*K*C*H*W, N-3都是channel所在的维度。

问题解决!

相关文章

caffe2 添加自定义operater

·1153 字·3 分钟
记录一下,一个之前没有接触过 caffe/caffe2 的人为了添加自定义 op 到 caffe2 需要做的工作。 首先参考 caffe2 tutorial,随便跑个 op 来试试,不妨以比较简单的 Accumulate_op 为例子。 这个 op 的作用就是计算 Y=X+gamma*Y,其中 X 为输入,Y 为输出,gamma 是参数。

非极大值抑制(Non-Maximum Suppression,NMS)

·830 字·2 分钟
NMS是为了在诸多CV任务如边缘检测,目标检测等,找到局部最大值 其主要思想是先设定一个阈值,然后计算检测框的IOU(所谓IOU,也就是intersection-over-union,指的是相交面积除以相并面积,是来衡量overlap程度的指数)。如果IOU大于阈值,说明overlap过大,我们要通过某种算法来将其剔除。

reid 相关任务记录

·541 字·2 分钟
被师兄(同事?)普及了一番实验规范orz… 我还是太年轻了 所谓的一个fc的版本是右边的.一个放着不动,另一个在sequence_len(10)的维度上做ave,然后再expand成原来的维度.如下图.