STM32 퀘스트 챌린지 : STM32Cube.AI
콘테스트 프로젝트완료

STM32Cube.AI 개발 환경 구축 따라하기

STM32 퀘스트 챌린지 : STM32Cube.AI
T
2022.07.21에 시작
1
좋아요
2.9K
조회
3
댓글
 STM32Cube.AI 개발 환경 구축 따라하기
STM32 퀘스트 챌린지 : STM32Cube.AI완료
콘테스트 프로젝트 진행 상황

각 Quest를 단계적으로 완성하는 프로젝트입니다.

Quest 1
Quest 2
Quest 3
Quest 4
Quest 5
Quest 6
6 / 6 완료
Quest 1: STM32Cube.AI 개발 환경 구축 따라하기
2022.08.04
완료

가이드대로 따라한 화면을 캡쳐해 보았습니다.

 

 

 

<분석 내용 복사>
Analyzing model 
C:/Users/USER/STM32Cube/Repository/Packs/STMicroelectronics/X-CUBE-AI/7.1.0/Utilities/windows/stm32ai analyze --name network -m D:/work/test/contest/4_cubeai/en.fp-ai-sensing1/STM32CubeFunctionPack_SENSING1_V4.0.3/Utilities/AI_Ressources/models/asc_93_Q.h5 --type keras --compression 1 --verbosity 1 --workspace C:\Users\USER\AppData\Local\Temp\mxAI_workspace23804064338050017264679071903012568 --output C:\Users\USER\.stm32cubemx\network_output  
Neural Network Tools for STM32AI v1.6.0 (STM.ai v7.1.0-RC3) 
  
 Exec/report summary (analyze) 
 ------------------------------------------------------------------------------------------------------------------------ 
 model file           : D:\work\test\contest\4_cubeai\en.fp-ai-sensing1\STM32CubeFunctionPack_SENSING1_V4.0.3\Utilities\AI_Ressources\models\asc_93_Q.h5 
 type                 : keras 
 c_name               : network 
 compression          : None 
 workspace dir        : C:\Users\USER\AppData\Local\Temp\mxAI_workspace23804064338050017264679071903012568 
 output dir           : C:\Users\USER\.stm32cubemx\network_output 
 model_name           : asc_93_Q 
 model_hash           : 70ee217758c82a261fc1ed12413ca77d 
 input 1/1            : 'quantize_conv2d_11_input' 
                        960 items, 3.75 KiB, ai_float, float, (1,30,32,1), domain:user/ 
 output 1/1           : 'softmax_10' 
                        3 items, 12 B, ai_float, float, (1,1,1,3), domain:user/ 
 params #             : 7,703 items (30.09 KiB) 
 macc                 : 517,373 
 weights (ro)         : 30,812 B (30.09 KiB) (1 segment) 
 activations (rw)     : 17,280 B (16.88 KiB) (1 segment) 
 ram (total)          : 21,132 B (20.64 KiB) = 17,280 + 3,840 + 12 
  
 Model name - asc_93_Q ['quantize_conv2d_11_input'] ['softmax_10'] 
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 id   layer (type)                         oshape            param/size     macc      connected to                |   c_size   c_macc             c_type                
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 0    quantize_conv2d_11_input (Input)     (None,30,32,1)                                                         |                               
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 1    quantize_conv2d_11_conv2d (Conv2D)   (None,28,30,16)   160/640        120,976   quantize_conv2d_11_input    |            +26,880(+22.2%)    optimized_conv2d()[0] 
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 2    quantize_1 (Nonlinearity)            (None,28,30,16)                  13,440    quantize_conv2d_11_conv2d   |            -13,440(-100.0%)   
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 3    quantize_max_pooling2d_11 (Pool)     (None,14,15,16)                  13,440    quantize_1                  |            -13,440(-100.0%)   
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 5    quantize_conv2d_12_conv2d (Conv2D)   (None,12,13,16)   2,320/9,280    359,440   quantize_max_pooling2d_11   |            +4,800(+1.3%)      optimized_conv2d()[1] 
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 6    quantize_4 (Nonlinearity)            (None,12,13,16)                  2,496     quantize_conv2d_12_conv2d   |            -2,496(-100.0%)    
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 7    quantize_max_pooling2d_12 (Pool)     (None,6,6,16)                    2,304     quantize_4                  |            -2,304(-100.0%)    
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 9    flatten_6 (Reshape)                  (None,1,1,576)                             quantize_max_pooling2d_12   |                               
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 10   quantize_dense_11_dense (Dense)      (None,1,1,9)      5,193/20,772   5,193     flatten_6                   |                               dense()[2]            
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 11   quantize_8 (Nonlinearity)            (None,1,1,9)                     9         quantize_dense_11_dense     |                               nl()[3]               
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 13   quantize_dense_12_dense (Dense)      (None,1,1,3)      30/120         30        quantize_8                  |                               dense()[4]            
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 14   softmax_10 (Nonlinearity)            (None,1,1,3)                     45        quantize_dense_12_dense     |                               nl()/o[5]             
 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
 model/c-model: macc=517,373/517,373  weights=30,812/30,812  activations=--/17,280 io=--/3,852 
  
 Complexity report per layer - macc=517,373 weights=30,812 act=17,280 ram_io=3,852 
 ------------------------------------------------------------------------------------------ 
 id   name                        c_macc                    c_rom                     c_id 
 ------------------------------------------------------------------------------------------ 
 1    quantize_conv2d_11_conv2d   |||||||           28.6%   |                  2.1%   [0]  
 5    quantize_conv2d_12_conv2d   ||||||||||||||||  70.4%   |||||||           30.1%   [1]  
 10   quantize_dense_11_dense     |                  1.0%   ||||||||||||||||  67.4%   [2]  
 11   quantize_8                  |                  0.0%   |                  0.0%   [3]  
 13   quantize_dense_12_dense     |                  0.0%   |                  0.4%   [4]  
 14   softmax_10                  |                  0.0%   |                  0.0%   [5] 
