Caffe2 - (二十) Detectron 之 config.py 文件参数

本文详细解析了Detectron的config.py文件参数,包括训练选项、RPN训练参数、数据加载选项、推断及测试选项等,涵盖了从模型到解决器、Fast R-CNN、Mask R-CNN等多个关键组件的配置细节。
摘要由CSDN通过智能技术生成

Caffe2 - (二十) Detectron 之 config.py 文件参数

config.py 给出了 Detectron 的默认参数,其位于 lib/core/config.py. 类似于 Faster R-CNN 中对应的形式.

一般不更改该文件参数,可以根据设置 yaml 文件并利用 merge_cfg_from_file (yaml_file) 来加载自定义参数,同时覆盖 config.py 内的默认参数.

设定 --cfg 参数,即可指定 yaml 参数文件,参数是以 (key, value) 对的形式.

Detectron 给出的 yaml 文件位于 configs/ 目录及其子目录中.

config.py 内参数理解:

# 工具包导入
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from ast import literal_eval
from past.builtins import basestring
from utils.collections import AttrDict
import copy
import logging
import numpy as np
import os
import os.path as osp
import yaml

from utils.io import cache_url 

logger = logging.getLogger(__name__)

__C = AttrDict()

# 导入 config 参数命令:
#   from core.config import cfg
cfg = __C

# 注:避免使用 '.ON' 作为参数配置中的 key. 因为 yaml 会将其转化为 True. 可使用 'ENABLED' 取代 '.ON'.

1. 训练参数 Training options

# ---------------------------------------------------------------------------- #
# 训练默认参数
# ---------------------------------------------------------------------------- #
__C.TRAIN = AttrDict()

# 从 .pkl 文件初始化网络权重参数;.pkl 可以是预训练模型.
__C.TRAIN.WEIGHTS = b''

# 训练数据集 Datasets
# 训练数据集列表设定:datasets.dataset_catalog.DATASETS.keys()
# 如果设定了多个 datasets,则会在其并集上进行模型训练.
__C.TRAIN.DATASETS = ()

# 训练所采用的缩放尺度 Scales
# 每一个 scale 是图像短边的像素值
# 如果给定了多个 scales 值,则对于每个训练图片随机选取一个 scale,如尺度抖动数据增强scale jitter data augmentation
__C.TRAIN.SCALES = (600, )

# 缩放后输入图片最长边的最大像素值
__C.TRAIN.MAX_SIZE = 1000

# 训练 mini-batch 每张 GPU 的图片数
# 每个 mini-batch 的总图片数 = 每张 GPU 的图片数 * GPUs 数
# Total images per minibatch = TRAIN.IMS_PER_BATCH * NUM_GPUS
__C.TRAIN.IMS_PER_BATCH = 2

# 每张图片的 RoI mini-batch,即每张图片的 RoIs 数.
# 每张训练 mini-batch 中总的 RoIs 数 = 每张图片 mini-batch RoIs 数 * mini-batch 图片数 * GPUs 数
# 典型配置: 512 * 2 * 8 = 8192
# RoI minibatch size *per image* (number of regions of interest [ROIs])
# Total number of RoIs per training minibatch =
#   TRAIN.BATCH_SIZE_PER_IM * TRAIN.IMS_PER_BATCH * NUM_GPUS
__C.TRAIN.BATCH_SIZE_PER_IM = 64

# mini-batch 中被标记为 foreground RoIs(i.e. class > 0) 的目标分数Target fraction 
__C.TRAIN.FG_FRACTION = 0.25

# RoI 的重叠区域大于 FG_THRESH 则被标记为 foreground
__C.TRAIN.FG_THRESH = 0.5

# RoI 的重叠区域在 [LO, HI] 区间内则被标记为 background (i.e. class = 0)
__C.TRAIN.BG_THRESH_HI = 0.5
__C.TRAIN.BG_THRESH_LO = 0.0

# 训练是否水平翻转图片
__C.TRAIN.USE_FLIPPED = True

