Detectron安装与用GPU训练自己数据集(voc格式)

FAIR的Detectron平台是facebook基于coco数据集训练的,虽然官方建议使用coco格式数据集训练模型,但很多人习惯于用voc格式标记数据,也有现成的xml不知如何使用Detectron。本博文假设已经做好voc格式数据,稍做转换使其能够在Detectron上训练。本博文主要以resnet-50-fpn-faster-rcnn训练为例,只测试目标检测,说明如何使用自己的voc数据训练模型,关于FAIR训练好的模型demo部分不再叙述。

参考blog: https://blog.csdn.net/meccaendless/article/details/79457330


准备工作:

1、安装caffe2

参考blog: https://blog.csdn.net/yan_joy/article/details/70241319

(1) 安装caffe2依赖库

    sudo apt-get update
    sudo apt-get install -y --no-install-recommends \
      build-essential \
      cmake \
      git \
      libgoogle-glog-dev \
      libprotobuf-dev \
      protobuf-compiler \
      python-dev \
      python-pip                          
    sudo pip install numpy protobuf

其他可选依赖项:

sudo apt-get install -y --no-install-recommends \
      libgtest-dev \
      libiomp-dev \
      libleveldb-dev \
      liblmdb-dev \
      libopencv-dev \
      libopenmpi-dev \
      libsnappy-dev \
      openmpi-bin \
      openmpi-doc \
      python-pydot
      sudo -H pip install --upgrade pip

(2) 安装cuda和cudnn

参考blog: https://blog.csdn.net/yggaoeecs/article/details/79163789

(3) 安装caffe2

        git clone --recursive https://github.com/caffe2/caffe2
        cd caffe2
        make

安装不用管makefile,它会根据你电脑里的库自行编译

        cd build 
        sudo make install
        python -c 'from caffe2.python import core' 2>/dev/null && echo "Success" || echo "Failure"


出现"Success"表示安装成功!

测试GPU

python -m caffe2.python.operator_test.relu_op_test

(4) caffe2环境变量

        sudo vim /etc/profile
最后加上:
        export PYTHONPATH=/usr/local:$PYTHONPATH
        export PYTHONPATH=$PYTHONPATH:/your/path/to/caffe2/build
        export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH

2、安装Detectron

(1) 依赖库安装

        pip install numpy>=1.13 pyyaml>=3.12 matplotlib opencv-python>=3.2 setuptools Cython mock scipy

(2) COCOAPI安装

        # COCOAPI=/path/to/clone/cocoapi
        git clone https://github.com/cocodataset/cocoapi.git $COCOAPI
        cd $COCOAPI/PythonAPI
        # Install into global site-packages
        make install
        # Alternatively, if you do not have permissions or prefer
        # not to install the COCO API into global site-packages
        python2 setup.py install --user

(3) Detectron安装

下载源码:

        # DETECTRON=/path/to/clone/detectron
        git clone https://github.com/facebookresearch/detectron $DETECTRON

编译python模块lib:

        cd $DETECTRON/lib && make

测试:

        python2 $DETECTRON/tests/test_spatial_narrow_as_op.py


出现"OK"则安装成功!

准备数据:

可以使用cocoapi在MATLAB脚本转换数据标签xml到json格式

参考blog: https://blog.csdn.net/meccaendless/article/details/79457330

matlab新建脚本,将cocoapi中的MatlabAPI添加到路径,调用matlab CocoUtils类中的convertPascalGt function转换VOC数据集标签:

mex('CXXFLAGS=\$CXXFLAGS -std=c++11 -Wall','-largeArrayDims',...  
    'private/gasonMex.cpp','../common/gason.cpp',...  
     '-I../common/','-outdir','private');  
