我正在尝试使用caffe从VGG网络中提取卷积层的特征而不是FC层 . 在这种情况下,理论输入图像大小可能是任意的 . 但它接缝表示VGG网络在裁剪成224x224像素大小的图像上进行了训练 . 所以我在deploy.prototext中定义了一个输入数据层:
layers{
name: "data"
type: MEMORY_DATA
top: "data"
top: "label"
transform_param{
mirror: false
crop_size:224
mean_value:129.1863
mean_value:104.7624
mean_value:93.5940
}
memory_data_param{
batch_size:1
channels:3
width:224
height:224
}
}
我试图修改width = 500 \ height = 500 \ crop_size = 500但是失败了 . Caffe抛出一些错误:“不能从图层'fc6'复制param 0权重;形状不匹配 . 源param形状是1 1 4096 25088(102760448);目标参数形状是4096 131072(536870912) . 要从头开始学习此图层的参数而不是从保存的网络中复制,请重命名该图层 . “
我怎么可能在没有裁剪的情况下运行对输入层来说太大的图像?
2 回答
您应首先将图像调整为224x224,因为VGG已经过该分辨率的训练 . 提取更高分辨率的特征是没有意义的 . 要调整大小和裁剪,可以使用我专门的ImageData图层:https://github.com/yihui-he/caffe-pro
要么为图像使用完全相同的尺寸,要么重新训练密集图层以获得新的图像尺寸 .
您可以重用卷积内核,但不能将密集层重用于不同的图像大小 .