2. Ch9. 인체 감지 애플리케이션 만들기
1. CNN 모델 개요
2. Ch9 Overview
3. Test & Build
Ch10. 인체 감지 모델 훈련하기
3. CNN 모델 개요
기존 이미지 인식 방법
2차원으로 된 이미지를 1차원 배열로 바꾼 뒤
Fully Connected 신경망을 학습시키는 방법
> 이미지의 특성을 이해하지 못하는 단점이 있었음
> 회전이나 움직이면 잘 인식하지 못하는 Overfitting 문제가 있었
음
Convolution(합성곱)을 통해 이미지 특징(Feature) 추출
Ch9. 인체 감지 애플리케이션 만들기
Reference: https://gruuuuu.github.io/machine-learning/cnn-doc/#
4. CNN 모델 개요
Convolution(합성곱)은 한참 전 이미지에 사용된 개념.
Feature의 획득이 가능한 유명한 Filter를 통해 학습하던 방식에서
신경망을 통해 Filter를 생성하고
적합한 필터를 생성해 학습에 이용
Ch9. 인체 감지 애플리케이션 만들기
Reference: https://gruuuuu.github.io/machine-learning/cnn-doc/#
sobel-x sobel-y
5. Ch9 Overview
훈련된 인체 감지 모델(MobileNet 아키텍처)로 MCU에서 예측하
는 법
Architecture
MobileNet https://arxiv.org/pdf/1704.04861.pdf
Training dataset
Visual Wake Words dataset https://arxiv.org/pdf/1906.05721.pdf
그외, “CIFAR10” 도 Cortex-M7에 활용된 기록 있음.
Ch9. 인체 감지 애플리케이션 만들기
10개 클래스, 6만장, 32x32 컬러 이미
지
115k 개의 COCO dataset에서 기원, 비전센서를 통해 사람의 유무 판단 필요성에서
시작.
모델이 250KB 이내를 차지하도록, 사람의 유무 Labeling
가벼운 CNN Architecture을 목표해서 제안. 성능과 효율성의 Trade-off를 맞출 필요성에서 출발.
커널의 변경을 통해 파라미터량을 줄이는 방법(Depthwise Separable Convolution)
Reference: https://minimin2.tistory.com/42
6. Ch9 Overview
Ch9. 인체 감지 애플리케이션 만들기
데이터 전처리 없이 진행
> 학습모델(MobileNet) 때문
(Ch7 호출어감지와 다르게)
모델의 평균을 구하지 않음.
여전히 데이터량이 많아 느림.
인체 감지 어플리케이션의 구성 요소
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/micro/examples/person_detection
7. Ch9 Test & Build
Ch9. 인체 감지 애플리케이션 만들기
-person_detection_test.cc
-Image_provider_test.cc
-Main_functions.cc
-Image_provider.cc
모델에 필요한 Op 추가
Tensor_arena 사이즈 정의. (실험적으로 획득된 값)
모델 매핑
모델을 실행할 인터프리터 빌드
8. Ch9 Test & Build
Ch9. 인체 감지 애플리케이션 만들기
-person_detection_test.cc
-Image_provider_test.cc
-Main_functions.cc
-Image_provider.cc
Input 속성 ASSERT
모델 실행
이미지를 input용 메모리로 복사
Output 속성 ASSERT
9. Ch9 Test & Build
Ch9. 인체 감지 애플리케이션 만들기
-person_detection_test.cc
-Image_provider_test.cc
-Main_functions.cc
-Image_provider.cc
결과값 획득
사람이 없는 이미지로, 추론
10. Ch9 Test & Build
Ch9. 인체 감지 애플리케이션 만들기
-person_detection_test.cc
-Image_provider_test.cc
-Main_functions.cc
-Image_provider.cc
image_data 배열의 포인터를 이용한다.
11. Ch9 Test & Build
Ch9. 인체 감지 애플리케이션 만들기
-person_detection_test.cc
-Image_provider_test.cc
-main_functions.cc
-Image_provider.cc
필요 포인터 선언
모델 매핑
12. Ch9 Test & Build
Ch9. 인체 감지 애플리케이션 만들기
-person_detection_test.cc
-Image_provider_test.cc
-main_functions.cc
-Image_provider.cc
사용할 Op 추가
작업 메모리 할당
(Cont...) 작업 메모리 할당, setup 종료
13. Ch9 Test & Build
Ch9. 인체 감지 애플리케이션 만들기
-person_detection_test.cc
-Image_provider_test.cc
-main_functions.cc
-Image_provider.cc
이미지 전달, 추론, 결과 출력
14. Ch9 Test & Build
Ch9. 인체 감지 애플리케이션 만들기
-person_detection_test.cc
-Image_provider_test.cc
-main_functions.cc
-Image_provider.cc
이미지 전달, 추론, 결과 출력
15. Ch9 Test & Build
Ch9. 인체 감지 애플리케이션 만들기
-person_detection_test.cc
-Image_provider_test.cc
-main_functions.cc
-Image_provider.cc
Sparkfun Edge 보드
frame 포인터에 이미지 저장
input->data.uint8 로 이미지 접근
16. Ch9 Test & Build
Ch9. 인체 감지 애플리케이션 만들기
-HM01B0 카메라 모듈은 320*320 픽셀 이미지 센서 모듈
- 바이너리 빌드
$ make –f tensorflow/lite/micro/tools/make/Makefile TARGET=sparkfun_edge person_detection_bin
- 파일 존재 확인
$ test –f tensorflow/lite/micro/tools/make/gen/sparkfun_edge_cortex-m4/bin/person_detection.bin
&& echo “success” || echo “missing”
- 바이너리 서명 및 플래시는 생략하겠습니다 …
18. Ch10 개발 환경 설정
Ch10. 인체 감지 모델 훈련하기
- AWS, Azure, GCP 등, 개발환경 선택 후 진행
- “초소형 머신러닝 TinyML”에서는 GCP를 이용한 예시
- 트러블슈팅 관련 이슈
- 단순 실습 외의 조사한 내용 공유
> slim 에 대해서 알아보기
> (Ch10.10) 아키텍처 이해
19. Ch10. tf-slim
Ch10. 인체 감지 모델 훈련하기
- TF-slim
- 사전에 학습된 모델 제공
- Alexnet
5 conv + 5 pooling
고화질 이미지
- Inception
적은 파라미터수(연산)+정확도
- Overfeat
- Resnet
shortcut connection
파라미터 감소
- VGG
ImageNet (1M)
https://github.com/google-research/tf-slim
20. Ch10. tf-slim
Ch10. 인체 감지 모델 훈련하기
- TF-slim
- Tensorflow의 확장된 추상화 라이브러리,
(추상화는 모두 CNN에 관한 함수를 가독성 좋게 제공..)
- 교재에는 커맨드 arguments로 훈련하지만
실제로 더 많은 모델을 직접 만들어 볼 수 있다.
!python models/research/slim/train_image_classifier.py
--train_dir=vww_96_grayscale
--dataset_name=visualwakewords
--dataset_split_name=train
--model_name=mobilenet_v1_025
…
https://github.com/google-research/tf-slim
제게는 대중화(?) 가능한 모델을 제공하는 정도로 보입
니다.
21. Ch10.10 아키텍처 이해
Ch10. 인체 감지 모델 훈련하기
- MobileNet
- 적은 파라미터, 적은 연산량
- Ver1, Ver2의 비교표를 보면 Ver2가 더 좋아보이지만
- Ver1가 가장 적은 양의 램을 이용한다.
(교재 내용이라서 믿어보지만… 이를 확인해보고 싶었지만…)
- MACs (Multiply-accumulate operations)
http://machinethink.net/blog/mobilenet-v2/
23. Ch10.10 아키텍처 이해
Ch10. 인체 감지 모델 훈련하기
- 14 Depth-wise layer
- Point-wise conv layer
https://www.slideshare.net/ssuser6135a1/ss-106656779
일반적인 Convolution Filter는 입력 영상
모든 채널의 영향을 받게 되는데,
Depth-wise Convolution은 각 단일 채널
에 대해서만 수행되는 필터들을 사용한
다.
24. Ch10.10 아키텍처 이해
Ch10. 인체 감지 모델 훈련하기
- 14 Depth-wise layer
- Point-wise conv layer
https://www.slideshare.net/ssuser6135a1/ss-106656779
커널 크기가 1x1로 고정된 conv layer.
입력 영상에 대한 Spatial feature의 추출은 하
지 않은 상태로, 연산만을 수행.
불필요한 채널의 Coefficient를 이용할 수 있음.
25. Ch10.10 아키텍처 이해
Ch10. 인체 감지 모델 훈련하기
https://www.slideshare.net/ssuser6135a1/ss-106656779
26. Ch10.10 아키텍처 이해
Ch10. 인체 감지 모델 훈련하기
https://www.slideshare.net/ssuser6135a1/ss-106656779
전체 채널에 대한 Spatial conv 각 채널별 Spatial conv 이후 Feature별 연산
27. Ch10.10 아키텍처 이해
Ch10. 인체 감지 모델 훈련하기
https://www.slideshare.net/ssuser6135a1/ss-106656779
전체 채널에 대한 Spatial conv 각 채널별 Spatial conv 이후 Feature별 연산