저비용 모듈 및 MicroPython을 사용하여 AI 기반 시청각 장치를 신속하게 구축
DigiKey 북미 편집자 제공
2019-08-01
스마트 연결 제품에 대해 높아지는 요구 사항을 충족하기 위해 설계자는 점차적으로 머신 러닝(ML)과 같은 인공 지능(AI) 방법으로 전환하고 있습니다. 하지만 하드웨어를 선택하는 데 어려움을 겪고 있습니다. 비용 효율적이지만 복잡한 알고리즘에 충분한 성능을 제공하지 못하는 범용 프로세서를 기반으로 설계하거나, 성능은 우수하지만 설계 비용과 복잡성이 큰 특수 솔루션을 사용해야 했습니다.
이제 이 두 가지 옵션에만 얽매일 필요가 없어졌습니다. 이 기사에서는 개발자가 친숙한 MicroPython 프로그래밍 언어를 사용하여 고성능 AI 기반 솔루션을 배포할 수 있도록 도와주는 Seeed Technology의 간단하고 비용 효율적인 대체 솔루션에 대해 설명합니다.
머신 러닝 접근 방식
ML 알고리즘의 성공으로 광범위한 응용 분야에서 물체 감지 및 음성 인식을 위한 효과적인 접근 방식을 찾고 있는 개발자들의 관심이 커졌습니다. 이러한 알고리즘 중에 합성곱 신경망(CNN)은 머신 비전 및 청각 응용 분야에 필요한 매우 정확한 인식 성능을 입증했습니다. 그 결과, CNN 및 그와 유사한 심층 신경망(DNN) 응용 분야는 개인용 전자기기, 웨어러블 및 사물 인터넷(IoT) 설계에서 지속적인 성장을 하고 있습니다.
일반적인 CNN 유추 요구 사항을 가진 응용 분야의 경우 개발자는 단일 명령어, 다중 데이터(SIMD) 아키텍처 및 디지털 신호 처리(DSP) 확장을 지원하는 범용 프로세스에서 실행 중인 신경망 소프트웨어 라이브러리를 사용하여 성공적인 솔루션을 구현할 수 있습니다(“Raspberry Pi를 사용하여 머신 러닝 응용 제품 구축” 참조).
요구 사항이 더 까다로운 경우, 개발자는 ML 알고리즘을 가속할 수 있는 고성능 DSP 블록이 내장된 현장에서 프로그래밍할 수 있는 게이트 어레이(FPGA)를 사용하여 더 강력한 CNN 기반 설계를 구축할 수 있습니다(“FPGA를 사용하여 머신 러닝을 통해 고성능 내장형 비전 응용 제품 구축” 참조).
프로세서 기반 ML 설계는 일반적으로 FPGA 기반 ML 설계보다 간단히 구현할 수 있지만, CNN 모델의 수학적 복잡성으로 인해 일반적으로 프로세서 기반 솔루션의 유추 속도가 느려집니다. FPGA 기반 솔루션은 주요 처리 단계를 하드웨어로 구현하여 유추 성능을 가속화할 수 있지만, 개발 요구 사항으로 인해 최적화된 솔루션을 빠르게 구현하는 데 어려움이 있습니다.
Seeed Technology Sipeed MAIX-I 114991684 모듈의 출시로 개발자는 스마트 제품 및 에지 컴퓨팅 장치에서 고성능 CNN 유추 솔루션을 빠르게 배포할 수 있는 대체 솔루션을 갖게 되었습니다.
고성능 CNN 처리 모듈
MAIX-1 모듈은 고성능 이중 코어 프로세서, Espressif Systems ESP8285 Wi-Fi 마이크로 컨트롤러, Winbond W25Q128FW 128Mbit 직렬 플래시 메모리, 전압 조정기, IPEX 안테나 커넥터를 결합합니다. 무선 버전인 Sipeed MAIX-I 114991695 모듈은 ESP8285 마이크로 컨트롤러 없이 제공됩니다. 광범위한 응용 분야의 워크로드를 가속화하도록 설계된 이중 코어 프로세서는 64비트 RISC-V 프로세서 쌍을 부동 소수점 처리 장치(FPU) 및 가속기와 통합하여 CNN 모델, 오디오 처리, 암호화 및 고속 프리에 변환(FFT) 계산을 지원합니다(그림 1).
그림 1: Seeed Technology MAIX-I 모듈은 무선 마이크로 컨트롤러, 플래시 메모리, DC 전압 조정기 및 IPEX 안테나 커넥터를 고성능 이중 코어 프로세서 및 가속기와 결합하여 합성곱 신경망(CNN) 처리 및 기타 기능을 지원합니다. (이미지 출처: Seeed Technology)
8Mbyte SRAM(Static Random Access Memory) 및 128Kbit 일회성 프로그래밍 가능(OTP) 메모리와 함께 이중 코어 프로세서는 비디오 카메라를 위한 액정 표시 장치(LCD) 포트 및 디지털 비디오 포트(DVP)를 비롯한 포괄적인 인터페이스를 통합합니다. 개발자는 프로세서의 현장 프로그래밍 가능 IO 어레이(FPIOA) 멀티플렉서를 사용하여 255개 내부 기능을 사용 가능한 48개 범용 IO(GPIO) 포트에 매핑할 수 있습니다.
프로세서의 가속기와 통합 기능은 일반 스마트 제품 설계의 광범위한 요구 사항을 지원합니다. 예를 들어 오디오 프로세서 장치(APU)는 최대 8개의 마이크를 지원하고 전용 512 포트 FFT 가속기를 포함합니다. 이러한 APU 기능만 활용하더라도 개발자가 마이크 어레이를 효과적으로 사용하여 스마트 제품의 음성 인터페이스에 사용되는 오디오 빔형성 방향 픽업을 구현할 수 있습니다. 핵심 구문 절전 해제와 같은 음성 인터페이스 기능의 경우 개발자는 APU에서 미리 처리된 오디오 출력을 사용하여 프로세서의 통합 CNN 가속기를 구동할 수 있습니다.
CNN 가속기
Sipeed MAIX-I 모듈의 모든 기능 중에서 가장 차별화되는 기능은 모듈의 이중 코어 프로세서에 통합된 CNN 가속기에 있습니다. 개별 커널 기능의 기본 CNN을 빠르게 처리하도록 설계된 신경망 프로세서(여기서는 “KPU”(Kernel Processing Unit)라고 함)는 CNN 모델의 개별 레이어를 구성하는 나선, 배치 정규화, 활성화 및 풀링 커널 기능을 하드웨어로 구현합니다(“즉시 사용 가능한 하드웨어 및 소프트웨어를 통해 머신 러닝 시작하기” 참조).
이러한 기능을 사용하여 개발자는 CNN을 통해 오디오 인터페이스의 음성 활성화 구문을 인식하거나 시각 기반 응용 분야에서 물체를 감지하여 분류하는 저전력 설계를 구현할 수 있습니다. 실제로 KPU에서는 프로세서의 통합 SRAM을 사용하여 5.9Mbyte의 고정 소수점 CNN 유추 모델 또는 11.8Mbyte의 미리 양자화된 부동 소수점 모델을 통해 실시간 유추를 수행할 수 있습니다. 예를 들어 머신 비전 응용 분야에서 KPU는 스마트 제품의 얼굴 또는 물체 감지에 사용되는 상대적으로 작은 이미지 프레임 유형을 사용하여 30fps 이상으로 유추를 수행합니다. 비실시간 응용 분야의 경우 개발자는 외장형 플래시를 사용하여 모델 크기(플래시 용량에 의해서만 제한됨)를 처리할 수 있습니다.
내부적으로 KPU는 FIFO(First-In First-Out) 버퍼를 사용하여 일반 CNN 모델의 각 레이어를 순차적으로 처리하는 유추 모델을 실행합니다(그림 2, 상단). 각 레이어에 대해 KPU는 온칩 SRAM 또는 외장형 플래시에서 모델 파라미터와 데이터를 읽고 연결된 가속 커널 기능을 사용하여 레이어의 커널 기능을 실행합니다(그림 2, 하단). 개발자는 이 레이어 처리 파이프라인에 내장된 콜백 메커니즘을 활용하여 KPU 하드웨어에서 각 처리 시퀀스를 완료하는 자체 루틴을 실행할 수 있습니다.
그림 2: 유추를 수행할 때 전체 KPU 작업(상단)은 여러 레이어로 구성되며, 각 레이어는 적절한 커널 기능 실행에 참여합니다(하단). (이미지 출처: Seeed Technology)
개발 플랫폼
KPU는 전용 하드웨어의 이면에 있는 CNN 알고리즘 실행 복잡도를 줄여줍니다. 개발자의 경우 Seeed의 하드웨어 제품 및 소프트웨어 패키지를 조합하여 CNN 기반 개발 복잡도를 해소할 수 있습니다. MAIX-I 모듈과 함께 개발자는 점점 더 많은 기능을 제공하는 Seeed 기판 레벨 제품을 사용하여 MAIX-I 기반 설계를 빠르게 평가하고 개발할 수 있습니다.
기본 레벨에서 Seeed 110991188 개발 키트는 기본 기판에 실장된 MAIX-I 모듈을 2.4인치 LCD 및 Seeed 114991881 OV2640 어안 카메라와 결합합니다. Seeed 110991189 키트는 비 Wi-Fi 버전 MAIX-I 모듈을 통해 동일한 기능을 제공합니다.
시제품 개발을 위해 Seeed 102991150 Bit 평가 기판은 브레드 기판용으로 특별히 고안된 기판에 MAIX-I 모듈을 실장합니다. Seeed Technology 110991190 MAIX-I Bit 키트는 Bit 기판을 브레드 기판에 연결하기 위해 Bit 평가 기판, 2.4인치 디스플레이, OV2640 카메라, 헤더 쌍을 결합합니다.
더 복잡한 응용 제품 개발을 위해 Seeed 110991191 Sipeed MAIX Go 기판 키트는 MAIX-I 모듈을 STMicroelectronics STM32F103C8 마이크로 컨트롤러, 카메라, I2S 마이크, 스피커, 리튬 배터리 관리, MicroSD 슬롯 및 여러 인터페이스 커넥터와 결합합니다(그림 3). 포함된 2.8인치 LCD를 기판 후면에 연결하여 개발자는 키트를 AI 구동 디지털 비디오 시스템용 플랫폼으로 효과적으로 활용할 수 있습니다.
그림 3: Seeed Technology MAIX 기판 계열 중 하나인 Sipeed MAIX Go 기판은 MAIX-I 모듈을 STMicroelectronics STM32F103C8 마이크로 컨트롤러, 카메라, 디스플레이 및 여러 인터페이스와 결합하여 물체 인식을 위한 독립형 이미징 시스템을 제공합니다. (이미지 출처: Seeed Technology)
이 기판은 많은 스마트 제품 요구 사항을 충족하는 독립형 솔루션을 제공하고, MicroPython을 지원하므로 간편합니다. Seeed Sipeed 기판과 MicroPython을 결합하여 개발자가 간단한 접근 방식을 활용하여 AI 기반 스마트 제품을 개발할 수 있습니다.
MicroPython을 통한 신속한 개발
MicroPython은 리소스 제약이 있는 마이크로 컨트롤러에 최적화된 Python 프로그래밍 언어를 제공하도록 만들어졌습니다. 하드웨어 액세스를 직접 지원하여 MicroPython은 상대적으로 간단한 Python 기반 개발을 내장형 시스템 소프트웨어 개발에 적용합니다.
C 라이브러리 대신 개발자는 친숙한 Python 가져오기 메커니즘을 사용하여 필요한 라이브러리를 로드합니다. 예를 들어 개발자는 MicroPython 머신 모듈을 간단히 가져와서 마이크로 컨트롤러의 I2C 인터페이스, 타이머 등에 액세스할 수 있습니다. 이미지 센서를 이용한 설계의 경우 개발자는 센서 모듈을 가져온 후 이미지 센서에서 프레임을 반환하는 sensor.snapshot()을 호출하여 이미지를 캡처할 수 있습니다.
Seeed의 MaixPy 프로젝트는 MAIX-I 모듈과 관련 개발 기판의 핵심이 되는 이중 코어 K210 프로세서를 지원하여 MicroPython을 확장합니다. MAIX-I 모듈의 K210 프로세서에서 실행 중인 MaixPy MicroPython 인터프리터는 MicroPython 기능과 특수 MaixPy 모듈(예: MaixPy KPU 모듈)을 사용하여 프로세서의 KPU 기능을 가속화합니다.
개발자는 MaixPy 및 KPU 모듈을 사용하여 CNN 유추를 쉽게 배포할 수 있습니다. 실제로 Seeed MaixHub 모델 라이브러리는 개발자가 MAIX-I 모듈을 시작하는 데 도움이 되는 많은 사전 학습된 CNN 모델을 제공합니다. 이러한 모델을 다운로드하려면 개발자가 MAIX 기판에서 ID 생성기 유틸리티를 실행하여 사용 가능한 머신 ID를 제공해야 합니다.
예를 들어 LCD가 연결된 Seeed Sipeed MAIX Go 키트를 사용하여 개발자는 얼굴 감지용으로 사전 학습된 모델을 로드할 수 있습니다. 모델을 이용해 유추를 수행하려면 단 몇 줄의 Python 코드만 실행하면 됩니다(목록 1).
복사 import sensor import image import lcd import KPU as kpu lcd.init() sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.run(1) task = kpu.load(0x300000) # you need put model(face.kfpkg) in flash at address 0x300000 # task = kpu.load("/sd/face.kmodel") anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025) a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor) while(True): img = sensor.snapshot() code = kpu.run_yolo2(task, img) if code: for i in code: print(i) a = img.draw_rectangle(i.rect()) a = lcd.display(img) a = kpu.deinit(task)
목록 1: 개발자는 단 몇 줄의 MicroPython만 있으면 플래시 상주 신경망 모델을 사용하여 유추를 구현할 수 있습니다. (코드 출처: Seeed Technology)
사전 학습된 모델은 Yolo(You Only Look Once) 모델이라는 CNN을 구현합니다. 이 모델은 이전 CNN 알고리즘의 기본 슬라이딩 창을 사용하는 대신 학습 및 유추 중에 전체 이미지를 사용하여 유추를 가속화합니다. MaixHub 모델 라이브러리에 제공되는 “Tiny Yolo2” 모델에 Yolo의 추가적인 최적화 기능이 포함되어 있습니다. 그 결과 MAIX Go에서 실시간으로 얼굴을 감지할 수 있는 고성능 모델이 제공됩니다(그림 4).
그림 4: Sipeeed MAIX Go 기판을 사용하여 개발자는 사전 학습된 특수 CNN 유추 모델로 구축된 실시간 얼굴 감지를 빠르게 탐구할 수 있습니다. (이미지 출처: Seeed Technology)
물론, 유추는 복잡한 DNN 모델 개발 프로세스의 배포 단계에 불과하고 매우 단순한 이 예에서는 효과적인 모델 구현에 수반되는 문제점이 드러나지 않을 수 있습니다.
맞춤형 모델을 개발하려면 개발자가 모델 학습을 위한 충분한 크기의 샘플을 취득해야 합니다. 학습을 위해 개발자는 TensorFlow와 같은 딥 러닝 프레임워크를 사용하여 모델을 구성하고 학습 데이터를 활용하여 학습합니다.
이러한 단계는 매우 까다로울 수 있지만 MAIX-I 에코시스템을 사용하면 유추 배포를 상대적으로 간소화할 수 있습니다.
Seeed는 개발자가 TensorFlow, Keras 또는 Darknet에서 개발된 모델을 KPU의 특수 kmodel 형식으로 변환할 수 있는 변환기를 제공합니다. MaixHub 모델 라이브러리에서 다운로드한 사전 학습된 모델과 마찬가지로 개발자는 맞춤형 모델을 MAIX-I 모듈에 업로드하고 위에서 언급한 대로 MicroPython을 통해 성능을 평가할 수 있습니다.
또한 Seeed는 C 프로그래밍 언어로 맞춤형 소프트웨어 응용 제품을 작성하기 위한 소프트웨어 개발 키트(SDK)를 제공합니다. 별도 SDK가 RTOS 실시간 운영 체제에 내장된 독립형 C 응용 제품 또는 C 응용 제품을 지원합니다.
결론
다양한 스마트 제품에 이미지 및 음성 기반 인터페이스가 활발히 도입됨에 따라 , 이러한 제품의 기반이 되는 리소스 제약 설계에 머신 러닝 알고리즘 도임에 대한 관심이 지속적으로 증가하고 있습니다. 과거에는 구현하기 쉽고 실시간 머신 러닝 기능을 제공할 수 있는 충분한 기능을 갖춘 효과적인 솔루션 옵션이 거의 없었습니다.
그림과 같이 Seeed Technology의 MAIX-I 모듈 및 관련 기판을 사용하여 개발자는 오디오 또는 비디오 스트리밍 데이터로부터 실시간 음성 또는 물체 인식 기능을 제공할 수 있는 하드웨어 플랫폼에서 유추 모델을 빠르게 배포할 수 있습니다.
면책 조항: 이 웹 사이트에서 여러 작성자 및/또는 포럼 참가자가 명시한 의견, 생각 및 견해는 DigiKey의 의견, 생각 및 견해 또는 DigiKey의 공식 정책과 관련이 없습니다.


