TX2配置安装pva-faster-rcnn

参考:https://blog.csdn.net/samylee/article/details/52860038

https://zhuanlan.zhihu.com/p/29971657

第一部分:下载并编译pvanet

1、终端输入:

git clone --recursive https://github.com/sanghoon/pva-faster-rcnn.git

2、建立Cython模块:

cd pva-faster-rcnn/lib
gedit setup.py

此处需要根据GPU 计算能力(查看地址)修改lib下的setup.py第135行 'nvcc': ['-arch=sm_35'

如果是TX2,计算能力为6.2,则修改为'nvcc': ['-arch=sm_62',如果是TITAN V,计算能力为7.0,则修改为'nvcc': ['-arch=sm_70',然后开始编译

make –j4

考虑到TX2有四核CPU,因此选择make -j4

根据自己机器的实际情况设置j后边的参数,网上有人建议选择CPU核数的两倍,也有人说等于核数,实测对比了一下效果,对于同一个编译任务,make很慢,用时32分钟,make -j4 用时11分钟,make -j8也是用时11分钟,make -j16用时11.5分钟。因此对于TX2而言,make -j4即可发挥其最大性能,-j8和-j16多了也不会有明显的改善。

3、编译caffe及pycaffe

cd pva-faster-rcnn/caffe-fast-rcnn
cp Makefile.config.example Makefile.config
sudo gedit Makefile.config
修改Makefile.config文件:

去掉第5行cudnn前面的#

USE_CUDNN := 1

如果使用的OPENCV3以上的版本,去掉第21行OPENCV_VERSION前面的#

扫描二维码关注公众号,回复: 1870569 查看本文章
OPENCV_VERSION := 3

BLAS=atlas(我测试的库,mkl没有试过)(sudo apt-get install libatlas-base-dev即可安装)

去掉87行WITH_PYTHON_LAYER前面的#,注意一定要去掉,不然无法训练数据(测试的时候不需要)

在第90行,添加 /usr/include/hdf5/serial/ 到 INCLUDE_DIRS

INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial/

修改后保存退出,打开Makefile文件,在第181行,把 hdf5_hl 和hdf5修改为hdf5_serial_hl 和 hdf5_serial

LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

然后开始编译

make –j4
make pycaffe –j4

第二部分:下载预训练模型

链接:http://pan.baidu.com/s/1kVRRPDd 密码:1cdt

1、打开文件将test.model放入$pva-faster-rcnn/models/pvanet/full/这个目录下
2、将test(1).model重命名为test.model放入$pva-faster-rcnn/models/pvanet/comp/目录下

第三部分:下载voc07数据

打开终端输入:

wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtrainval_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCtest_06-Nov-2007.tar
wget http://host.robots.ox.ac.uk/pascal/VOC/voc2007/VOCdevkit_08-Jun-2007.tar

解压(严格按照此顺序):

tar xvf VOCtrainval_06-Nov-2007.tar
tar xvf VOCtest_06-Nov-2007.tar
tar xvf VOCdevkit_08-Jun-2007.tar

将生成的VOCdevkit文件夹更名为VOCdevkit2007移动至$pva-faster-rcnn/data/目录下面

第四部分:voc07测试预训练模型

终端输入:

cd pva-faster-rcnn

1、full/test.model测试:

./tools/test_net.py --gpu 0 --def models/pvanet/full/test.pt --net models/pvanet/full/test.model --cfg models/pvanet/cfgs/submit_160715.yml

需要注意的是如果缺少test.pt,则将models/pvanet_obsolete下的对应文件复制过来即可

如果运行报错 ImportError: No module named 'yaml'

则运行如下命令进行安装

sudo pip install pyyaml

如果运行报错 ImportError: No module named 'easydict'

则运行如下命令进行安装

sudo pip install easydict

2、Comp/test.model测试:

./tools/test_net.py --gpu 0 --def models/pvanet/comp/test.pt --net models/pvanet/comp/test.model --cfg models/pvanet/cfgs/submit_160715.yml

此测试会得到系列类别的AP值

第五部分:预训练model训练并测试voc07数据

1、训练:

cd pva-faster-rcnn
./tools/train_net.py --gpu 0 --solver models/pvanet/example_finetune/solver.prototxt --weights models/pvanet/full/test.model --iters 100000 --cfg models/pvanet/cfgs/train.yml --imdb voc_2007_trainval

--gpu 序号,单GPU为0
--solver 训练参数文件
--weight 预训练模型,使用Imagenet的预训练模型,若没有,开始训练时很难收敛,loss=nan
--cfg 配置
--imdb 训练数据集名字(需要按照voc或者Coco的命名规则,亦可修改程序来打破规则!详见/lib/datasets/factory.py)

由于程序结构问题,训练的数据集需要覆盖至VOC数据集的文件夹下
~/data/VOCdevkit2007/VOC2007/Annotations和ImageSets和JPEGImages三个文件夹

ImageSets/Main文件中用到的只有trainval.txt这个文件,里面保存所有图片的名字(无后缀),需用程序生成,训练结果会在pva根目录生成output文件夹,模型就在里面

可用find命令、通配符加重定向符快速获取标注文件列表

cd data/VOCdevkit/mydataset/Annotations
find -name "*.xml">/home/yourname/data/VOCdevkit/ImageSets/Main/trainval.txt

然后修改trainval.txt,用替换指令删除掉后缀即可

2、测试:

./tools/test_net.py --gpu 0 --def models/pvanet/example_finetune/test.prototxt --net output/faster_rcnn_pavnet/voc_2007_trainval/pvanet_frcnn_iter_100000.caffemodel --cfg models/pvanet/cfgs/submit_160715.yml 

第六部分:预训练model训练并测试自己数据

1、数据制作:
还记得fasterrcnn数据如何制作的吗?参考博客
Tips:参考voc07的数据格式,我们可发现,生成的数据最后只需保留Annotations、ImageSets和JPEGImages三个文件夹即可,ImageSets/Main文件中用到的只有trainval.txt和test.txt这两个文件(数据分布:trainval=train+val训练集+验证集,all_data=trainval+test训练集+验证集+测试集),多类别如果增加负样本或模糊样本可以考虑1、0及-1操作(其中1表示有目标,0表示模糊目标,-1表示没有目标
数据集制作完成后将这三个文件夹复制至一个文件夹(命名为VOC2007)当中,再移动至$pva-faster-rcnn/data/VOCdevkit2007中,替换原来的VOC2007

2、类别设置:

1)打开文件/models/pvanet/example_finetune/train.prototxt

1>搜索num_classes,修改成自己数据集的类别数n(比如我只识别people这一类,怎修改为2,因为包含背景:1+背景类)

2>搜索name: “cls_score”,inner_product_param参数,修改下面的num_output为实际的类别数n,同上一样

3>搜索name: “bbox_pred”,inner_product_param参数,修改下面的num_output为实际的类别数n×4

对于test.prototxt

1>搜索name: “cls_score”,修改下面的num_output为实际的类别数

2>搜索name: “bbox_pred”,修改下面的num_output为实际的类别数×4

若修改错误,会出现参数不匹配错误

2)修改lib/datasets/pascal_voc.py

self._classes = ('__background__', # always index 0

                              'people')

在里边添加要识别的类别,比如上边添加了要识别people,然后搜索

x1 = float(bbox.find('xmin').text) -1
y1 = float(bbox.find('ymin').text) -1

改为

x1 = float(bbox.find('xmin').text) 
y1 = float(bbox.find('ymin').text)

这是为了防止标注数据的box中含有坐标为0的情况,造成训练loss=nan。faster-rcnn 系列在处理生成pascal voc数据集时,为了使像素以0为起点,每个bbox的左上和右下坐标都减一

3)修改lib/datasets/imdb.py

数据整理,在一行代码为 boxes[:, 2] = widths[i] - oldx1 - 1 下加入代码:

 for b in range(len(boxes)):
      if boxes[b][2]< boxes[b][0]:
         boxes[b][0] = 0

4)修改完pascal_voc.py和imdb.py后进入lib/datasets目录下删除原来的pascal_voc.pyc和imdb.pyc文件,重新生成这两个文件,因为这两个文件是python编译后的文件,系统会直接调用。

终端进入lib/datasets文件目录输入:

python
import py_compile
py_compile.compile(r'imdb.py')
py_compile.compile(r'pascal_voc.py')

3、训练数据:

cd pva-faster-rcnn
./tools/train_net.py --gpu 0 --solver models/pvanet/example_finetune/solver.prototxt --weights models/pvanet/full/test.model –iters 100000 --cfg models/pvanet/cfgs/train.yml –imdb voc_2007_trainval

4、测试模型:

./tools/test_net.py --gpu 0 --def models/pvanet/example_finetune/test.prototxt --net output/faster_rcnn_pavnet/voc_2007_trainval/pvanet_frcnn_iter_100000.caffemodel --cfg models/pvanet/cfgs/submit_160715.yml

猜你喜欢

转载自blog.csdn.net/zong596568821xp/article/details/80407810