我们可以在tensorflow中获取任何预训练模型的子集吗?例如,如果我们有一个可以检测545个对象的预训练模型,我们可以制作这个模型的子集,它只能检测20个对象,这样就可以减少加载模型所需的时间以及检测过程。
答案 0 :(得分:0)
您可以做的最好的事情是减少仅与上一个(输出)图层相关的权重。因此,如果您的第二个最后一层的大小为1000,那么它将减少您的参数(1000 * 545 - 1000 * 20)= 525000.
但是,如果您的网络非常深,这将不会被证明是一个很好的加速,因为您仍然需要计算除最后一层之外的所有其他层。
答案 1 :(得分:0)
你可以,但这是一项不可忽视的工作,而且不会大幅提高速度。
实际上,您需要更改的只是类预测图层,您必须将其从n_featuresx545
减少到n_featuresx20
。通常在那个阶段你有n_features=7*7=49
(虽然它实际上取决于你正在使用的方法;对于通常设置的Faster RCNN也是如此),所以你要保存大约26k
个参数和{{ 1}}每个图像的操作(考虑到每个图像300个检测),与通常涉及对象检测模型的数百万个参数和数十亿个操作相比,这可以忽略不计。
在没有重新训练的情况下更改预测层并且在保持训练值不变的情况下,您必须编写一段代码来手动修改网络。