faster-rcnn学习笔记(1)

来源:互联网 发布:淘宝16年售假处罚降权 编辑:程序博客网 时间:2024/05/16 06:47

现状:对caffe底层代码基本不懂,对caffe的架构了解有限,对caffe的设计思路比较了解。

接下来一段时间想仔细学caffe,但目前和深度学习打交道最多的却是依附在caffe上的faster-rcnn,那就先来学习一下faster-rcnn的整个流程和其使用caffe的方式,顺便对caffe进行侧面的了解。

文件:py-faster-rcnn/tools/train_net.py

看名字就知道是训练网络的代码,目前对Python的了解都是源于学习和工作中的使用,能做到读懂并当脚本使用。

if __name__ == '__main__':    args = parse_args()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=None, type=str)    parser.add_argument('--iters', dest='max_iters',                        help='number of iterations to train',                        default=40000, type=int)    parser.add_argument('--weights', dest='pretrained_model',                        help='initialize with pretrained model weights',                        default=None, type=str)    parser.add_argument('--cfg', dest='cfg_file',                        help='optional config file',                        default=None, 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 

这部分是文件执行的开始,主要做的工作就是处理传入的参数。训练一个faster-rcnn网络的一些参数(end2end),

--gpu自然是选择设备上的gpu核心,以目前我的认知,训练过程只能选择一个gpu核心,所以需要的显存不是一般电脑可以接受的;

--solver这是一个控制训练过程或者说设置训练过程中的一些参数的文件,它不决定网络的参数,但是它决定了学习率,动量值,以及其它一些在训练过程中可以调整的参数,具体会在学习solver的时候再整理;--iters就是训练的轮数,faster-rcnn每轮的训练都是选取两张图片并从中选取128(每张64)个bounding box进行网络的训练,当然其中包含有正样本也有随机选取的负样本,负样本与正样本的IOU应小于一个阈值;

--weights这是需要你给出预训练的模型,原理上看就是说很多有实力的机构用高级GPU且花费大量时间训练得到的模型(指模型中的参数,模型的结构当然是已经定好的),深度学习的参数太多,想从0开始训练就需要有足够的数据和足够的时间最重要的是要有足够强大的硬件支持,所以imagenet这个1.几T的高清图片数据库就为深度学习的训练提供了足够的数据,现有的大量工作都是在各种预训练好的模型基础上完成的;

--cfg这个参数要求后面指定一个参数配置文件,这个文件中可以配置config.py中提到的参数,当然也可以在--set部分进行设置,看个人需要吧

--imdb这是caffe中保存图像数据的格式?或者叫什么。。。后续学习中再总结

--rand这是一个随机化的种子,具体用在哪依然等我学习后再总结

--set这是一个可以设置config.py中的参数的地方,常用的比如输出网络模型到哪里?训练时的batch_size等等

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    if not args.randomize:        # fix the random seeds (numpy and caffe) for reproducibility        np.random.seed(cfg.RNG_SEED)        caffe.set_random_seed(cfg.RNG_SEED)
这就是上面--rand使用的地方,可以看到是调用了caffe.set_random_seed方法,所以现在不去深入研究了

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    caffe.set_mode_gpu()    caffe.set_device(args.gpu_id)
这两行的意思就是使用GPU进行训练,再把使用哪个GPU告诉caffe。CPU能不能训练,理论上应该可以。 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    imdb, roidb = combined_roidb(args.imdb_name)    print '{:d} roidb entries'.format(len(roidb))    output_dir = get_output_dir(imdb)    print 'Output will be saved to `{:s}`'.format(output_dir)
为faster-rcnn的训练准备数据。
imdb是caffe中很重要的一部分,还有leveldb,所以还是等我了解了再总结吧。目前是把现有的数据处理成满足程序输入要求的格式,以进行下一步的训练。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    train_net(args.solver, roidb, output_dir,              pretrained_model=args.pretrained_model,              max_iters=args.max_iters)
调用的是lib/fast_rcnn/train.py中的方法,我的理解是训练代码一样,只是网络结构有不同。




0 0
原创粉丝点击