새소식

💫 AI (인공지능)/LSTM

[수어쉬워] LSTM 학습

  • -

해당 포스팅은 수어 모션 인식 모델을 위한 데이터 수집 포스팅입니다.

[수어쉬워] 수어 교육 및 번역 플랫폼

 

30초 동안 랜드마크된 손동작 모션 데이터 들을 LSTM 모델로 학습하여 줍니다.


🌳 1. 데이터 준비

이전 포스팅에서 올린 seq 데이터를 준비해줍니다.

원래 1개씩 있는게 정상입니다

 

🌳 2. 환경설정

- os

import numpy as np
import os

os.environ['CUDA_VISIBLE_DEVICES'] = '1'
os.environ['TF_FORCE_GPU_ALLOW_GROWTH'] = 'true'

모델 학습을 위하여, GPU 1번을 , 사용할 것입니다.

 

- 데이터

actions = [
    '안녕하세요',
    '여러분',
    '발표',
    '시작',
    '오늘',
    '하루',
    '어떻게',
    '보내다'
]

data = np.concatenate([
    np.load('../dataset/seq_안녕하세요_1658110324.npy'),
    np.load('../dataset/seq_여러분_1658110324.npy'),
    np.load('../dataset/seq_발표_1658110324.npy'),
    np.load('../dataset/seq_시작_1658110324.npy'),
    np.load('../dataset/seq_오늘_1658130330.npy'),
    np.load('../dataset/seq_하루_1658130330.npy'),
    np.load('../dataset/seq_어때_의문문_1658130330.npy'),
    np.load('../dataset/seq_보내다_1658130330.npy')
], axis=0)

data.shape

액션명 및 data를 하나로 모아줍니다.

 

 

- 데이터 분리

x_data = data[:, :, :-1]
labels = data[:, 0, -1]

from tensorflow.keras.utils import to_categorical

y_data = to_categorical(labels, num_classes=len(actions))
y_data.shape

x_data와 y_data , labels 로 분류한 모습입니다.

 

from sklearn.model_selection import train_test_split

x_data = x_data.astype(np.float32)
y_data = y_data.astype(np.float32)

x_train, x_val, y_train, y_val = train_test_split(x_data, y_data, test_size=0.1, random_state=2021)

print(x_train.shape, y_train.shape)
print(x_val.shape, y_val.shape)

sklearn을 이용하여, 학습과 테스트 데이터셋으로 나눠줍니다

 

 

- 모델

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import LSTM, Dense

model = Sequential([
    LSTM(64, activation='relu', input_shape=x_train.shape[1:3]),
    Dense(32, activation='relu'),
    Dense(len(actions), activation='softmax')
])

model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
model.summary()

모델로는 LSTM, relu, softmax를 사용합니다. 최적화 방식은 adam을 사용합니다.

 

- 학습

from tensorflow.keras.callbacks import ModelCheckpoint, ReduceLROnPlateau

history = model.fit(
    x_train,
    y_train,
    validation_data=(x_val, y_val),
    epochs=200,
    callbacks=[
        ModelCheckpoint('models/model.h5', monitor='val_acc', verbose=1, save_best_only=True, mode='auto'),
        ReduceLROnPlateau(monitor='val_acc', factor=0.5, patience=50, verbose=1, mode='auto')
    ]
)

학습이 시작됩니다. 가장 최적화된 모델을 model.h5 파일명으로 저장해줍니다.


- 시각화

제대로 학습이 되면 좋지만 epoch를 할 수록 떨어지는 모습입니다.

 

- 최종 모델 데이터

앞에서 저장한 모션 데이터를 가지고 모션인식모델을 만들었습니다.


 

해당 포스팅은 유튜버 빵형의 개발도상국 채널을 보고 적용하고 쓴 글입니다.

https://www.youtube.com/watch?v=eHxDWhtbRCk&t=287s 

 

'💫 AI (인공지능) > LSTM' 카테고리의 다른 글

[수어쉬워] 수어 모션 데이터 수집  (0) 2022.07.27
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.