CocoUtils.convertPascalGt( 'D:/datasets', '2007', 'trainval', 'D:/datasets/voc_2007_trainval.json')  
CocoUtils.convertPascalGt( 'D:/datasets', '2007', 'test', 'D:/datasets/voc_2007_test.json') 
CocoUtils.convertPascalGt( 'D:/datasets', '2007', 'train', 'D:/datasets/voc_2007_train.json')
CocoUtils.convertPascalGt( 'D:/datasets', '2007', 'val', 'D:/datasets/voc_2007_val.json')

三行代码搞定,其中'D:/datasets'改成你的voc格式数据所在路径,'D:/datasets/pascal_test2007.json'改成你要写到的json格式标签路径。

你也可以用我们写的python脚本转换,将代码中相应路径更改即可。

之后,将数据与标签连同原版的VOCdevkit2007除JPEGImages以外的文件按如下文件夹结构放入:

VOC2007
|_ JPEGImages
|  |_ <im-1-name>.jpg
|  |_ ...
|  |_ <im-N-name>.jpg
|_ annotations
|  |_ pascal_trainval2007.json
|  |_ ...
|_ VOCdevkit2007
    |_ VOC2007
        |_ ImageSets
        |_ Annotations
    |_ VOCcode
    |_ local
    |_ results
    |_ ...

为什么需要加入原版ImageSets和Annotations后面会讲到,将VOCcode里VOCinit.m文件中标签名称按自己数据集更改:

VOCopts.classes={...
        '你的标签1'
        '你的标签2'
        ...};

训练模型:

1、下载预训练模型

下载resnet50预训练模型,训练时候也可以自动先下载,不过建议预先下载好

wget https://s3-us-west-2.amazonaws.com/detectron/ImageNetPretrained/MSRA/R-50.pkl /tmp/detectron/detectron-download-cache/ImageNetPretrained/MSRA/R-50.pkl

网不好的可以用迅雷等下载工具离线下载很快。

detectron下新建文件夹pre-trained_model把R-50.pkl模型文件放在该文件夹下。

2、建立数据软链接

cd $Detectron/lib/dataset/data
ln -s /your/path/to/VOC2007 VOC2007

3、修改配置文件

detectron下新建文件夹experiments/cfgs,将配置文件复制到该文件夹下:

cd $DETECTRON
cd experiments/cfgs
cp ../configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml e2e_faster_rcnn_resnet-50-FPN_pascal2007.yaml

打开e2e_faster_rcnn_resnet-50-FPN_pascal2007.yaml,修改

NUM_CLASSES: 81

为自己数据集类别数+1

修改

WEIGHTS: https://s3-us-west-2.amazonaws.com/detectron/ImageNetPretrained/MSRA/R-50.pkl

为/pre-trained_model/R-50.pkl

修改

DATASETS: ('coco_2014_train',)
DATASETS: ('coco_2014_minival',)

DATASETS: ('voc_2007_trainval',)
DATASETS: ('voc_2007_test',)

OUTPUT_DIR:

OUTPUT_DIR:

下增加你需要输出模型的路径

说明:参考blog(https://blog.csdn.net/meccaendless/article/details/79457330)中说需要更改lib/modeling/fast_rcnn_heads.py中所有的cls_score和bbox_pred,这是因为Detectron中测试voc的文件还是faster rcnn中的方法读取Annotations,但训练需要的是json格式,这就导致训练模型对应不上模型层的名字。所以我们需要把原voc中的ImageSets和Annotations也放入数据集文件夹中,就可以保证训练和测试不出问题。

4、开始训练

python2 tools/train_net.py --cfg experiments/e2e_faster_rcnn_resnet-50-FPN_pascal2007.yaml  OUTPUT_DIR experiments/output


5、测试结果

python2 tools/test_net.py \  
    --cfg experiments/e2e_faster_rcnn_resnet-50-FPN_pascal2007.yaml \  
    TEST.WEIGHTS /your/path/to/model_final.pkl \  
    NUM_GPUS 1

修改yaml配置文件中scale, lr, iter等参数反复训练达到最好效果。

评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值