9.1 Overview of NXP eIQ Machine Learning
9.1.1 Introduction (ML)
기계 학습(ML)은 1960년대에 기반을 컴퓨터 과학의 도메인이다. ML은 데이터에서 패턴과 규칙을 찾을 수 있는 알고리즘을 제공한다. ML은 명시적으로 프로그래밍하지 않고도 소프트웨어 애플리케이션이 결과를 더 정확하게 예측할 수 있게 해주는 알고리즘의 범주이다. ML의 기본 전제는 입력 데이터를 수신하고 통계 분석을 사용하여 출력을 예측하는 동시에 새로운 데이터를 사용할 수 있게 되면 출력을 업데이트할 수 있는 알고리즘을 구축하는 것이다. 2010년에, Deep Learning이라는 거대한 붐이 시작되었다. 딥 러닝은 Neural Networks(NN)을 기반으로 빠르게 성장하는 ML의 서브 도메인이다. 인간의 두뇌에서 영감을 얻은, Deep Learning은 다양한 작업(예: 컴퓨터 비전(CV), 자연어 처리(NLP))에서 최첨단 결과를 달성했다. Neural Nets(신경망)은 수백만 개의 예제로 부터 복잡한 패턴을 학습할 수 있다. NXP가 선두를 달리고 있는, 임베디드 세계에서 엄청난 적응이 예상된다. 고객 지원을 위한 노력을 계속하면서, NXP는 i.MX 8 QuadMax 디바이스에서 ML 애플리케이션을 개발과 배포할 수있는 ML 도구 세트인 i.MX용 NXP eIQ를 만들었다. 이 장에서는 NXP eIQ 기계 학습의 특정 영역에 대한 개요가 포함되어 있다. 기계 학습 커맨드의 자세한 실행에 대해서는 i.MX Machine Learning User's Guide(IMXMLUG)를 참조한다.
9.1.2 OpenCV
OpenCV는 오픈 소스 컴퓨터 비전 라이브러리이며, ML이라는 모듈 중 하나는 기존 기계 학습 알고리즘을 제공한다. OpenCV의 또 다른 중요한 모듈은 DNN이다. 이는 신경망 알고리즘을 지원한다.
OpenCV는 신경망 추론(DNN 모듈)과 기존 기계 학습 알고리즘(ML 모듈) 모두를 위한 통합 솔루션을 제공한다. 많은 컴퓨터 비전 기능을 포함하고 있어서, OpenCV는 다른 라이브러리에 의존하지 않고 짧은 시간에 복잡한 기계 학습 애플리케이션을 쉽게 구축할 수 있다.
OpenCV는 Computer Vision 분야에서 널리 채택되었으며, 강력하고 매우 활동적인 커뮤니티에서 지원한다. 주요 알고리즘은 다양한 디바이스와 명령어(instruction) 세트에 맞게 특별히 최적화되어 있다. i.MX의 경우, OpenCV는 Arm NEON 가속을 사용한다. Arm NEON 기술은 Arm Cortex-A 시리즈를 위한 고급 SIMD(Single Instruction Multiple Data) 아키텍처의 확장이다. NEON 기술은 오디오와 비디오 인코딩/디코딩, 사용자 인터페이스, 2D/3D 그래픽 또는 게임을 가속화하여 멀티미디어 사용자 경험을 개선하기 위한 것이다. NEON은 또한 신호 처리 알고리즘과 기능을 가속화하여 오디오와 비디오 처리, 음성과 안면 인식, 컴퓨터 비전과 딥 러닝 같은 애플리케이션의 속도를 높일 수 있다.
핵심으로, OpenCV DNN 모듈은 추론 엔진을 구현하며, 신경망 훈련을 위한 기능을 제공하지 않는다. 지원되는 모델과 지원되는 레이어에 대한 자세한 내용은 공식 OpenCV Deep Learning 페이지를 확인한다.
OpenCV ML 모듈에는 기계 학습 문제(예: 분류, 회귀 또는 클러스터링)를 해결하기 위한 클래스와 함구가 포함되어 있다. 여기에는 서포트 벡터 머신(SVM), 결정 트리, 랜덤 트리, 기대치 최대화, k-최근접 이웃, 클래식 베이즈 분류기, 로지스틱 회귀와 부스트 트리 같은 알고리즘이 포함된다.
9.1.3 Arm Compute
Arm Compute Library는 이미지 처리, 컴퓨터 비전 그리고 머신 러닝을 대상으로 하는 Arm CPU와 GPU 아키텍처에 최적화된 로우 레벨의 함수 모음이다. Arm 컴퓨터는 개발자가 알고리즘과 애플리케이션을 가속화하기 위해 개별적으로 소스를 제공하거나 복잡한 파이프라인의 일부로 사용할 수 있는 최적화된 기능의 편리한 저장소이다. Arm 컴퓨트 라이브러리는 NEON 가속도 지원한다. ARM 컴퓨터는 랜덤 가중치와 입력이 있는 DNN 모델을 사용하는 예와 그래프 API를 사용하는 AlexNet을 사용하는 예를 보여줄 수 있다.
9.1.4 TensorFlow Lite
TensorFlow Lite는 TensorFlow의 경량 버전이자 다음 단계이다. TensorFlow Lite는 모바일과 임베디드 디바이스에서 머신 러닝 모델을 실행하는 데 중점을 둔 오픈 소스 소프트웨어 라이브러리이다(www.tensorflow.org/lite에서 사용가능). 지연 시간이 짧고 바이너리 크기가 작은 온디바이스 머신 러닝 추론을 가능하게 한다. TensorFlow Lite는 Android OS Neural Networks API를 사용하여 하드웨어 가속도 지원한다. TensorFlow Lite는 모바일 플랫폼용으로 조정된 코어 연산(양자화와 부동 소수점 모두)의 집합을 지원한다. 성능과 양자화 정확도를 더욱 향상시키기 위해 미리 융합된 활성화와 편향을 통합한다. 또한, TensorFlow Lite는 모델에서 사용자 지정 작업의 사용도 지원한다.
TensorFlow Lite는 FlatBuffers를 기반으로 새로운 모델 파일 형식을 정의한다. FlatBuffers는 효울적인 오픈 소스 크로스 플랫폼 직렬화 라이브러리이다. 프로토콜 버퍼와 비슷하지만, 주된 차이점은 FlatBuffers는 종종 개체별 메모리 할당과 결합된 데이터에 액세스하기 전에 보조 표현을 위한 구문 분석/압축 해제 단계가 필요하지 않다는 것이다. 또한, FlatBuffers의 코드 풋프린터는 프로토콜 버퍼보다 훨씬 작다.
TensorFlow Lite에는 모바일에 최적화된 새로운 인터프리터가 있으며, 앱을 간결하고 빠르게 유지하는 것이 핵심 목표이다. 인터프리터는 로드, 초기화 그리고 실행 대기 시간을 최소화하기 위해 정적 그래프 순서 지정과 사용자 지정(덜 동적인)메모리 할당자를 사용한다.
9.1.5 ONNX Runtime
ONNX Runtime은 ONNX 모델 형식을 지원하는 Microsoft에서 개발한 오픈 소스 추론 엔진 프레임워크이다. ONNX Runtime은 NEON이 있는 CPU에서 실행되며, 실행 공급자를 사용하여 GPU/NPU 하드웨어 가속기도 지원한다. ONNX Runtime에 대한 자세한 내용은 공식 ONNX Runtime 프로젝트 웹페이지를 확인한다.
9.1.6 PyTorch
PyTorch는 컴퓨터 비전과 자연어 처리 같은 애플리케이션에 사용되는 오픈 소스 머신 러닝 라이브러리이다. 무료 오픈 소스 소프트웨어이다. PyTorch는 텐서 계산과 같은 고급 기능을 위한 PyTorch 패키지를 제공한다. PyTorch에 대한 자세한 내용은 공식 웹페이지 www.pytorch.org를 확인한다.
9.1.7 DeepViewRT™
DeepViewRT는 자체 컴퓨팅 엔진을 구현할 뿐만 아니라 널리 사용되는 타사 엔진을 활용할 수 있는 NXP 마이크로프로세서와 마이크로컨트롤러에 최적화된 독점 신경망 추론 엔진이다.
9.1.8 TVM
TVM은 CPU, GPU와 특수 가속기를 위한 개방형 딥 러닝 컴파일러 스택이다. 생산성 중심 딥 러닝 프레임워크와 성능 지향 또는 효울성 지향 하드웨어 백엔드 사이의 격차를 좁히는 것을 목표로 한다.