Intel Movidius™ 신경망 컴퓨트 스틱

in #steempress6 years ago


InternetPlus에서 모델 개발 중인 Movidius 기반 딥 러닝 스틱 입니다.

Intel® Distribution of OpenVINO™ toolkit

Intel® Movidius™ NCS(뉴럴 컴퓨트 스틱)은 AI 프로그래밍을 학습하기 위해 설계된 소형 무팬의 딥 러닝용 USB 드라이브입니다. NCS는 저전력 고성능 Movidius™ VPU(비주얼 처리 장치)에 의해 구동됩니다. VPU는 수백만 개의 스마트 보안 카메라, 제스처 제어 무인기, 산업용 머신 비전 장비 등에서 찾을 수 있습니다.

FEATURES

  • CNN(Convolutional Neural Network) 프로파일링, 프로토타이핑 및 튜닝 워크플로 지원
  • 장치 추론 시 실시간 – 클라우드 연결 불필요
  • 에너지 효율적인 CNN 처리 기능을 가진 Movidius™ VPU(Vision Processing Unit) 탑재
  • 단일 USB 타입 A 포트를 통해 모든 데이터 및 전원 제공
  • 여러 장치를 동일한 플랫폼에서 작동하여 성능 확장

사양

  • 최소 시스템 요구 사항:
    . Ubuntu 16.04를 실행하는 x86_64 컴퓨터
    . USB 2.0 타입 A 포트(USB 3.0 권장)
    . 1GB RAM
    . 사용 가능한 스토리지 공간 4GB
  • 폼 팩터: USB 스틱
  • 치수: 72.5x27x14mm
  • 커넥터: USB 3.0 타입 A 플러그
  • 작동 온도: 0~40°C

애플리케이션

  • 스마트 홈 및 소비자용 로봇
  • 감시 및 보안
  • 유통
  • 헬스케어

Introducing Movidius Neural Compute Stick
https://kr.mouser.com/

인텔 ® Movidius ™ 신경 계산 스틱을 활용한 5 단계 이미지 분류 가이드

이미지 분류란?
이미지 분류는 이미지에있는 피사체나 대상을 미리 정의된 클래스로 분류하는 것을 목표로하는 컴퓨터 비전 문제입니다. 이미지 분류의 전형적인 실제 예는 유아에게 이미지 플래시 카드를 보여주고 어린이가 카드에 인쇄 된 물체를 인식하도록 요구하는 것입니다. 이러한 시각적 인식을 기계에 제공하는 전통적인 접근 방식은 가장자리, 모서리, 색상 등과 같은 기능 설명자를 사용하여 이미지의 개체를 식별하거나 인식하는 복잡한 컴퓨터 알고리즘에 의존합니다.

딥 러닝은 실제 이미징 문제를 해결하는 데 매우 효율적인 방법을 택합니다. 상호 연결된 뉴런의 다중 레이어를 사용합니다. 각 레이어는 특정 컴퓨터 알고리즘을 사용하여 특정 설명자를 식별하고 분류합니다. 예를 들어 트래픽 정지 신호를 분류하려면 DNN (deep neural network)을 사용합니다. DNN (deep neural network)은 가장자리와 경계선을 감지하는 레이어 하나, 코너 모서리 수를 감지하는 다른 레이어, 빨간색, 빨간색 옆에 흰색 경계선을 감지하는 옆 등이 있습니다. DNN이 작업을 간단한 알고리즘의 여러 계층으로 분해 할 수 있으므로 더 많은 수의 설명자를 사용할 수 있으므로 DNN 기반 이미지 처리가 실제 응용 프로그램에서 훨씬 더 효과적입니다.

참고 : 위의 이미지는 DNN이 개체의 여러 설명자를 식별하는 방법을 간략하게 보여줍니다. 이는 STOP 신호를 분류하는 데 사용된 DNN을 정확하게 표현한 것은 아닙니다.

이미지 분류는 객체 감지와 다릅니다. 분류는 전체 이미지에 하나의 객체만 있다고 가정합니다. 위에서 언급한 '유아용 이미지 플래시 카드'와 같습니다. 반면에 객체 탐지는 동일한 이미지 내의 여러 객체를 처리 할 수 있습니다. 또한 이미지 내에서 물체의 위치를 알려줄 수도 있습니다.

폴더에서 이미지를 읽고이를 상위 5 개 범주로 분류하는 프로그램입니다.

미리 훈련 된 네트워크를 사용하여 이미지 분류를 수행하는 방법
인텔 Movidius NCS 프로그래밍을위한 인텔 ® Movivius ™ Neural Compute SDK의 API 프레임 워크 사용 방법

