Skip to content

Peter9606/ros_intel_movidius_ncs

 
 

Repository files navigation

ros_intel_movidius_ncs

1 Introduction

The Movidius™ Neural Compute Stick (NCS) is a tiny fanless deep learning device that you can use to learn AI programming at the edge. NCS is powered by the same low power high performance Movidius™ Vision Processing Unit (VPU) that can be found in millions of smart security cameras, gesture controlled drones, industrial machine vision equipment, and more.

This project is a ROS wrapper for NC API of NCSDK, providing the following features:

  • A ROS service for object classification and detection of a static image file
  • A ROS publisher for object classification and detection of a video stream from a RGB camera
  • Demo applications to show the capabilities of ROS service and publisher
  • Support multiple CNN models of Caffe and Tensorflow
  • Support multiple devices in parallel to acclerate inference

There are 2 active branches in this project:

  • master - stable branch
    The latest version on it is v0.6.0 which supports NCSDK v1.12.00. master branch is only updated when every milestone release ready.
  • devel - default branch
    This branch is updated from time to time and maintain the latest code on it. Each pull request should be submitted based on devel branch. We will merge patches to master branch on every milestone release.

2 Prerequisite

  • An x86_64 computer running Ubuntu 16.04
  • ROS Kinetic
  • Movidius Neural Compute Stick (NCS)
  • Movidius Neural Compute (MvNC) SDK
  • Movidius Neural Compute Application Zoo
  • RGB Camera, e.g. RealSense D400 Series or standard USB camera

3 Environment Setup

  • Install ROS Kinetic Desktop-Full (guide)
  • Create a catkin workspace (guide)
  • Install NCSDK v1.12.00 (github)
  • Install NC APP Zoo (github)
  • NCSDK should be installed in /opt/movidius by default. Create a symbol link in /opt/movidius to NC APP Zoo.
sudo ln -s <your-workspace>/ncappzoo /opt/movidius/ncappzoo

After that, make sure you can find graph data in /opt/movidius/ncappzoo/caffe or /opt/movidius/ncappzoo/tensorflow and image data in /opt/movidius/ncappzoo/data/images

  • Install ROS package for different cameras as needed. e.g.
    1. Standard USB camera
    sudo apt-get install ros-kinetic-usb-cam
    1. RealSense D400 series camera
    • Install Intel® RealSense™ SDK 2.0 (tag v2.9.1)
      • Install from source code(Recommended)
      • Install from package
           Note: Create a symbol link from libusb.a to libusb-1.0.a, otherwise "libusb.a" is probably not to be found by librealsense.
           sudo ln -s /usr/lib/x86_64-linux-gnu/libusb-1.0.a /usr/lib/libusb.a
    • Install Intel® RealSense™ ROS (guide)
    cd ~/catkin_ws/src
    git clone https://github.com/intel-ros/realsense.git
    cd  realsense
    git checkout 2.0.2
    cd ~/catkin_ws
    catkin_make

4 Building and Installation

# Building
cd ~/catkin_ws/src
git clone https://github.com/intel/object_msgs
git clone https://github.com/intel/ros_intel_movidius_ncs.git
cd ros_intel_movidius_ncs
git checkout master
cd ~/catkin_ws
catkin_make
# Installation
catkin_make install
source install/setup.bash
# Copy label files from this project to the installation location of NCSDK
cp ~/catkin_ws/src/ros_intel_movidius_ncs/data/labels/* /opt/movidius/ncappzoo/data/ilsvrc12/

5 Running the Demo

5.1 Classification

5.1.1 Supported CNN Models

Table1
CNN Model Framework Usage
AlexNet Caffe Image/Video
GoogLeNet Caffe Image/Video
SqueezeNet Caffe Image/Video
Inception_v1 Tensorflow Image/Video
Inception_v2 Tensorflow Image/Video
Inception_v3 Tensorflow Image/Video
Inception_v4 Tensorflow Image/Video
MobileNet Tensorflow Image/Video

5.1.2 Classification Result with GoogLeNet

classification with googlenet

5.1.3 Running the Demo

5.2 Detection

5.1.1 Supported CNN Models

CNN Model Framework Usage
MobileNetSSD(Recommended) Caffe Image/Video
TinyYolo_v1 Caffe Image/Video

5.1.2 Detection Result with MobileNetSSD

detection with mobilenetssd

5.1.3 Running the Demo

5.3 Inference with multiple NCS devices

We introduce multiple NCS support from v0.6.0, providing x1.8 / x2.5 / x3 performance improvement with 2NCSs / 3NCSs / 4NCSs compared with 1 NCS respectively. Refer here for more details.

6 Interfaces

6.1 Topic

Classification: /movidius_ncs_nodelet/classified_objects
Detection: /movidius_ncs_nodelet/detected_objects

6.2 Service

Classification: /movidius_ncs_image/classify_object
Detection: /movidius_ncs_image/detect_object

7 Known Issues

  • Only absolute path of image file supported in image inference demo
  • Only test on RealSense D400 series camera and Microsoft HD-300 USB camera
  • Current v0.6.0 supporting NCSDK v1.12.00 is on master branch. devel branch is the development branch for the next release.
  • Unit test for movidius_ncs_lib failed due to one exception.

8 TODO

  • Support more CNN models
  • Support latest NCSDK
  • Support results display with Rviz
Any security issue should be reported using process at https://01.org/security

Packages

No packages published

Languages

  • C++ 84.5%
  • CMake 14.9%
  • C 0.6%