تحديث: لقد أصدرنا الكود والورق الخاص بنا لنظام الرؤية الجديد الخاص بنا هنا، والذي احتل المركز الأول في مهمة التخزين في Amazon Robotics Challenge 2017.
يحتوي هذا المستودع على رمز صندوق الأدوات لنظام الرؤية الخاص بنا الذي حصل على المركزين الثالث والرابع في Amazon Picking Challenge 2016. ويتضمن برامج تشغيل مستشعر RGB-D Realsense (حزمة مستقلة وحزمة ROS)، وحزمة ROS للتعلم العميق لتجزئة الكائنات ثنائية الأبعاد (التدريب والاختبار)، حزمة ROS لتقدير الوضعية 6D. هذا هو التنفيذ المرجعي للنماذج والكود الخاص بورقتنا:
أندي تسنغ، كوان تينغ يو، شوران سونغ، دانييل سو، إد ووكر جونيور، ألبرتو رودريغيز وجيانكسيونج شياو
مؤتمر IEEE الدولي للروبوتات والأتمتة (ICRA) 2017
لقد اجتذبت أتمتة المستودعات اهتمامًا كبيرًا في السنوات الأخيرة، وربما كان ذلك أكثر وضوحًا من خلال تحدي Amazon Picking Challenge (APC). يتطلب تحقيق نظام اختيار ومكان مستقل تمامًا نظام رؤية قويًا يتعرف بشكل موثوق على الأشياء ووضعياتها السداسية الأبعاد. ومع ذلك، فإن الحل بعيد المنال عن إعداد المستودع بسبب البيئات المزدحمة، والانغلاق الذاتي، وضجيج المستشعر، ومجموعة كبيرة ومتنوعة من الكائنات. في هذه الورقة، نقدم نظام رؤية احتل المركزين الثالث والرابع في مهام التخزين والالتقاط، على التوالي في APC 2016. ويستفيد نهجنا من بيانات RGB-D متعددة العرض والتعلم القائم على البيانات والإشراف الذاتي للتغلب على الصعوبات المذكورة. وبشكل أكثر تحديدًا، نقوم أولاً بتقسيم وتسمية طرق عرض متعددة لمشهد ما باستخدام شبكة عصبية تلافيفية بالكامل، ثم نلائم نماذج الكائنات ثلاثية الأبعاد الممسوحة ضوئيًا مسبقًا مع التجزئة الناتجة للحصول على وضعية الكائن سداسي الأبعاد. يتطلب تدريب شبكة عصبية عميقة للتجزئة عادةً كمية كبيرة من بيانات التدريب مع تسميات يدوية. نقترح طريقة ذاتية الإشراف لإنشاء مجموعة بيانات كبيرة مصنفة دون تجزئة يدوية شاقة يمكن توسيع نطاقها إلى المزيد من فئات الكائنات بسهولة. لقد أثبتنا أن نظامنا يمكنه تقدير الوضعية السداسية الأبعاد للأشياء بشكل موثوق في ظل مجموعة متنوعة من السيناريوهات.
إذا وجدت هذا الكود مفيدًا في عملك، فيرجى مراعاة الاستشهاد بما يلي:
@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
) مع نتائج تجزئة الكائن المحسوبة مسبقًا من حزمة التعلم العميق FCN ROS:
git clone https://github.com/andyzeng/apc-vision-toolbox.git
(ملاحظة: حجم مستودع المصدر هو ~300 ميجابايت، وقد يستغرق الاستنساخ بعض الوقت)cd apc-vision-toolbox/ros-packages/catkin_ws/src/pose_estimation/src/
mdemo
حزمة Matlab ROS لتقدير كائن 6D يطرح من خلال ملاءمة النموذج مع ICP على نتائج تجزئة كائن RGB-D. يمكن العثور هنا على نماذج سحابية نقطية ثلاثية الأبعاد للكائنات والصناديق.
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 وسحب النقاط ثلاثية الأبعاد) في الوقت الفعلي باستخدام librealsense. تم الاختبار على Ubuntu 14.04 و16.04 باستخدام كاميرا Intel® RealSense™ F200.
راجع realsense_standalone
cd realsense_standalone
./compile.sh
بعد التجميع، قم بتشغيل ./stream
لبدء دفق إطارات RGB-D من جهاز Realsense. عندما تكون نافذة الدفق نشطة، اضغط على مفتاح شريط المسافة لالتقاط وحفظ إطار RGB-D الحالي على القرص. يتم حفظ معلومات الكاميرا ذات الصلة وإطارات RGB-D الملتقطة في مجلد مسمى عشوائيًا ضمن data
.
إذا كان جهاز Realsense الخاص بك متصلاً ولكن لم يتم اكتشافه، فحاول استخدام منفذ USB مختلف. إذا فشل ذلك، قم بتشغيل البرنامج النصي التالي أثناء فصل الجهاز لتحديث منافذ USB الخاصة بك:
sudo ./scripts/resetUSBports.sh
حزمة C++ ROS لدفق البيانات والتقاطها (إطارات RGB-D وسحب النقاط ثلاثية الأبعاد) في الوقت الفعلي باستخدام 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 لتجزئة الكائنات القائمة على التعلم العميق باستخدام FCNs (شبكات تلافيفية بالكامل) مع Marvin، وهو إطار شبكة عصبية خفيف الوزن مخصص لوحدة معالجة الرسومات فقط. تعمل هذه الحزمة على تغذية بيانات 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 script ./download_weights.sh
لتنزيل أوزاننا المدربة لتجزئة الكائنات (تم تدريبها على مجموعة بيانات التدريب الخاصة بنا)marvin_convnet/src/detect.cu
: في الجزء العلوي من الملف، حدد مسار الملف إلى ملف .json الخاص ببنية الشبكة وأوزان .marvin.tmp
في apc-vision-toolbox/data
(على سبيل المثال apc-vision-toolbox/data/tmp
). هذا هو المكان الذي سيقوم فيه marvin_convnet بقراءة/كتابة بيانات RGB-D. يتبع تنسيق البيانات في tmp
تنسيق المشاهد في مجموعات البيانات لدينا وتنسيق البيانات المحفوظة بواسطة Realsense Standalone.save_images
detect
. يسترد الأول بيانات RGB-D من حزمة Realsense ROS ويكتب على القرص في مجلد 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
تعليمات برمجية ونماذج للتدريب على تجزئة الكائنات باستخدام FCNs (الشبكات التلافيفية بالكامل) مع Marvin، وهو إطار شبكة عصبية خفيف الوزن مخصص لوحدة معالجة الرسومات فقط. يتضمن ملفات .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 المدربة مسبقًا على ImageNet (راجع 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
.mat. لحساب دقة هذه التنبؤات مقابل تسميات الحقيقة الأساسية لمجموعة البيانات المعيارية "Shelf & Tote"، قم بتشغيل evaluation/getError.m
أداة تعتمد على WebGL عبر الإنترنت لتوضيح كائن 6D للحقيقة الأرضية على بيانات RGB-D. يتبع تنفيذ RGB-D Annotator مع تغييرات صغيرة. فيما يلي رابط التنزيل لنسختنا الدقيقة من الحواشي.