将Caffe CNN转换为Feature Extractor

时间:2018-03-20 06:50:15

标签: python deep-learning caffe

我必须使用CNN模型从图像中提取特征。我正在使用一个名为Caffenet的训练模型。

在Caffe上,通过CNN模型运行图像后很容易提取功能。例如,如果我想要通过" conv5"提取的功能。图层,我只需调用方法:

features = net.blobs['conv5'].data[0, : , : , :]

然而,棘手的部分是我需要使用第三方转换工具来转换模型,以便它可以在我的移动设备上运行。转换模型后,我无法访问模型内​​的图层输出。我只得到最终输出,在这种情况下是分类,它们不是我需要的。

让模型直接输出" conv5"层,这是最后的卷积层,我进入deploy.prototxt文件并删除" conv5"之后的所有层。层,所以" conv5"有效地成为最终的输出层。但是,在这样做之后,我得到的特征值与我在更改原型文件之前获得的特征值完全不同。

我怀疑即使我通过删除deploy.prototxt中的图层来更改架构,我也无法更改caffenet.caffemodel文件中的权重。我不知道为什么这会是一个问题,因为" conv5"之后的图层权重不会被使用。我不确定为什么会改变" conv5"的输出。

如何更改训练模型以直接从最终卷积层输出要素?

1 个答案:

答案 0 :(得分:1)

一个原因可能是" conv5"之后的某些层。图层将更新或更改conv5的顶部blob。这些层包括relu层或batch_norm层,因为这些层通常使用就地操作。因此,您最好检查部署原型文件,并在conv5保持不变后保持batch_norm和relu层。