2019年1月31日 星期四

Jetson TX2上DeepStream安裝與範例執行 (deepstream-plugins)

DeepStream SDK是為大規模創建和部屬基於AI的視智慧視訊分析(IVA)方案而設計的,它提供完整的框架和所有基本構建模組。它可以讓開發者專注於自己的核心深度學習網路和應用,而不是從頭開始設計端到端解決方案。

應用程式開發人員可以使用此SDK快速構建原型,並構建從智慧相機到智慧城市應用裝置,機器人和工業自動化等產品。

NVIDIA DeepStream SDK官網介紹


Jetson上的DeepStream SDK使用Jetpack,包括L4T,多媒體API,CUDA和TensorRT。 SDK提供了豐富的外掛和庫集合,使用Gstreamer框架構建,使開發人員能夠構建靈活的應用程式,將視訊轉化為有價值的見解。DeepStream還附帶了示例應用程式,包括原始碼和應用程​​序適配指南,以幫助開發人員快速開始構建。

本篇執行的平台為 Jetson TX2,搭配軟體版本為:
1. Jetpack 3.3
2. CUDA 9.0
3. TensorRT 4.0

包含 DeepStream 安裝和範例 (deepstream-plugins) 執行測試兩個部分。主要紀錄在執行過程中遇到的問題,以及解決方式。

1. Jetson TX2上DeepStream安裝過程

首先,安裝步驟在以下這篇文章有完整的說明 ,按照其步驟執行即可。
Jetson TX2上运行Deepstream范例

錯誤 1.

在執行安裝的最後一步驟,測試安裝結果時:
$ nvgstiva-app -c ${HOME}/configs/PGIE-FP16-CarType-CarMake-CarColor.txt

出現以下錯誤訊息:
error_message: Segmentation fault (core dumped)

