我必须使用CNN模型从图像中提取特征。我正在使用一个名为Caffenet的训练模型。
在Caffe上,通过CNN模型运行图像后很容易提取功能。例如,如果我想要通过" conv5"提取的功能。图层,我只需调用方法:
features = net.blobs['conv5'].data[0, : , : , :]
然而,棘手的部分是我需要使用第三方转换工具来转换模型,以便它可以在我的移动设备上运行。转换模型后,我无法访问模型内的图层输出。我只得到最终输出,在这种情况下是分类,它们不是我需要的。
让模型直接输出" conv5"层,这是最后的卷积层,我进入deploy.prototxt
文件并删除" conv5"之后的所有层。层,所以" conv5"有效地成为最终的输出层。但是,在这样做之后,我得到的特征值与我在更改原型文件之前获得的特征值完全不同。
我怀疑即使我通过删除deploy.prototxt
中的图层来更改架构,我也无法更改caffenet.caffemodel
文件中的权重。我不知道为什么这会是一个问题,因为" conv5"之后的图层权重不会被使用。我不确定为什么会改变" conv5"的输出。
如何更改训练模型以直接从最终卷积层输出要素?
答案 0 :(得分:1)
一个原因可能是" conv5"之后的某些层。图层将更新或更改conv5的顶部blob。这些层包括relu层或batch_norm层,因为这些层通常使用就地操作。因此,您最好检查部署原型文件,并在conv5保持不变后保持batch_norm和relu层。