업데이트: Amazon Robotics Challenge 2017에서 보관 작업에서 1위를 차지한 새로운 비전 시스템에 대한 코드와 논문을 여기에 공개했습니다.
이 저장소에는 Amazon Picking Challenge 2016에서 3위와 4위를 차지한 비전 시스템용 툴박스 코드가 포함되어 있습니다. RGB-D Realsense 센서 드라이버(독립형 및 ROS 패키지), 2D 객체 분할을 위한 딥 러닝 ROS 패키지(훈련 및 테스트), 6D 포즈 추정을 위한 ROS 패키지. 이것은 우리 논문에 대한 모델 및 코드의 참조 구현입니다.
Andy Zeng, Kuan-Ting Yu, Shuran Song, Daniel Suo, Ed Walker Jr., Alberto Rodriguez 및 Jianxiong Xiao
2017년 IEEE 로봇공학 및 자동화에 관한 국제회의(ICRA)
창고 자동화는 최근 몇 년 동안 상당한 관심을 끌었으며, 아마도 가장 눈에 띄는 것은 Amazon Picking Challenge(APC)일 것입니다. 완전히 자율적인 픽 앤 플레이스 시스템을 달성하려면 물체와 물체의 6D 자세를 안정적으로 인식하는 강력한 비전 시스템이 필요합니다. 그러나 복잡한 환경, 자체 폐색, 센서 소음 및 다양한 물체로 인해 창고 환경에서 솔루션을 사용할 수 없습니다. 본 논문에서는 APC 2016에서 적재 및 피킹 작업에서 각각 3위와 4위를 차지한 비전 시스템을 제시합니다. 우리의 접근 방식은 멀티뷰 RGB-D 데이터와 데이터 중심의 자기 지도 학습을 활용하여 극복합니다. 앞서 언급한 어려움. 보다 구체적으로, 우리는 먼저 완전한 컨볼루션 신경망을 사용하여 장면의 여러 뷰를 분할하고 레이블을 지정한 다음 사전 스캔된 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 라이선스에 따라 릴리스됩니다(자세한 내용은 LICENSE 파일 참조).
모든 관련 데이터 세트 정보 및 다운로드는 여기에서 찾을 수 있습니다.
질문이 있거나 버그를 발견하면 알려주시기 바랍니다: 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
실행하세요. RGB-D 객체 분할 결과에 대해 ICP를 사용한 모델 피팅을 통해 6D 객체 포즈를 추정하기 위한 Matlab ROS 패키지입니다. 객체와 저장소의 3D 포인트 클라우드 모델은 여기에서 찾을 수 있습니다.
ros_packages/.../pose_estimation
catkin 작업 공간 소스 디렉터리(예: catkin_ws/src
)에 복사하세요.pose_estimation/src/make.m
상단의 지침을 따르십시오.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
librealsense를 사용하여 실시간으로 데이터(RGB-D 프레임 및 3D 포인트 클라우드)를 스트리밍하고 캡처하기 위한 독립형 C++ 실행 파일입니다. Intel® RealSense™ 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
librealsense를 사용하여 실시간으로 데이터(RGB-D 프레임 및 3D 포인트 클라우드)를 스트리밍하고 캡처하기 위한 C++ ROS 패키지입니다. Intel® RealSense™ 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
실행하세요. 경량 GPU 전용 신경망 프레임워크인 Marvin과 함께 FCN(Fully Convolutional Networks)을 사용하는 딥 러닝 기반 객체 분할을 위한 C++ ROS 패키지입니다. 이 패키지는 사전 훈련된 ConvNet을 통해 RGB-D 데이터를 전달하여 객체 분할 결과를 검색합니다. 신경망은 Marvin을 사용하여 오프라인으로 훈련됩니다(Marvin을 사용한 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 가중치를 지정합니다.apc-vision-toolbox/data
(예: apc-vision-toolbox/data/tmp
)에 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
경량 GPU 전용 신경망 프레임워크인 Marvin과 함께 FCN(Fully Convolutional Networks)을 사용하여 객체 분할을 훈련하기 위한 코드 및 모델입니다. 분할 훈련 데이터 세트에서 RGB-D 이미지(RGB 및 HHA)를 무작위로 샘플링하는 convnet-training/models
의 네트워크 아키텍처 .json 파일과 convnet-training/apc.hpp
의 Marvin 데이터 레이어를 포함합니다.
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
실행하세요. RGB-D 데이터에 실제 6D 개체 포즈에 주석을 추가하기 위한 온라인 WebGL 기반 도구입니다. 작은 변경 사항을 적용한 RGB-D Annotator 구현을 따릅니다. 다음은 주석자의 정확한 사본에 대한 다운로드 링크입니다.