지난 4월 우리의 신제품 OpenMV4 H7 Plus가 출시되었습니다. 오늘은 OpenMV4 H7 Plus의 새로운 기능인 EdgeImpulse 온라인 웹사이트를 활용하여 신경망을 직접 훈련시켜 분류 및 인식을 수행하는 방법을 소개해 드리겠습니다.
본 튜토리얼에서는 머신러닝을 사용하여 OpenMV4 H7 Plus 스마트 카메라로 얼굴에 마스크 착용 여부를 식별하는 시스템, 즉 영상 분류를 구현하는 방법을 배우게 됩니다.

EdgeImpulse는 임베디드 장치에 온라인 신경망 모델 훈련 서비스를 제공하는 웹사이트로, 우리 OpenMV의 파트너이며 동시에 ST마이크로일렉트로닉스의 공식 파트너입니다. 현재 EdgeImpulse는 우리 OpenMV 사용자에게 무료로 개방되어 있으며, OpenMV 사용자는 EdgeImpulse를 무료로 사용하여 OpenMV에 적합한 신경망 모델을 온라인으로 훈련할 수 있습니다.
임베디드 장치 OpenMV에 신경망을 추가하여 밀렵꾼과 코끼리를 구별하고, 공장 생산 라인의 품질 관리를 수행하며, 리모컨 모델 차량이 자율 주행할 수 있는 기능을 구현할 수 있습니다.
본 튜토리얼에서는 고품질 데이터 세트를 구축하기 위해 이미지를 수집하는 방법, 신경망을 훈련시키기 위해 전이 학습을 적용하는 방법, 그리고 시스템을 OpenMV에 배포하는 방법을 배우게 됩니다.
또한 비디오 튜토리얼도 제공되며, 공식 웹사이트에서 'OpenMV4 Plus로 신경망을 훈련하여 마스크 인식하기'를 검색하여 시청할 수 있습니다.
전체 프로젝트 내용을 다음 주소에서 확인하실 수 있으며, 모든 코드와 모델이 포함되어 있습니다: https://book.openmv.cc/project/mask.html
EdgeImpulse를 사용하여 OpenMV에 적합한 신경망 모델을 온라인으로 훈련하는 과정은 주로 데이터셋 수집, 업로드, 훈련 및 배포의 네 가지 단계로 나뉩니다.
01. 데이터셋 수집
이 튜토리얼에서는 얼굴에 마스크를 착용했는지 여부를 구분할 수 있는 모델을 구축합니다. 물론 다른 물체를 분류하도록 선택할 수도 있습니다. 머신러닝 모델이 작동하도록 하려면 마스크를 착용한 얼굴과 착용하지 않은 얼굴의 많은 예시 이미지를 수집해야 합니다. 훈련 시 이러한 예시 이미지는 모델의 구별 연습에 사용됩니다.
OpenMV IDE를 사용하여 데이터셋을 수집해야 하며, 이미지 수집 단계는 다음과 같습니다:
* 두 개의 카테고리 생성:
OpenMV IDE 메뉴 바의 "도구"를 열고 "데이터셋 편집기"를 선택한 후 "새 데이터셋"을 클릭합니다. 그런 다음 새 폴더를 생성하고 열어 데이터셋 안에 mask(마스크를 쓴 얼굴 사진을 저장하는 용도)와 face(마스크를 쓰지 않은 얼굴 사진을 저장하는 용도)라는 이름으로 각각 두 개의 폴더를 추가로 생성합니다.


