ubuntu16.04下mmdetection如何配置
mm-detection是什么
mmdetection 检测库是基于商汤在 COCO 比赛(Detection 2018 winner)时的 codebase 重构,这个开源库提供了已公开发表的多种视觉检测核心模块,通过这些模块的组合,可以迅速搭建出各种著名的检测框架。据该开源库作者之一、香港中文大学陈恺介绍,这一版本中实现了 RPN,Fast R-CNN,Faster R-CNN,Mask R-CNN,近期还计划释放 RetinaNet 和 Cascade R-CNN。
我之前在实验室的老服务器上试着安装过,一开始遇到了一些麻烦。后来请高人解决了,再在ubuntu18.04上安装出现了些许问题,遂只敢在16.04上玩耍。
这篇文章是在我看了知乎上的大神写的mmdetection的入门后,仍有很多疑问,然后自己瞎摸索了几天,才跑通,决定记下来防止自己又忘了。
知乎大神传送门在此:知乎链接
如何安装mm-detection
我的安装环境:
-
Ubuntu 16.04
-
电脑配置:
- 显卡:Nvidia GeForce 2080Ti x2
- CPU:英特尔至强系列 x2 12核
- 内存:128GB
-
anaconda3
-
Pytorch
-
CUDA 10.1 &CUDNN 7.5
如何安装Anaconda、Pytorch、CUDA、CUDNN请参考我的这篇文章
网址
安装好如何配置相关环境
按照这个格式创建好文件夹,其中,tools、configs、work_dirs三个文件夹是直接在mmdetection安装包中拷贝过来的
mmdetection
mmdet
├── tools
├──checkpoints
├────预训练好的模型文件
│├────test.py
│├────train.py 这两个文件将在测试的时候用到
├── configs 配置文件
├──work_dirs
├──image
│├──test 存放自己准备作为测试集的图像.jpg文件
│├──train 存放自己的准备作为训练集的图像.jpg文件
├──label
│├──test 存放自己准备作为测试集的xml文件
│├──train 存放自己准备作为训练集的xml文件
├──prepare.py 这个文件都请先自行创建,在本文下文有详细代码
├──sortpath1.sh
├──sortpath2.sh
├── data
│ ├── VOCdevkit
以下的文件夹就是需要用prepare.py创建的,但是创建好后需要拷贝到VOCdevkit目录下。
│ │ ├── VOC2007
│ │ │ ├── Annotations
│ │ │ ├── JPEGImages
│ │ │ ├── ImageSets
│ │ │ │ ├── Main
│ │ │ │ │ ├── test.txt
│ │ │ │ │ ├── trainval.txt
以上是本人亲试后成功的结果,文件目录以此创建,顺便说一下各文件和文件夹的作用:
1.tools: 训练需要用到的test.py、train.py都在这个文件下,这两个文件直接从官方下载的库中CtrlC、CTrlV就可以
2.configs:训练需要用到的配置文件,也是直接CV就可以
3. image:下设两个文件夹,test和train,分别存放用于测试和训练的图片集
4. label: 下设两个文件夹,test和train,分别存放用于测试和训练的图片集
5. prepare.py:在知乎的源码基础上稍有改动,此代码将根据sh文件的结果生成Main文件夹中的两个txt文件
6. sh文件:将当前目录下所有特定文件的名称和路径提取出来保存到txt文件中。
7. data文件:训练读取的数据来源于此,本人使用的是VOC数据集,所以按照上述格式生成,其中annotation是标注文件,JPEGImage是train中的图片文件
8. test.txt和train.txt:这两个文件中保存的是图片的名字,只有名字,既没有路径也没有后缀
创建好相关目录后,请将以下代码复制到相应文件中:
sortpath1.sh:
find mmdetection所在的绝对路径 -name '*.xml' | sort -n > lb.txt
sortpath2.sh:
find mmdetection所在的绝对路径 -name '*.jpg' | sort -n > Fullpath.txt
prepare.py:
import shutil
import os
# 可以直接将img_path中的路径换成自己的路径
img_path = 'VOC2007/JPEGImages'
lb_path = 'VOC2007/Annotations'
txt_path = 'VOC2007/ImageSets/Main/'
os.makedirs(img_path)
os.makedirs(lb_path)
os.makedirs(txt_path)
fg = dict()
types = ['trouble',]
fimg = open('fullpath.txt')
for line in fimg:
path = line.strip()
# path中保存的是去掉换行符后 所有的文件的绝对路径
flag = path.split('/')[-1].split('.')[0]
# 一步步获取到fullpath中的测试集名称,其中,flag保存的即是不带后缀的文件名
for typ in types:
if path.find(typ) == -1:
continue
else:
flag = typ + '@' + flag
fg[flag] = path
flb = open('lb.txt')
for line in flb:
path = line.strip()
flag = path.split('/')[-1].split('.')[0]
for typ in types:
if path.find(typ) == -1:
continue
else:
flag = typ + '@' + flag
temp = path.split('/')[-2]#-2
extend = path.split('/')[-3]
#print temp
if flag in fg:
shutil.copy(fg[flag], img_path)
flag = flag.split('@')[-1]
os.rename(img_path + '/' + flag + '.jpg', img_path + '/' + extend + '_' + flag + '.jpg')
# print img_path, img_path.replace(flag, extend + '_' + flag)
shutil.copy(path, lb_path)
os.rename(lb_path + '/' + flag + '.xml', lb_path + '/' + extend + '_' + flag + '.xml')
# 下面这个就是创建三个txt文件的
if temp == 'train':
t1 = open(txt_path + 'train.txt', 'a')
t1.write(extend + '_' + flag + '\n')
t1.close()
t2 = open(txt_path + 'trainval.txt', 'a')
t2.write(extend + '_' + flag + '\n')
t2.close()
if temp == 'test':
t3 = open(txt_path + 'test.txt', 'a')
t3.write(extend + '_' + flag + '\n')
t3.close()
if temp == 'val':
print(temp)
t4 = open(txt_path + 'val.txt', 'a')
t4.write(extend + '_' + flag + '\n')
t4.close()
t5 = open(txt_path + 'trainval.txt', 'a')
t5.write(extend + '_' + flag + '\n')
t5.close()
创建好后保存,Ctrl+Alt+T打开终端,进入创建的mmdetection文件夹所在的目录下,执行如下命令:
1. 输入 sh sortpath1.sh 回车 此时当前目录下应该自动生成了lb.txt文件 文件中保存的是标注文件的绝对路径
2. 输入 sh sortpath2.sh 回车 此时当前目录下应该自动生成了fullpath.txt文件 文件中保存的是图片的绝对路径
3. 输入 python prepare.py 此时当前目录下应该自动生成了VOC2007文件夹,文件夹中的内容应该和我上面给出的一样,注意检查,如果不一样代表生成不成功,这样是训练不起来的。最常见的就是Main文件夹下没有三个txt文件
5. **最后运行开始训练的代码前请仔细检查整个文件夹结构,如果有不一样的地方是跑不起来的**
6. 如果文件结构正确,可以开始训练了!
训练代码如下:
# train:
python tools/train.py configs/faster_rcnn_r50_fpn_1x_voc.py
# test:
python tools/test.py configs/faster_rcnn_r50_fpn_1x_voc.py work_dirs/faster_rcnn_r50_fpn_1x/latest.pth --out /results/faster_rcnn_r50_fpn_1x.pkl
# 这是将产生的中间checkpoint文件保存到.Pkl文件中.pkl文件可以用于评估模型的相关好坏程度。如评估mAP。
python tools/test.py configs/faster_rcnn_r50_fpn_1x_voc.py work_dirs/faster_rcnn_r50_fpn_1x/latest.pth --show
# 如果你想查看测试结果,可以在test的代码后面加上 --show