项目地址:GitHub - j96w/6-PACK: "6-PACK: Category-level 6D Pose Tracker with Anchor-Based Keypoints" code repository
一、配置环境
这里强烈建议安装python3.6.7版本,安装低于此版本的python有可能在多线程训练时造成
chunk = read(handle, remaining)的问题。
-
CUDA 9.0
已经有其他版本CUDA的老铁们不要怕麻烦,最好还是再装个9.0然后多版本切换cuda。ubuntu下安装多版本cuda及版本切换教程_zeeq_的博客-优快云博客_ubuntu切换cuda版本 - conda python3.6.7环境
conda create -n 6pack python==3.6.7
-
安装torch0.4.1 torchvision0.2.1
conda install pytorch=0.4.1 torchvision==0.2.1 cuda90 -c pytorch
-
安装opencv
pip install opencv-contrib-python
-
安装PIL/spicy/numpy/logging from conda官网安装
conda install -c conda-forge pillow conda install -c conda-forge scipy conda install -c conda-forge numpy conda install -c conda-forge r-logging
二、准备数据
6PACK需要的训练+测试数据很庞大(快200G了),建议提前一晚下载
- 下载nocs中如下图所示的4个数据集:GitHub - hughw19/NOCS_CVPR2019: [CVPR2019 Oral] Normalized Object Coordinate Space for Category-Level 6D Object Pose and Size Estimation on Python3, Tensorflow, and Keras
- 创建My_NOCS文件夹,将上述数据集数据解压其中(记得给Test解压出来的文件改个名为real_val)。由于数据量很大,可以把My_NOCS文件创建在空间充足的硬盘里,然后添加软链接到6pack根目录。ubuntu创建软链接_卒迹的博客-优快云博客_ubuntu软连接
- 现在文件夹的形式为My_NOCS/data/real_train, My_NOCS/data/real_val, My_NOCS/data/train,My_NOCS/data/gts
- 下载NOCS-REAL275-additional.zip并解压到My_NOCS
由于nocs数据集里没有位姿真值,只有NOCS的真值(每个像素对应的点云在NOCS系下的位置),因此需要从训练数据里生成6D pose。NOCS的原版策略:随机采样mask内的像素,恢复出的真值效果一般。6PACK策略:选取临近mask中心的像素。additional.zip是6-pack官方已经生成好的pose和scale,model_pts是ShapeNetCore中的物体点云。 - 现在文件夹下有My_NOCS/data_list,My_NOCS/data_pose,My_NOCS/model_pts,My_NOCS/model_scales
- 在6pack根目录的dataset文件夹下运行命令,生成真值数据,时间较长,我用了6小时。
python data_preprocess.py
-
训练时采用数据增强策略,需要用到coco2017数据集,解压后把train2017放到My_NOCS下http://images.cocodataset.org/zips/train2017.zip
至此数据准备工作完成,即构建好了 My_NOCS文件夹。
三、训练
- 如果训练一开始就卡住,可能是存放数据集的硬盘没添加加权限,用chown -R即可chown -R 用户名:组名 ./ 及 chown用法介绍_micro_boy的博客-优快云博客_chown
- category代表训练类别、dataset root指向你的数据集位置、workers是工作线程数,我是莽夫直接用了16。
python train.py --category 1 --dataset_root '/home/robot413/My_NOCS' --workers 16
四、评估+benchmark
python eval.py
python benchmark.py