참조
아래 설명된 최종 결과물을 보려면 샘플 코드 저장소
( NC App Zoo: https://github.com/movidius/ncappzoo ) 에서 코드를 다운로드하여 실행하십시오.

1 mkdir -p ~/workspace
2 cd ~/workspace
3 git clone https://github.com/movidius/ncappzoo
4 cd ncappzoo/apps/image-classifier
5 make run
make run으로 사전 훈련 된 네트워크, 바이너리 그래프 파일, ilsvrc 데이터 세트 평균 등과 같은 모든 종속 파일을 다운로드하고 빌드합니다.
make run은 처음에만 실행해야합니다 .
그후에는 python3 image-classifier.py 로 직접 실행할 수 있습니다.

실행 하면 다음과 같은 값이 출력 표시되어야합니다.

------- predictions --------
prediction 1 is n02123159 tiger cat
prediction 2 is n02124075 Egyptian cat
prediction 3 is n02113023 Pembroke, Pembroke Welsh corgi
prediction 4 is n02127052 lynx, catamount
prediction 5 is n02971356 carton
유추 된 이미지

빌드방법!
NCSDK의 포괄적 인 API 프레임 워크 덕분에 이미지 분류 프로그램을 작성하는 데는 몇 줄의 Python 스크립트 만 필요합니다. 다음은 image-classifier.py의 사용자가 구성 할 수있는 매개 변수 중 일부입니다.

GRAPH_PATH: 추측을 실행하고 싶은 그래프 파일의 위치
기본적으로 ~/workspace/ncappzoo/caffe/GoogLeNet/graph
IMAGE_PATH: 분류 할 이미지의 위치
기본적으로 ~/workspace/ncappzoo/data/images/cat.jpg
IMAGE_DIM: 선택된 신경망에 의해 정의 된 이미지의 크기
전의. GoogLeNet은 224x224 픽셀을 사용하고, AlexNet은 227x227 픽셀을 사용합니다.
IMAGE_STDDEV: 선택된 신경망에 의해 정의 된 표준 편차 (스케일링 값)
전의. GoogLeNet은 스케일링 요소를 사용하지 않고 InceptionV3은 128 (stddev = 1/128)
IMAGE_MEAN: 평균 빼기는 데이터를 중심에두기위한 심층 학습에 사용되는 일반적인 기술입니다
ILSVRC 데이터 세트의 경우 평균은 B = 102 녹색 = 117 빨강 = 123
NCSDK API 프레임 워크를 사용하기 전에 mvnc 라이브러리에서 mvncapi 모듈을 가져와야합니다.

import mvnc.mvncapi as mvnc
1 단계 : 열거 된 장치 열기
다른 USB 장치와 마찬가지로 NCS를 응용 프로그램 프로세서 (Ubuntu 랩톱 / 데스크톱) USB 포트에 연결하면 USB 장치로 NCS가 열거됩니다. 우리는 열거 된 NCS 장치를 찾기 위해 API를 호출 할 것이다.

1 # Look for enumerated Intel Movidius NCS device(s); quit program if none found.
2 devices = mvnc.EnumerateDevices()
3 if len( devices ) == 0:
4 print( 'No devices found' )
5 quit()
여러 신경 계산 스틱을 동일한 애플리케이션 프로세서에 연결하여 추론 성능을 확장 할 수 있다는 것을 알고 계셨습니까? 이 기사에 대해서는 나중에 기사에서 다루지 만, 이제 API를 호출하여 NCS 하나만 선택하고 열어 보겠습니다 (작동 준비).

1 # Get a handle to the first enumerated device and open it
2 device = mvnc.Device( devices[0] )
3 device.OpenDevice()

2 단계 : NCS에 그래프 파일로드
이 프로젝트를 단순하게 유지하기 위해 미리 훈련 된 AlexNet 모델의 미리 컴파일 된 그래프를 사용합니다.이 모델 make은 ncappzoo폴더 내부에서 실행될 때 다운로드되고 컴파일됩니다 . 사전 트레이닝 된 네트워크를 다른 블로그에서 컴파일하는 방법을 배우 겠지만, 이제 그래프를 NCS에로드하는 방법을 알아 보겠습니다.

1 # Read the graph file into a buffer
2 with open( GRAPH_PATH, mode='rb' ) as f:
3 blob = f.read()
4
5 # Load the graph buffer into the NCS
6 graph = device.AllocateGraph( blob )

3 단계 : 추측을 실행하기 위해 단일 이미지를 Intel Movidius NCS로 오프로드합니다.
Intel Movidius NCS는 Intel Movidius Visual Processing Unit (VPU)에 의해 구동됩니다. 수백만 개의 스마트 보안 카메라, 제스처 제어 무인기, 산업용 머신 비전 장비 등에 시각적 지능을 제공하는 칩과 동일합니다. VPU와 마찬가지로 NCS는 전체 시스템에서 비주얼 코 프로세서로 작동합니다. 여기에서는 우분투 시스템을 사용하여 폴더에서 이미지를 읽고 NCS로 추론하여 추론합니다. 모든 신경 네트워크 프로세싱은 NCS에 의해 단독으로 수행되므로 애플리케이션 프로세서의 CPU 및 메모리 리소스가 해제되어 다른 애플리케이션 수준의 작업을 수행 할 수 있습니다.

NCS에 이미지를로드하려면 이미지를 사전 처리해야합니다.

미리 훈련 된 네트워크에서 정의한 치수와 일치하도록 이미지의 크기를 조정하거나 자릅니다.
GoogLeNet은 224x224 픽셀을 사용하고 AlexNet은 227x227 픽셀을 사용합니다.
전체 데이터 세트에서 채널 당 평균값 (파란색, 녹색 및 빨간색)을 뺍니다.
이것은 데이터를 중심에두기위한 심층적 인 학습에 사용되는 일반적인 기술입니다.
이미지를 반 정밀도 부동 소수점 (fp16) 배열로 변환하고 LoadTensorfunction-call을 사용 하여 NCS에 이미지를로드합니다.
skimage 라이브러리는 단 한 줄의 코드에서이 작업을 수행 할 수 있습니다.
01 # Read & resize image [Image size is defined during training]
02 img = print_img = skimage.io.imread( IMAGES_PATH )
03 img = skimage.transform.resize( img, IMAGE_DIM, preserve_range=True )
04
05 # Convert RGB to BGR [skimage reads image in RGB, but Caffe uses BGR]
06 img = img[:, :, ::-1]
07
08 # Mean subtraction & scaling [A common technique used to center the data]
09 img = img.astype( numpy.float32 )
10 img = ( img - IMAGE_MEAN ) * IMAGE_STDDEV
11
12 # Load the image as a half-precision floating point array
13 graph.LoadTensor( img.astype( numpy.float16 ), 'user object' )

4 단계 : NCS의 추론 결과 읽기 및 인쇄
추론 결과를 응용 프로그램 흐름에 통합하는 방법에 따라 차단 또는 비 차단 함수 호출을 사용하여 텐서 (이전 단계)를로드하고 유추 결과를 읽도록 선택할 수 있습니다. 이 기능에 대한 자세한 내용은 이후 블로그에서 배우게 될 것입니다. 그러나 이제는 차단 호출 (특정 API를 호출 할 필요가 없음) 인 기본값을 사용합시다.

01 # Get the results from NCS
02 output, userobj = graph.GetResult()
03
04 # Print the results
05 print('\n------- predictions --------')
06
07 labels = numpy.loadtxt( LABELS_FILE_PATH, str, delimiter = '\t' )
08
09 order = output.argsort()[::-1][:6]
10 for i in range( 0, 5 ):
11 print ('prediction ' + str(i) + ' is ' + labels[order[i]])
12
13 # Display the image on which inference was performed
14 skimage.io.imshow( IMAGES_PATH )
15 skimage.io.show( )

5 단계 : 그래프를 언로드하고 기기를 닫습니다.
메모리 누수 및 / 또는 분할 오류를 방지하려면 열려있는 파일이나 리소스를 닫고 사용 된 메모리를 할당 해제해야합니다.

graph.DeallocateGraph()
device.CloseDevice()
축하해! 방금 DNN 기반 이미지 분류기를 만들었습니다.

추가 실험
이 예제 스크립트는 하나의 이미지 만 읽습니다. 폴더에서 여러 이미지를 읽고 추론하도록 스크립트를 수정하십시오.
OpenCV를 사용하여 이미지와 그 추론 결과를 그래픽 창에 표시하십시오.
RPI3 또는 MinnowBoard 와 같은 임베디드 보드에서이 프로젝트를 복제하십시오.
이 실험의 참고 자료로 ' RPI에서 NCS 앱 실행 '도움말을 사용할 수 있습니다.

참조 사이트: NCSDK Documentation
https://movidius.github.io/ncsdk/index.html#Examples

1 Documentation Overview

  • Installation
    Instructions for basic installation of the NCSDK and NCAPI as well as instructions for installation with
    virtualenv or in a Docker container or virtual machine.
  • Frameworks
    Instructions for compiling Caffe or TensorFlow* networks for use with the NCSDK.
  • Toolkit
    Documentation for the tools included with the NCSDK - mvNCCheck, mvNCCompile, and mvNCProfile.
  • API
    Documentation for the NCAPI.
  • Examples
    An overview of examples included with the NCSDK. Additional examples can be found on our Neural
    Compute App Zoo GitHub repository.
  • Release Notes
    The latest NCSDK release notes.

Support
Troubleshooting and support information



Posted from my blog with SteemPress : http://internetplus.co.kr/wp/?p=463
Sort:  

Congratulations @hellosketch! You have completed the following achievement on the Steem blockchain and have been rewarded with new badge(s) :

You received more than 100 upvotes. Your next target is to reach 250 upvotes.

Click here to view your Board
If you no longer want to receive notifications, reply to this comment with the word STOP

Do not miss the last post from @steemitboard:

SteemWhales has officially moved to SteemitBoard Ranking
SteemitBoard - Witness Update

Support SteemitBoard's project! Vote for its witness and get one more award!