Quantcast
Viewing all articles
Browse latest Browse all 682

[OpenVINO x UP Squared x RealSense 深度攝影機] 使用深度影像實做道路避障偵測

目標

本篇文章靈感發想自MIT的Dukietown (https://www.duckietown.org/) 。 如同之前我們在部落格分享過的自駕車文章 (https://blog.cavedu.com/2019/08/20/openvino2/) , 機器人小車已經具備有辨識行走及辨識路牌的能力了, 那麼接下來我們希望可以更進一步的提昇辨識能力到物件偵測(Object Detection), 並加入一個新的類別(小鴨,在這裡作為路人),並設法偵測到牠的位置, 再搭配Intel RealSense深度攝影機去量測距離, 藉此來讓小車可以知道前方是否可以通行。

由於篇幅限制,本文將著重在演算法的部份, 關於如何結合到實體的自駕車上以及對應的電控,將於之後的文章為您揭曉,還請多多關注!

環境準備

本文所使用的嵌入式控制板是研揚的UP Squared, 以及所使用的深度學習推論裝置為Intel Movidius NCS 2, 如果想看他們的介紹的話可以參考我們之前寫過的文章 [OpenVINO & Movidius™ 2運算棒] 使用台灣路況即時影像對九份老街做街景辨識

Image may be NSFW.
Clik here to view.

此外,還有本文的主角深度攝影機 Intel RealSense D435!

Image may be NSFW.
Clik here to view.

本文將會含括訓練深度學習模型的部份,建議準備有一台有GPU的電腦,本文以一台有GTX 1060的筆電為例,其上的作業系統為Linux。

最後,請下載本次的範例程式

git clone https://github.com/cavedunissin/agv-object-detection

然後記得切換工作目錄到agv-object-detection

cd agv-object-detection

收集資料

之前路牌的資料可以從我們公開的資料下載(https://drive.google.com/open?id=13odeFnUYNWQS2ysVijOttjzpB53W4FY_) 。 接著為了要能夠辨識出路人(也就是小鴨),我們需要手動先拍攝幾張不同角度的小鴨照片。 本範例約略整理出”左轉路牌”,”右轉路牌”,”停止號誌”以及”黃色小鴨”四個類別數張後, 整理如下的檔案格式

agv-object-detection/data/images

├── duck-001.jpg

├── duck-002.jpg

├── duck-003.jpg

標記資料

有了影像資料後,為了要能夠訓練深度學習模型學會Object Detection, 我們還必須手動label這些資料,在此所使用的軟體是有名的開源軟體labelimg(https://github.com/tzutalin/labelImg) 。

緊接著我們就標記每張圖片的框框以及其對應的類別,如下圖。

Left Right Stop Duck
Image may be NSFW.
Clik here to view.
Image may be NSFW.
Clik here to view.
Image may be NSFW.
Clik here to view.
Image may be NSFW.
Clik here to view.

最後存成檔案格式如下

agv-object-detection/data/annotations

├── duck-001.xml

├── duck-002.xml

├── duck-003.xml

準備Tensorflow Object Detection

我們所使用的深度學習框架為Google的Tensorflow,然後為了能夠使用Tensorflow的Object Detection API, 我們必須先下載函式庫到前面的agv-object-detection這個資料夾底下

# Inside agv-object-detection
git clone https://github.com/tensorflow/models

由於函式庫相當大,所以下載可能會需要一些時間。

下載完成後,請輸入以下的指令完成安裝Python相依套件

sudo pip3 install -r requirements.txt

再輸入以下的指令完成初始設

make init

準備Protobuf

make compile_protobuf

訓練模型

首先請先下載預訓練的模型,

make download_model

將前面準備好的資料轉換格式

Step 1. 從xml檔轉成csv檔

make xml_to_csv

Step 2. 存成Tensorflow指定的tfrecord格式

make generate_tfrecord

完成後就會看到在data的資料夾下會有一個叫做data.record的檔案囉!

agv-object-detection/data

└─── data.record

接著就可以開始訓練了!

make train

Image may be NSFW.
Clik here to view.

訓練過程中出現的loss代表誤差度多少,越低代表學得越好,以這個範例而言,如果時間充足的話盡量讓loss壓到1.0以下, 但其實1~2之間就蠻夠用了。

如果想要解析訓練的過程,可以輸入以下的指令來啟動Tensorboard

make log_train

Image may be NSFW.
Clik here to view.

訓練完後,為了要能夠轉成OpenVINO的形式,我們必須輸出我們訓練完後的模型

make export

Image may be NSFW.
Clik here to view.

最後將inference-graphs這個資料夾搬到UP Squared上面, 注意到UP Squared上面也必須下載本文章的專案

在UP2上下載agv-object-detection

git clone https://github.com/cavedunissin/agv-object-detection

把inference-graphs放到agv-object-detection中,並切換工作目錄到agv-object-detection中

cd agv-object-detection

檔案形式如下

agv-object-detection/inference-graphs

├── checkpoint

├── frozen_inference_graph.pb

├── model.ckpt.data-00000-of-00001

├── model.ckpt.index

├── model.ckpt.meta

├── pipeline.config

└── saved_model

├── saved_model.pb

└── variables

下來會用到OpenVINO的Model Optimizer,關於怎麼在UP2上面安裝OpenVINO可以參考我們之前的文章 [OpenVINO & Movidius™ 2運算棒] 使用台灣路況即時影像對九份老街做街景辨識

輸入以下的指令來將Tensorflow的模型轉成OpenVINO的格式

make model_optimize

Image may be NSFW.
Clik here to view.

轉譯成功後程式會將結果存在IR這個資料夾底下

agv-object-detection/IR

├── frozen_inference_graph.bin

├── frozen_inference_graph.mapping

└── frozen_inference_graph.xml

安裝RealSense函式庫

為了要在UP 2上面執行RealSense,我們必須先來安裝一些基本套件

加入新的apt key

sudo apt-key adv --keyserver keys.gnupg.net --recv-key C8B3A55A6F3EFCDE || sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-key C8B3A55A6F3EFCDE

Image may be NSFW.
Clik here to view.

新增Repo

sudo add-apt-repository "deb http://realsense-hw-public.s3.amazonaws.com/Debian/apt-repo bionic main" -u

Image may be NSFW.
Clik here to view.

安裝librealsense

sudo apt-get install librealsense2-dkms librealsense2-utils

Image may be NSFW.
Clik here to view.

確認Kernel是否更新

modinfo uvcvideo | grep realsense

Image may be NSFW.
Clik here to view.

接上Intel RealSense,執行以下程式看看是否正常運作

realsense-viewer

Image may be NSFW.
Clik here to view.

Demo

如果已經有了IR資料夾底下的.xml跟.bin檔後, 就可以輸入以下的指令來跑一下Demo。

make demo

Image may be NSFW.
Clik here to view.

參考

  1. Training Custom Object Detector https://tensorflow-object-detection-api-tutorial.readthedocs.io/en/latest/training.html
  2. Creating your own object detector https://towardsdatascience.com/creating-your-own-object-detector-ad69dda69c85
  3. Librealsense Installation https://github.com/IntelRealSense/librealsense/blob/master/doc/distribution_linux.md

 


Viewing all articles
Browse latest Browse all 682

Trending Articles