faster rcnn的Notebook部分代码解析

举报
黄生 发表于 2025/01/31 21:57:56 2025/01/31
【摘要】 模型训练超参设置代码imdb_name = "voc_2007_trainval"imdbval_name = "voc_2007_test"# 使用的预训练模型位置weight = "./data/imagenet_weights/vgg16.pth"# 训练迭代次数max_iters = 100# cfg模型文件位置cfg_file = './experiments/cfgs/vgg1...
  • 模型训练超参设置代码

imdb_name = "voc_2007_trainval"
imdbval_name = "voc_2007_test"

# 使用的预训练模型位置
weight = "./data/imagenet_weights/vgg16.pth"
# 训练迭代次数
max_iters = 100
# cfg模型文件位置
cfg_file = './experiments/cfgs/vgg16.yml'
set_cfgs = None

if cfg_file is not None:
    cfg_from_file(cfg_file)
if set_cfgs is not None:
    cfg_from_list(set_cfgs)

print('Using config:')
print(cfg)

以下是对代码的逐步解析和解释:

1. IMDB 数据集名称配置

imdb_name = "voc_2007_trainval"
imdbval_name = "voc_2007_test"
  • imdb_name 是训练集的名称,表示使用 PASCAL VOC 2007 的 trainval 数据集。

  • imdbval_name 是验证集的名称,表示使用 PASCAL VOC 2007 的 test 数据集。

  • PASCAL VOC 是一个经典的目标检测数据集,trainval 用于训练模型,test 用于验证模型性能。

2. 预训练模型路径

weight = "./data/imagenet_weights/vgg16.pth"
#[ma-user Faster_R_CNN]$ll ./data/imagenet_weights/vgg16.pth
#-rwxr-x--- 1 ma-user ma-group 553434458 Aug  7  2019 ./data/imagenet_weights/vgg16.pth*
  • 指定了预训练模型的路径,这里是 VGG16 在 ImageNet 数据集上训练的权重文件。

  • 使用预训练模型可以加速训练过程,并提高模型的性能(迁移学习)。

3. 训练迭代次数

max_iters = 100

4. 配置文件路径

cfg_file = './experiments/cfgs/vgg16.yml'
set_cfgs = None
[ma-user Faster_R_CNN]$cat experiments/cfgs/vgg16.yml 
EXP_DIR: vgg16
TRAIN:
  HAS_RPN: True
  IMS_PER_BATCH: 1
  BBOX_NORMALIZE_TARGETS_PRECOMPUTED: True
  RPN_POSITIVE_OVERLAP: 0.7
  RPN_BATCHSIZE: 256
  PROPOSAL_METHOD: gt
  BG_THRESH_LO: 0.0
  DISPLAY: 20
  BATCH_SIZE: 256
  SNAPSHOT_PREFIX: vgg16_faster_rcnn
TEST:
  HAS_RPN: True
POOLING_MODE: align 

image.png

  • cfg_file 是模型配置文件的路径,vgg16.yml 包含模型训练的各种参数。
  • set_cfgs 用于覆盖配置文件中的某些参数,这里是 None,表示不额外设置。

5. 加载配置文件

if cfg_file is not None:
    cfg_from_file(cfg_file)
if set_cfgs is not None:
    cfg_from_list(set_cfgs)

6. 打印配置

print('Using config:')
print(cfg)
  • 打印当前使用的配置参数,方便调试和确认。

  • 加载数据集

  • combined_roidb函数定义: 合并多个数据集的 ROIDB,支持多数据集训练。

  • 数据集加载: 使用 combined_roidb 函数加载训练和验证数据集的 ROIDB。

  • 配置输出路径: 设置模型输出路径和 TensorBoard 日志路径。

#模型输出路径
[ma-user work]$ls /home/ma-user/work/ma_share/Faster_R_CNN/output/vgg16/voc_2007_trainval/default -l
total 535592
-rw-r----- 1 ma-user ma-group    122809 Jan 31 21:06 vgg16_faster_rcnn_iter_100.pkl
-rw-r----- 1 ma-user ma-group 548320947 Jan 31 21:06 vgg16_faster_rcnn_iter_100.pth
  • SolverWrapper: 封装训练过程,管理模型、数据层、优化器等。
sw = SolverWrapper(
    net,
    imdb,
    roidb,
    valroidb,
    output_dir,
    tb_dir,
    pretrained_model=weight)

SolverWrapper封装类,参数有:
net: 模型对象。
imdb roidb和 valroidb: 训练集和验证集的数据集信息。
output_dir 和 tb_dir: 输出路径和日志路径。
pretrained_model=weight: 预训练模型的权重路径。

sw.net.train()
sw.net.to(sw.net._device)

sw.net.train(): 切换模型到训练模式。
sw.net.to(sw.net._device): 将模型移动到指定设备(GPU 或 CPU)。

  • 后续

数据层构建: 使用 RoIDataLayer 构建训练和验证数据层。
训练循环: 实现训练主循环(100次迭代),包括前向传播、损失计算、优化器更新、学习率调整、模型快照保存等。
推理:准备测试图片,推理代码,进行推理,并在图片上画出检测框和对象类型。
以上部分代码比较繁杂,短时间难以总结和理解扎实,先这样。

notebook链接:
https://developer.huaweicloud.com/develop/aigallery/notebook/detail?id=577028db-9eae-48b4-88b3-9f46169b8515

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。