# 如果 RoI 和 groundtruth box 的重叠区域大于阈值BBOX_THRESH,则(RoI gt_box)对作为边界框 bounding-box 回归训练样本.
__C.TRAIN.BBOX_THRESH = 0.5

# 模型保存周期,即多少次迭代进行一次模型断点保存.
# 需要除以 GPUs 数 NUM_GPUS,e.g., 20000/8 => 2500 iters
__C.TRAIN.SNAPSHOT_ITERS = 20000

# 训练采用指定的 proposals 
# 训练过程中,所有的 proposals 是在 proposal 文件中指定的.
# proposals 文件与 TRAIN.DATASETS 数据集相对应.
__C.TRAIN.PROPOSAL_FILES = ()

# 确保图片 mini-batches 具有相同的长宽比,(i.e. both tall and thin or both short and wide)
# 对于节省内存很重要,可以稍微加快训练.
__C.TRAIN.ASPECT_GROUPING = True

2. RPN 训练参数 RPN training options

# ---------------------------------------------------------------------------- #
# RPN 训练默认参数
# ---------------------------------------------------------------------------- #

# 如果 anchor 和 groundtruth box 的最小重叠区域大于阈值 RPN_POSITIVE_OVERLAP, 
# 则 (anchor, gt_box) 对作为 positive 训练样本
# (IOU >= thresh ==> positive RPN example)
__C.TRAIN.RPN_POSITIVE_OVERLAP = 0.7

# 如果 anchor 和 groundtruth box 的最大重叠区域小于阈值 RPN_NEGATIVE_OVERLAP, 
# 则 (anchor, gt_box) 对作为 negative 训练样本
# (IOU < thresh ==> negative RPN example)
__C.TRAIN.RPN_NEGATIVE_OVERLAP = 0.3

# 每个 RPN mini-batch 中被标记为 foreground (positive) 样本的目标分数Target fraction
__C.TRAIN.RPN_FG_FRACTION = 0.5

# 每张图片的 RPN 样本总数
__C.TRAIN.RPN_BATCH_SIZE_PER_IM = 256

# RPN proposals 所采用的 NMS 阈值 (end-to-end training with RPN 时使用)
__C.TRAIN.RPN_NMS_THRESH = 0.7

# NMS 处理前,top 分数的 RPN proposals 数
# When FPN is used, this is *per FPN level* (not total)
__C.TRAIN.RPN_PRE_NMS_TOP_N = 12000

# NMS 处理后,保留的 top 分数的 RPN proposals 数
# 所产生的 RPN proposals 总数(FPN 和 non-FPN 一样)
__C.TRAIN.RPN_POST_NMS_TOP_N = 2000

# 设定阈值像素值 RPN_STRADDLE_THRESH,丢弃超出图片边界的 PRN anchors
# 设定 RPN_STRADDLE_THRESH = -1 或 RPN_STRADDLE_THRESH = Large_Value(e.g. 100000),则不进行 anchors 裁剪.
__C.TRAIN.RPN_STRADDLE_THRESH = 0

# proposal 的 height 和 width 需要同时大于阈值RPN_MIN_SIZE
# (相对于原始图片尺度,不是训练或测试时的尺度)
__C.TRAIN.RPN_MIN_SIZE = 0

# 根据阈值CROWD_FILTER_THRESH 过滤在 crowd 区域的 proposals.
# "Inside" 的度量:proposal-with-crowd 交叉区域面积除以 proposal面积.
# "Inside" is measured as: proposal-with-crowd intersection area divided by proposal area.
__C.TRAIN.CROWD_FILTER_THRESH = 0.7

# 忽略面积小于阈值GT_MIN_AREA 的 groundtruth 物体
__C.TRAIN.GT_MIN_AREA = -1

# 如果FREEZE_CONV_BODY设定为 True,则冻结骨干backbone网络结构参数
__C.TRAIN.FREEZE_CONV_BODY = False

# 设定AUTO_RESUME=True 时,从输出路径中的最近模型断点snapshot 恢复训练
__C.TRAIN.AUTO_RESUME = True

3. 数据加载参数 Data loader options

# ---------------------------------------------------------------------------- #
# 数据加载默认参数
# ---------------------------------------------------------------------------- #
__C.DATA_LOADER = AttrDict()

