ubuntu16.04 caffe框架下faster-rcnn训练自己的数据集(系统自带python2.7)

首先你已经编译好了先决条件,参考https://blog.csdn.net/weixin_43317842/article/details/88553731
接下来,进行faster对自己数据集的训练:
第一:制作自己的数据集,最难受的往往就是数据集的制作
首先,进入你的faster-rcnn根目录下:cd data
1,创建VOCdevkit2007文件夹(若你已经跑过voc数据集了则忽略):mkdir VOCdevkit2007
2,进入该文件夹创建VOC2007文件夹:cd VOCdevkit2007
mkdir VOC2007
3,再进入该文件夹按照如下创建:
在这里插入图片描述
Annotations存放由labelImg工具制作的xml文件(labelImg:https://blog.csdn.net/xunan003/article/details/78720189)
JPEGImages存放你的原图,即你要进行训练的所有图片
ImageSets下创建一个Main文件夹:然后再创建如下文本
在这里插入图片描述
这些txt文件对应你的图片,按如下脚本生成,你也可以改动:


import os  
import random  
  
trainval_percent = 0.66  
train_percent = 0.5  
xmlfilepath = "/home/ff/py-faster-rcnn/data/VOCdevkit/VOC2007/Annotations"  
txtsavepath = "/home/ff/py-faster-rcnn/data/VOCdevkit/VOC2007/ImageSets/Main"  
total_xml = os.listdir(xmlfilepath)  
  
num=len(total_xml)  
list=range(num)  
tv=int(num*trainval_percent)  
tr=int(tv*train_percent)  
trainval= random.sample(list,tv)  
train=random.sample(trainval,tr)  
  
ftrainval = open('/home/ff/py-faster-rcnn/data/VOCdevkit/VOC2007/ImageSets/Main/trainval.txt', 'w')
ftest=open('/home/ff/py-faster-rcnn/data/VOCdevkit/VOC2007/ImageSets/Main/test.txt', 'w')
ftrain = open('/home/ff/py-faster-rcnn/data/VOCdevkit/VOC2007/ImageSets/Main/train.txt', 'w')  
fval = open('/home/ff/py-faster-rcnn/data/VOCdevkit/VOC2007/ImageSets/Main/val.txt', 'w')  
  
for i  in list:  
    name=total_xml[i][:-4]+'\n'  
    if i in trainval:  
        ftrainval.write(name)  
        if i in train:  
            ftrain.write(name)  
        else:  
            fval.write(name)  
    else:  
        ftest.write(name)  
print "Everything done!" 
ftrainval.close()  
ftrain.close()  
fval.close()  
ftest .close() 

至此,voc格式文件制作完成。
二,修改训练脚本(本次用vgg16来训练)

打开/py-faster-rcnn/models/pascal_voc/VGG16/faster_rcnn_end2end/train.prototxt:
修改‘input-data’层的’num_class‘为你的(类别数+1)
'roi-data’层的’num_class’为你的(类别数+1)
"cls_score"的’num_out’为你的(类别数+1)

修改"bbox_pred"层的’num_output’为(数据集类别数+1)*4

三,修改测试脚本
打开/py-faster-rcnn/models/pascal_voc/VGG16/faster_rcnn_end2end/test.prototxt:
修改"cls_score"的’num_out’为你的(类别数+1)
修改"bbox_pred"层的’num_output’为(数据集类别数+1)*4

—solver.prototxt根据自己情况修改,如我迭代次数为10000,所以只修改了stepsize为6000

四,修改/py-faster-rcnn/lib/datasets/pascal_voc.py中的约33行处的:
self.class=里面的不要类别删去,留下你自己的类别,背景类别不要删除

五,在/py-faster-rcnn/tools/train_net.py中,可以为其中的命令行参数设置默认值,这样就不用每次训练时都在命令行设置多个参数了,下面是我设置的默认值:

def parse_args():
    """
    Parse input arguments
    """
    parser = argparse.ArgumentParser(description='Train a Fast R-CNN network')
    parser.add_argument('--gpu', dest='gpu_id',
                        help='GPU device id to use [0]',
                        default=0, type=int)
    parser.add_argument('--solver', dest='solver',
                        help='solver prototxt',
                        default='models/pascal_voc/VGG16/faster_rcnn_end2end/solver.prototxt', type=str)
    parser.add_argument('--iters', dest='max_iters',
                        help='number of iterations to train',
                        default=10000, type=int)
    parser.add_argument('--weights', dest='pretrained_model',
                        help='initialize with pretrained model weights',
                        default='data/imagenet_models/VGG16.v2.caffemodel', type=str)
    parser.add_argument('--cfg', dest='cfg_file',
                        help='optional config file',
                        default='experiments/cfgs/faster_rcnn_end2end.yml', type=str)
    parser.add_argument('--imdb', dest='imdb_name',
                        help='dataset to train on',
                        default='voc_2007_trainval', type=str)
    parser.add_argument('--rand', dest='randomize',
                        help='randomize (do not use a fixed seed)',
                        action='store_true')
    parser.add_argument('--set', dest='set_cfgs',
                        help='set config keys', default=None,
                        nargs=argparse.REMAINDER)

    if len(sys.argv) == 1:
        parser.print_help()
        sys.exit(1)

    args = parser.parse_args()
    return args

另外可能需要修改的是/py-faster-rcnn/lib/fast_rcnn/config.py中的__C.TRAIN.SNAPSHOT_ITERS参数,它确定了你的模型每训练多少次保存一次快照,源码设置的是10000,根据自己设置的最大迭代次数来合理修改(它的值当然不能大于最大迭代次数,不然训练了半天一个模型都没保存)。

六,修改demo.py(tools目录下)

将训练得到的模型复制到/py-faster-rcnn/data/faster_rcnn_models/目录下。
然后打开demo.py,将:
class修改为自己的类别
NETS改为自己的模型

prototxt改为

prototxt = os.path.join(cfg.MODELS_DIR, NETS[args.demo_net][0],
                            'faster_rcnn_end2end', 'test.prototxt')

im_names里改为自己要测试的图片。

以上工作都完成之后,进行训练:
python ./tools/train_net.py --gpu 0
训练完成后,进行测试:
python ./tools/demo.py

可能出现的相关错误见:https://www.jianshu.com/p/a672f702e596(本文参考该博主)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值