我必须使用CNN模型从图像中提取特征。我用的是一个受过训练的模特叫Caffenet。
在Caffe上,在通过CNN模型运行图像后,很容易提取特征。例如,如果我想要从"conv5“层提取特性,我只需调用该方法:
features = net.blobs['conv5'].data[0, : , : , :]然而,棘手的部分是,我需要使用第三方转换工具,以转换模型,以便它可以运行在我的移动设备。在转换模型之后,我无法访问模型内各层的输出。我只得到最后的输出,在本例中是分类,它们不是我所需要的。
为了直接从"conv5“层(最终的卷积层)获得模型的输出特性,我在deploy.prototxt文件中删除了"conv5”层之后的所有层,因此"conv5“有效地成为了最终的输出层。但是,这样做之后,我得到的特性值与更改prototxt文件之前获得的特性值完全不同。
我怀疑,即使我通过删除deploy.prototxt中的层来改变体系结构,我也不能更改caffenet.caffemodel文件中的权重。我不知道为什么这会是一个问题,因为在"conv5“之后的层的权重将不会被使用。我不知道为什么这会改变"conv5“的输出。
我怎样才能改变一个经过训练的模型,直接从最终的卷积层输出特征?
发布于 2018-03-23 01:47:27
原因之一可能是" conv5“层之后的某些层将更新或更改conv5的顶部块。这些层包括relu层或batch_norm层,因为这些层通常使用就地操作。因此,您最好检查deploy,并在conv5之后保持conv5和relu层不变。
https://stackoverflow.com/questions/49377891
复制相似问题