本文是 优化小技巧sigmoid_哔哩哔哩_bilibili的学习笔记!知识点是在深度学习部署中,对sigmoid 求反函数,用来加速推理,原因是 desigmoid_threshold 可以提前算出,只需计算一次即可。
神经网络常使用sigmoid 函数将 卷积后的结果x转换为概率output。比如,YOLO系列和CenterNet等等。
公式:
,一个exp,一个除法,比较耗时,尤其是嵌入式上面。
优化:
得到:
源代码:
if sigmoid(P[4]) > threshold:
do something
新代码:
if P[4] > desigmoid_threshold:
do something
desigmoid_threshold 可提前算出,P[4]就是网络输出的结果。
验证:
def sigmoid(x):
return 1/(1+math.exp(-x))
def desigmoid(y):
return -math.log(1/y-1)
y = sigmoid(1.56)
desigmoid(y) # 1.56
C++ 使用样例:
float* ptr = optr;
for(int i = 0;i < num_box; ++i, ptr += linesize){
// cx, cy, w, h, conf, landmark0.x, landmark0.y, landmak...
float pridict = ptr[4];
if(pridict < depridict_threshold) continue; // 省时间,尤其是嵌入式上面
......
}