OpenMV를 사용하여 이미지 수집
먼저 OpenMV를 연결하고 IDE에서 '연결'을 클릭한 후 '실행'을 클릭합니다. Framebuffer 프레임 버퍼에서 OpenMV의 실시간 이미지를 볼 수 있습니다. 왼쪽 메뉴 바의 사진 버튼을 클릭하면 OpenMV가 자동으로 이 사진을 저장하며, 이것이 데이터 세트 내의 하나의 데이터입니다.
먼저 마스크를 착용한 사람의 얼굴을 저장해야 합니다. 사진 버튼을 클릭하면 IDE 하단에서 사진을 한 장 촬영하며, 자동으로 00000으로 명명됩니다. 그다음 사진은 00001로 명명되며, 이와 같은 방식으로 진행됩니다.
OpenMV를 사용하여 각각 200장의 마스크 착용(남녀 각 100장) 및 200장의 마스크 미착용(남녀 각 100장) 얼굴 사진을 수집합니다.


* 참고: 다양한 각도의 사진을 확보하여 우리의 훈련 학습 다양성을 보장해야 합니다.
수집 과정에서 특정 이미지가 완벽하게 수집되지 않았다면, 해당 이미지를 우클릭하여 삭제를 클릭하세요.
02、업로드
OpenMV로 이미지 수집을 완료한 후, EdgeImpulse 공식 웹사이트(https://edgeimpulse.com/)에 계정을 등록하고 로그인하여 이미지 업로드를 시작해야 합니다. 이미지 업로드 단계는 다음과 같습니다:
EdgeImpulse에서 새 프로젝트를 생성하고 "keys"를 클릭한 후 "API Key"를 선택하여 "API Key"를 복사하세요. API Key를 통해 OpenMV IDE와 Edge Impulse의 연결을 구현합니다.

OpenMV IDE 상단 메뉴바의 "도구" - "데이터 편집기" - "Export" - "업로드" - "API Key로 업로드"를 선택하고, "API Key"를 복사하여 업로드하면 됩니다.
업로드 시 데이터는 자동으로 훈련 세트와 테스트 세트로 분할되며, 기본적으로 "80%와 20%"의 비율을 선택하면 됩니다. 우리는 총 400여 장의 얼굴 사진을 수집했으며, 그중 80%의 Training Date는 기본적으로 80%의 데이터를 훈련에 사용하고, 나머지 20%는 테스트 세트로 사용한다는 의미입니다.


03. 훈련 데이터 세트
데이터셋이 준비되면 EdgeImpulse 웹사이트 인터페이스에서 데이터셋을 학습할 수 있습니다.
* 구성 처리 모듈:
먼저 "Impulse Design"를 선택하고 처리 모듈을 구성합니다:
기본 이미지 크기를 "96 x 96"으로 설정합니다.
* "이미지Images" 모듈을 선택하면 이미지 분류 훈련을 의미합니다(EdgeImpulse를 사용하여 소리, 비디오 등을 분류할 수도 있습니다).
* "전이 학습(이미지) Transfer Learning (Images)"를 선택하고 학습할 모델을 설정합니다.
저장Save impulse"를 선택하고 Successfully가 표시되면 설정이 성공한 것입니다.

* 이미지 전처리:
왼쪽 메뉴에서 "이미지Image"를 클릭하고, 색상 형식을 "RGB"로 설정한 후 "저장Save"을 클릭하세요.

다음으로 "특징 생성(Generate features)"을 선택하여 프로세스를 시작하면 400여 장의 데이터에 대해 이미지 전처리가 진행되며, 오른쪽에는 전체 데이터셋의 3D 시각화가 표시됩니다.

SingTown 구성 이전 학습 모델
왼쪽 메뉴에서 "전이 학습(Transfer learning)"을 클릭하고, 설정된 매개변수는 모두 기본값을 선택하거나 필요에 따라 매개변수를 변경할 수 있습니다.
1. 훈련 주기 수 Number of training cycles의 기본값을 10으로 설정합니다
2. 학습률(Learning rate)을 0.0005로 설정합니다.
3. "데이터 증강(Data augmentation)"을 선택하거나 선택하지 않을 수 있습니다.
4. 최소 신뢰도 Minimum confidence rating을 기본값으로 0.8로 설정합니다.
훈련 시작(Start training)"을 클릭하면 훈련 과정은 약 4~5분 정도 소요됩니다.
모델 훈련이 완료되면 정확도, 혼동 행렬(confusion matrix) 및 예상 장치 성능을 확인할 수 있습니다.

* 테스트 모델:
훈련이 완료되면, 테스트 데이터를 사용하여 모델을 검증할 것입니다.
모델 테스트Model testing"를 선택하고 "샘플 이름Sample name" 옆의 체크박스를 선택한 후 "선택 항목 분류Classify selected"를 클릭하세요. 여기에 표시된 정확도는 97%에 달하며, 데이터가 매우 적은 모델로서는 드문 성과입니다.

빨간색으로 표시된 이 이미지가 불확실한 것으로 나타났습니다. 이 이미지 오른쪽의 세 개의 점을 클릭하고 "분류 표시 Show classification"을 선택하면 "실시간 분류" 인터페이스로 이동하며, 여기에는 파일의 더 자세한 내용이 포함되어 있습니다. 이 인터페이스는 이미지 분류 오류의 원인을 파악하는 데 도움이 될 것입니다.

데이터가 모든 알려진 클러스터(마스크 착용/미착용)를 벗어난 경우, 이는 이전에 본 어떤 분류와도 일치하지 않는 데이터일 수 있습니다. 이는 머리카락이 얼굴의 대부분을 가렸기 때문일 수 있습니다.
04. OpenMV에서 모델 실행하기
훈련 설계, 모델 훈련 및 모델 검증 단계를 완료하면 이 모델을 OpenMV로 내보낼 수 있습니다. "OpenMV"를 선택하고 "Build"를 선택하여 생성하면 자동으로 3개의 파일이 생성됩니다:
* trained.tflite 훈련된 신경망 모델
* labels.txt 두 개의 분류 라벨(face와 mask)
* ei_image_classification.py는 OpenMV에서 실행할 코드입니다

OpenMV IDE에 연결하여 이 3개의 파일을 OpenMV 내장 Flash에 저장합니다. ei_image_classification.py 파일을 OpenMV IDE에서 열면 EdgeImpulse에서 방금 생성한 코드를 확인할 수 있습니다. 실행을 클릭하면 시리얼 터미널에서 실행 결과가 표시됩니다.


좋습니다, 이제 OpenMV에 직접 신경망을 훈련시키는 기능을 성공적으로 추가하셨습니다.
SingTown의 성과를 기대합니다!

OpenMV 기반 AI 경비 시스템: 주요 장소에서 문이 닫히지 않았을 경우 자동 알림
중요 장소의 출입문이 장시간 닫히지 않았는지 자동으로 판단하고, 즉시 알림을 제공합니다.

인원이 경계를 넘어설 경우 즉시 경고가 발생하며, OpenMV가 ‘안전한 경계 감각’을 실현합니다.
가상 경계선을 통해 인원 또는 장비의 경계 위반 행위를 식별합니다.

“AI 도시관리관” 등장: OpenMV 기반 점용 영업 자동 식별 시스템
점유형 영업 행위를 자동으로 식별하여 도시의 일상적 관리 업무를 지원합니다.

가스통을 무분별하게 배치하셨습니까? OpenMV를 활용한 자동 위험 경고 시스템
가스통의 부적절한 배치 위치를 자동으로 식별하여 가스 관련 안전 위험을 사전에 탐지합니다.

대전류 작업 시 절연 장갑을 착용하지 않으셨습니까? OpenMV가 즉시 경고합니다!
작업자가 절연 장갑을 착용했는지 자동으로 식별하여 안전한 작업을 지원합니다.

OpenMV 스마트 카메라를 활용하여 알루미늄 판 표면 결함을 실시간으로 식별
알루미늄 판재 표면의 긁힘, 오목함 등 결함을 온라인으로 식별하여 품질 관리를 지원합니다.