输出VGG16模型的特征映射维数

时间:2017-07-12 15:07:12

标签: computer-vision conv-neural-network feature-extraction

我在Redis中看到了特征提取的示例,并使用以下代码从输入图像中提取特征

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

   <android.support.v4.view.ViewPager
       android:id="@+id/view_pager"
       android:layout_width="match_parent"
       android:layout_height="match_parent"/>

    <LinearLayout
        android:id="@+id/layoutDots"
        android:layout_width="match_parent"
        android:layout_height="15dp"
        android:layout_alignParentBottom="true"
        android:layout_marginBottom="20dp"
        android:gravity="center"
        android:orientation="horizontal"></LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:aplha=".5"
        android:layout_above="@+id/layoutDots"
        android:background="@android:color/white"/>

    <Button
    android:id="@+id/btn_next"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentLeft="true"
    android:background="@null"
    android:text="NEXT"
    android:textColor="@android:color/white"/>


    <Button
        android:id="@+id/btn_skip"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:background="@null"
        android:text="SKIP"
        android:textColor="@android:color/white"/>
</RelativeLayout>

然后当我输出input_shape = (224, 224, 3) model = VGG16(weights = 'imagenet', input_shape = (input_shape[0], input_shape[1], input_shape[2]), pooling = 'max', include_top = False) img = image.load_img(img_path, target_size=(input_shape[0], input_shape[1])) img = image.img_to_array(img) img = np.expand_dims(img, axis=0) img = preprocess_input(img) feature = model.predict(img) 变量的形状时,我发现它是(1,512)。为什么这个维度? feature显示maxpooling后的最后一个转换层输出的形状为(7,7,512),这是我期望的print model.summary()应该是的维度。

1 个答案:

答案 0 :(得分:0)

感谢Yong Yuan帮助我解决这个问题。由于他在回答问题时遇到了一些问题所以我只是把答案放在这里以防其他人有同样的问题。

基本上是因为在这个模型中指定了一个全局最大池化层(我们可以在行model = VGG16(....., pooling = 'max', ....)中看到它从7 * 7单元格中选择最大的单元格。在keras中也可以说{{3} }:

 pooling: Optional pooling mode for feature extraction when include_top is False.

model.summary()给出的输出中,我们可以看到在第五个卷积块的最大合并后,实际上有一个global_max_pooling2d_1层,因此最终维度变为512.