rbgirshick/py-faster-rcnn训练过程中xml读取的过程

imdb表示image database

ind表示index


在tools\train_net.py中

from datasets.factory import get_imdb #与下文相关的头文件
def combined_roidb(imdb_names):
    def get_roidb(imdb_name):
        imdb = get_imdb(imdb_name)# 调用该函数,返回imdb  
        print 'Loaded dataset `{:s}` for training'.format(imdb.name)
        imdb.set_proposal_method(cfg.TRAIN.PROPOSAL_METHOD)#设置方法一般默认gt
        print 'Set proposal method: {:s}'.format(cfg.TRAIN.PROPOSAL_METHOD)
        roidb = get_training_roidb(imdb)#利用imdb,产生roi_db  

        return roidb

    roidbs = [get_roidb(s) for s in imdb_names.split('+')]
  roidb = roidbs[0]
  if len(roidbs) > 1:
      for r in roidbs[1:]:
          roidb.extend(r)
      imdb = datasets.imdb.imdb(imdb_names)
  else:
      imdb = get_imdb(imdb_names)
  return imdb, roidb
 
 
 
if __name__ == '__main__':
...  
roidb, imdb = get_roidb(imdb_name) # 调用函数,返回训练数据
model_paths = train_net(solver, roidb, output_dir, #传入数据roidb,供训练  
                          pretrained_model=init_model,  
                          max_iters=max_iters)  
所以,进入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) 
    return roidb, imdb  

### 使用 Faster R-CNN 训练自定义数据集 为了成功使用 Faster R-CNN 模型训练自定义的数据集,需遵循一系列特定的操作流程。这不仅涉及环境配置、数据准备,还包括模型调整和实际的训练过程。 #### 准备工作 确保安装了必要的依赖库并设置了开发环境。如果采用 TensorFlow 版本,则可以从 GitHub 上获取对应的源码[^1]: ```bash git clone https://github.com/dBeker/Faster-RCNN-TensorFlow-Python3.5.git cd Faster-RCNN-TensorFlow-Python3.5 pip install -r requirements.txt ``` 对于 PyTorch 实现版本,可参照另一个开源项目来设置环境[^2]: ```bash git clone <指定仓库地址> cd faster_rcnn_pytorch pip install -r requirements.txt ``` #### 数据预处理 创建适合 Faster R-CNN 的标注文件格式非常重要。通常情况下,需要转换成 Pascal VOC 或 COCO 格式的 XML 文件或 JSON 文件。此外,还需准备好图像路径列表以及类别标签映射表。 针对不同框架的具体实现细节可能有所差异,在此提供基于 Python 脚本的一个简单例子用于说明如何读取图片目录下的所有 JPEG 图像及其对应标签信息,并保存至 CSV 文件中以便后续加载: ```python import os from pathlib import Path def prepare_dataset(image_dir, label_file='labels.csv'): with open(label_file, 'w') as f: lines = ['filename,label\n'] for img_path in Path(image_dir).glob('*.jpg'): filename = str(img_path.relative_to(image_dir)) class_name = ... # 获取每张图的真实类别名 line = ','.join([filename, class_name]) + '\n' lines.append(line) f.writelines(lines) prepare_dataset('/path/to/images') ``` 注意:以上代码片段仅为示意用途,具体逻辑应根据实际情况编写。 #### 修改配置参数 依据所选框架的不同,修改相应的配置文件以适应新的数据集特性。比如当选用 VGG16 或 ResNet 作为基础网络时,应该更新 `trainval_net.py` 中关于输入尺寸、锚框比例等超参设定[^3]。 #### 开始训练 一切就绪之后即可启动训练脚本。下面给出了一条典型的命令行指令示例,它指定了 GPU 设备编号、使用的数据集名称、骨干网结构以及其他一些选项: ```bash CUDA_VISIBLE_DEVICES=1 python trainval_net.py \ --dataset custom_data \ --net vgg16 \ --bs 1 \ --nw 4 \ --cuda \ --epochs 5 ``` 这条命令假设已经有一个名为 "custom_data" 的新数据集被正确导入到程序当中去了;同时选择了 VGG16 架构来进行特征提取操作,并且开启了多线程加速功能(`--nw`) 和启用了 CUDA 加速支持 (`--cuda`) 来加快计算速度。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值