繁体   English   中英

lfw 数据集上的 vgg16 不获取 RGB

[英]vgg16 on lfw dataset Dont get RGB

我想在 LFW 数据集上使用Keras库中的VGGNET-16进行人脸识别。 但是生成的是灰度而不是 RGB,我无法更改它:

加载数据

分裂那个

      #load dataset
 lfw_people = fetch_lfw_people(min_faces_per_person=53, resize=0.4)


 

# introspect the images arrays to find the shapes (for plotting)
n_samples, h, w = lfw_people.images.shape

# for machine learning we use the 2 data directly (as relative pixel
# positions info is ignored by this model)
# access the images

X = lfw_people.data
n_features = X.shape[1]


# the label to predict is the id of the person
# access the class labels
y = lfw_people.target
target_names = lfw_people.target_names
n_classes = target_names.shape[0]



print("Total dataset size:")
print("number of samples: " , n_samples)
print("number of classes: " , n_classes)
print("image dimensions: ", h, w)
print("number of features per image: ", h*w)


lfw_people.target_names

** 数组(['Ariel Sharon','Colin Powell','Donald Rumsfeld','George W Bush','Gerhard Schroeder','Hugo Chavez','Jean Chretien','John Ashcroft','Junichiro Koizumi' , '托尼·布莱尔'], dtype='<U17') **

  labelNames=["Ariel Sharon", "Colin Powell", "Donald Rumsfeld", "George W Bush",
           "Gerhard Schroeder", "Hugo Chavez", "Jean Chretien",
       Ahcroft", "Junichiro Koizumi", "Tony Blair"]
    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.4)
print(X_train.shape)

**

(873, 1850)

**

   y_train= to_categorical(y_train, num_classes= 10)
    y_test = to_categorical(y_test,num_classes= 10)
    chanDim=1

改变大小

    img=[]
    for i in range(len(X_train)):
      z=cv2.resize(X_train[i],(224,224)).astype(np.float32)
      z = np.expand_dims(z, axis=0)
      img.append(z)
Xnew_train=np.array(img)
img=[]
for i in range(len(X_test)):
  r=cv2.resize(X_train[i],(224,224)).astype(np.float32)
  r = np.expand_dims(r, axis=0)
  img.append(r)
 Xnew_test=np.array(img)
     

在这里我得到 1 的 3。bc LFW 是 RGB Xnew_train.shape

**

(873, 1, 224, 224)

**

    model = Sequential()
model.add(ZeroPadding2D((1,1),input_shape=(3,224,224)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(64, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2), dim_ordering="th" , strides=(2,2)))

model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(128, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2), dim_ordering="th" , strides=(2,2)))

model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2), dim_ordering="th" , strides=(2,2)))

model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(BatchNormalization(axis=chanDim))
model.add(MaxPooling2D(pool_size=(2, 2), dim_ordering="th" , strides=(2,2)))

model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(ZeroPadding2D((1,1)))
model.add(Convolution2D(256, 3, 3, activation='relu'))
model.add(MaxPooling2D(pool_size=(2, 2), dim_ordering="th" , strides=(2,2)))

model.add(Flatten())
model.add(Dense(512, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
model.add(Dropout(0.5))
model.add(Dense(512, activation='relu', kernel_regularizer=regularizers.l2(0.01)))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))


 model.summary()
# Let's train the model using RMSprop
model.compile(loss='categorical_crossentropy',
         



 optimizer="Adam",
              metrics=['accuracy'])
#model.summary()

在这里我得到错误,如果在 input_shape=(3,224,224) 中使用 1 insted of 3 测试精度非常低

    #NUM_EPOCHS = 25
BS = 32
batch_size= 128
history=model.fit(Xnew_train,y_train,batch_size=batch_size,epochs=200,validation_split=0.2,verbose=1)

**错误是:

**

ValueError: Error when checking input: expected zero_padding2d_1_input to have shape (3, 224, 224) but got array with shape (1, 224, 224)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM