수행기록퀘스트6

Quest 6 과제 제출 ( Audio Scene Classification)
2022. 10. 10 (월) 23:33 최종수정 2022. 10. 10 (월) 23:45 자작공작소 조회 600 좋아요 0 스크랩 0 댓글 6

1. 개발하신 어플리케이션이B-L475E-IOT01A 보드에서 구동하는 동영상을 업로드 해주세요.
2. 상용 머신러닝 툴에서 사용한 Source Code를 업로드 해주세요.
3. B-L475E-IOT01A에 적용된 Application Source Code와 해당 Application에 대한 소개 및 설명을 포함하는 PDF 문서를 업로드 해주세요.
(PDF 문서에는 2번의 머신러닝 툴에서의 Model에 대한 설명도 포함 합니다. 예를 들어 Model의 구성 설명이나 Accuracy 등과 같은 내용을 설명해 주시면 됩니다.)

 

마지막 퀘스트 도전 주제는 Audio Scene Classification (ASC)입니다.

 

  • 계곡의 흐르는 ASMR - 0_water.wav
  • 장작 타는소리 ASMR - 1_fire.wav
  • 늦은 밤 귀뚜라미 ASMR - 2_night.wav

 

위 세가지를 케라스 CNN을 이용하여 모델을 만들고 STM32 보드에서 실행하였습니다.

SENSING1 소스에 있는 ASC 프로세싱 소스의 경우 INT8 타입의 입출력 가충치 값만을 사용하도록 되어 있어서 케라스에서 만든 FLOAT32의 가중치 값을 사용하기 위해서는 예제 소스 수정이 필요했습니다. 아래는 수정한 코드의 일부입니다.

또한 ASC 코드가 동작하기 위해서는 힙메모리 확보가 필요했습니다. 그래서 필요없는 HAR 관련 코드를 삭제하였습니다.

 

ASC_StatusTypeDef ASC_NN_Run(float32_t *pSpectrogram, float32_t *pNetworkOut)
{
	ASC_StatusTypeDef ret =  ASC_ERROR;

  //ai_i8 AscNnOutput[AI_ASC_OUT_1_SIZE] = {};
  //ai_i8 AscNnInput[AI_ASC_IN_1_SIZE] = {};

  /* Z-Score Scaling on input feature */
  for (uint32_t i = 0; i < SPECTROGRAM_ROWS * SPECTROGRAM_COLS; i++)
  {
    pSpectrogram[i] = (pSpectrogram[i] - featureScalerMean[i]) / featureScalerStd[i];
  }

  //aiConvertInputFloat_2_Int8(AI_ASC_MODEL_NAME, AI_ASC_MODEL_CTX,pSpectrogram, AscNnInput);

  //aiRun(AI_ASC_MODEL_NAME, AI_ASC_MODEL_CTX, AscNnInput, AscNnOutput); // org
  aiRun(AI_ASC_MODEL_NAME, AI_ASC_MODEL_CTX, pSpectrogram, pNetworkOut);

  //aiConvertOutputInt8_2_Float(AI_ASC_MODEL_NAME, AI_ASC_MODEL_CTX,AscNnOutput, pNetworkOut);

  ret =  ASC_OK;

  return ret;
}

 

아래는 세가지 소리에 대한 결과입니다.

 

 

 

잘 동작합니다.

자세한 내용은 첨부된 PDF 레포트를 확인해 주십시오.

:)

첨부파일
DIYWORKSHOP_Quest6.zip 다운로드
rudals
2022.10.17 14:21
자작공작소님도 수상 축하드립니다. 저도 제출해주신 내용으로 Audio Scene Classification 한번 도전 해 봐야겠습니다.
자작공작소
2022.10.17 15:43
고맙습니다. 공유해 드린 X-CUBE-AI의 버그를 수정하시면 잘 동작하는 ASC를 구현해 보실 수 있습니다.
자작공작소
2022.10.13 13:51
ASC로 노래 제목을 분류하는 것을 처음 목표로 하였으나 SENSING1을 사용해 녹음된 wav파일을 들어 보았을때 연속성이 부족함을 느끼고 실제 추론 과정에서 사용되는 입력 데이터 품질도 유사할 것으로 생각 되었습니다. 따라서 현재 구조에서는 리듬감이 있는 음원으로는 한계가 있어 보입니다. 하지만 장면을 분류하는 것은 음원의 연속성이 중요하지 않아 잘 작동함을 알 수 있습니다.
자작공작소
2022.10.13 13:41
다음에는 RTOS를 사용하지 않는 Bare Metal 환경에서 DFSDM(DMA)설정과 AI-CUBE-X 7.x.x버전에서 동작하는 ASC를 만들어 봐야겠습니다. 당초 계획이었는데 wav파일 전처리 과정을 구현하는데 시간이 필요해 SENSING1소스를 사용하는 것으로 방향을 선회하였습니다. SENSING1의 경우 BSP 드라이버를 사용하는데 이 부분을 참고하면 되겠습니다.
칩헤드
2022.10.12 14:06
오홋, HAR 코드를 삭제하여 여유 메모리 용량을 확보 할수 있는 방법도 있는데, 전 미쳐 그 생각을 못했습니다. 팁 감사합니다. Thumbs up.
자작공작소
2022.10.11 00:39
쓰다 보니 자작공작소가 주유공작소가 되었네요. 황금 연휴가 퀘스트와 함께 날아갔습니다. T.T

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