산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Manufacturing Equipment >> 산업용 로봇

i.MX RT1060 크로스오버 MCU를 사용하여 TensorFlow Lite로 숫자 인식을 구현하는 방법

이 기사에서는 MNIST eIQ를 예로 들어 숫자 감지 및 인식을 살펴봅니다. 이 문서는 여러 부분으로 구성되어 있습니다. 숫자 인식은 TensorFlow Lite 모델에 의해 수행됩니다. , 그리고 GUI는 i.MX RT1060 장치의 사용성을 높이는 데 사용됩니다.

i.MX RT1060 크로스오버 MCU는 디스플레이 기능을 필요로 하는 비용 효율적인 산업 애플리케이션과 고성능 및 데이터 집약적인 소비자 제품에 똑같이 적합합니다. 이 기사에서는 사용자의 손으로 쓴 입력을 감지하고 분류할 수 있는 임베디드 머신 러닝 애플리케이션을 구현하는 방법을 설명하여 이 Arm® Cortex®-M7 기반 MCU의 기능을 보여줍니다.

이를 위해 이 문서에서는 TensorFlow Lite 모델에서 숫자 인식을 수행하고 i.MX RT1060 장치의 사용성을 높이기 위해 GUI를 사용하는 여러 부분으로 구성된 인기 있는 MNIST eIQ 예제에 중점을 둡니다.

MNIST 데이터 세트 및 모델 살펴보기

이 기사 전체에서 사용된 데이터 세트는 손으로 쓴 숫자의 중앙 회색조 이미지에 대한 60,000개의 훈련 및 10,000개의 테스트 예제로 구성됩니다. 각 샘플의 해상도는 28x28픽셀입니다.

그림 1. MNIST 데이터 세트 예

샘플은 미국의 고등학생과 인구조사국 직원에게서 수집되었습니다. 따라서 데이터 세트에는 북미에서 작성된 숫자의 예가 대부분 포함됩니다. 예를 들어 유럽식 숫자의 경우 다른 데이터 세트를 사용해야 합니다. 컨볼루션 신경망은 일반적으로 이 데이터 세트와 함께 사용할 때 최상의 결과를 제공하며 간단한 네트워크라도 높은 정확도를 달성할 수 있습니다. 따라서 TensorFlow Lite는 이 작업에 적합한 옵션이었습니다.

이 기사에서 선택한 MNIST 모델 구현은 공식 TensorFlow 모델 중 하나로 GitHub에서 사용할 수 있으며 Python으로 작성되었습니다. 스크립트는 Keras 라이브러리와 tf.data, tf.estimator.Estimator 및 tf.layers API를 사용하며 테스트 샘플에서 높은 정확도를 얻을 수 있는 컨볼루션 신경망을 구축합니다.

그림 2. 사용된 모델의 시각화.

해당 모델 정의는 아래 그림 3에 나와 있습니다.

그림 3. 모델의 시각화에 해당하는 모델 정의입니다.

TensorFlow Lite란 무엇이며 이 예에서 어떻게 사용됩니까?

TensorFlow는 대기업의 프로덕션에서 널리 사용되는 잘 알려진 딥 러닝 프레임워크입니다. Google에서 개발 및 유지 관리하는 오픈 소스 크로스 플랫폼 딥 러닝 라이브러리입니다. 숙련된 개발자에게 유용한 저수준 Python API와 이 경우에 사용되는 것과 같은 고급 라이브러리를 사용할 수 있습니다. 또한 TensorFlow는 대규모 커뮤니티와 Google의 우수한 온라인 문서, 학습 리소스, 가이드 및 예제의 지원을 받습니다.

모바일 장치 및 임베디드 솔루션과 같이 계산이 제한된 기계에 TensorFlow 애플리케이션을 실행할 수 있는 기능을 제공하기 위해 Google은 TensorFlow 프레임워크의 전체 작업 세트를 지원하지 않는 TensorFlow Lite 프레임워크를 개발했습니다. 이를 통해 이러한 장치는 TensorFlow Lite로 변환된 사전 훈련된 TensorFlow 모델에서 추론을 실행할 수 있습니다. 결과적으로 이러한 변환된 모델은 더 이상 훈련할 수 없지만 양자화 및 가지치기와 같은 기술을 통해 최적화할 수 있습니다.

모델을 TensorFlow Lite로 변환

위에서 논의한 훈련된 TensorFlow 모델을 i.MX RT1060 MCU에서 사용하려면 먼저 TensorFlow Lite로 변환해야 합니다. 이를 위해 tflite_convert를 사용하여 변환했으며 호환성을 위해 TensorFlow 버전 1.13.2가 모델 학습 및 변환에 사용되었습니다.

tflite_convert

--saved_model_dir=

--output_file=converted_model.tflite

--input_shape=1,28,28

--input_array=자리 표시자

--output_array=Softmax

--inference_type=FLOAT