Creating txt report file C:\Users\USER\.stm32cubemx\network_output\network_analyze_report.txt 
elapsed time (analyze): 0.506s 
Analyze complete on AI model

 

network graph 그림 캡쳐

위 그래프 전체 그림

이상입니다.

-Tiel-

Quest 2: [Quest 2 수행]
2022.08.08
완료

모든 에러를 잡고 실행했을때의 결과 제출합니다

Accuracy 그래프를 Capture하여 제출합니다.

Model Loss Function 그래프를 Capture하여 제출합니다.

 

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

 

 

결과 폴더에 har_IGN.h5 모델을 적용하여 cubemx.ai에 적용하여 분석을 실행하면 다음과 같습니다

 

.

 

 

network_analyze_report.txt 파일은 첨부하였습니다.

감사합니다

from Tiel

Quest 3: 퀘스트 3 - 수행 내용 제출
2022.09.06
완료

 

  1. 보드의 Stlink를 pc와 연결후 CleanSENSING1.bat 실행:  bootloader 프로그래밍 수행.

/******************************************/

                          Clean FP-AI-SENSING1

               /******************************************/

                             Full Chip Erase

               /******************************************/

STM32 ST-LINK CLI v3.6.0.0

STM32 ST-LINK Command Line Interface

 

ST-LINK SN: 066DFF535157808667105642

ST-LINK Firmware version: V2J37M27

Connected via SWD.

SWD Frequency = 4000K.

Target voltage = 2.6 V

Connection mode: Connect Under Reset

Reset mode: Hardware reset

Device ID: 0x415

Device flash Size: 1024 Kbytes

Device family: STM32L4x1/L4x5/L4x6

 

Hard reset is performed.

 

Core is held in reset

               /******************************************/

                             Install BootLoader

               /******************************************/

