【目标检测-框架测试】mmdetection的安装与使用
1、安装anaconda
2、更新gcc到4.9以上
gcc -std=c++11 test.cpp
测试代码test.cpp
#include<iostream> #include<memory> using namespace std; int main(){ shared_ptr<int> p = make_shared<int>(42); cout<<"p = "<<*p<<endl; return 0; }
3、安装mmdetection
1)创建conda虚拟环境并激活,然后安装cpython
conda create -n open-mmlab python=3.7 -y conda activate open-mmlab conda install cython
2)查看本机是否支持GPU
lspci | grep -i nvidia
安装pytorch(>=1.0) # 可以直接通过pytorch的官网查看安装命令
3)克隆mmdetection仓库
git clone https://github.com/open-mmlab/mmdetection.git cd mmdetection
# 2019年7月27日更新后的mmdetection,将compile和install放在一个脚本中
# 编译cuda
# ./compile.sh
4)安装mmdetection
# 之前使用的是
python setup.py install # 或 pip install .
出现问题,不能将.c文件成功转译成py文件,导致引用的很多由.c文件定义的conv与pool无法使用。出现ImportError的相关错误:
python setup.py develop # or “pip install -e .”
# 在使用过程中遇到的问题可以在mmdetection的github中的issues中询问或查找
4、mmdetection的使用
对于mmdetection框架的使用,可以直接参考github上给出的样例,提取出需要使用的代码即可,我是用的是demo文件夹下的图片,同时
Test.py
测试结果
训练:
python tools/train.py <config_filepath> [--gpus num]
在进行数据集的训练时,可以看tools文件夹下的train.py代码,一般需要自己配置的只有work_dirs,以及gpus:
--work_dirs:结果保存路径。也可以在config文件中进行配置
--gpus:训练时使用的gpu的数量。
使用config文件中包含使用的框架、数据集信息,以及训练中的一些参数配置。
使用config文件中包含使用的框架、数据集信息,以及训练中的一些参数配置。可以直接使用mmdetection的configs文件夹下的配置文件,需要针对性修改一些信息,如数据库的类型dataset_type以及数据库的路径data_root,其次train与test数据信息中的标注文件的路径ann_file,图片路径img_prefix。
训练完成后,在work_dirs定义的文件夹下会出现每次迭代输出的信息,以及每次epoch完成后的参数结果:
此时在测试时,就可以直接使用自己训练好的checkpoints(就是.pth文件)了。
我使用的是faster_rcnn_r50_fpn_1x的相应配置,使用coco2017的数据集,此次只使用了4个epoch得到结果,下图使用tools/analyze_logs.py文件对一些数据plot,其中包括loss_rpn_cls、loss_rpn_bbox、loss_cls、loss_bbox以及loss:
使用参考mmdetection的github中给出的方法:
python tools/analyze_logs.py plot_curve <json文件> --keys <parameters list> --legend <legends>
其中:
<json文件>:就是训练过程中生成的json文件的路径 <parameters list>:需要plot的数据名称,需要时json文件中存在的 <legends>:对应parameters list的标签
测试:
使用官方提供的测试命令:
python tools/test.py <config_filepath> <checkpoint> [...]
在测试过程中,使用tools/test.py文件,test.py文件必须要参数包括config、checkpoint,以及(--out, --show, --json_out)三个中的一个,其中:
--config:配置文件,使用训练使用的配置文件 --checkpoint:参数数据,使用work_dirs下的任一.pth文件 --out:输出路径,使用.pkl结尾的文件名 --json_out:输出为json类型的数据
使用show结果会被一张张的显示出来,因为此次结果我仅使用了4次epochs,所以对于小的区域的检测结果可能不太准确。
最后使用当前训练结果重新进行demo.jpg的测试
补充说明:
我直接使用tools文件夹下的train.py与test.py文件,会出现之前的ImportError,无法找到deform_conv_cuda等一系列的文件,所以我直接将train.py和test.py文件复制到mmdetection项目文件夹下,之后运行就没有问题了。
如果想要在本地上直接跑mmdetection的测试代码,使用软件为Pycharm,可以参见另一篇博客:Pycharm配置服务器中conda创建的虚拟python环境
完成Python环境的配置后,不过此时直接测试test.py仍然会出现问题,”cannot connect to X server.” 这是由于Linux的图形显示通过X server实现,在客户端进行访问时,需要server对其赋予权限。我将图形结果不显示,直接保存下来: