[CVPR 2018] RotationNet 论文及代码调试记录

原文地址: https://arxiv.org/abs/1603.06208

翻译链接:http://tongtianta.site/paper/838

Project地址:https://kanezaki.github.io/rotationnet/

Caffe代码地址:https://github.com/kanezaki/rotationnet (本文主要介绍)

Pytorch代码地址:https://github.com/kanezaki/pytorch-rotationnet

1. 文章简介

这篇文章还挺有意思的,主要做的是3D视角选择方面的工作,可以完成类内和类间的模型对齐。通过网络可以学习一个关于视角的隐变量vi,并且像物体检测一样,在类别后加入了一个背景类。最后做测试的时候,可以不需要像训练集一样,视角一定是顺序的,可以任意变换角度,都可以识别出对应的类别和角度。

在ModelNet 40和ModelNet 10上这个网络都达到了很高的精度,目前就是在这个数据集上的SOTA。

如果对视角相关的工作感兴趣的话,这篇文章是非常推荐认真读的文章。

最主要作者是个美腻的小姐姐,感兴趣的话可以去她的个人主页上瞧一瞧,Github上也有她的头像,有问题还可以邮件跟她亲密交流,真的是科研动力十足。话不多说,开始撸代码吧。

https://kanezaki.github.io/index_jp.html

2. 代码调试

作者Github上的代码操作步骤非常详细,但是过程中有很多坑,亲自踩过才知道这些细节的重要性。下面给出我调试过程中遇到的问题,按照下面的方法进行调试,应该不会出问题。

作者还提供了一个torch版本的,但是作者自己在issue里也提出了,目前他们调试的结果没有复现caffe版本的性能,我们也在同步调试这个代码。在本文里介绍的还是caffe版本

系统是Ubuntu 18.04,  GPU: 1080 Ti,CUDA:10.0

1.1 编译caffe-rotation v2

(1)编译caffe过程中就全是坑,比如opencv的环境,比如Makefile.config的各种配置

在10.64.156.11上配置没有成功,主要原因是opencv版本的问题,那台开发机上装了很多opencv的版本,因此有点混乱,最后编译caffe的时候显示是opencv 4.0.0

后面在10.64.156.12开发机上完成了配置,主要参考链接

https://www.cnblogs.com/go-better/p/7161006.html

(2)编译完成之后,还需要修改~/.bashrc,将caffe的文件夹加入系统路径,然后进入python,看少什么库就加什么库,例如scikit-image, Pillow等

(3)当import caffe没有问题的时候,代表caffe编译完成

 

2.1 运行demo.sh

下载所需要的预训练权重,bash demo.sh运行demo

(1)这个过程中,也有一些地方需要注意,比如要修改路径,与caffe-rotationv2路径一致;还有对权重存放的文件夹的路径也要注意,修改在demo.sh里修改对应的变量即可

 

(2)然后运行程序,发现有个在transform(in_,mean)总是报错,通过断点调试,发现是因为程序中给出的默认图片的大小与实际input的大小不一样,将程序中默认的图片大小改成227即可运行程序,运行完了之后的结果如下。

Case 1: predictions的输出维度为41(40类+1个背景类)*12(12个视角) = 492

 

Case 2: predictions的输出维度为41*20 = 820,参数意义与Case 1相同。

 

2.2 运行demo2.sh

demo2.sh是一个关于视角的Demo。不仅可以预测出对应的类别,还可以对齐角度。

问题总结:

(1)bash demo2.sh时会报错,表示没有找到reference_poses_car.txt,后来去对应的文件夹中找也没有找到,后来发现在make_reference_poses.sh里有生成每个类别对应的这个文件,于是就想运行这个.sh文件。

将数据集下载放入对应的文件夹后,bash make_reference_poses.sh就可以生成每个类别对应的txt和npy文件。

(2)然后再运行demo2.sh的时候,在有些类别可以直接运行,有些类别在读图的时候,还是会报错,错误为EOF Error,是关于PIL模块的错误,报错的语句为caffe.io.load_image(im_f),后来去网上查了一下,save_scores.py的文件开始时加入了以下的语句就可以了。

from skimage import io

io.use_plugin(‘matplotlib’)

参考链接:https://blog.csdn.net/limumumu888/article/details/50883886

 

demo2.sh运行结果:

Case 1:

左边为训练,右边为测试之后的结果

 

Case 2:

 

3.1 测试集分类结果 – Case 1 (Subset)

         修改一下模型的路径直接就可以bash test_modelnet40.sh进行测试,将所有类别的正确率取平均值,在Case 1下,平均分类正确率为90%。

 

3.2 测试集分类结果 – Case 2 (Subset)

         平均分类正确率:92.125%。

 

3.3 测试集分类结果 – ModelNet 10 (Full)

         平均分类正确率:98.458% (文中表5的结果)

 

3.4 测试集分类结果 – ModelNet 40 (Full)

       平均分类正确率:97.366%

 

4. 训练网络

主要是有部分权重没有下载好,需要自己下个权重,然后要整理下文件夹的树形关系。

(1)RCNN权重

作者Github上的地址下载不正确,后来找了rbg自己的Github提供的权重

https://github.com/rbgirshick/rcnn/blob/master/data/fetch_models.sh

(2)ILSVRC 12的权重

cd到如下目录   caffe-rotationnet2/data/ilsvrc12

在该目录下 bash get_ilsvrc_aux.sh

 

然后就可以开始训练了,训练的过程中,还有个小问题是编译好的Caffe需要放在程序的文件夹内,并且需要把caffe-rotationnet2重命名为caffe-rotationnet,到此基本就可以完成训练了。

文件夹的结构如下:

训练过程如下:

程序中,每隔1000 Iteration,存一个caffemodel,并且输出分类正确率。

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值