Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PaddleDetection/slim/sensitive 如何分析敏感度信息 #900

Closed
llzhaoshuo opened this issue Jun 8, 2020 · 4 comments
Closed

PaddleDetection/slim/sensitive 如何分析敏感度信息 #900

llzhaoshuo opened this issue Jun 8, 2020 · 4 comments
Assignees

Comments

@llzhaoshuo
Copy link

对yolov3_r50vd_dcn_db_iouaware_obj365_pretrained_coco.yml进行剪枝,在执行到分析敏感度时遇到了一个问题,如何将敏感度信息可视化以及如何确定剪枝率,官网中并没有详细说明。
涉及到剪枝的卷积层如下:
--pruned_params "yolo_block.0.0.0.conv.weights,yolo_block.0.0.1.conv.weights,yolo_block.0.1.0.conv.weights,yolo_block.0.1.1.conv.weights,yolo_block.0.2.conv.weights,yolo_block.0.tip.conv.weights,yolo_block.1.0.0.conv.weights,yolo_block.1.0.1.conv.weights,yolo_block.1.1.0.conv.weights,yolo_block.1.1.1.conv.weights,yolo_block.1.2.conv.weights,yolo_block.1.tip.conv.weights,yolo_block.2.0.0.conv.weights,yolo_block.2.0.1.conv.weights,yolo_block.2.1.0.conv.weights,yolo_block.2.1.1.conv.weights,yolo_block.2.2.conv.weights,yolo_block.2.tip.conv.weights"

官网给的信息如下:
分析敏感度信息
1.可以通过paddleslim.prune.load_sensitivities从文件中加载敏感度信息,并使用Python数据分析工具画图分析。下图展示了MobileNetv1-YOLOv3-VOC模型在VOC数据上的敏感度信息:
通过画图分析,可以确定一组合适的剪裁率
2.通过paddleslim.prune.get_ratios_by_loss获得合适的剪裁率。
官方给定demo:
paddleslim.prune.load_sensitivities
import pickle
from paddleslim.prune import load_sensitivities
sen = {"weight_0":
{0.1: 0.22,
0.2: 0.33
},
"weight_1":
{0.1: 0.21,
0.2: 0.4
}
}
sensitivities_file = "sensitive_api_demo.data"
with open(sensitivities_file, 'w') as f:
pickle.dump(sen, f)
sensitivities = load_sensitivities(sensitivities_file)
print(sensitivities)

我的问题是:
sen = {"weight_0":
{0.1: 0.22,
0.2: 0.33
},
"weight_1":
{0.1: 0.21,
0.2: 0.4
}
}
上面的weight_0和weight_1是什么含义,如何根据卷积层修改

@wanghaoshuang
Copy link
Collaborator

sen = {"weight_0":
{0.1: 0.22,
0.2: 0.33
},
"weight_1":
{0.1: 0.21,
0.2: 0.4
}
}
上面的weight_0和weight_1是什么含义,如何根据卷积层修改

sen是存储卷积层敏感度的数据结构,上述例子中的weight_0weight_1是两个卷积层的参数名称,这里只是一个示例,实际情况下应该是类似yolo_block.0.0.0.conv.weights这种名称。

@wanghaoshuang
Copy link
Collaborator

@llzhaoshuo
Copy link
Author

sen = {"weight_0":
{0.1: 0.22,
0.2: 0.33
},
"weight_1":
{0.1: 0.21,
0.2: 0.4
}
}
上面的weight_0和weight_1是什么含义,如何根据卷积层修改

sen是存储卷积层敏感度的数据结构,上述例子中的weight_0weight_1是两个卷积层的参数名称,这里只是一个示例,实际情况下应该是类似yolo_block.0.0.0.conv.weights这种名称。

0.1: 0.22,
0.2: 0.33
这些数字是什么含义

@wanghaoshuang
Copy link
Collaborator

这些数字是什么含义

可以参考这个API文档,在sensitivity接口的返回值说明中介绍了该数据结构。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants