下载mmdetection
mmdetection是一个工具,没有安装程序,只需要在git上clone一个到服务器上就可以了。
链接:https://github.com/open-mmlab/mmdetection
虚拟环境
要通过mmdetection训练数据集,首先要在服务器上创建一个虚拟环境
pyenvvirtualenv<python版本><环境name>创建虚拟环境pyenvdeactivate退出虚拟环境pyenvuninstall<环境name>删除虚拟环境pyenvactivate<环境name>进入虚拟环境
配置包
进入虚拟环境后,要开始配置所需要的包
pipinstalltorch==1.6.0pipinstalltorchvision==0.7.0pipinstall-rrequirements/build.txtpipinstall-v-e.pipinstallninja#这里由于下载的是mmdetection-master,所以必须要下载mmcv-full#这里的cu101/torch1.6.0改为自己的cuda和torch的版本号pipinstallmmcv-full-fhttps://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html
关于本机cuda、torch、torchvision、mmcv的版本是相互对应的
对应表链接:https://blog.csdn.net/zhaosuyuan/article/details/115942293?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_ecpm_v1~rank_aggregation-1-115942293.pc_agg_rank_aggregation&utm_term=torch%E5%92%8Ccuda%E7%89%88%E6%9C%AC%E5%AF%B9%E5%BA%94&spm=1000.2123.3001.4430
对应表链接:https://github.com/open-mmlab/mmcv#install-with-pip
准备数据集
在文件夹下创建一个data文件夹
data|---coco|---annotations|---instances_train2017.json|---instances_val2017.json|---val2017|---train2017
其中val2017和train2017是验证集和测试集的图片文件夹,instances_train2017.json和instances_val2017.json是训练集和验证集的标注文件 (当然这里可以用自己的名字然后去代码里面改,但是要改的东西更多)
模型配置
接着我们来整一个模型配置文件
首先看一下configs/_base_/models/
目录,这里面是各个模型对应的参数,我们先尝试改一个fasterRCNN,我们打开faster_rcnn_r50_fpn.py
搜索num_classes,将类的数量改为自己数据集类的数量,不需要因为背景+1,因为mmdetection会自动处理
#num_classes=80,num_classes=1,
在mmdet/datasets/coco.py
中也要做对应的修改
defcoco_classes():return[''''person','bicycle','car','motorcycle','airplane','bus','train','truck','boat','traffic_light','fire_hydrant','stop_sign','parking_meter','bench','bird','cat','dog','horse','sheep','cow','elephant','bear','zebra','giraffe','backpack','umbrella','handbag','tie','suitcase','frisbee','skis','snowboard','sports_ball','kite','baseball_bat','baseball_glove','skateboard','surfboard','tennis_racket','bottle','wine_glass','cup','fork','knife','spoon','bowl','banana','apple','sandwich','orange','broccoli','carrot','hot_dog','pizza','donut','cake','chair','couch','potted_plant','bed','dining_table','toilet','tv','laptop','mouse','remote','keyboard','cell_phone','microwave','oven','toaster','sink','refrigerator','book','clock','vase','scissors','teddy_bear','hair_drier','toothbrush'''''tree',]
然后修改coco数据集对应的类,在mmdet/core/evaluation/class_names.py
中,找到coco数据集,进行修改
'''CLASSES=('person','bicycle','car','motorcycle','airplane','bus','train','truck','boat','trafficlight','firehydrant','stopsign','parkingmeter','bench','bird','cat','dog','horse','sheep','cow','elephant','bear','zebra','giraffe','backpack','umbrella','handbag','tie','suitcase','frisbee','skis','snowboard','sportsball','kite','baseballbat','baseballglove','skateboard','surfboard','tennisracket','bottle','wineglass','cup','fork','knife','spoon','bowl','banana','apple','sandwich','orange','broccoli','carrot','hotdog','pizza','donut','cake','chair','couch','pottedplant','bed','diningtable','toilet','tv','laptop','mouse','remote','keyboard','cellphone','microwave','oven','toaster','sink','refrigerator','book','clock','vase','scissors','teddybear','hairdrier','toothbrush')'''CLASSES=('tree',)
完成,然后我们用tool/train.py
来生成对应的配置文件
pythontools/train.pyconfigs/faster_rcnn/faster_rcnn_r50_fpn_1x_coco.py--work-dirrecord
--work-dir的意思是指定工作目录,一会儿会在这里生成配置文件,生成配置文件之后,我们可以中断掉,然后在工作目录中找到这个配置文件,做修改之后 (各种微调,比如学习率,训练次数,继续上次的训练文件等) 再运行这个配置文件即可
pythontools/train.pyrecord/faster_rcnn_r50_fpn_1x_coco.py
Debug
在这里列举一下我在配置中遇到的问题
版本问题
torch cuda mmcv-full的版本必须对应,且cuda的版本不能过低
报错文件找不到
可能是在pip的过程中缺漏了,或者是文件的修改过程错误了,可以再pip一遍看看是不是already requirement
ImportError: libcudart.so.10.1: cannot open shared object file: No such file or directory
这是我遇到的最棘手的问题,浪费了我许多个消失,这里先讲产生这个错误的主要原因:当前cuda版本不是10.1,缺少必要文件
我先后尝试了许多种办法:
以上错误报错原因是libcudart.so.10.1文件没有找到,执行完sudo ln -s /usr/local/cuda-10.0/lib64/libcudart.so.10.0 /usr/lib/libcudart.so.10.1
指令后,libcudart.so.10.1其实就已经在usr/lib下了,可以通过cd /usr/lib
查看文件,但是这个文件其实是个假文件,既不能下载,也不能打开,点击就报错,据说copy了其他地方的libcudart.so.10.1和libcudart.so.10.1.243这两个文件进去就可以解决,但是我没等到那篇文章的作者给我发这两个文件
我怀疑是cudatoolkit下载不完整的问题,但是我通过以下指令,发现我的cudatoolkit是有的且完整的
默认目录为:local,进入local:cd/usr/local输入命令:ls,查看该目录下的文件,可以看到安装的cuda在此处进入cuda文件:cdcuda-7.5(我的是7.5),此处为安装的东西查找安装的工具,在bin目录下,进入cuda文件所在目录,然后进入bin目录:cdbin输入命令:ls,就可以看到cudatoolkit自带的工具了,这些工具可以直接使用。
最后我怀疑到了正确的地方:系统和cuda的软链接有问题
但是找到了这点后,我依然花了几个小时去解决问题,因为网上切换cuda版本及转换cuda软链接的方法多种多样,我每个都试了一遍,并且在1080,2080,3090的服务器上都尝试了一遍。
以下又是一个分类,记录我使用的多种指令
3.1 先说最后成功的指令
输入命令:
exportPATH=/usr/local/cuda-7.5/bin:$PATHexportLD_LIBRARY_PATH=/usr/local/cuda-7.5/lib64:$LD_LIBRARY_PATH
(此处我使用的是cuda7.5,具体需要根据自己的版本输)
这样路径就添加好了,输入命令:nvcc -V检查路径是否添加成功,如果结果有nvcc则添加成功了。 这样toolkit里面自带的工具都可以直接在终端进行使用了。
3.2
查看当前cuda软链接指向的哪个cuda版本
pipinstalltorch==1.6.0pipinstalltorchvision==0.7.0pipinstall-rrequirements/build.txtpipinstall-v-e.pipinstallninja#这里由于下载的是mmdetection-master,所以必须要下载mmcv-full#这里的cu101/torch1.6.0改为自己的cuda和torch的版本号pipinstallmmcv-full-fhttps://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html0
删除软链接
pipinstalltorch==1.6.0pipinstalltorchvision==0.7.0pipinstall-rrequirements/build.txtpipinstall-v-e.pipinstallninja#这里由于下载的是mmdetection-master,所以必须要下载mmcv-full#这里的cu101/torch1.6.0改为自己的cuda和torch的版本号pipinstallmmcv-full-fhttps://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html1
在home/下修改.bashrc的注释,即环境变量 打开.bashrc文件指令:gedit ~/.bashrc
pipinstalltorch==1.6.0pipinstalltorchvision==0.7.0pipinstall-rrequirements/build.txtpipinstall-v-e.pipinstallninja#这里由于下载的是mmdetection-master,所以必须要下载mmcv-full#这里的cu101/torch1.6.0改为自己的cuda和torch的版本号pipinstallmmcv-full-fhttps://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html2
查看CUDA和CUDNN版本 cat /usr/local/cuda/version.txt
4.但是当nvcc -V
时,还是显示cuda10.0
(原版本) 所以我们查看环境变量path,命令:echo $PATH
5.发现原因:是因为/usr/bin/cuda-10.0
(①处)在PATH中相较/usr/local/cuda-10.1
(②处)靠前,所以nvcc –V命令会按照PATH顺序,先去①里面找,应该是在这文件夹里的nvcc中找到了10.0版本的cuda,所以就不去别的地方找了,就没有找到②处我们想要的cuda版本;
更改PATH内①和②顺序,采用的方法是将环境变量②位置提前: export PATH=/usr/local/cuda/bin:$PATH
6.再nvcc -V
3.3 使用update-alternatives实现多版本CUDA切换
pipinstalltorch==1.6.0pipinstalltorchvision==0.7.0pipinstall-rrequirements/build.txtpipinstall-v-e.pipinstallninja#这里由于下载的是mmdetection-master,所以必须要下载mmcv-full#这里的cu101/torch1.6.0改为自己的cuda和torch的版本号pipinstallmmcv-full-fhttps://download.openmmlab.com/mmcv/dist/cu101/torch1.6.0/index.html3
接着使用命令语句:sudo update-alternatives --config cuda
选择cuda版本
nvcc-v
查看是否更换成功
报错invalid syntax
这个报错是字符错误的意思,可以去对应的文件报错行数的周围找一找有没有缺错标点符号。
最有可能的情况是:你根本就没进入自己的虚拟环境,还在base的环境中,base环境中的python2版本过低,没办法运行一些python3的代码,所以在不兼容的地方报错
虚拟环境
要确保每次自己在运行train.py文件时,一定要进入自建的环境,而不是在base的环境下,base的环境下的python版本为python2的老版本,会报错python版本过低,给人要安装新的python的错觉。
注意看当前环境下的虚拟环境都有哪些,指令:pyenv versions