콘테스트 프로젝트 진행 상황
각 Quest를 단계적으로 완성하는 프로젝트입니다.
Quest 1: Quest1
2022.08.01
- FP-AI-SENSING1 function pack에서 제공하는 예제용 Neural Network Model중에서 한 개를 선택하여 STM32Cube.AI 툴의 Analyze 기능을 통해 출력된 화면을 Capture하여 제출합니다.

- FP-AI-SENSING1 function pack에서 제공하는 예제용 Neural Network Model 중에서 한 개를 선택하여 STM32Cube.AI 툴의 Show graph 기능을 통해 출력된 화면을 Capture하여 제출합니다.

- Analyze의 결과인 network_analyze_report.txt를 제출합니다.
Quest 2: Quest2 Neural Network Model 생성 개발 환경 구축하기
2022.08.08
Quest2 Neural Network Model생성 개발 환경을 구축하기
1. Accuracy 그래프를 Capture하여 제출합니다.
2. odel Loss Function 그래프를 Capture하여 제출합니다.

3. Confusion matrix 그래프를 Capture하여 제출합니다.

4. Analyze 결과 화면에서 표기된 Creating txt report file 경로에서 network_analyze_report.txt 파일을 제출합니다.
- 결과 File을 제출합니다.
Quest 3: QUEST3 수행 과정 및 결과 Update
2022.08.30
Quest3 Board에 Binary File Write하기
하기의 순서대로 하면 문제가 없이 잘 되는 것을 확인 하였습니다.
1. STM32CubeIDE에서 FP-AI-SENSING1프로젝트를 Import합니다.
주의 : Project를 Import할 때 workspace를 하기와 같이 설정하시기 바랍니다.
en.fp-ai-sensing1\STM32CubeFunctionPack_SENSING1_V4.0.3\Projects\B-L475E-IOT01A\Applications\SENSING1

2. B-L475E-IOT01A1 보드에 연결된 BLE 모듈인 BlueNRG의 Device Name을 Code에서 최대 7개의 글자 내에서 설정합니다

3. 수정이 완료되었으면 Build를 합니다.
Compile 결과.

4. 1번에서 workspace를 제대로 설정하였다면 아래 경로에 Compile이 완료된 SENSING1.BIN이 생성되었을 것입니다. 만약 SENSING1.bin이 없다면 하기의 경로에 생성된 SENSING1.bin을 Copy후에 CleanSENSING1.bat 파일을 실행합니다.
Batch file경로 :
en.fp-ai-sensing1\STM32CubeFunctionPack_SENSING1_V4.0.3\Projects\B-L475E-IOT01A\Applications\SENSING1\STM32CubeIDE
Batch File을 실행시키면 다음과 같은 과정을 수행하게 됩니다.
L4 Bootloader Write --> SENSING1.Bin Write --> Write된 Firmware Read --> Hw reset
==> 실행 전에는 SENSING_BL.bin File이 없었으나 CleanSENSING1.bat 파일을 실행한 후에는 하기와 같이 SENSING_BL.bin file이 생성됨을 볼 수 있습니다.

5. 스마트폰의 Mobile App Store에서 STBLESensor Application을 다운로드 받고 실행시킵니다

6. IOT01A가 실행되고 있는 상태에서 Connection을 Click하면 다음과 같이 변경된 Node Name이 적용된 Device가 보입니다.

==> 인식이 잘 되지 않을 경우에는 Device의 Power를 Off --> On시키면 잘 인식 되었던것 같습니다.
7. 인식된 사진을 Capture하였습니다.

7. STBLESensor App에서 Activity Recognition을 클릭합니다. 아래와 같이 B-L475-IOT01A1 보드를 손으로 흔들어 보면서 Activity Recognition의 결과가 달라지는 과정을 담은 동영상을 촬영하여 제출합니다.
Quest 4: B-L475E-IOT01A 보드 가속도 센서 활용하여 AI 모델을 위한 Dataset 구성하기
2022.09.14
B-L475E-IOT01A 보드 가속도 센서 활용하여 AI 모델을 위한 Dataset 구성하기
계단 오르내리기를 13층에서 1층까지 내려갔다가 동네반바퀴 걷고, 반바퀴는 조깅 그리고 다시 13층까지 올라오니 Data set이 만들어 졌네요.
퇴근하고 나서 달밤에 체조를 했습니다.
모두들 Data Set을 만드는데 수고하셨습니다.
Quest 5: 학습된 Model을 STM32Cube.AI를 사용하여 프로젝트에 적용하기
2022.09.21
Quest5제출
Quest5를 수행하면서 X-CubeAI, Python, Keras등 Package의 조합때문에 시간이 좀 오래 걸렸습니다.
먼저 Quest4에서 취득한 Log Data를 통하여 학습한 결과를 보면 하기와 같습니다.

