目标检测: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的图片,即训练时不需要纯负样本;

 

  • 4
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值