faster rcnn的Notebook部分代码解析
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
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
- 点赞
- 收藏
- 关注作者
评论(0)