STM32 ST-LINK CLI v3.6.0.0

STM32 ST-LINK Command Line Interface

 

ST-LINK SN: 066DFF535157808667105642

ST-LINK Firmware version: V2J37M27

Connected via SWD.

SWD Frequency = 4000K.

Target voltage = 2.6 V

Connection mode: Normal

Reset mode: Hardware reset

Device ID: 0x415

Device flash Size: 1024 Kbytes

Device family: STM32L4x1/L4x5/L4x6

Loading file...

Flash Programming:

  File : ..\..\..\..\..\Utilities\BootLoader\STM32L476RG\BootLoaderL4.bin

  Address : 0x08000000

Memory programming...

栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢 100%

Reading and verifying device memory...

栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢栢 100%

Memory programmed in 0s and 829ms.

Verification...OK

Programming Complete.

 

               /******************************************/

                         Install FP-AI-SENSING1

               /******************************************/

STM32 ST-LINK CLI v3.6.0.0

STM32 ST-LINK Command Line Interface

 

ST-LINK SN: 066DFF535157808667105642

ST-LINK Firmware version: V2J37M27

Connected via SWD.

SWD Frequency = 4000K.

Target voltage = 2.6 V

Connection mode: Normal

Reset mode: Hardware reset

Device ID: 0x415

Device flash Size: 1024 Kbytes

Device family: STM32L4x1/L4x5/L4x6

Loading file...

Unable to open file!

 

               /******************************************/

                     Dump FP-AI-SENSING1 + BootLoader

               /******************************************/

SENSING1.bin size is  bytes

피연산자 빠짐

Dumping 0x4000 +  =  bytes ...

..........................

STM32 ST-LINK CLI v3.6.0.0

STM32 ST-LINK Command Line Interface

 

Command -Dump needs 3 or 4 parameters! Use -? for help.

 

               /******************************************/

                                Reset STM32

               /******************************************/

STM32 ST-LINK CLI v3.6.0.0

STM32 ST-LINK Command Line Interface

 

ST-LINK SN: 066DFF535157808667105642

ST-LINK Firmware version: V2J37M27

Connected via SWD.

SWD Frequency = 4000K.

Target voltage = 2.6 V

Connection mode: Connect Under Reset

Reset mode: Hardware reset

Device ID: 0x415

Device flash Size: 1024 Kbytes

Device family: STM32L4x1/L4x5/L4x6

 

MCU Reset.

  1. 빌드 수행

Compiler: IAR 8.50.1

 

 

(원본 소스(SENSING1)를 SENSING1_Tiel로 복사하여 빌드함.)

  1. SENSING1_BL.bin 파일 라이팅

  1. 라이팅 후 동작 테스트

안드로이드 PlayStore에서 ST BLE 키워드로 앱을 찾기 후 “ST BLE Sensor” 앱을 설치.

앱을 실행한 첫 화면

코드에서 다음과 같이 수정함.

실행 결과화면

수정한대로 ID명(TIEL)+버전 이 출력되었음.

기타 동작화면

 

 

HAR 실행 영상

 

Quest 4: Quest 4 HAR 로깅 데이타 수집 후 제출
2022.09.12
완료

측정에 사용한 보드 : BL475EIO1A1 보드

로깅 내용 : 여러각도로 로깅한 4가지 행동 패턴(제자리서있기, 걷기, 달리기, 계단 오르내리기) 데이타를 아래와 같이 저장하여 제출합니다.

(파일수 : csv파일 30개).

이상입니다

 

Quest 5: Quest5. new log데이터로 학습후 Cube.Ai를 사용하여 FW적용 후 실험하기
2022.09.25
완료

Quest5. new log데이터로 학습후 Cube.Ai를 사용하여 FW적용 후 실험하기

초기 Cube.Ai7.1.0으로 진행하던데로 작업을 수행해 보았습니다.