解決方式:
參考此篇NVIDIA論壇的回覆,執行以下指令將快取暫存內容清除即可。
$ rm ~/Model/*/*.cache
$ rm ~/.cache/gstreamer-1.0/ -rf


錯誤 2.

解決了Segmentation fault之後,接著很快就遇到另一個錯誤訊息。
error_message: Error from src_elem: Your GStreamer installation is missing a plug-in.
Missing decoder: H.264 (High Profile)

此錯誤主要是因為我的系統中缺少H.264的decoder (gstreamer),GStreamer的安裝指令如下。
$ sudo apt-get install gstreamer1.0-libav

安裝完成後應該就能夠順利執行DeepStream指令了!

2. deepstream-plugins範例執行 (github)


(2.1) 按照 github 上 Readme 說明,先安裝 Pre-requisites,及Setup步驟。

Installing Pre-requisites:

Install GStreamer pre-requisites using:
$ sudo apt-get install libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev
Install Google flags using:
$ sudo apt-get install libgflags-dev
1. 修改Makefile.config,按照個人電腦配置設定,參考如下:
#Update the install directory paths for dependencies below CXX=g++ 
CUDA_VER:=9.0
#Set to TEGRA for jetson or TESLA for dGPU's
PLATFORM:=TEGRA
#For Tesla Plugins 

OPENCV_INSTALL_DIR:= /path/to/opencv-3.4.x
TENSORRT_INSTALL_DIR:= /path/to/TensorRT-5.x
DEEPSTREAM_INSTALL_DIR:= /path/to/DeepStream_Release_3.0
#For Tegra Plugins
NVGSTIVA_APP_INSTALL_DIR:= /home/nvidia/nvgstiva-app_sources


2. 下載YOLOv3模型 (For yolo v3)
$ wget https://raw.githubusercontent.com/pjreddie/darknet/master/cfg/yolov3.cfg
$ wget https://pjreddie.com/media/files/yolov3.weights

3. 修改 "data/yolo/calibration_images.txt" 輸入圖片路徑

4. 執行安裝 (For tegra)
$cd sources/plugins/gst-yoloplugin-tegra
make && sudo make install


(2.2) 執行 nvgstiva-app [TEGRA platform only]

1. 按照 github 說明修改配置文件 config/nvgstiva-app_yolo_config.txt

2. 執行指令
$ nvgstiva-app -c config/nvgstiva-app_yolo_config.txt

錯誤 1.

輸入執行指令後,遇到以下錯誤訊息
** WARN: : Using software video decoder instead of hardware accelerated OMX decoder. Unsupported format. Try re-encoding.
** ERROR: : Failed to link decodebin to pipeline 
** INFO: : Pipeline running 

解決方式:
參考此篇論壇回復,需要再另外安裝以下套件:
$ apt-get install libgstreamer1.0-0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav gstreamer1.0-doc gstreamer1.0-tools



(2.3) 測試trt-yolo-app

Object Detection using trt-yolo-app

$ cd sources/apps/trt-yolo
$ make && sudo make install
$ cd ../../../
$ trt-yolo-app --flagfile=config/yolov3.txt


錯誤 1.

trt-yolo-app編譯錯誤,錯誤訊息如下。

trt_utils.h:83:22: error: ‘nvinfer1::DimsHW YoloTinyMaxpoolPaddingFormula::compute(nvinfer1::DimsHW, nvinfer1::DimsHW, nvinfer1::DimsHW, nvinfer1::DimsHW, nvinfer1::DimsHW, const char*) const’ marked ‘override’, but does not override 
nvinfer1::DimsHW compute(nvinfer1::DimsHW inputDims, nvinfer1::DimsHW kernelSize,  




解決方式:

參考此篇論壇回復,deepstream-plugins改為使用DS2 Release版本即可。(下載連結)

錯誤 2. 選擇不同的YOLO模型

無法透過選擇不同的yolo.txt,去切換yolo模型 (yolov3.txt -> yolov3-tiny.txt)

解決方式:
(1) 需要修改文件 “./sources/lib/network_config.h”,並重新編譯才行。

(2) 並且需要將模型檔案放置於“./data/”中。



2019年1月28日 星期一

Jetson TX2安裝OpenCV3.4

TX2 install OpenCV3.4

在將TX2上原本的OpenCV升級至v3.4.0的過程中遇到了一些阻礙,將問題紀錄下來。


1. 安裝教學

此篇安裝教學寫得非常詳細,安裝的步驟大致與其相同
How to Install OpenCV (3.4.0) on Jetson TX2

在OpenCV安裝(更新)完成之後,能夠順利地import cv2執行。
但再重新開機之後卻會出現如下錯誤。




Error message
"ImportError: /usr/local/lib/python3.5/dist-packages/cv2.cpython-35m-aarch64-linux-gnu.so: undefined symbol: _ZTIN2cv3dnn19experimental_dnn_v35LayerE"


2. 解決方式

這個問題主要的原因是因為,需要更新環境變數 (/etc/bash.bashrc)。

以下這篇文章說明了一些可能問題的解決方法,其中也包括更新環境變數的方法。
Jetson TX2--python3下编译安装opencv3.4


1. 開啟文件 (/etc/bash.bashrc)
sudo vim /etc/bash.bashrc

2. 在文件底部加入以下內容,並儲存
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH

#添加完成後應該會如下圖


之後就可以順利使用OpenCV囉~

2018年4月29日 星期日

TensorFlow 學習筆記(一) - Windows 上安裝 TensorFlow

本文將說明如何在 Windows 上安裝 TensorFlow ,以及在安裝之前需要注意的事項。

確定 TensorFlow 版本

請按照個人配備及需求,在以下版本中選擇一種來安裝:
  • 只支援 CPU 的 TensorFlow。如果你的系統不支援 NVIDIA® GPU ,你必須安裝這個版本。这个版本的 TensorFlow 通常安裝起來比較簡單,所以對於初入門的使用者,即使你擁有 NVIDIA GPU,我們也推薦首先使用這個版本。
  • 支援 GPU 的 TensorFlow。 TensorFlow 在 GPU 上通常比在 CPU 上的執行得更快。所以如果你有符合以下要求的 NVIDIA® GPU 並且注重效能,可以隨後安裝這個版本。
GPU support TensorFlow 的 NVIDIA 需求
需要事先安裝以下套件:
  • CUDA® Toolkit 8.0。詳見 NVIDIA's documentation。確保按照文檔中描述的將 Cuda 相關路徑加入到 %PATH% 環境變數中。
  • CUDA Toolkit 8.0 相關的 NVIDIA 驅動程式。
  • cuDNN v5.1。詳見 NVIDIA's documentation。注意:cuDNN 通常與其他 CUDA DLLs 安裝的位置不同。確保將 cuDNN 庫的安裝目錄加入到 %PATH% 中。
  • CUDA Compute Capability 3.0 或更高的 GPU 晶片。支援的 GPU 晶片詳見 NVIDIA documentation 。
如上述軟體版本較舊,請將其升級到指定版本。

確定如何安裝 TensorFlow

Windows下安裝TensorFlow有如下選擇:
  • "native" pip
  • Anaconda
使用原生 pip 直接在系統中安裝 TensorFlow,而不使用虛擬環境。 因為原生 pip 將直接安裝於Windows系統中,所以可能會干擾其他基於Python的安裝。不過,如果你理解 pip 和 Python 環境,原生 pip 安裝通常只需要一個指令! 如果使用原生 pip 安裝,則可在任何目錄中執行 TensorFlow 程式。
在 Anaconda 中,你可以通過 conda 建立一個虛擬環境,在開發測試上較為安全。因此即使官網推薦使用 pip install 安裝 TensorFlow,而非conda install。但小編之後仍將以 Anaconda 的方式進行測試。原生 pip 安裝方式僅提供參考。
注意:使用 conda install 指令安裝而非官方支持。也就是说 TensorFlow 團隊沒有測試也沒有管理過 conda 安裝。 使用 conda 需要自行承擔風險。

原生 pip 安裝

如果還沒安裝以下版本的 Python ,請先安裝:
TensorFlow 在 Windows 上支援 Python 3.5.x 和  3.6.x 。 注意 Python 3 使用 pip3,我们用 pip3 來安裝 TensorFlow。
在 terminal 中輸入如下指令安裝 CPU版本 的 TensorFlow:
C:\> pip3 install --upgrade tensorflow
安裝支援 GPU 版本的 TensorFlow,使用以下指令:
C:\> pip3 install --upgrade tensorflow-gpu

Anaconda 安裝

Anaconda 安裝是社區支持,而非官方支持
按照以下步驟在 Anaconda 環境中安裝 TensorFlow:
  1. 按說明下載並安裝 Anaconda: Anaconda download site
  2. 建立一個 conda 環境,命名為 tensorflow,以便運行某個 Python 版本:
    C:\> conda create -n tensorflow 
  3. 啟用 anaconda 環境:
    C:\> activate tensorflow
    (tensorflow)C:\>  # 你的提示符號應該發生變化 
  4. 在你的 conda 環境中安裝 CPU 版本的 TensorFlow:
    (tensorflow)C:\> pip install --ignore-installed --upgrade tensorflow 
    安裝支援 GPU 版本的 TensorFlow:
    (tensorflow)C:\> pip install --ignore-installed --upgrade tensorflow-gpu 

驗證安裝結果

啟動 terminal。
如果通過 Anaconda 安裝,啟用 Anaconda 環境。
啟動 Python:
$ python
在 Python 互動式環境中輸入以下程式
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
如果系统輸出如下,則安裝成功:
Hello, TensorFlow!
如果你是新接觸 TensorFlow,可以前往 Getting Started with TensorFlow 進行下一步的學習。
如果你是新接觸機器學習,則可以參考以下連結
如果系统輸出錯誤訊息而非歡迎訊息,查看Common installation problems。


參考資料



<備註>

順便在這邊記錄下 Anaconda 及 Spyder 的一些操作指令。

1. Anaconda Update

開啟 Anaconda Prompt

C:> conda update --all
Or
C:> conda update conda
C:> conda update anaconda
C:> conda update spyder

2. Spyder 安裝 TensorFlow

安裝完成 Anaconda 之後,可再安裝運行 spyder 編譯器。 Spyder 下安裝 package 的方式如下。

1. 開啟 Anaconda Navigator,並選擇安裝 Spyder 編譯器。
2. 在 Spyder 編譯器環境中的 terminal 中,只需在指令開頭加入' ! ',即可使用 pip install 安裝套件。
In [1]: !pip install --ignore-installed --upgrade https://storage.googleapis.com/tensorflow/windows/cpu/tensorflow-1.7.0-cp36-cp36m-win_amd64.whl


 


2018年3月13日 星期二

MoveIt 入門教學 - 加入Trac_IK運動學求解(Trac-IK Kinematics Solver)

MoveIt入門教學 - 加入Trac_IK運動學求解(Trac-IK Kinematics Solver)


说明
  • 由於在使用MoveIt中最常見的KDL作為Kinematics Solver的過程中,在進行基本操作時擁有不錯的使用體驗。
  • 但隨著任務需求的增加,在加入環境障礙物以及attach object等操作之後,會遇到執行運算時間過長的問題。甚至可能會因此而失敗(timeout)。
  • 因此嘗試使用不同的Kinematics Solver來解決此一問題,目前測試使用Trac_IK,普遍上會擁有較佳的結果,甚至在某些條件下,運算速度可能會相差十倍以上,並且也比較不會出現失敗的狀況。
甚麼是Trac_IK
  • 来自ROS維基百科上的說明:Trac_IK係作為目前最常見的運動學編譯器(KDL)的改良版本,提供一更快速,且更穩定的運動學編譯器。在處理關節極限(joint-limited)的數值解上會具有較佳的結果,不會再增加額外的計算時間。
  • 並且Trac_IK具有與KDL編譯器相近的API calls,僅需調整部分輸入參數即可切換使用。詳細計算內容請參閱ROS Wiki - Trac_IK中的說明。
MoveIt! Trac_IK
  • MoveIt! Trac_IK是一種Open-Source的函式庫,提供一改善的解運動學的工具。
  • 本文旨在說明如何在機器人的MoveIt系統中使用Trac_IK的强大功能
  • 本文中MoveIt! Trac_IK的測試環境是ROS Kinetic,使用catkin编译。理論上可以工作再任何自由度的機械臂上。
準備
  • 应该已经通过MoveIt!配置助手生成MoveIt!配置包
MoveIt! IKFast 安装

兩種安裝方式:二進制debs包或源安裝
Binary Install:
sudo apt-get install ros-kinetic-trac-ik-kinematics-plugin

    源安装:(在catkin工作空間)
    1. 至官網source中下載原始程式碼
    2. 將package "trac_ik_kinematics_plugin"及"trac_ik_lib"放入catkin的工作空間中
    3. 於機器人的配置文件中"/config/"找到"kinematics.yaml"文件,並將文件內的
kinematics_solver: kdl_kinematics_plugin/KDLKinematicsPlugin 置換為 
=> kinematics_solver: trac_ik_kinematics_plugin/TRAC_IKKinematicsPlugin
4. 調整參數
  1. kinematics_solver_timeout (timeout in seconds, e.g., 0.005) and position_only_ik ARE supported.
  2. solve_type can be Speed, Distance, Manipulation1, Manipulation2 (see trac_ik_lib documentation for details). Default is Speed.
  3. kinematics_solver_attempts parameter is unneeded: unlike KDL, TRAC-IK solver already restarts when it gets stuck
  4. kinematics_solver_search_resolution is not applicable here.



備註: 在完成Trac_IK的安裝之後,即可直接開啟使用。並且在之後的MoveIt_Setup_Assistant中,也會直接出現Trac_IK的選項可以直接選取。




參考資料:
ROS Wiki - Trac_IK
trac_ik - source
MoveIt!入门教程-生成IKFast插件

2017年8月22日 星期二

YOLO (You Only Look Once) - 安裝與測試

YOLO (You Only Look Once)

Install YOLO

1. Download Darknet

$ git clone https://github.com/pjreddie/darknet.git
$ cd darknet

2. Modify System Setting

$ vim Makefile
GPU=1
OPENCV=1

3. Make & Test

$ make
$ ./darknet imtest data/eagle.jpg
如果安裝成功應該可以看到如下的圖片

Detect Using a Pre-Trained Model

1. Download pre-trained model

下載YOLO模形預先訓練好的權重。
$ wget https://pjreddie.com/media/files/yolo.weights

2. Run YOLO with pre-trained model

執行darknet測試YOLO模形。

$ ./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg
其中detect為簡略的寫法,等同於以下寫法:
$ ./darknet detector test cfg/coco.data cfg/yolo.cfg yolo.weights data/dog.jpg
yolo.cfg:定義yolo的模形。
yolo.weights:模形中訓練完成的權重
coco.data:分類完之後代表的labels

3. 執行結果如下

layer     filters    size    input                output
    0 conv     32  3 x 3 / 1   608 x 608 x   3   ->   608 x 608 x  32
    1 max          2 x 2 / 2   608 x 608 x  32   ->   304 x 304 x  32
    2 conv     64  3 x 3 / 1   304 x 304 x  32   ->   304 x 304 x  64    
......
   27 reorg              / 2    38 x  38 x  64   ->    19 x  19 x 256
   28 route  27 24
   29 conv   1024  3 x 3 / 1    19 x  19 x1280   ->    19 x  19 x1024
   30 conv    425  1 x 1 / 1    19 x  19 x1024   ->    19 x  19 x 425
   31 detection
mask_scale: Using default '1.000000'
Loading weights from yolo.weights...Done!
data/dog.jpg: Predicted in 0.737670 seconds.
dog: 82%
truck: 65%
bicycle: 85%


Real-Time Detection on a Webcam

將原本的test設定改為demo,YOLO便會改為以camera作為影像輸入。
$ ./darknet detector demo cfg/coco.data cfg/yolo.cfg yolo.weights

Tiny YOLO

雖然目前YOLO能夠取得不錯的辨識結果,但是對於TX2平台的運算能力,仍然是一件相當沉重的負擔。
因此也可以考慮改為使用Tiny YOLO,雖然辨識度會略為降低,但卻能大大提升運算速度。

1. Download tiny YOLO weights

下載Tiny YOLO模形預先訓練好的權重。

$ wget https://pjreddie.com/media/files/tiny-yolo-voc.weights

2. 執行Tiny YOLO測試

$ ./darknet detector test cfg/voc.data cfg/tiny-yolo-voc.cfg tiny-yolo-voc.weights data/dog.jpg
其中,除了需要改為使用tiny-yolo-voc.weight權重外。
由於Tiny YOLO改以VOC dataset作訓練(該dataset中僅有20種圖像data),需要改為使用voc.data。並且需要將原本YOLO模形改為tiny-yolo-voc.cfg模形。

3. Tiny YOLO執行結果

layer     filters    size              input                output
    0 conv     16  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  16
    1 max          2 x 2 / 2   416 x 416 x  16   ->   208 x 208 x  16
    2 conv     32  3 x 3 / 1   208 x 208 x  16   ->   208 x 208 x  32
    ......
   13 conv   1024  3 x 3 / 1    13 x  13 x1024   ->    13 x  13 x1024
   14 conv    125  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 125
   15 detection
mask_scale: Using default '1.000000'
Loading weights from tiny-yolo-voc.weights...Done!
data/dog.jpg: Predicted in 0.196784 seconds.
car: 34%
car: 55%
dog: 78%
bicycle: 29%



參考資料:
1. YOLO(darknet)Installation
2. YOLO官網 - demo

Jetson TX2 + ROS + Kinect2配置



Setup Kinect 2 for Unbuntu

Kinect在Ubuntu系統下開發,首先必須要先確認使用的設備是Kinect V1還是V2,這兩個的驅動是不能通用的。
本文針對的是Kinect V2的情況。

首先,針對Kinect V2在Linux下操作,必須要先安裝 libfreenect2 功能包,操作如下
(以下預設為Ubuntu14.04或以上之版本,本文使用ubuntu 16.0 LTS版本)

libfreenect2 

  • 下载 libfreenect2 源码
git clone https://github.com/OpenKinect/libfreenect2.git
cd libfreenect2
  • 下载upgrade deb 文件
cd depends; ./download_debs_trusty.sh
  • 安装编译工具
sudo apt-get install build-essential cmake pkg-config
  • 1
  • 1
  • 安装 libusb. 版本需求 >= 1.0.20.
sudo dpkg -i debs/libusb*deb
  • 1
  • 1
  • 安装 TurboJPEG (可选)
sudo apt-get install libturbojpeg libjpeg-turbo8-dev
  • 1
  • 1
  • 安装 OpenGL (可选)
sudo dpkg -i debs/libglfw3*deb
sudo apt-get install -f
sudo apt-get install libgl1-mesa-dri-lts-vivid
  • 安装 OpenNI2 (可选)
sudo apt-add-repository ppa:deb-rob/ros-trusty && sudo apt-get update
sudo apt-get install libopenni2-dev


  • Build
cd ..
mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=$HOME/freenect2 -DENABLE_CXX11=ON
make
make install

針對上面cmake命令的說明,第一個參數,是特別指定的安裝位置,你也可以自行指定別的喜歡的地方,但一般的標準路徑為上述路徑或者/usr/local。第二個參數是增加C++11的支援。
  • 設定udev rules: 
sudo cp ../platform/linux/udev/90-kinect2.rules /etc/udev/rules.d/
然后重新插拔Kinect2。
  • 一切搞定, 现在可以尝试运行Demo程序: 
./bin/Protonect

不出意外的話,應該就能看到RGB影像及深度影像畫面。
(Example的畫面應該將rgb <-> bgr影像通道設定錯了,所以可以看到畫面中紅色與藍色相反)

iai-kinect2

要在ROS環境中要使用Kinect V2,需要再安裝 iai-kinect2 功能包。

iai-kinect2 功能包可以從Github上面下载程式到工作空間內的src文件夹内:
cd ~/catkin_ws/src/git clone https://github.com/code-iai/iai_kinect2.git
cd iai_kinect2
rosdep install -r --from-paths .
cd ~/catkin_ws
catkin_make -DCMAKE_BUILD_TYPE="Release"

編譯完成之後,要再將路徑加入對應的source目錄中,執行以下
source ~/catkin_ws/devel/setup.bash

或是寫入~/.bashrc對應的檔案中即可。

並使用以下指令進行測試:
$ roslaunch kinect2_bridge kinect2_bridge.launch
$ rosrun kinect2_viewer kinect2_viewer



ps. 若是Kinect2裝置不穩定時,可以擴充USB的緩衝空間試試看 sudo sh -c 'echo 256 > /sys/module/usbcore/parameters/usbfs_memory_mb'


參考資料
ROS下Kinect2的驱动安装及简单应用
KinectV2+Ubuntu 14.04+Ros 安装教程

apt-get update異常處理

1. 問題描述 系統環境:Ubuntu 18.04.3 LTS 執行apt-get update更新時遇到如下狀況 錯誤訊息: Err:1 http://security.ubuntu.com/ubuntu bionic-security InRe...