--input_data_type=FLOAT

--post_training_quantize

--target_ops TFLITE_BUILTINS

마지막으로 xdd 유틸리티를 사용하여 TensorFlow Lite 모델을 애플리케이션에서 로드할 바이너리 배열로 변환했습니다.

xxd -i 변환된_모델.tflite> 변환된_모델.h

xdd는 파일의 바이너리 형식을 해당 16진 덤프 표현으로 또는 그 반대로 변환하는 데 사용할 수 있는 16진 덤프 유틸리티입니다. 이 경우 TensorFlow Lite 바이너리 파일은 eIQ 프로젝트에 추가할 수 있는 C/C++ 헤더 파일로 변환됩니다. 변환 프로세스와 tflite_convert 유틸리티는 eIQ 사용자 가이드에 자세히 설명되어 있습니다. 이 유틸리티는 공식 Google 문서에도 설명되어 있습니다.

임베디드 마법사 스튜디오에 대한 빠른 소개

MIMXRT1060-EVK의 그래픽 기능을 활용하기 위해 이 프로젝트에 GUI가 포함되었습니다. 이를 위해 임베디드 장치에서 실행되는 응용 프로그램용 GUI를 개발하기 위한 IDE인 Embedded Wizard Studio를 사용했습니다. IDE의 무료 평가 버전을 사용할 수 있지만 이 버전은 그래픽 사용자 인터페이스의 최대 복잡성을 제한하고 GUI 위에 워터마크를 추가합니다.

Embedded Wizard Studio의 장점 중 하나는 XNP의 SDK를 기반으로 MCUXpresso 및 IAR 프로젝트를 생성할 수 있다는 것입니다. 즉, IDE에서 사용자 인터페이스를 생성한 후 개발자가 장치에서 즉시 테스트할 수 있습니다.

IDE는 캔버스에 배치되는 버튼, 터치 감지 영역, 모양 등과 같은 개체 및 도구를 제공합니다. 그런 다음 속성이 개발자의 요구와 기대에 맞게 설정됩니다. 이 모든 것이 직관적이고 사용자 친화적인 방식으로 작동하며 GUI 개발 프로세스의 속도를 크게 높입니다.

그러나 생성된 GUI 프로젝트는 C에 있고 qIQ 예제는 C/C++에 있으므로 여러 변환 단계에서 GUI 프로젝트를 기존 eIQ 응용 프로그램 프로젝트와 병합해야 합니다. 따라서 일부 헤더 파일의 내용은 다음과 같아야 합니다.

#ifdef __cplusplus

외부 "C" {

#endif

/* C 코드 */

#ifdef __cplusplus

<코드>}

#endif

또한 대부분의 소스 및 헤더 파일이 SDK의 미들웨어 폴더에 있는 새 폴더로 이동되었으며 이러한 변경 사항을 반영하기 위해 새 포함 경로가 추가되었습니다. 마지막으로 일부 장치별 구성 파일을 비교하여 적절하게 병합했습니다.

완성된 애플리케이션 및 기능

응용 프로그램의 GUI는 터치 감지 LCD에 표시됩니다. 숫자를 쓰기 위한 입력 영역과 분류 결과를 표시하는 영역이 있습니다. 추론 실행 버튼은 추론을 실행하고 지우기 버튼은 입력 및 출력 필드를 지웁니다. 애플리케이션은 예측 결과와 신뢰도를 표준 출력으로 출력합니다.

그림 4. 예제 앱의 GUI에는 입력 필드, 출력 필드 및 두 개의 버튼이 있습니다. 결과와 신뢰도도 표준 출력으로 인쇄됩니다.

TensorFlow Lite 모델 정확도

위에서 언급한 바와 같이 모델은 미국식 손으로 쓴 숫자를 분류할 때 훈련 및 테스트 데이터에 대해 높은 정확도를 달성할 수 있습니다. 그러나 이 응용 프로그램에서 사용하는 경우에는 그렇지 않습니다. 주로 LCD에 손가락으로 쓴 숫자와 펜으로 종이에 쓴 숫자가 결코 같지 않기 때문입니다. 이는 실제 생산 데이터에 대한 생산 모델 교육의 중요성을 강조합니다.

더 나은 결과를 얻으려면 새로운 데이터 세트를 수집해야 합니다. 또한 수단은 동일해야 합니다. 이 경우 숫자를 그리려면 터치스크린 입력을 이용하여 샘플을 채취해야 합니다. 예측의 정확도를 높이기 위한 추가 기술이 있습니다. NXP 커뮤니티 웹사이트에는 전이 학습 기법을 사용하는 방법이 포함되어 있습니다.

구현 세부정보

Embedded Wizard는 사용자가 입력 영역 위로 손가락을 끌 때와 같이 GUI 상호 작용에 반응하는 트리거로 슬롯을 사용합니다. 이 경우 슬롯은 손가락 아래에 픽셀 너비의 선을 계속 그립니다. 해당 라인의 색상은 기본 색상 상수로 정의됩니다.

