Обновление: здесь мы опубликовали код и документ для нашей новой системы машинного зрения, которая заняла 1-е место в задаче по укладке на Amazon Robotics Challenge 2017.
Этот репозиторий содержит код набора инструментов для нашей системы машинного зрения, занявшей 3-е и 4-е места на Amazon Picking Challenge 2016. Включает драйверы датчиков RGB-D Realsense (автономный и пакет ROS), пакет ROS для глубокого обучения для сегментации 2D-объектов (обучение и тестирование), Пакет ROS для оценки 6D-позы. Это эталонная реализация моделей и кода для нашей статьи:
Энди Цзэн, Куан-Тин Ю, Шуран Сонг, Дэниел Суо, Эд Уокер-младший, Альберто Родригес и Цзяньсюн Сяо
Международная конференция IEEE по робототехнике и автоматизации (ICRA) 2017
В последние годы автоматизация складов вызвала значительный интерес, возможно, наиболее заметным из которых является Amazon Picking Challenge (APC). Для создания полностью автономной системы захвата и размещения требуется надежная система технического зрения, которая надежно распознает объекты и их шестимерные положения. Однако решение ускользает от условий склада из-за загроможденности окружающей среды, самозатенения, шума датчиков и большого разнообразия объектов. В этой статье мы представляем систему машинного зрения, которая заняла 3-е и 4-е места по задачам укладки и комплектования соответственно на выставке 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 (подробную информацию см. в файле ЛИЦЕНЗИИ).
Всю соответствующую информацию о наборах данных и файлы для загрузки можно найти здесь.
Если у вас есть вопросы или вы обнаружили ошибки, дайте мне знать: Энди Цзэн andyz[at]princeton[dot]edu
Оценивает положение 6D-объекта на примере данных сцены (в data/sample
) с использованием предварительно вычисленных результатов сегментации объекта из пакета Deep Learning 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. 3D-модели объектов и ячеек из облаков точек можно найти здесь.
ros_packages/.../pose_estimation
в исходный каталог рабочей области Catkin (например, catkin_ws/src
).pose_estimation/src/make.m
чтобы скомпилировать пользовательские сообщения ROS для Matlab.pose_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 для сегментации объектов на основе глубокого обучения с использованием FCN (полностью сверточные сети) с Marvin, облегченной структурой нейронных сетей, использующей только графический процессор. Этот пакет передает данные RGB-D через предварительно обученную сеть ConvNet для получения результатов сегментации объектов. Нейронные сети обучаются в автономном режиме с помощью Марвина (см. «Обучение FCN с Марвином»).
См. 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 и веса .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
Код и модели для обучения сегментации объектов с использованием FCN (полностью сверточных сетей) с 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 ./download_weights.sh
, чтобы загрузить предварительно обученные веса VGG на ImageNet (дополнительные предварительно обученные веса см. в разделе Марвин)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 для аннотирования наземных поз 6D-объектов на основе данных RGB-D. Следует реализации аннотатора RGB-D с небольшими изменениями. Вот ссылка для скачивания нашей точной копии аннотатора.