Dự đoán của CNN hoạt động từ tập hợp thử nghiệm nhưng không phải hình ảnh riêng

Jan 02 2021

Tôi đang cố gắng thực hiện công cụ phân loại giới tính của CNN và nó hoạt động tốt với hình ảnh từ bộ thử nghiệm nhưng khi tôi nhập iamges từ google, nó luôn phân loại là nam. Tôi đã cố gắng nhận câu trả lời từ đây nhưng nó không giải quyết được.

data = pd.read_csv('/content/age_gender.csv')

## Converting pixels into numpy array
data['pixels']=data['pixels'].apply(lambda x:  np.array(x.split(), dtype="float32"))

classification = ['Male', 'Female']

X = np.array(data['pixels'].tolist())

## Converting pixels from 1D to 3D
X = X.reshape(X.shape[0],48,48,1)
X = X / 255.0

y = data['gender'].values

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.22, random_state=37)

model = Sequential.....   # create the CNN and compile it
history = model.fit.....          # fit the model and evaluate it gives me val_accuracy: 0.8902

Mất kiểm tra: 0.24722696840763092 Độ chính xác kiểm tra: 0.8912960290908813

Khi tôi dự đoán một hình ảnh từ bộ thử nghiệm bằng cách sử dụng mã sau, nó hoạt động tốt.

index = 5009
image = X_test[index]

pred = model.predict(image.reshape(1, 48, 48, 1), batch_size=1)

print(classification[pred.argmax()])

Nhưng khi tôi cố gắng dự đoán hình ảnh từ google, nó luôn quay lại là nam.

file = "/content/female-2.jpeg"
image = cv.imread(file, cv.IMREAD_GRAYSCALE)

image = cv.resize(image, (48, 48))
image = image.reshape(1, 48, 48, 1)
image = image.astype('float32')
image = 255-image
image /= 255

pred = model.predict(image.reshape(1, 48, 48, 1), batch_size=1)
print(classification[pred.argmax()])

Tôi đã thử một loạt các hình ảnh khác nhau là nữ và nó LUÔN LUÔN trở lại là nam. Tôi còn thiếu gì ở đây?

Trả lời

2 yudhiesh Jan 02 2021 at 10:34

Bạn xử lý trước hình ảnh từ Google khác với khi bạn đào tạo mô hình. Việc bình thường hóa các giá trị pixel là nguyên nhân gây ra sự cố.

image = 255-image
image /= 255

Thay vào đó, điều này phải là:

image /= 255.0