학습 결과를 놓고 보면 계단 오르 내리기와 Walking의 구분이 어렵다는 것을 보여주는 것같습니다.
소프트웨어 버젼은 CondaPython 3.6 + Keras 2.2.4 + STM32 Cube AI 5.0을 적용하였습니다.
1. 먼저 Quest2에서의 개발환경을 Python3.6 + Keras2.2.4를 적용하여 개발환경을 만든 후
Quest4에서 작성한 Log Data를 Log_IRON에 copy해 넣고 Ternimal 창에 python RunMe.py --dataDir=Log_IRON
를 실행시키면 ./result/ folder에 Model( har_IGN.h5 )이 만들어 집니다.
2. Quest3에서 수행하였던 것과 같이 CUBE-MX에서 새롭게 만들어진 Model을 Import하고 Code를 Generation하면
har_ign.c, har_ign.h, har_ign_data.c, har_ign_data.h의 Souce code가 generation됩니다.
3. CUBE_AI Original Souce Code 대신 Step2에서 Generation된 Code를 사용하여 Compile을 진행하고 Firmware Writing한 후
Board를 가지고 걷거나 좌우로 흔들어 Activity가 변하는 것을 확인하였습니다.
동영상은 유첨으로 추가하였으니 참고하여 주시기 바랍니다.
https://www.youtube.com/watch?v=p-niYcYAfxk
Quest 6: B-L475E-IOT01A 보드와 STM32Cube.AI를 적용한 좌충우돌 Quest 6 PROJECT
2022.10.02
좌충우돌 Quest_AI Quest6
- 개발하신 어플리케이션이B-L475E-IOT01A 보드에서 구동하는 동영상을 업로드 해주세요.
- 상용 머신러닝 툴에서 사용한 Source Code를 업로드 해주세요.
- B-L475E-IOT01A에 적용된 Application Source Code와 해당 Application에 대한 소개 및 설명을 포함하는 PDF 문서를 업로드 해주세요.
(PDF 문서에는 2번의 머신러닝 툴에서의 Model에 대한 설명도 포함 합니다. 예를 들어 Model의 구성 설명이나 Accuracy 등과 같은 내용을 설명해 주시면 됩니다.)
1차 시도 : Quest -AI Project
지금까지 진행하여 온 Quest AI를 토대로 Human Activity Recognition Model을 이용하여 일상생활에서 간단하게 운동할 수 있는 Activity를 구분할 수 있는 Project를 준비하였습니다.
먼저 간단한 운동기구로 할 수 있는 운동으로 베드민턴, 탁구,줄넘기 등 운동기구 없이 할 수 있는 팔굽혀펴기, 윗몸일으키기를 추가하였고, 달리기, 걷기, Quest기간중에 진행하였던 달리기, 걷기, Stationary등 을 구별할 수 있는지 확인해 보겠습니다.
각 Activity의 학습 Data는 Quest 4와 같이 Data를 취득하였습니다.
단, Data를 취득하기위하여 보조 충전기를 연결하여 손목에 고정하였습니다.

손목에 차고 Data를 취득하기 위하여 안하던 운동을 한 결과 하기와 같은 Data를 취득할 수 있었습니다.
Running / Pingpong / Badminton / Sit-Up / Push-Up / Jumprope / Walking / Stationary 취득 Data

각 항목별 Data를 취득하고 학습을 시키려고 하는 순간 바로 Fail이 발생하였습니다.
문제의 원인은 새로 생성한 Label이 학습 Data에 없기 때문에 Label을 만들줘야 합니다.
그리고 이번 Quest에서 진행한 사항은 것은 HAR관련 학습 Data를 Download받아서 ( WISDM_ar_v1.1_raw ) 학습을 진행한 결과 진행로 생성된 HAR Model을 사용하였으나 기본 학습 Data가 없기 때문에 WISDM_ar_v1.1_raw과 같은 학습 Data를 만들어서 Test를 진행하였습니다.
하지만 위에서 취득한 Data로 변경하여 1차 학습을 시킨 결과는 참담했습니다.
기본 Data가 없는 관계로 얼마 되지 않는 Data를 이용하여 학습 Model을 만든다는 것이 얼마나 무모한 짓인지 알게 되었습니다.
1차 학습 Data로 Test를 진행한 결과.

