Intel Movidius Neural Compute Stick을 Raspberry Pi 3에 장착하여 개발하기

최근 저전력 소비는 자율/무인 차량이나 IoT 장치에 없어서는 안될 필수 요소입니다. 초기부터 딥러닝 추론 응용 프로그램을 개발하기 위해 Intel의 에너지 효율적이고 저렴한 Movidius USB 스틱을 사용할 수 있습니다.

Movidius Neural Compute Stick(NCS)은 Intel에서 생산되며 Intenet 없이도 실행할 수 있습니다. NCS의 SDK를 사용하면 딥러닝 신경망의 신속한 프로토 타이핑, 검증 및 배포가 가능합니다. 도구를 사용하여 개발 컴퓨터에서 DNN을 프로파일링하고 튜닝, 컴파일하는 작업은 Intel Movidius Neural Compute SDK에서 제공됩니다.

Movidius NCS의 계산 기능은 Myriad 2 VPU(Vision Processing Unit)에서 제공됩니다.

저용량 그래프 프로세서에서 딥러닝 모델을 효율적으로 실행하는 것은 매우 힘듭니다. Movidius를 사용하면 다중 사용을 지원하는 GoogLeNet과 같은 대형 모델의 작동을 최적화할 수 있습니다. 사용이 간편한 키트로 분류나 객체 인식과 같은 응용 프로그램을 실제 제품으로 설계하고 구현할 수 있습니다.

단순히 Movidius NCS를 USB (Graphics Processing Unit)에서 실행되는 GPU라고 생각할 수 있습니다. 그러나 모델의 학습은 이 장비에서 수행되지 않으며 학습된 모델은 장비에서 최적으로 작동하며 시험 목적으로 물리적 환경에서 사용하도록 되어 있습니다.

-.Ubuntu 16.04 또는 Raspberry Pi 3 Raspbian Stretch에서 운영
-.두개의 DNN 프레임워크 (TensorFlow, Caffe)를 지원
-.Movidius Myriad 2 VPU는 CNN 기반의 Caffe에서 작동
-.SqueezeNet, GoogLeNet, AlexNet과 같은 복잡한 딥러닝 학습 모델을 처리 능력이 낮은 컴퓨터에서 실행

 

 

응용

이미지 분류 데모를 실행하는 것은 매우 간단합니다. 이제 NC App Zoo repo를 사용하여 이미지를 분류할 수 있습니다. Movidius NCS의 응용 프로그램을 활성화하기 위해 그래프 파일을 가져와야 합니다. 실행할 준비가 된 GoogLeNet 모델을 컴파일했습니다. 이 응용 프로그램에는 일부 파일이 필요합니다.

make 명령은 Movidius가 그래프 파일로 필요로 하는 파일을 만드는 데 사용됩니다. 그래프 파일은 이미지 분류자의 데모입니다.

신속한 적용을 위해 아래 단계를 참조하십시오.

NCSDK API 프로퍼티를 사용하여 mvnc 라이브러리를 추가

import mvnc.mvncapi as mvnc

다른 USB 장치와 마찬가지로 API를 사용하여 Movidius NCS에 액세스 할 수 있습니다. 또한 모델을 계산하는 데 더 많은 용량이 필요한 경우 평행하게 Movidius 장치를 사용할 수 있습니다. 지금은 하나의 키트로 충분합니다. 프로세스 선택 및 열기 :

# Look for enumerated Intel Movidius NCS device(s); quit program if none found.

devices = mvnc.EnumerateDevices()

if len(devices) == 0:

print(‘No devices found’)

quit()

# Get a handle to the first enumerated device and open it

device = mvnc.Device(devices[0])

device.OpenDevice()

컴파일된 그래프 파일을 사용하기위한 사전 계산된 GoogLeNet 모델 :

# Read the graph file into a buffer

with open(GRAPH_PATH, mode=’rb’) as f:

blob = f.read()

# Load the graph buffer into the NCS

graph = device.AllocateGraph(blob)

Movidius NCS에서 이미지를 로드하기 전에 사전 처리가 필요합니다.

# Read & resize image [Image size is defined during training]

img = print_img = skimage.io.imread( IMAGES_PATH )

img = skimage.transform.resize( img, IMAGE_DIM, preserve_range=True)

# Convert RGB to BGR [skimage reads image in RGB, but Caffe uses BGR]

img = img[:, :, ::-1]

# Mean subtraction & scaling [A common technique used to center the data]

img = img.astype( numpy.float32 )

img = ( img — IMAGE_MEAN ) * IMAGE_STDDEV

이미지를 Moviider NCS에 로드하려면 LoadTensor ()를 사용하십시오.

# Load the image as a half-precision floating point array

graph.LoadTensor( img.astype( numpy.float16 ), ‘user object’ )

GetResult ()에 의한 출력보다 pretrained 모델에 입력 이미지를 줍니다 :

# Get the results from NCS

output, userobj = graph.GetResult()

모델 출력 예측 및 해당 레이블 일치와 동시에 입력 이미지를 표시합니다.

# Print the results

print(‘\n — — — — predictions — — — — ‘)

labels = numpy.loadtxt(LABELS_FILE_PATH, str, delimiter = ‘\t’)

order = output.argsort()[::-1][:6]

for i in range( 0, 5 ):

print (‘prediction ‘ + str(i) + ‘ is’ + labels[order[i]])

# Display the image on which inference was performed

skimage.io.imshow(IMAGES_PATH)

skimage.io.show()

 

 

 

마지막 단계에서 재사용을 위해 Movidius NCS 장치를 clear하고 shutdown하십시오 :

graph.DeallocateGraph()

device.CloseDevice()

 

원문

https://medium.com/deep-learning-turkey/a-brief-guide-to-intel-movidius-neural-compute-stick-with-raspberry-pi-3-f60bf7683d40