Я новичок в Deep Learning и Keras. Я создал модель, которая обучается на наборе данных ASL (американский язык жестов) с почти 80 000 тренировочных изображений и 1500 тестовых изображений. Я также добавил еще несколько классов ie. Дорожные знаки от 0 до 9. Итак, всего у меня 39 классов (0-9 и АЗ). Моя задача - обучить этот набор данных и использовать его для прогнозирования. Моим входом для предсказания будет кадр с веб-камеры, где я буду отображать знак руки.
Модель My Keras
classifier = Sequential()
classifier.add(Conv2D(32, (3, 3), input_shape = (100, 100, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Conv2D(32, (3, 3), activation = 'relu'))
classifier.add(MaxPooling2D(pool_size = (2, 2)))
classifier.add(Flatten())
classifier.add(Dense(units = 128, activation = 'relu'))
classifier.add(Dense(units = 39, activation = 'softmax'))
classifier.compile(optimizer = 'adam', loss = 'binary_crossentropy', metrics = ['accuracy'])
from keras.preprocessing.image import ImageDataGenerator
train_datagen = ImageDataGenerator(rescale = 1./255,
shear_range = 0.2,
zoom_range = 0.2,
horizontal_flip = True)
test_datagen = ImageDataGenerator(rescale = 1./255)
training_set = train_datagen.flow_from_directory('train',
target_size = (100,100),
batch_size = 128,
class_mode = 'categorical')
test_set = test_datagen.flow_from_directory('test',
target_size = (100, 100),
batch_size = 128,
class_mode = 'categorical')
classifier.fit_generator(training_set,
steps_per_epoch = 88534,
epochs = 10,
validation_data = test_set,
validation_steps = 1418)
Изображения набора данных ASL имеют размер 200x200, а наборы данных с числовыми знаками имеют размер 64x64. После запуска для 5 эпок с точностью проверки 96% я все еще не могу получить хорошие прогнозы, когда я запускаю его на видео.
python программа для видеокадров
classifier = load_model('asl_original.h5')
classifier.compile(loss='binary_crossentropy',optimizer='rmsprop',metrics=['accuracy'])
cam = cv2.VideoCapture(0)
while(1):
try:
ret, frame = cam.read()
frame = cv2.flip(frame,1)
roi = frame[100:400,200:500]
cv2.rectangle(frame,(200,100),(500,400),(0,255,0),2)
cv2.imshow('frame',frame)
cv2.imshow('roi',roi)
img = cv2.resize(roi,(100,100))
img = np.reshape(img,[1,100,100,3])
classes = classifier.predict_classes(img)
print(classes)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
except Exception:
traceback.print_exc()
pass
Я не понимаю, почему я не могу получить точные прогнозы даже после обучения на таком большом наборе данных. Какие изменения мне нужно внести, чтобы получить точные прогнозы для всех моих 39 классов.
Ссылка для наборов данных. ASL DATASET и Знак рукой для чисел