이번 글에서는 GitHub 페이지에 있는 객체 감지(object detection) 샘플을 실제로 시험해 보겠습니다.
이전 기사: STM32N6 마이크로컨트롤러로 AI 구현하기 - STM32 model zoo 사용해보기 ① 서론
【준비물】
- STM32N6570-DK: STM32N6570-DK (카메라 포함)
- 컴퓨터 (본 기사에서는 Windows PC를 사용합니다)
- USB Type-C 케이블
마이크로컨트롤러: STM32N657X0
기본 정보
Neural MCU, Arm® Cortex®-M55
600-Gops ST Neural-ART Accelerator
Neo-Chrom 2.5D GPU
4.2 MB 연속 SRAM
회로도 부품표에는 카메라 모델명이 “AS-BC538A3M6-63 (HONGJIA)”라고 되어 있지만, 이는 IMX335 (SONY)를 기반으로 합니다. 추후 변경될 가능성이 있습니다.
그 외에 이 데모에서 사용할 수 있는 개별 구매 가능한 카메라 보드도 있습니다.
STEVAL-55G1MBI
다음과 같이 카메라를 장착합니다. 보드와 카메라는 플랫 케이블로 연결합니다. 먼저, 커넥터의 검은색 걸쇠(latch) 부분을 바깥쪽으로 살짝 밀어 느슨하게 만듭니다. 플랫 케이블의 파란색 면을 위로 향하게 한 후 (케이블 전극면이 기판 쪽으로 접촉하도록), 틈새에 밀어 넣습니다. 그 상태에서 걸쇠를 눌러 고정합니다. 비스듬히 끼운 상태에서 걸쇠를 닫으면 제대로 연결되지 않으니 주의해야 합니다.
동봉된 가는 스페이서를 사용하면 보드 본체에 카메라를 고정할 수 있습니다.
STM32 마이크로컨트롤러에 코드를 기록하기 위한 표준 도구 세트업과, 구동용 펌웨어(GitHub에서 다운로드)를 준비합니다.
※이미 설치되어 있다면 건너뛰세요.
컴퓨터에서 STM32 마이크로컨트롤러 개발 보드를 처음 사용하는 경우, STM32CubeProgrammer (이전 도구: ST Link Utility)를 설치하여 COM 포트 드라이버 등을 추가해야 합니다. 이 도구는 STM32 마이크로컨트롤러에 펌웨어/프로그램을 기록할 때 사용되는 기본 도구입니다.
다운로드 위치: STM32CubeProgrammer
이 GitHub 리포지토리에서 zip 파일을 다운로드한 후, 압축을 해제하여 사용합니다. 주의할 점은, 압축 해제 과정 중 일부 파일에 대해 “PATH가 너무 깁니다”와 같은 오류가 발생할 가능성이 높다는 것입니다. (오류 대상 파일은) 이번에는 사용하지 않으므로, 일단 이 오류는 건너뛰어도 괜찮습니다. 참고로 압축을 풀 위치를 루트 폴더(D:\ 등)로 지정하면 정상적으로 해제할 수 있습니다.
다운로드 위치: STM32N6-GettingStarted-ObjectDetection
위 GitHub 페이지는 STM32 model zoo service 리포지토리 (기사 ①에서 소개됨) 아래의 application code 폴더에서도 유사하게 접근할 수 있습니다. (주의: 다른 리포지토리를 이동하는 것이므로, 이 후 상위 폴더로 이동 등의 작업을 해도 “STM32 mode zoo service”로 돌아갈 수는 없습니다.) object detection 폴더 내의 “STM32N6 **”을 클릭하여 STM32N6-GettingStarted-ObjectDetection 리포지토리로 이동해 주세요.
실행에 필요한 바이너리/파일은 이곳에서 확인할 수 있습니다.
위치 예시
Drive:...\\STM32N6-GetStarted-ObjectDetection-main\Binary\STM32N6570-DK
더불어, ST.com의 STM32N6용 AI 개발 에코시스템 페이지에서도 접근할 수 있습니다.
...Binary\STM32N6570-DK 폴더 안에는 파일이 하나 있지만, 내용은 3개의 세그먼트로 나뉘어 있습니다.
- 부트로더 (Bootloader)
- AI용 네트워크/파일 (Network/File)
- 애플리케이션 파일 (Application/File)
object detection에 한정되지 않고, AI 학습 데이터(네트워크/파일)와 본체 펌웨어(애플리케이션/파일)는 파일로 분리되어 있습니다. 기계 학습 검증의 경우, AI용 네트워크/파일만 재작성하여 기록한 후 테스트하는 등의 작업 반복이 필요할 것으로 예상됩니다.
제공된 hex 파일은 위 세 가지 파일을 하나로 통합했으므로, 한 번의 기록으로 충분합니다.
STM32N6570에는 내장 플래시 메모리(Flash memory)가 없기 때문에 일반적인 STM32 마이크로컨트롤러와는 사용 방식이 약간 다릅니다. 보드에 있는 스위치를 이용해 development mode / Flash mode 중 어느 모드로 시작할지 전환할 수 있으며, 쓰기 작업은 development mode에서 진행합니다. 쓰기가 완료된 후, 스위치를 다시 되돌리고(→Flash mode) 재부팅하면 기록된 애플리케이션이 동작합니다.
- 보드의 SW1(슬라이드 스위치)을 development mode(“H” 쪽)에 설정하고 PC에 연결
- 대상 파일을 쓰기
- 보드의 SW1(슬라이드 스위치)을 flash mode(“L” 쪽)로 되돌리고 재부팅 → object detection 애플리케이션 실행
그럼 순서대로 진행하겠습니다.
아래와 같이 보드의 **SW1(BOOT1 슬라이드 스위치)**을 **Development mode(“H” 쪽)**에 설정한 후 PC와 USB로 연결합니다. 보드는 development mode로 시작하므로, ST-Link를 통해 접근이 가능해집니다.
참고 레퍼런스 매뉴얼: RM0486
다음으로, PC와 보드를 연결한 상태에서 STM32CubeProgrammer를 실행하고 오른쪽 상단의 CONNECT를 클릭합니다. 정상적으로 인식되면 Target Information 부분에 STM32N6570-DK 등의 정보가 표시됩니다.
사전 준비
왼쪽의 'EL' 아이콘을 클릭하여 External Loader 페이지를 열고, 외부 플래시 메모리(MX66UW1G45G 1Gbit (128MByte) 시작 주소:0x70000000)를 사용할 수 있도록 설정합니다. 'n6570' 등으로 검색하면 여러 후보가 나타나므로, 이 중에서 STM32N6570-DK용 「MX66UW1G45G」 외부 메모리에 체크합니다.
한 번 설정하면 다시 변경하지 않는 한 다음 부팅 시에도 같은 설정이 유지됩니다. 과거에 다른 보드를 사용했거나 다른 External loader 설정으로 되어 있는 경우, 'Deselect all'로 지운 후 다시 설정해 주세요.
bin 폴더 내의 하나의 파일을 쓰기만 하면, 세 가지 데이터가 각각 지정된 주소로 기록되는 것이 완료됩니다.
Erasing & Programming 페이지로 이동하여 Browse를 클릭하고 아까 다운로드한 파일을 불러옵니다.
hex 파일이므로 주소 정보가 포함되어 있습니다. 그대로 Start Programming을 클릭하여 쓰기를 시작합니다.
정상적으로 쓰기가 완료되면, Disconnect를 클릭한 후 USB 케이블을 한 번 뽑아주세요.
보드의 SW1(BOOT1 슬라이드 스위치)을 **flash mode(“L” 쪽)**로 되돌리고 재부팅합니다(아까 기록한 메모리 영역(=외부 플래시 메모리)에서 시작합니다). 카메라를 사용하는 애플리케이션의 경우, USB 소스 측의 전원 공급 부족으로 인해 정상적으로 부팅되지 않을 수 있습니다(부팅이 안 될 때는 LED3가 빨간색으로 점등하고 LCD 디스플레이에는 아무것도 표시되지 않습니다). 이럴 경우에는 AC-USB 어댑터 등을 사용해 주세요.
손에 있던 AC-USB 어댑터(출력 사양: 5V 1A)로 부팅
애플리케이션이 시작되어 LCD 디스플레이에 카메라 이미지가 표시되는 것을 확인합니다.
이번에 사용한 object_detection용 파일의 경우, 각 펌웨어(세그먼트)의 쓰기 대상 주소는 다음과 같습니다.
- boot loader: ai_fsbl.hex 0x70000000~
- Application file: STM32N6570-DK_GettingStarted_ObjectDetection.hex 0x70100000~
- AI network file: STM32N6570-DK_network_data.hex 0x70380000~
STM32CubeProgrammer에서도 Memory & File editting 페이지에서 hex 파일을 직접 열면 쉽게 확인할 수 있습니다. 상단 태그의 Open file을 클릭하여 새롭게 파일을 로드할 수 있습니다.
AI용 네트워크 파일만 변경하거나 메인 프로그램만 변경할 때 참고해 주십시오.
부트로더(ai_fsbl.hex)의 경우, 이 애플리케이션 코드 폴더에 있는 다른 AI 애플리케이션에서도 공용으로 사용할 수 있습니다. 다른 AI 데모를 사용할 때도 이 부트로더는 변경하지 않아도 문제가 없습니다.
원래 정보는 여기에서 확인 가능합니다: object detection 샘플 애플리케이션 쓰기 방법
지난 글에서 조사했던 머신러닝용 설정 파일(st_yoloxn_d100_w025_480_config.yaml)에서는 판별 클래스로 'person'만 정의되어 있었습니다. 이번에 실제 하드웨어로 확인해 보았는데, 예상대로 사람만을 식별하는 데모인 것 같습니다.
사람의 전신이 화면에 잡히는 경우에는 거의 100% 확률로 인식하지만, 부분적으로만 포착되면 어려워지는 것으로 보입니다.
이미지를 캡처하기 위해 이번 확인에서는 NUCLEO-N657X0-Q 보드를 사용했습니다.
다음번에는 다른 AI 모델 데이터를 시험해 보고 싶습니다.