# 数据加载所用的 Python 线程数threads
# (注:如果使用过多的线程,会出现 GIL 锁,导致训练变慢,实验发现 4 线程最佳.)
__C.DATA_LOADER.NUM_THREADS = 4

4. 推断/测试参数 Inference (‘test’) options

# ---------------------------------------------------------------------------- #
# 推断/测试默认参数
# ---------------------------------------------------------------------------- #
__C.TEST = AttrDict()

# 从 .pkl 文件初始化网络权重参数
__C.TEST.WEIGHTS = b''

# 测试数据集
# 类似于训练数据集,可用数据集列表设置: datasets.dataset_catalog.DATASETS.keys()
# 如果有多个数据集,则依次在每个数据集上进行测试.
__C.TEST.DATASETS = ()

# 测试时所采用的缩放尺度
# 每个缩放尺度是图片短边的像素值
# 如果给定多个缩放尺度,则所有的缩放尺度都在 multiscale inference 中使用.
__C.TEST.SCALES = (600, )

# 尺度缩放后输入图片的长边最大像素值
__C.TEST.MAX_SIZE = 1000

# NMS 的重叠阈值(suppress boxes with IoU >= this threshold)
__C.TEST.NMS = 0.3

# 如果 BBOX_REG 设定为 True,则采用类似于 Faster R-CNN bounding-box 回归的形式.
__C.TEST.BBOX_REG = True

# 利用给定 proposals 文件进行测试,(必须与TEST.DATASETS 相对应)
__C.TEST.PROPOSAL_FILES = ()

# 推断时每张图片的 proposals 数
__C.TEST.PROPOSAL_LIMIT = 2000

# RPN proposals 采用的 NMS 阈值.
__C.TEST.RPN_NMS_THRESH = 0.7

# NMS 处理前,top 分数的 RPN proposals 数
# When FPN is used, this is *per FPN level* (not total)
__C.TEST.RPN_PRE_NMS_TOP_N = 12000


# NMS 处理后,保留的 top 分数的 RPN proposals 数
# 所产生的 RPN proposals 总数(FPN 和 non-FPN 一样)
__C.TEST.RPN_POST_NMS_TOP_N = 2000

# proposal 的 height 和 width 需要同时大于阈值RPN_MIN_SIZE
# (相对于原始图片尺度,不是训练或测试时的尺度)
__C.TEST.RPN_MIN_SIZE = 0

# 每张图片返回的检测结果的最大数量(100 是根据 COCO 数据集设定的)
__C.TEST.DETECTIONS_PER_IM = 100

# 最小分数阈值,(假设分数已经归一化到 [0,1] 范围)
# 选定一个阈值,平衡 recall 和 precision,
# 高recal 且不太低 precision 的检测结果会减慢推断的后处理过程(like NMS)
__C.TEST.SCORE_THRESH = 0.05

# 如果 COMPETITION_MODE 设为 True,则保存检测结果. 竞赛模式
# 如果 COMPETITION_MODE 设为 False,则运行后不会保存结果文件(可能是比较大的文件)
__C.TEST.COMPETITION_MODE = True

# 利用 COCO json 数据集的 eval code 来评估检测结果,即时不是 COCO 数据集的评估 code.
# (e.g. 采用 COCO API 以 COCO 形式的 AP 来评估 PASCAL VOC 结果)
__C.TEST.FORCE_JSON_DATASET_EVAL = False

# [推断值,一般不在 config 文件直接设定]
# 如果 PRECOMPUTED_PROPOSALS = True,则表示使用预先计算的 proposals.
# 在 1-stage models and 2-stage models with RPN subnetwork 中设为 False.
__C.TEST.PRECOMPUTED_PROPOSALS = True

# [Inferred value; do not set directly in a config]
# Active dataset to test on
__C.TEST.DATASET = b''

# [推断值,一般不在 config 文件直接设定]
# 激活 proposal 文件,以便使用.
__C.TEST.PROPOSAL_FILE = b''

5. 边界框检测测试时间增强 Test-time augm

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值