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...