faster-rcnn 之训练数据是如何准备的:imdb和roidb的产生

【说明】:欢迎加入:faster-rcnn 交流群 238138700,关于imdb和roidb的生成都是在函数train_rpn的中,所以我们从这个函数开始,逐个跟进看如何执行得到我们需要的imdb和roidb:


def train_rpn(queue=None, imdb_name=None, init_model=None, solver=None,
              max_iters=None, cfg=None):
    """Train a Region Proposal Network in a separate training process.
    """

    # Not using any proposals, just ground-truth boxes
    cfg.TRAIN.HAS_RPN = True
    cfg.TRAIN.BBOX_REG = False  # applies only to Fast R-CNN bbox regression
    cfg.TRAIN.PROPOSAL_METHOD = 'gt'
    cfg.TRAIN.IMS_PER_BATCH = 1
    print 'Init model: {}'.format(init_model)
    print('Using config:')
    pprint.pprint(cfg)

    import caffe
    _init_caffe(cfg)

    roidb, imdb = get_roidb(imdb_name) # 调用函数,返回训练数据
    print 'roidb len: {}'.format(len(roidb))
    output_dir = get_output_dir(imdb)
    print 'Output will be saved to `{:s}`'.format(output_dir)

    model_paths = train_net(solver, roidb, output_dir, #传入数据roidb,供训练
                            pretrained_model=init_model,
                            max_iters=max_iters)
    # Cleanup all but the final model
    for i in model_paths[:-1]:
        os.remove(i)
    rpn_model_path = model_paths[-1]
    # Send final model path through the multiprocessing queue
    queue.put({'model_path': rpn_model_path})

所以,进入get_roidb函数:

def get_roidb(imdb_name, rpn_file=None):
    imdb = get_imdb(imdb_name) # 调用该函数,返回imdb
    print 'Loaded dataset `{:s}` for training'.format(imdb.name)
    imdb.set_proposal_method(cfg.TRAIN.PROPOSAL_METHOD)
    print 'Set proposal method: {:s}'.format(cfg.TRAIN.PROPOSAL_METHOD)
    if rpn_file is not None:
        imdb.config['rpn_file'] = rpn_file
    roidb = get_training_roidb(imdb) #利用imdb,产生roi_db
    return roidb, imdb

所以我们要先看imdb是如何产生的,然后看如何借助imdb产生roidb

def get_imdb(name):
    """Get an imdb (image database) by name."""
    if not __sets.has_key(name):
        raise KeyError('Unknown dataset: {}'.format(name))
    return __sets[name]()
从上面可见,get_imdb这个函数的实现
### Fast R-CNN 训练自定义 VOC 数据集 为了使用 Fast R-CNN 框架训练自定义的 VOC 格式数据集,需遵循一系列特定的操作来确保模型能够正确读取处理新数据。以下是详细的说明: #### 创建项目结构 建立合适的目录结构有助于管理不同类型的文件。通常情况下,应模仿原始 PASCAL VOC 的文件夹布局,在根目录下创建 `VOCdevkit` 文件夹,并在其内部再建一个名为 `VOC2007` 或其他年份版本的子文件夹。 ```bash mkdir -p ~/fast-rcnn/VOCdevkit/VOC2007/ cd ~/fast-rcnn/VOCdevkit/VOC2007/ ``` #### 准备图像与标注信息 将准备好的图片放入 `JPEGImages` 文件夹内;同时按照标准 XML 方式编写对应的标签文件存入 `Annotations` 中[^1]。 #### 修改配置文件 编辑 Python 脚本中的参数设定部分,调整路径指向新的数据位置以及更新类别列表。这一步骤涉及到修改源码里的某些硬编码变量,比如 `__sets__.py` `config.yml` 等配置项。 ```python from datasets.factory import get_imdb, list_imdbs # Add your custom dataset here. def _selective_search_IJCV_top_k(split): """Return IJCV selective search top K boxes.""" imdb = get_imdb('voc_2007_trainval') roidb = imdb.roidb return roidb[:] if __name__ == '__main__': from datasets.pascal_voc import pascal_voc # Register the new dataset name and its path to annotation files. pascal_voc.PASCAL_VOC.add_image_set( image_set='train', year='2007', devkit_path='/path/to/your/custom/voc/devkit' ) # Specify which categories you want to detect. classes = ('__background__', 'custom_class') # Replace with actual class names. print("Custom dataset registered.") ``` #### 编译 COCO API 并集成到项目中 由于 Fast R-CNN 默认依赖于 COCO 工具包来进行一些辅助功能的支持,因此需要获取最新版的 cocoapi 库并将其编译成 C++ 扩展模块以便后续调用。完成之后记得把生成的目标文件复制至 fast rcnn 安装目录下的适当位置[^3]。 #### 开始训练过程 一切就绪后就可以启动训练脚本来让网络学习来自定制化样本的知识点了。注意观察控制台输出的日志消息以监控进度状况,必要时可依据实际情况调整超参直至获得满意的效果为止。 ```shell ./experiments/scripts/faster_rcnn_end2end.sh $GPU_ID \ --weights data/pretrained_model/resnet50_caffe.pth \ --imdb voc_2007_trainval+voc_2012_trainval \ --iters 70000 \ --cfg experiments/cfgs/faster_rcnn_alt_opt.yml ```
评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值