학습후 Ai데이타 테스트용 코드 생성까지 진행후 B-L475-IOT01A1 펌웨어인 ai-sensing1 펌웨어에 적용하려고 했습니다만 constant값에 함수를 적용한 코드에서 에러가 나서 초기화 코드에서 Weight값과 Activation테이블을 복사하도록 코드를 변경해 보았지만 그외에도 다른 수많은 에러가 나서 맨붕 상태였는데 다행히 Quest5 공지 페이지가 새로 업데이트되어 참고하여 Python3.6+Keras 2.2.4+Cube.Ai v5.0.0 환경을 새로 생성해서 작업을 진행하였습니다.

<새 환경 셋업 과정>

Anaconda에서 다음과 같이 새로운 환경을 정의하고 패키지를 설치하였습니다.

그런데 버전 변경이 필요합니다. 변경이 필요한 패키지를 클릭후 ENTER를 누르면 pull down 메뉴가 나옵니다. 그럼 원하는 버전으로 변경합니다.

Keras-base패키지도 동일한 2.2.4로 변경합니다.

모두 설치하고나면 다음과 같이 버전이 변경되어 있습니다.

이제 keras 2.2.4 버전과 tensorflow까지 설치완료한 후에 PyCharm에서 New Project로 프로젝트를 생성하면서 Add Interpreter를 누르고 위에서 만든 Anaconda환경을 선택후 클릭하여 추가해 줍니다. 추가된 interpreter로 선택하고서 빌드합니다.

New Proejct 디렉토리에 HAR 폴더를 복사하고 모든 부가 데이터(wisdom데이터셋과 log 데이터)들을 복사해서 셋팅합니다. PyCharm에서 실행시키면 다음과 같은 에러가 나옵니다(패키지가 없다는 내용입니다)

일단 Pandas가 없다고 했으므로 위처럼 pandas 글자로 cursor를 가져가면 위처럼 pop message가 뜨고 install을 누르면 설치합니다.

이와 같이 sklearn도 설치를 진행합니다.

모두 설치하고나면 wisdom데이터를 로딩하고서 분류를 합니다.

그 다음에는 LogData를 분류합니다.

(LogData 수집할때 주의사항: 구분글자의 첫글자는 대문자여야 파싱됩니다. 즉 Stairs, Jogging 처럼 첫 글자가 대문자여야되는데 stairs, jogging 과 같이 소문자로 로깅이 저장되도록 핸드폰앱에서 처음부터 실수하면 RunMe에서 구분자 인식에 실패하여 제대로 학습이 안됩니다.)

학습 결과는 위와 같이 출력됩니다.

 

<신경망 출력 정보: har_ign_analyze_report.txt>

Neural Network Tools for STM32 v1.2.0 (AI tools v5.0.0)

모델의 코드사이즈가 11.97KB, 파라미터 sram사이즈는 1.98KB입니다.

위 layer정보는 python model코드에 코딩된 대로 입출력 개수를 출력해주고 있는 것을 알 수 있습니다.

 

<학습 실험 및 결과>

각 활동별로 log 데이터를 추가해가면서 학습을 진행해 보았더니 서로 간의 영향을 주면서 정확도가 오르락 내리락하는 것을 자주 볼 수 있었습니다. 동일한 NN모델링으로 여러가지 데이타를 학습시키면서 가중치를 조정했으니 서로 간에 영향을 주는 것이 당연한 결과지만 그래도 엄선된 많은 데이타를 줬다고 생각했는데도 결과는 좀 아쉬웠습니다.

다음에는 학습 회수(epoch)를 늘려서 결과를 살펴보면 어떨까 생각하면서 마무리합니다.

                                                   <최종 실험 결과 >

<동작 테스트 동영상>

Quest 6: Quest6_MFCC를 이용한 소리 인식기 구현_TIEL
2022.10.09
완료

첨부파일 내용: fw, model소스, final_report

작성한 Fw에서 좋은 결과를 도출하지 못하여 동영상은 제작하지 못했습니다..

 

 