2차 시도 : Quest -AI Project
2차시도는 기존의 학습 Data를 이용할 수 있도록 Jumprope ( 줄넘기 ) 를 Stairs대신에 추가하였습니다.
학습 Data는 기존의 Data에서 Running / Walking / Stationary를 사용하고 나머지의 Data는 모두 삭제하였습니다. 그리고 Jumprope의 Data를 취득하여 WISDM_ar_v1.1_raw에 추가 하였습니다.
결과는 기존의 학습 Data는 충분한 관계로 Running / Walking / Stationary는 이전과 비슷한 결과는 얻을 수 있었으나 Jumprope를 전혀 Detection하지 못하였습니다.
추정 원인은 기존의 Data는 충분하였으나 Jumprope의 Data는 상대적으로 부족하였기에 발생한 것으로 추정되었습니다. 기존 Data의 5%정도의 Data로 Model을 학습 시키니 줄넘기가 Running으로 판단되었습니다.

3차 시도 : Quest -AI Project
기존의 학습 Data는 33명의 Data를 취합하여 만든것으로 추정됩니다. 따라서 Jumprope와의 Data의 비율을 맞추기 위하여 기존의 Data에서 1 ~8까지만 사용하고 나머지는 모두 삭제하였습니다. 또한 Jumprope의 Data는 추가하여 학습Data의 비율을 조정하였습니다.
Runme.py를 실해행하면 먼저 학습Data와 TestData로 나누기 때문에 가능하면 Jumprope의 Data를 추가할 경우 다른 Data의 위치와 균형이 맞게 배치해 주어야 됩니다. 그렇지 않으면 Model의 학습결과가 다르게 나올 수 있습니다.
하기와 같은 방법으로 Data를 추가하였습니다.
Human1 ( Running/Stationary/Walking + Jumprope )
Human2 ( Running/Stationary/Walking + Jumprope )
Human3 ( Running/Stationary/Walking + Jumprope )
…
Human8 ( Running/Stationary/Walking + Jumprope )
3차 Jumprope의 Data를 추가하고 기존 1 ~ 8 까지의 Data만 사용하여 학습을 진행한 결과.


4차 시도 : Quest -AI Project : Jumprope Data 추가.



KARAS 모델을 사용 하도록 X-CUBE-AI 구성 요소를 구성합니다.
- 추가 소프트웨어 를 확장 하여 STMicroelectronics.X-CUBE-AI.5.0.0 선택
- X-CUBE-AI 구성 요소가 선택 되었는지 확인하십시오모델 선택 찾아보기


- 위와 같이 설정한 훈에 Analyzer를 실행시키면 하기와 같습니다.

- 빈 프로젝트와 har_ign 모델을 적용하여 만든 Code에서 다음과 같이 4개의 파일을 FP-AI-SENSING1 프로젝트에 포함되어 있는 같은 이름의 파일과 대체하여 적용합니다.
하기와 같이 Souce file과 Header File을 Copy한 후 Compile을 진행한다.

- 다시 FP-AI-SENSING1 프로젝트 파일을 빌드하여 Mobile App 과의 연동을 진행합니다.
프로젝트 갤러리
프로젝트 제작 과정과 최종 결과물을 담은 이미지 갤러리입니다.


















프로젝트 자료실
프로젝트를 재현하거나 학습하는데 필요한 모든 자료를 제공합니다.
등록된 자료가 없습니다.
프로젝트 소개
사용 기술
코드 & 회로도
등록된 코드/회로 자료가 없습니다.
댓글 2개
아직 해보지는 않았지만, Sensor를 ACC에서 GYRO로 변경해서 적용하면 더 좋을 결과가 나오지 않을까 합니다. 다만 학습 Data를 만드는 것이 부담이 되어서 시간을 가지고 시도해 보기로 하였습니다.

.jpg)
공유 감사합니다. 많이 배웠습니다. ^^ 수집한 csv 데이타들의 noise을 없애는 필터링 작업을 추가하면 accuracy 개선에 도움이 될까여?