Neural Compute Stick 2 라즈베리파이에서 끄적이기
본문서는 이곳을 읽어보면서 정리한 문서입니다.
Dependency
- raspberry pi 3
- Neural Compute Stick 2
requirement
- OpenVino
1
wget https://download.01.org/opencv/2019/openvinotoolkit/R1/l_openvino_toolkit_raspbi_p_2019.1.094.tgz
OpenVino vs NCSDK2
저는 OpenVino Toolkit을 사용합니다.
OpenVino
- 신경망을 훈련시키는 도구(tensorflow,caffe etc.)를 제공하지 않는다.
- opencv 제공
원리
학습
- 컴퓨터 : 모델학습
- 컴퓨터 : 모델 최적화
변환
- 컴퓨터 : IR = .bin .xml
추론
- NS2 : inference engine
서비스
- PI : user application
설치
- OpenVino 압축파일을 설치한 후
- 경로이동
1
$ cd ~/Downloads/
- 압축풀기
1
$ tar -xf l_openvino_toolkit_ie_p_<version>.tgz
- 설치경로를 절대경로로 스크립트 수정
1
$ sed -i "s|<INSTALLDIR>|$(pwd)/inference_engine_vpu_arm|" inference_engine_vpu_arm/bin/setupvars.sh
환경변수 설정(영구)
./bashrc 열기
1
$ vi ~/.bashrc
파일 마지막 줄에 추가
1
source ~/Downloads/inference_engine_vpu_arm/bin/setupvars.sh
USB 규칙 설정
현재 사용자를 users 그룹에 추가
1
$ sudo usermod -a -G users "$(whoami)"
규칙추가
1
$ sh inference_engine_vpu_arm/install_dependencies/install_NCS_udev_rules.sh
샘플
샘플 소스 코드가있는 폴더로 이동하십시오.
1
$ cd inference_engine_vpu_arm/deployment_tools/inference_engine/samples
디렉토리 생성
1
$ mkdir build && cd build
object detection 예제 빌드
1
2
3
$ cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-march=armv7-a"
$ make -j2 object_detection_sample_ssd
cmake가 없을 경우
1
$ sudo apt-get install cmake
사전 훈련 된 얼굴 인식 모델을 다운로드
- .bin 파일
1
$ wget --no-check-certificate https://download.01.org/openvinotoolkit/2018_R4/open_model_zoo/face-detection-adas-0001/FP16/face-detection-adas-0001.bin
- .xml 파일
1
$ wget --no-check-certificate https://download.01.org/openvinotoolkit/2018_R4/open_model_zoo/face-detection-adas-0001/FP16/face-detection-adas-0001.xml
샘플을 실행
1
$ ./armv7l/Release/object_detection_sample_ssd -m face-detection-adas-0001.xml -d MYRIAD -i <path_to_image>
결과
NCS 2 자기 모델 변환하기
pb파일을 만들고 추론에 필요한 .xml .bin 파일 만들기
원리
학습
- 컴퓨터 : 모델학습
- 컴퓨터 : 모델 최적화
변환
- 컴퓨터 : IR =
.bin
.xml
««
추론
- NS2 : inference engine
서비스
- PI : user application
모델 학습시 필요한 것
- checkpoint
- tensorboard
- .pb file 중요
checkpoint
1
2
3
4
5
6
7
8
saver = tf.train.Saver()
checkpoint_dir = "HERE/DIR/NAME"
if not os.path.exists(checkpoint_dir)
os.makedir(checkpoint_dir)
saver.save(sess,os.path.join(checkpoint_dir, "NAME.ckpt"),global_step=0)
tensorboard
1
2
3
4
5
6
7
8
tf.summary.scalar("SEE",SEE)
merge = tf.summary.merge_all()
with tf.Session() as sess:
writer = tf.summary.FileWriter('./log/', sess.graph)
summary = sess.run(merge)
writer.add_summary(summary, step)
보기
1
tensorboard --logdir=./logs/
.pb file
1
2
3
4
from tensorflow.python.framework import graph_io
frozen = tf.graph_util.convert_variables_to_constants(sess, sess.graph_def, ["output_node_name"])
graph_io.write_graph(frozen, './', 'graph.pb', as_text=False)
파일 변환하기
라즈베리파이에서 파일을 동작하게 하기 위해서는 pb파일을 .XML
파일, .BIN
파일로 만들어서 넣어줘야 한다. 라즈베리파이에서는 pb파일
을 변환하기 위한 파일이 없기 때문이다.
윈도우에 OpenVINO 설치하기
이 곳을 보면서 같이 합시다.
필요한 파일
openvino
를 라즈베리파이에서 쓰기 때문에 window에서는 openvino의 변환파일만 사용하면 됩니다. 즉, python과 intel openvino 파일만으로 변환이 가능합니다.
환경변수
1
$ C:\Intel\computer_vision_sdk\bin\setupvars.bat
pb파일 정보 확인
1
2
3
$ cd C:\Intel\computer_vision_sdk_2018.5.456\deployment_tools\model_optimizer\mo\utils
$ python summarize_graph.py --input_model mcnn.pb
여기서는 input의 크기가 [1,-1,-1,3] 이기 때문에 바로 뒤에 변환할때 설정을 해주어야 합니다. 가끔 보면 input이 2개이거나 shape가 [x,y,z] 일 경우가 있는데 .xml과 .bin파일을 만드는 과정에서 error가 발생하기 때문에 이 부분을 잘 확인 하고 해야합니다.
pb파일 변환 하기
여기에서 가장 에러가 많이 발생하는데 보통 input이나 output 설정이 이상하거나 input의 shape가 맞지 않기 때문에 에러가 발생합니다.input이 2개인 것은 모델을 학습시킬때 모델에 들어가는 input이 2개 이기 때문에 발생합니다. 그렇기 때문에 모델에 input을 하나만 넣어서 만들어 주시고 output은 위에서 pb 파일을 저장할 때 output node name에서 설정하였기 때문에 tensorboard를 보고 출력을 원하는 node 이름을 찾아서 적으시면 됩니다. tensorboard에서 노드 찾는게 힘들다면 밑에 참조에서 노드 찾기를 보면됩니다.
1
2
3
$ cd C:\Intel\computer_vision_sdk_2018.5.456\deployment_tools\model_optimizer\
$ python mo_tf.py --input_model mcnn.pb --input_shape [1,256,256,3]
아까 input shape가 [1,-1,-1,3]이라고 나왔기 때문에 뒤에 모델을 추론시킬 이미지의 크기를 정해주고 명령을 실행합니다.
다른 여러가지 방법은 이 곳을 잘 살펴보세요 튜토리얼이 잘나와 있고 이미 학습된 모델을 돌려보면서 할 수 있습니다.
success가 나온다면 성공하셨습니다 축하드립니다.