지우기 버튼의 슬롯은 두 필드에 있는 모든 픽셀의 색상을 배경색으로 설정하고 추론 실행 버튼은 입력 영역, 기본 비트맵, 해당 영역의 너비와 높이에 대한 참조를 저장한 다음 네이티브에 전달합니다. 처리하는 C 프로그램입니다.

머신러닝 모델의 비트맵 크기는 28x28픽셀에 불과하고 입력 영역은 112x112정사각형으로 생성하여 애플리케이션을 보다 편안하게 사용하기 때문에 이미지를 축소할 때 추가적인 전처리가 필요합니다. 그렇지 않으면 이미지가 너무 많이 왜곡됩니다.

먼저, 입력 영역의 차원을 가진 8비트 정수 배열이 생성되고 0으로 채워집니다. 그런 다음 이미지와 배열이 반복되고 이미지의 모든 그려진 픽셀이 배열에 0xFF로 저장됩니다. 입력을 처리할 때 기본 색상의 픽셀은 흰색으로 간주되고 다른 모든 픽셀은 검정색으로 간주됩니다. 또한 각 픽셀은 3x3 정사각형으로 확장되어 선이 두꺼워지므로 이미지를 훨씬 안전하게 축소할 수 있습니다. 이미지를 필요한 28x28 해상도로 크기를 조정하기 전에 그림이 잘리고 MNIST 이미지와 유사하게 가운데에 맞춰집니다.

그림 5. 사전 처리된 입력 데이터가 포함된 배열의 시각화입니다.

기계 학습 모델은 애플리케이션이 시작될 때 할당, 로드 및 준비됩니다. 모든 추론 요청과 함께 모델의 입력 텐서는 전처리 입력과 함께 로드되고 모델에 전달됩니다. 입력은 픽셀 단위로 텐서에 복사되어야 하고 정수 값은 프로세스에서 부동 소수점 값으로 변환되어야 합니다. 이 NXP 애플리케이션 노트에는 코드의 자세한 메모리 공간이 포함되어 있습니다.

TensorFlow Lite:실행 가능한 솔루션

기계 학습을 사용한 필기 숫자 인식은 임베디드 시스템에 문제를 일으킬 수 있으며 TensorFlow Lite는 실행 가능한 솔루션을 제공합니다. 이 솔루션을 사용하면 디지털 잠금 장치의 핀 입력 필드와 같은 더 복잡한 사용 사례를 구현할 수 있습니다. 이 기사에서 논의한 바와 같이 실제 생산 데이터에 대해 생산 모델을 교육하는 것이 중요합니다. 이 글에서 사용한 훈련 데이터는 종이에 펜으로 적힌 숫자들로 구성되어 있다. 이는 차례로 터치 스크린에 그려진 숫자를 감지하는 데 사용할 때 모델의 전체 정확도를 감소시킵니다. 또한 지역적 차이를 고려해야 합니다.

i.MX RT 크로스오버 MCU 시리즈는 이 기사에서 제공하는 예와 같이 다양한 임베디드 애플리케이션으로 구현될 수 있습니다. NXP는 성능과 유용성 간의 격차를 해소하는 데 도움이 될 수 있는 i.MX RT 크로스오버 MCU 시리즈에 대한 충분한 정보를 보유하고 있습니다.

i.MX RT 크로스오버 MCU에 대한 자세한 내용은 i.MX RT 제품 페이지를 참조하십시오.

업계 기사는 업계 파트너가 편집 콘텐츠에 적합하지 않은 방식으로 All About Circuits 독자와 유용한 뉴스, 메시지 및 기술을 공유할 수 있는 콘텐츠 형식입니다. 모든 산업 기사는 독자에게 유용한 뉴스, 기술 전문 지식 또는 이야기를 제공하기 위해 엄격한 편집 지침을 따릅니다. 업계 기사에 표현된 관점과 의견은 파트너의 것이며 반드시 All About Circuits 또는 해당 작성자의 의견은 아닙니다.


산업용 로봇

  1. 자율 로봇으로 폐기물을 줄이는 방법
  2. PiCamera를 사용한 AI 숫자 인식
  3. NXP의 i.MX RT500 크로스오버 MCU로 전원 관리 최적화
  4. NXP의 i.MX RT500 크로스오버 MCU를 사용한 DSP 구현 이해
  5. TensorFlow로 Variational Autoencoder를 구축하는 방법
  6. 아트웍에 에폭시 수지 사용
  7. CNC 기계 관리? 협동로봇을 사용하는 방법은 다음과 같습니다.
  8. Yaskawa 로봇 프로그래밍을 시작하는 방법
  9. Raspberry Pi용 RoboDK를 시작하는 방법
  10. 정보 모델을 사용하여 OPC UA 클라이언트에서 기능 블록을 호출하는 방법