수행기록퀘스트6

LSTM 모델을 이용한 HAR(Human Activity Recongnition) 구현
2022. 10. 9 (일) 03:26 최종수정 2022. 10. 11 (화) 14:48 saeba 조회 672 좋아요 1 스크랩 0 댓글 5

Quest6. 자율 과제 (ID명 : SAEBA)

주제 : LSTM 모델을 이용한 HAR(Human Activity Recongnition) 구현

 

  1. 과제 수행 환경 정보

     1.0 HW 정보

SensorTile.Box,  Jlink debugger.( 아래 사진 참조)

    1. SW 정보

Model 빌드환경 : python 3.6.13, Keras2.2.4,

Mcu compiler : IAR 8.50

Cube.AI : v5.0.0

Fw pkg : ai-sensing1 v4.0.3

 

  1. 과제 주제 선정 이유

지금까지의 퀘스트에서 사용해온 HAR의 모델은 CNN이었는데 다른 모델은 어떻게 동작할까 궁금하여 주제의 방향을 모델 변경을 통한 HAR구현으로 정하였고 목표 모델을 LSTM으로 정하였습니다. 처음에는 평범한 ANN으로 구성해도 되지 않을까도 싶었지만 제가 이번 기회에 LSTM에 대한 내용도 조사도 하면서 공부도 하고 싶어서 주제를 위와 같이 정하게 되었습니다.

잘 모르던 내용을 웹에서 찾아서 구현해 보았으니 참고해 주세요.

 

  1. 학습에 사용한 dataset

UCI 에서 smartphone으로 만든 데이터셋을 이용하여 학습한 모델을 많아서 적용하게 되었습니다.

UCI의 Dataset에 대한 기본 내용은 다음과 같습니다.

 

  1. LSTM 모델

4.1 모델 그래프

4.2 LSTM 모델 keras 소스

          4.3 UCI Dataset의 데이터 구성에 대한 검토

              

          기본 UCI 데이터셋을 보면 위와 같이 9가지의 데이터가 존재합니다.

          Total_acc…데이터와 body_acc…데이터는 모두 가속도 센서 x/y/z에 대한 데이터에서

          파생된 데이터고 bosy_gyro…데이터는 각속도센서 x/y/z의 데이터입니다.

          저는 각속도 센서 데이터는 취득하기 힘든점도 있이서 가속도 센서만으로 모델을 구현하는것

          을 목표로하고 위 데이터에서 body_acc와 total_acc 데이터만 사용하였습니다.

          참고로 total_acc데이터는 raw_acc데이터를 0.3Hz로 저역통과필터(LPF)처리한 데이터고

          body_acc데이터는 고주파통과필터(HPF) 처리한 데이터라고 명시되어 있어서 FW에서 이와 유

         사하게 처리하였습니다. 좀더 정확한 LPF/HPF 필터를 구현할 수도 있지만 굳이 그렇게 하지 않        

         아도 되는 데이타라고 판단되어 일단 간단하게 구현하였으니 참고해 주세요.

         아래 관련 FW코드 사진입니다.

      

        위 코드처럼 했을 때 파형은 다음과 같은 형태입니다.

 LPF처리된 Total_acc 데이터 그래프

 

HPF 처리된 body_acc 데이터 그래프.

 

Keras로 된 python 소스를 통해 학습한 결과

5회 학습했을때 정확도가 높았다 낮았다 하면서 79% 나왔습니다.  

 

생성된 hcihar_lstm.h5를 이용하여 CubeMX에서 코드를 생성합니다

위에서 생성된 ai 소스코드(har_lstm.c/h, har_lstm_data.c/h)를 FW pkg에 적용합니다.

원본 Fw pkg에 적용된 부분을 살짝 변경해서 적용하였습니다.

 

코드 변경: 원본 코드에서 HAR_IGN으로 적용되어 있던 부분들을 모두 HAR_LSTM으로 변경하는 형태로 코드를 대체하면서 변경하였습니다. 일부 변경 코드 형태를 아래와 같이 그림으로 보여드립니다.

 

<변경예1>

<변경예2>

<변경예3>

 

그리고 wisdom 데이터를 사용하지 않으므로 다음처럼 주석처리하였습니다(왼쪽이 변경된 코드임)

 

HAR_run 함수는 입력처리를 변경해야해서 다음과 같이 변경하였습니다

 

  1. 끝맺으며…

기존 CNN모델의 HAR 동작을 LSTM모델의 HAR로 변경하여 구현하고 테스트해 보았습니다. 시간에 따라 변하는 데이터에 대한 추론을 LSTM이 더 잘 하리라 생각했지만 생각과는 달리 정확도가 79%로 기존 CNN의 90%에 미치지 못했으며 Target보드에서의 동작 또한 잘 될때도 있었지만 방향에 따라 잘 안되는 경우도 많았습니다.

Ai 초보자가 무작정 만들어본거라서 좀 무리였던게 아닌가 싶지만 정확도가 높지는 않지만 의도한대로 동작하는 결과가 나와서 다행이라는 생각이 듭니다.

앞으로도 좀 더  다양하고 흥미진진한 내용을 접하면 좋겠다는 생각을 하게 되었고

이런 유익한 이벤트를 진행해 주신 분들께 감사의 말씀을 전하고 싶습니다.

감사합니다. 

 

 

6. 테스트 영상

첨부파일 (소스, 정리문서, ptrhon 코드) 은 업로드 다시 시도해 보았습니다만 업데이트가 되지 않아서

아래 google drive 링크에 올려놓고 제출합니다.

접속하셔서 다운 부탁드립니다.

https://drive.google.com/drive/folders/1WCCz-1KsV6537XP-ab0AZCZC19ca-yat?usp=sharing

 

 

첨부파일
Final_Quest6_lstm_har_saeba.zip 다운로드
칩헤드
2022.10.12 18:41
Saeba님도 Araxis 애용자이셨군요. 저와 동지네요. ㅎㅎ 저두 코드 diff할때, Araxis (유료) for win10 and Meld(무료) for ubuntu 를 젤 자주 사용하거던요. :)
E4DS MAKE
2022.10.11 16:45
최종 자료로 첨부 파일 변경된 점 확인하였습니다. 감사합니다. (구글 드라이브 자료와 동일)
saeba
2022.10.11 14:48
재등록 했습니다
saeba
2022.10.09 22:06
업로드 가 안되서 구글드라이브에 올린후 링크 업데이트하였습니다. 양해 부탁드립니다
saeba
2022.10.09 03:44
첨부파일이 잘못 올라가서 수정해서 올렸는데 이전에 올린 파일만 다운로드 됩니다. 새 파일이 제대로 업로드 안됩니다. 확인 부탁드립니다. From SAEBA

로그인 후
참가 상태를 확인할 수 있습니다.