减少 Caffe 网络模型

Reduce a Caffe network model

我想用Caffe提取图像特征。但是,处理图像的时间太长,所以我正在寻找优化速度的方法。

我注意到的一件事是,我正在使用的网络定义在我从中读取结果的那一层之上有四个额外的层(并且没有反馈信号,因此删除它们应该是安全的) .

我试图从定义文件中删除它们,但完全没有效果。我想我可能还需要删除文件中包含预训练权重的相应部分。但是,那是一个二进制文件(protobuffer),因此编辑它并不那么容易。

您认为移除四层可能会对净性能产生深远影响吗?

如果是这样,那么我如何熟悉文件内容以便进行编辑以及我如何知道要删除哪些部分?

首先,我认为删除二进制权重不会有任何影响。
其次,您可以使用 python 界面轻松完成:请参阅 this tutorial.
最后但同样重要的是,您是否尝试过 运行 caffe time 来衡量您的网络的性能?这可能会帮助您确定计算的瓶颈。

PS, 您可能会发现 也很相关。

Caffemodel 将数据存储为键值对。 Caffe 仅复制与 caffemodel 名称完全相同的那些层(在 train.prototxt 中)的权重。因此,我认为删除二进制权重不会起作用。如果要更改网络结构,只需修改train.prototxt和deploy.txt。

如果您坚持要从二进制文件中删除权重,请遵循此 caffe example

并确保您删除了正确的部分,visualizing tool 应该有所帮助。

我会重新训练较小的输入大小、改变步幅等。但是如果你想减小文件大小,我建议量化权重 https://github.com/yuanyuanli85/CaffeModelCompression 然后使用 lzma 压缩之类的东西(xz for Unix)。我们这样做是为了可以部署到移动设备。 8 位权重压缩得很好。