อัปเดต: เราได้เปิดตัวโค้ดและรายงานสำหรับระบบวิชั่นใหม่ของเราที่นี่ ซึ่งเกิดขึ้นเป็นที่ 1 ในงานการจัดเก็บที่ Amazon Robotics Challenge 2017
พื้นที่เก็บข้อมูลนี้มีโค้ดกล่องเครื่องมือสำหรับระบบวิชันซิสเต็มของเราซึ่งคว้าอันดับที่ 3 และ 4 ในงาน Amazon Picking Challenge 2016 ประกอบด้วยไดรเวอร์เซ็นเซอร์ RGB-D Realsense (แพ็คเกจสแตนด์อโลนและ ROS) แพ็คเกจ ROS การเรียนรู้เชิงลึกสำหรับการแบ่งส่วนวัตถุ 2 มิติ (การฝึกอบรมและการทดสอบ) แพ็คเกจ ROS สำหรับการประมาณค่าท่าทาง 6 มิติ นี่คือการใช้งานอ้างอิงของโมเดลและโค้ดสำหรับเอกสารของเรา:
แอนดี้ เซง, ควน-ติง หยู, ซ่ง ชูหราน, แดเนียล ซูโอ, เอ็ด วอล์คเกอร์ จูเนียร์, อัลแบร์โต โรดริเกซ และเจียนซยง เซียว
การประชุมนานาชาติ IEEE เรื่องหุ่นยนต์และระบบอัตโนมัติ (ICRA) 2017
ระบบอัตโนมัติของคลังสินค้าดึงดูดความสนใจอย่างมากในช่วงไม่กี่ปีที่ผ่านมา ซึ่งอาจจะเห็นได้ชัดเจนที่สุดจาก Amazon Picking Challenge (APC) การจะได้ระบบหยิบและวางแบบอัตโนมัติเต็มรูปแบบนั้นจำเป็นต้องมีระบบการมองเห็นที่แข็งแกร่ง ซึ่งสามารถจดจำวัตถุและท่าทาง 6D ได้อย่างน่าเชื่อถือ อย่างไรก็ตาม โซลูชันจะหลีกเลี่ยงการตั้งค่าคลังสินค้าเนื่องจากสภาพแวดล้อมที่รก การปิดกั้นตัวเอง เสียงเซ็นเซอร์ และวัตถุหลากหลายประเภท ในบทความนี้ เรานำเสนอระบบการมองเห็นที่เกิดขึ้นอันดับที่ 3 และ 4 ในงานการจัดเก็บและการหยิบสินค้า ตามลำดับที่ APC 2016 แนวทางของเราใช้ประโยชน์จากข้อมูล RGB-D หลายมุมมองและการเรียนรู้แบบควบคุมตนเองที่ขับเคลื่อนด้วยข้อมูลเพื่อเอาชนะ ความยากลำบากดังกล่าวข้างต้น โดยเฉพาะอย่างยิ่ง ขั้นแรกเราแบ่งส่วนและติดป้ายกำกับหลายมุมมองของฉากด้วยโครงข่ายประสาทเทียมแบบเกลียวเต็มรูปแบบ จากนั้นจึงปรับโมเดลวัตถุ 3 มิติที่สแกนไว้ล่วงหน้าให้พอดีกับการแบ่งส่วนผลลัพธ์เพื่อให้ได้ท่าทางของวัตถุ 6 มิติ การฝึกโครงข่ายประสาทเชิงลึกสำหรับการแบ่งส่วน โดยทั่วไปต้องใช้ข้อมูลการฝึกจำนวนมากพร้อมป้ายกำกับแบบแมนนวล เราเสนอวิธีการควบคุมตนเองเพื่อสร้างชุดข้อมูลที่มีป้ายกำกับขนาดใหญ่โดยไม่ต้องแบ่งส่วนด้วยตนเองที่น่าเบื่อ ซึ่งสามารถขยายขนาดเป็นหมวดหมู่ออบเจ็กต์ได้มากขึ้นได้อย่างง่ายดาย เราแสดงให้เห็นว่าระบบของเราสามารถประมาณท่าทาง 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
ประมาณวัตถุ 6D ที่วางอยู่บนข้อมูลฉากตัวอย่าง (ใน data/sample
) พร้อมผลลัพธ์การแบ่งส่วนวัตถุที่คำนวณไว้ล่วงหน้าจากแพ็คเกจ Deep Learning FCN ROS:
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 สำหรับการประมาณค่าวัตถุ 6D โดยการปรับโมเดลให้เหมาะสมด้วย ICP บนผลลัพธ์การแบ่งส่วนวัตถุ RGB-D สามารถดูแบบจำลองพอยต์คลาวด์ 3 มิติของวัตถุและถังขยะได้ที่นี่
ros_packages/.../pose_estimation
ลงในไดเรกทอรีต้นทางพื้นที่ทำงาน catkin ของคุณ (เช่น catkin_ws/src
)pose_estimation/src/make.m
เพื่อรวบรวมข้อความที่กำหนดเอง ROS สำหรับ Matlabpose_estimation/src
: 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++ แบบสแตนด์อโลนสำหรับการสตรีมและบันทึกข้อมูล (เฟรม RGB-D และพอยต์คลาวด์ 3 มิติ) แบบเรียลไทม์โดยใช้ librealsense ทดสอบบน Ubuntu 14.04 และ 16.04 ด้วยกล้อง Intel® RealSense™ F200
ดู realsense_standalone
cd realsense_standalone
./compile.sh
หลังจากการคอมไพล์แล้ว ให้รัน ./stream
เพื่อเริ่มการสตรีมเฟรม RGB-D จากอุปกรณ์ Realsense ขณะที่หน้าต่างสตรีมทำงานอยู่ ให้กดปุ่ม Space Bar เพื่อจับภาพและบันทึกเฟรม RGB-D ปัจจุบันลงในดิสก์ ข้อมูลกล้องที่เกี่ยวข้องและเฟรม RGB-D ที่บันทึกไว้จะถูกบันทึกลงในโฟลเดอร์ที่มีชื่อแบบสุ่มภายใต้ data
หากอุปกรณ์ Realsense ของคุณเสียบอยู่แต่ตรวจไม่พบ ให้ลองใช้พอร์ต USB อื่น หากล้มเหลว ให้รันสคริปต์ต่อไปนี้ในขณะที่ไม่ได้เสียบปลั๊กอุปกรณ์เพื่อรีเฟรชพอร์ต USB ของคุณ:
sudo ./scripts/resetUSBports.sh
แพ็คเกจ C++ ROS สำหรับการสตรีมและบันทึกข้อมูล (เฟรม RGB-D และ 3D point cloud) แบบเรียลไทม์โดยใช้ librealsense ทดสอบบน Ubuntu 14.04 และ 16.04 ด้วยกล้อง Intel® RealSense™ F200
แพ็คเกจ 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 (Fully Convolutional Networks) กับ Marvin ซึ่งเป็นเฟรมเวิร์กโครงข่ายประสาทเทียมแบบน้ำหนักเบาเฉพาะ GPU เท่านั้น แพ็คเกจนี้จะป้อนข้อมูล RGB-D ไปข้างหน้าผ่าน ConvNet ที่ได้รับการฝึกอบรมล่วงหน้าเพื่อดึงผลลัพธ์การแบ่งส่วนวัตถุ โครงข่ายประสาทเทียมได้รับการฝึกฝนแบบออฟไลน์กับ Marvin (ดูการฝึกอบรม FCN กับ Marvin)
ดู ros-packages/marvin_convnet
จำเป็นต้องรวบรวมแพ็คเกจ Realsense ROS ก่อน
CUDA 7.5 และ cuDNN 5 คุณอาจต้องลงทะเบียนกับ NVIDIA ด้านล่างนี้เป็นขั้นตอนเพิ่มเติมในการตั้งค่า 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 สถาปัตยกรรมเครือข่าย และน้ำหนัก .marvintmp
ใน apc-vision-toolbox/data
(เช่น apc-vision-toolbox/data/tmp
) โดยที่ marvin_convnet จะอ่าน/เขียนข้อมูล RGB-D รูปแบบของข้อมูลใน tmp
เป็นไปตามรูปแบบของฉากในชุดข้อมูลของเราและรูปแบบของข้อมูลที่บันทึกโดย Realsense Standalonesave_images
และ detect
. แบบแรกดึงข้อมูล RGB-D จาก Realsense ROS Package และเขียนลงดิสก์ในโฟลเดอร์ tmp
ในขณะที่แบบหลังอ่านจากดิสก์ในโฟลเดอร์ tmp
และป้อนข้อมูล RGB-D ไปข้างหน้าผ่าน FCN และบันทึกอิมเมจการตอบสนองลงในดิสก์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 (Fully Convolutional Networks) กับ Marvin ซึ่งเป็นเฟรมเวิร์กโครงข่ายประสาทเทียมแบบน้ำหนักเบาเฉพาะ GPU เท่านั้น รวมไฟล์สถาปัตยกรรมเครือข่าย .json ใน convnet-training/models
และชั้นข้อมูล Marvin ใน convnet-training/apc.hpp
ที่สุ่มตัวอย่างภาพ 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
models/weights/
และรัน bash script ./download_weights.sh
เพื่อดาวน์โหลด VGG pre-trained Weights บน ImageNet (ดู Marvin สำหรับน้ำหนัก pre-trained เพิ่มเติม)convnet-training/
และรันในเทอร์มินัล ./compile.sh
เพื่อคอมไพล์ Marvin./marvin train models/rgb-fcn/train_shelf_color.json models/weights/vgg16_imagenet_half.marvin
เพื่อฝึกโมเดลการแบ่งเซ็กเมนต์บนข้อมูล RGB-D ด้วยอ็อบเจ็กต์ในชั้นวาง (สำหรับอ็อบเจ็กต์ใน Tote ให้ใช้ 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 สำหรับใส่คำอธิบายประกอบวัตถุ 6D ความจริงภาคพื้นดินบนข้อมูล RGB-D ติดตามการใช้งาน RGB-D Annotator โดยมีการเปลี่ยนแปลงเล็กน้อย นี่คือลิงก์ดาวน์โหลดไปยังสำเนาคำอธิบายประกอบที่ถูกต้องของเรา