Quest6 주제 : MFCC를 이용한 소리 인식기 구현 ( 작성: TIEL)

소개 : 음성의 주요 성분을 압축한 데이터들을 학습하여 단어들을 인식하는 연구들이 최근에 많이 진행되어 왔습니다. 이에 대한 보드에서의 검증을 진행해 보고자 합니다.

  1. HW및 SW 정보

HW: 제공받은 보드 (B-L475-IOT01-A)

SW: Python(3.6),Keras(2.2.4),Librosa

  1. 학습에 이용한 데이터

ESC-10 dataset.

      Download link : https://dataverse.harvard.edu/dataset.xhtml?persistentId=doi:10.7910/DVN/YDEPUT

ESC-10 Dataset 구성

  1. 학습 모델
    1. CNN 모델
      1. 코드

(40,1) 배열 샘플 입력치에 대해서 1차원 Convolution을 합니다. Kernel 사이즈는 3개, 커널(필터) 개수는 64개로 시작합니다. Relu 활성화 함수를 모두 사용합니다. 두 번째 층에서도 커널개수 사이즈 동일합니다. 세번째에서는 maxpool을 통해 사이즈를 줄입니다. 그리고 몇 개의 층을 더 취하고 나서 마지막에 dense층 으로 마무리 합니다. 출력은 10개의 출력에 대해 softmax 활률값입니다.

위 모델을 적용하여 compile 및 학습을 수행결과는 다음과 같았습니다.

 

참고로 모델 소스에 CNN모델과 MLP모델 두 가지가 들어 있는데 CNN을 설정하려면 인자로 CNN을 입력해 주셔야 build가 됩니다. pyCharm에서 인자를 입력해 주기 위해서는 아래와 같이 입력해 주시면 됩니다.

 

Extracting features..

Extracting file  dataset\001 - Dog bark\1-100032-A.ogg

Extracting file  dataset\001 - Dog bark\1-110389-A.ogg

………

……

Extracting file  dataset\010 - Fire crackling\5-215658-A.ogg

Extracting file  dataset\010 - Fire crackling\5-215658-B.ogg

Training..

Model: "sequential"

_________________________________________________________________

 Layer (type)                Output Shape              Param #  

=================================================================

 conv1d (Conv1D)             (None, 38, 64)            256      

                                                                 

 conv1d_1 (Conv1D)           (None, 36, 64)            12352    

                                                                

 max_pooling1d (MaxPooling1D  (None, 12, 64)           0        

 )                                                              

                                                                

 conv1d_2 (Conv1D)           (None, 10, 128)           24704    

                                                                 

 global_average_pooling1d (G  (None, 128)              0        

 lobalAveragePooling1D)                                         

                                                                

 dropout (Dropout)           (None, 128)               0        

                                                                

 dense (Dense)               (None, 10)                1290     

                                                                

 activation (Activation)     (None, 10)                0        

                                                                

=================================================================

Total params: 38,602

Trainable params: 38,602

Non-trainable params: 0

_________________________________________________________________

None

training for 100 epochs with batch size 32

Epoch 1/100

10/10 [==============================] - 1s 21ms/step - loss: 2.3986 - accuracy: 0.1375 - val_loss: 1.9568 - val_accuracy: 0.3375

Epoch 2/100

10/10 [==============================] - 0s 6ms/step - loss: 1.8940 - accuracy: 0.3406 - val_loss: 1.6789 - val_accuracy: 0.5375

……

….

Epoch 99/100

10/10 [==============================] - 0s 6ms/step - loss: 0.2022 - accuracy: 0.9375 - val_loss: 0.9739 - val_accuracy: 0.8000

Epoch 100/100

10/10 [==============================] - 0s 6ms/step - loss: 0.1747 - accuracy: 0.9656 - val_loss: 0.9047 - val_accuracy: 0.8000

Saving model to disk

