目标检测:faster-rcnn(pytorch版本)训练自己的数据集

下面是利用pytorch版本的faster-rcnn训练自己的datasets的步骤和相关的修改

代码链接:https://github.com/jwyang/faster-rcnn.pytorch

训练命令示例:

CUDA_VISIBLE_DEVICES=$GPU_ID python trainval_net.py \

                    --dataset pascal_voc --net res101 \

                    --bs $BATCH_SIZE --nw $WORKER_NUMBER \

                    --lr $LEARNING_RATE --lr_decay_step $DECAY_STEP \

                    --cuda

1、预训练模型存放位置:data/pretrained_model/

代码faster-rcnn.pytorch\lib\model\faster_rcnn\resnet.py

self.model_path = 'data/pretrained_model/resnet101_caffe.pth'

预训练模型存放地址

fasterRCNN = resnet(imdb.classes, 101, pretrained=True, class_agnostic=args.class_agnostic)

pretrained=True表示训练时使用预训练模型

2、Training阶段修改:(cfg中默认roi crop)

trainval.net种设置args.imdb_name等参数;

3、在factory.py种添加下列own-datasets的相关code,用于读取相关数据集的类文件

4、注意在自己的数据类py脚本中修改相应的路径和类别class注意类别一定是小写因为在类别xml读取时都是按照小写比较的,如pascal_voc.py中

一般voc的话路径self._devkit_path设置成了项目主目录的/data/vocdevkit+year/下,self._data_path就是/data/vocdevkit+year/voc+year/下;

5通过将所有训练图片的format转成jpg,就不用改self._image_ext

6、pascal_voc.pyself._image_index = self._load_image_set_index()函数是读取voc相应的txt种的训练或指定测试的图片的名称,不带后缀;因此这里自己的数据集得得到这样得txt文件;

7、pascal_voc.pyself._roidb_handler = self.gt_roidb的修改,读取xml,跳过不需要的类别,可以借鉴DA_detectionstrong-weak)的代码(https://github.com/VisionLearningGroup/DA_Detection)修改def _load_pascal_annotation(self, index)函数:

8、模型最终保存在output_dir = args.save_dir + "/" + args.net + "/" + args.dataset下面;默认存在modelargs.save_dir)下面

9、将misc读取改成cv读取,注意rgbbgr转换;训练时用的bgr顺序;misc读取是4通道,cv读取是3通道;misc读取时在通道减去均值出现维度不匹配问题,4通道减去3通道均值出错;

10、注意检查自己的数据集标注是否存在越界的问题,如读取时候的坐标是负数,flip时横坐标越界的问题;不然在flipassert x2>=x1时会出错;添加get_heights()函数,得到数据的heights,用于辅助判断坐标越界问题;

11、注意sh mask.shsm_arch要和gpu匹配,不然cudastackerrorP100的GPU用的sm60

12、程序会在filter roidb时去除没有gt的图片,即训练时不需要纯负样本;

 

你可能感兴趣的:(目标检测)