更新:我們在這裡發布了新視覺系統的程式碼和論文,該系統在 2017 年亞馬遜機器人挑戰賽的裝載任務中獲得了第一名。
該儲存庫包含我們的視覺系統的工具箱程式碼,該系統在2016 年亞馬遜揀貨挑戰賽中獲得了第三名和第四名。 2D 物件分割(訓練與測試)的深度學習ROS 套件、用於 6D 位元姿估計的 ROS 套件。這是我們論文的模型和程式碼的參考實作:
Andy Zeng、餘寬廷、宋舒然、Daniel Suo、Ed Walker Jr.、Alberto Rodriguez 和肖建雄
IEEE 國際機器人與自動化會議 (ICRA) 2017
近年來,倉庫自動化引起了人們的極大興趣,最明顯的可能是亞馬遜揀選挑戰賽 (APC)。要達到完全自主的拾放系統需要強大的視覺系統,能夠可靠地辨識物體及其 6D 姿態。然而,由於環境雜亂、自遮擋、感測器噪音和物體種類繁多,倉庫環境中無法找到解決方案。在本文中,我們提出了一種視覺系統,該系統在APC 2016 的裝載和揀選任務中分別獲得第三名和第四名。克服上述困難。更具體地說,我們首先使用全卷積神經網路對場景的多個視圖進行分割和標記,然後將預先掃描的 3D 物件模型擬合到結果分割中以獲得 6D 物件姿勢。訓練深度神經網路進行分割通常需要大量帶有手動標籤的訓練資料。我們提出了一種自監督方法來產生大型標記資料集,無需繁瑣的手動分割,可以輕鬆擴展到更多物件類別。我們證明我們的系統可以在各種場景下可靠地估計物體的 6D 姿態。
如果您發現此程式碼對您的工作有用,請考慮引用:
@inproceedings{zeng2016multi,
title={Multi-view Self-supervised Deep Learning for 6D Pose Estimation in the Amazon Picking Challenge},
author={Zeng, Andy and Yu, Kuan-Ting and Song, Shuran and Suo, Daniel and Walker Jr, Ed and Rodriguez, Alberto and Xiao, Jianxiong},
booktitle={ICRA},
year={2016}
}
此程式碼在簡化 BSD 許可證下發布(有關詳細信息,請參閱許可證文件)。
所有相關的資料集資訊和下載都可以在這裡找到。
如果您有任何疑問或發現任何錯誤,請告訴我:Andy Zeng andyz[at]princeton[dot]edu
使用深度學習 FCN ROS 套件中預先計算的物件分割結果估計樣本場景資料(在data/sample
中)的 6D 物件姿勢:
git clone https://github.com/andyzeng/apc-vision-toolbox.git
(注意:來源儲存庫大小約 300mb,複製可能需要一段時間)cd apc-vision-toolbox/ros-packages/catkin_ws/src/pose_estimation/src/
mdemo
Matlab ROS 包,用於透過在 RGB-D 物件分割結果上使用 ICP 進行模型擬合來估計 6D 物件姿勢。可以在此處找到物件和垃圾箱的 3D 點雲模型。
ros_packages/.../pose_estimation
複製到 catkin 工作區來源目錄(例如catkin_ws/src
)pose_estimation/src/make.m
頂部的說明為Matlab編譯ROS自訂訊息pose_estimation/src
中編譯GPU CUDA核心函數: nvcc -ptx KNNSearch.cu
roscore
pose_estimation/src/startService.m
。在每次呼叫時(請參閱pose_estimation/srv/EstimateObjectPose.srv
中所述的服務請求格式),服務:roscore
mkdir /path/to/your/data/tmp
rosrun marvin_convnet detect _read_directory:="/path/to/your/data/tmp"
pose_estimation/src
demo.m
頂部的檔案路徑和選項startService.m
demo.m
一個獨立的 C++ 執行文件,用於使用 librealsense 即時串流和擷取資料(RGB-D 幀和 3D 點雲)。使用英特爾® 實感™ F200 相機在 Ubuntu 14.04 和 16.04 上進行了測試。
請參閱realsense_standalone
cd realsense_standalone
./compile.sh
編譯後,執行./stream
以開始從 Realsense 裝置串流傳輸 RGB-D 訊框。當串流視窗處於活動狀態時,按空白鍵可擷取目前 RGB-D 訊框並將其儲存至磁碟。相關相機資訊和捕獲的 RGB-D 幀保存到data
下隨機命名的資料夾中。
如果您的 Realsense 裝置已插入但仍未偵測到,請嘗試使用其他 USB 連接埠。如果失敗,請在拔下裝置時執行以下腳本以刷新 USB 連接埠:
sudo ./scripts/resetUSBports.sh
一個 C++ ROS 包,用於使用 librealsense 即時傳輸和捕獲資料(RGB-D 幀和 3D 點雲)。使用英特爾® 實感™ F200 相機在 Ubuntu 14.04 和 16.04 上進行了測試。
該 ROS 軟體包有兩個不同的版本。安裝哪個版本將取決於您系統的可用軟體:
請參閱ros-packages/realsense_camera
ros_packages/.../realsense_camera
複製到 catkin 工作區來源目錄(例如catkin_ws/src
)realsense_camera/CMakeLists.txt
catkin_make
編譯包devel/setup.sh
roscore
rosrun realsense_camera capture
/realsense_camera
從感測器傳回資料(回應資料格式在realsense_camera/srv/StreamSensor.srv
中描述)rosrun realsense_camera capture _display:=True
一個 C++ ROS 包,用於使用 FCN(全卷積網路)和 Marvin(一種輕量級僅 GPU 神經網路框架)進行基於深度學習的物件分割。該套件透過預先訓練的 ConvNet 向前饋送 RGB-D 資料以擷取物件分割結果。神經網路使用 Marvin 進行離線訓練(請參閱使用 Marvin 進行 FCN 訓練)。
請參閱ros-packages/marvin_convnet
需要先編譯Realsense ROS Package。
CUDA 7.5 和 cuDNN 5。以下是設定 cuDNN /usr/local/cudnn/vXX
的一些附加步驟。
LIB_DIR=lib $( [[ $( uname ) == " Linux " ]] && echo 64 )
CUDNN_LIB_DIR=/usr/local/cudnn/v5/ $LIB_DIR
echo LD_LIBRARY_PATH= $LD_LIBRARY_PATH : $CUDNN_LIB_DIR >> ~ /.profile && ~ /.profile
tar zxvf cudnn * .tgz
sudo cp cuda/ $LIB_DIR / * $CUDNN_LIB_DIR /
sudo cp cuda/include/ * /usr/local/cudnn/v5/include/
ros_packages/.../marvin_convnet
複製到 catkin 工作區來源目錄(例如catkin_ws/src
)realsense_camera/CMakeLists.txt
catkin_make
編譯包devel/setup.sh
ros_packages/.../marvin_convnet/models/competition/
並執行 bash 腳本./download_weights.sh
以下載我們用於物件分割的訓練權重(在我們的訓練資料集上訓練)marvin_convnet/src/detect.cu
:在檔案頂部,指定網路架構 .json 檔案和 .marvin 權重的檔案路徑。apc-vision-toolbox/data
中建立一個名為tmp
的資料夾(例如apc-vision-toolbox/data/tmp
)。 marvin_convnet 將在此處讀取/寫入 RGB-D 資料。 tmp
中資料的格式遵循我們資料集中的場景格式以及 Realsense Standalone 保存的資料格式。save_images
和detect
。前者從 Realsense ROS 包中檢索 RGB-D 資料並將其寫入磁碟的tmp
資料夾中,而後者從磁碟中的tmp
資料夾中讀取資料並透過FCN 向前饋送RGB-D 資料並將回應影像儲存到磁碟中rosrun marvin_convnet save_images _write_directory:= " /path/to/your/data/tmp " _camera_service_name:= " /realsense_camera "
rosrun marvin_convnet detect _read_directory:= " /path/to/your/data/tmp " _service_name:= " /marvin_convnet "
tmp
資料夾中): rosservice call /marvin_convnet [ " elmers_washable_no_run_school_glue " , " expo_dry_erase_board_eraser " ] 0 0
使用 FCN(全卷積網路)和 Marvin(一種僅使用 GPU 的輕量級神經網路框架)來訓練物件分割的程式碼和模型。包括convnet-training/models
中的網路架構 .json 檔案和convnet-training/apc.hpp
中的 Marvin 資料層,該資料層從我們的分割訓練資料集中隨機採樣 RGB-D 影像(RGB 和 HHA)。
請參閱convnet-training
/usr/local/cudnn/vXX
的一些附加步驟。 LIB_DIR=lib $( [[ $( uname ) == " Linux " ]] && echo 64 )
CUDNN_LIB_DIR=/usr/local/cudnn/v5/ $LIB_DIR
echo LD_LIBRARY_PATH= $LD_LIBRARY_PATH : $CUDNN_LIB_DIR >> ~ /.profile && ~ /.profile
tar zxvf cudnn * .tgz
sudo cp cuda/ $LIB_DIR / * $CUDNN_LIB_DIR /
sudo cp cuda/include/ * /usr/local/cudnn/v5/include/
convnet-training/
models/train_shelf_color.json
中網路架構的 APCData 層中指定訓練資料集檔案路徑models/weights/
並執行 bash 腳本./download_weights.sh
以在 ImageNet 上下載 VGG 預訓練權重(有關更多預訓練權重,請參閱 Marvin)convnet-training/
並在終端機./compile.sh
中運行以編譯 Marvin。./marvin train models/rgb-fcn/train_shelf_color.json models/weights/vgg16_imagenet_half.marvin
中運行,以使用架子中的物件在RGB-D 資料上訓練分割模型(對於手提包中的物件,使用網絡架構models/rgb-fcn/train_shelf_color.json
)。 用於執行我們論文中的實驗的程式碼;在「Shelf & Tote」基準資料集上測試完整的視覺系統。
查看evaluation
apc-vision-toolbox/data/benchmark
(例如apc-vision-toolbox/data/benchmark/office
、 `apc-vision-toolbox/ data/benchmark/倉庫」等)evaluation/getError.m
中,將變數benchmarkPath
變更為指向基準資料集目錄的檔案路徑evaluation/predictions.mat
中提供了視覺系統的預測。若要根據「Shelf & Tote」基準資料集的真實標籤計算這些預測的準確性,請執行evaluation/getError.m
一種基於 WebGL 的線上工具,用於在 RGB-D 資料上註釋地面實況 6D 物件姿勢。遵循 RGB-D Annotator 的實現,並進行了一些小的更改。這是我們的註釋器的精確副本的下載連結。