3/3 [==============================] - 0s 2ms/step - loss: 0.9047 - accuracy: 0.8000

Test loss 0.9046648144721985

Test accuracy 80.0000011920929

 

100번의 학습이후 정확도 80%가 나왔습니다

 

학습후 나온 파라미터를 h5파일로 저장후 Cube.ai에서 코드를 생성하면 됩니다.

  1. Fw 작성
    1. HW 체크

펌웨어 수정에 앞서 어떤 부분이 Mic인지 확인해 보겠습니다.

실제 보드에서 위 오렌지 표시된 부분이 mic칩셋이라고 합니다.

mcu에서 DFSDM 기능으로 연결합니다.

(매뉴얼에 기록된 DFSDM1 핀 연결에 대한 설명)

(Mic 칩 연결 회로도)

(mcu 핀 정보)

4.2 FW 작업

     Cube.Ai의 버전은 7.20을 사용하였습니다.

     그래서 Sensing1 펌웨어를 그대로 사용할 수 없기에 Cube.Ai에서 생성한 코드에

     Mic칩 동작을 이식하는 작업을 수행하였습니다.

 

펌웨어 작업에 앞서 MFCC에 대해서 정리해 보았습니다

Audio 신호에서 특징신호를 추출하는 작업 중에 MFCC라는 결과물이 나오는데 이 MFCC를 학습에 사용하는 인식을 많이 사용합니다

MFCC 과정은 다음과 같다고 합니다.

위 블락도에 대해서 조사한 내용을 기록합니다.

PreEmphasis는 우리 음성 중에 높은 음들을 강조하도록 1st Order HPF를 처리하는 단계입니다.(연구에 따르면 고주파 성분이 일반적으로 크기가 작아서 조금 키워주면 음성인식 성능이 개선된다고 합니다.) Hamming Window와 FFT는 시간영역에서의 입력 신호를 주파수 영역으로 변환하는 과정입니다.(윈도우처리는 신호 왜곡을 막기 위해 처리하는 전처리입니다. 윈도우처리에 문제가 있으면 결과 주파수가 정확하지 않을 가능성이 높습니다. 윈도우 종류도 여러가지인데 사용해보고 좀더 적절한 윈도우를 선택한다면 주파수 결과가 더 잘 나올 때가 있습니다.) 이로써 의미있는 주요 주파수 성분에 대한 해석이 가능해 집니다. 이를 spectrum이라고 부릅니다. (참고로 Spectrum analyzer라는 장비를 보신 분들은 여기까의 동작을 하는 장비라는 생각하시면 됩니다). spectrum에서는 어떤 주파수가 강한지 약한지를 알 수 있고 강한 성분에 대한 주파수만 추출하여 분리합니다. 이를 Cepstrum이라고 부릅니다.

Cepstrum에서 mel Filter Bank처리를 해서 Mel Spectrum을 만듭니다.

Mel Spectrum은 우리 귀가 저주파수(약 1Khz 미만)는 비교적 자세하게 주파수를 구분할 수 있는 반면에 높은 주파수는 구분에 어려움이 있다는 특징을 이용하여 주파수별로 다른 Filter를 적용하여 뽑아내는데 이때 적용하는 기법이 Filter Bank이고 Mel Scale 필터 수식으로 계산합니다. 이후 log를 취한 log-Mel-spectrum을 IFFT를 처리하면 MFCC가 구해집니다.

파이썬코드에서는 Librosa 라이브러리를 이용해서 간단하게 위 처리를 변환했지만 아쉽게도 FW에서는 위 과정을 모두 구현해서 MFCC를 뽑아낸 다음 우리의 CNN모델에 적용해야할 것입니다.

 

FW에서의 추가/변경된 내용은 다음과 같습니다.

  1. 사용할 기능 활성화

  1. Sensing1 소스 패키지에서 다음 코드들을 복사

 

  1. Compile 옵션 변경

정의값 추가

 

Path 추가/변경

 

  1. 추가코드

-DFSDM 클락 초기화 함수 추가

 

-DFSDM ISR 코드 추가

 

-Handler callback 함수들

 

-Handler 에서 사용할 버퍼링 함수

 

-FFT 처리 및 메모리 초기화 추가

 

          -mic 초기화 함수들

         

-그외 ai_데이터 처리 함수 변경

Ai 처리 함수

위 코드에서 acquire_and_process_data()함수는 모든 데이터가 샘플링되면 전처리를 수행하면 ai_in버퍼에 저장하고 ai_run으로 전달합니다. Ai_run에서는 우리의 model 결과를 처리할 것이고 data_outs버퍼로 결과가 전달됩니다.

 

  1. 실험.

학습 모델이 적용된 펌웨어를 실행해 보았습니다. 테스트 음성을 play하여 board에서 Mic로 입력된 음성을 샘플링하여 전처리한 데이타가 Ai모델로 처리되는 과정을 테스트했을 때 의미있는 결과값이 나오지 않았습니다.

모델학습 과정에서는 80%의 정확도라는 결과를 얻었지만 펌웨어까지 적용한 결과가 의미있는 결과를 얻지 못한 원인은 음성 데이터 전처리 데이타가 일치하지 않았기 때문이 아닐까 생각됩니다. Python model로의 입력치와 fw에서 model로의 입력 데이타가 서로 동일한 형태로 전처리된 것인지 정확한 확인이 이루어지지 못했기 때문에 그렇게 추정하고 있습니다. 시간이 더 있었다면 데이터 전처리 과정을 모두 디버깅 해봤을텐데 아쉽게도 시간내에 결과물을 내놓지 못했습니다.

 

  1. 과제 수행을 마무리하며…

      비록 제대로된 결과는 내지 못했지만 음성 데이타셋 처리 과정을 통해 다음의 내용을

      알게 되었습니다.

-음성의 주파수 변환(FFT)을 통한 주성분 분석(Spectrum 분석) 및 데이터 압축(Cepstrum분석) 후 주성분 음성만 재변환하여 비교 분석에 사용하는 방법(MFCC처리)

-CNN을 MFCC입력으로 학습했을 때 결과를 통해 데이터학습에 대한 지식

 

좀 더 펌웨어를 다듬어서 튜닝하지 못하고 마무리해야 되서 많이 아쉽지만 다음에는 좀 더 좋은 결과를 낼 수 있는 경험으로 삼고 마무리하며 기록을 마칩니다. 이렇게 좋은 이벤트를 기획해 주신 ST사에 감사의 말씀을 드리고 싶습니다.

이상입니다.

Tiel 작성.

 

프로젝트 자료실

프로젝트를 재현하거나 학습하는데 필요한 모든 자료를 제공합니다.

등록된 자료가 없습니다.

프로젝트 소개

아직 등록된 프로젝트 소개가 없습니다.

코드 & 회로도

등록된 코드/회로 자료가 없습니다.

댓글 3

T
Tiel2022.10.10

리포트 내용을 좀더 수정했는데 첨부파일이 올라가지 않는듯하네요.. -_-;;

자작공작소2022.10.11

DFSDM의 클럭 설정시 Ouput data rate이 16kHz가 되도록 입력 클럭과 FOSR, ISOR을 설정해 줘야 한다고 생각합니다.

칩헤드2022.10.12

인사이트로 가득하네요. 짱이십니다. ^^ 공유해주신 내용 덕에 많이 배우고 인사이트 얻게되어 감사합니다. MCU-4 IOT보드에 돌려야하는 모델치고는 하이퍼파라메타가 꽤 크네요? 그래서 Accuracy가 좋게 나올거라고 예상했는데, 의외로 80%이라서 의외였습니다. Accuracy 생각보다 낮게 나온 factor다 무엇인걸까요? FPU값을 true으로 한것은 hard-floating 연산 가속화를위한 것일까여?