以下链接是个人关于detectron2(目标检测框架),所有见解,如有错误欢迎大家指出,我会第一时间纠正。有兴趣的朋友可以加微信:17575010159 相互讨论技术。若是帮助到了你什么,一定要记得点赞!因为这是对我最大的鼓励。 文末附带 \color{blue}{文末附带} 文末附带 公众号 − \color{blue}{公众号 -} 公众号− 海量资源。 \color{blue}{ 海量资源}。 海量资源。
detectron2(目标检测框架)无死角玩转-00:目录
前言通过前面的博客,我们知道怎么去训练coco数据,但是我们的目的,肯定是去训练自己的数据,在这之前,需要为大家讲解一些相关的配置config信息,相信大家把网络跑起来的时候,也就是执行如下指令:
python tools/train_net.py \
--num-gpus 2 \
--config-file configs/COCO-Detection/retinanet_R_50_FPN_3x.yaml SOLVER.IMS_PER_BATCH 2 SOLVER.BASE_LR 0.0025
前面,我提醒大家注意,类似SOLVER.IMS_PER_BATCH,SOLVER.BASE_LR这样的配置,需要写在指令的最后面,那么这些到底是什么,我们应该如何去配置,在训练的时候,我相信大家都能看到如下打印: 那么这些到底是怎么呢?下面,就是本人注释的结果!
如有错误欢迎指出,本人会在第一时间进行修改,为了后来人,贡献我们的每一份力量
\color{red}{如有错误欢迎指出,本人会在第一时间进行修改,为了后来人,贡献我们的每一份力量}
如有错误欢迎指出,本人会在第一时间进行修改,为了后来人,贡献我们的每一份力量
CUDNN_BENCHMARK: False #设置为True,其为自动找到效率最高的配置
DATALOADER: #dataloader的配置(数据迭代器)
ASPECT_RATIO_GROUPING: True # ?
FILTER_EMPTY_ANNOTATIONS: True # 是否过滤掉注释为空的数据
NUM_WORKERS: 4 # 加载数据的线程数目
REPEAT_THRESHOLD: 0.0 # 重新开始迭代是,从0加载数据
SAMPLER_TRAIN: TrainingSampler # 迭代训练样本
DATASETS: #数据集相关的配置
# 迭代数据时,提前准备1000/2000样本,为加快数据加载速度
PRECOMPUTED_PROPOSAL_TOPK_TEST: 1000
PRECOMPUTED_PROPOSAL_TOPK_TRAIN: 2000
# 数据集的文件名
PROPOSAL_FILES_TEST: ()
PROPOSAL_FILES_TRAIN: ()
# 获取数据时,其默认数据集名称
TEST: ('coco_2017_val',)
TRAIN: ('coco_2017_train',)
# ?
GLOBAL:
HACK: 1.0
INPUT: # 输入的相关的配置
CROP: # 图片剪切功能
ENABLED: False # 是否开启图片剪切
SIZE: [0.9, 0.9] # 剪切图像的大小比例
TYPE: relative_range # 剪切的方式
FORMAT: BGR # 图片的个饿死
MASK_FORMAT: polygon #mask掩码的格式,如果图片大小不足,会补黑色像素
MAX_SIZE_TEST: 1333 #测试图片的最大尺寸
MAX_SIZE_TRAIN: 1333 #训练图片的最大尺寸
MIN_SIZE_TEST: 800 # 测试图片最小尺寸
MIN_SIZE_TRAIN: (640, 672, 704, 736, 768, 800) # 训练图片的最小尺寸
MIN_SIZE_TRAIN_SAMPLING: choice #训练样本的抽样方式
MODEL:
ANCHOR_GENERATOR: # anchor生成的相关配置
ANGLES: [[-90, 0, 90]] # anchor的角度
ASPECT_RATIOS: [[0.5, 1.0, 2.0]] # 长宽的比例
NAME: DefaultAnchorGenerator # anchor生成器的名字
OFFSET: 0.0 # 偏移量
SIZES: [[32], [64], [128], [256], [512]] # 大小,生成anchor每个尺寸的大小
BACKBONE: # 主干网络配置
FREEZE_AT: 2 #冻结?
NAME: build_resnet_fpn_backbone #主干网络的名字
DEVICE: cuda # 使用GPU
FPN: # FPN的相关配置
FUSE_TYPE: sum # 融合的类似
IN_FEATURES: ['res2', 'res3', 'res4', 'res5'] # 指定处为输入特征
NORM: # ?
OUT_CHANNELS: 256 # FPN的输出通道数
KEYPOINT_ON: False # 是否开启关键点
LOAD_PROPOSALS: False # ?
MASK_ON: True # ?
META_ARCHITECTURE: GeneralizedRCNN # 微元素的架构,可以是retina等等
PANOPTIC_FPN: # 全景分割的相关配置
COMBINE: #相关绑定
ENABLED: True # 是否启动
INSTANCES_CONFIDENCE_THRESH: 0.5 # 设置置信度的阈值
OVERLAP_THRESH: 0.5 # 重叠部分的
STUFF_AREA_LIMIT: 4096 #?
INSTANCE_LOSS_WEIGHT: 1.0 # 实例的权重比例
PIXEL_MEAN: [103.53, 116.28, 123.675] # ?
PIXEL_STD: [1.0, 1.0, 1.0] #?
PROPOSAL_GENERATOR: #?
MIN_SIZE: 0 #?
NAME: RPN #?
RESNETS: #重新配置
DEFORM_MODULATED: False #
DEFORM_NUM_GROUPS: 1
DEFORM_ON_PER_STAGE: [False, False, False, False]
DEPTH: 50 # resnet循环次数
NORM: FrozenBN # 冻结BN
NUM_GROUPS: 1 #输出特征的层数
OUT_FEATURES: ['res2', 'res3', 'res4', 'res5']
RES2_OUT_CHANNELS: 256 # 对应层输出的通道数
RES5_DILATION: 1 # ?
STEM_OUT_CHANNELS: 64
STRIDE_IN_1X1: True # ?
WIDTH_PER_GROUP: 64 # 可分离卷积的分组数目
RETINANET: # retinanet相关配置
BBOX_REG_WEIGHTS: (1.0, 1.0, 1.0, 1.0) # ?
FOCAL_LOSS_ALPHA: 0.25 # FOCAL_LOSS相关参数
FOCAL_LOSS_GAMMA: 2.0 # FOCAL_LOSS相关参数
IN_FEATURES: ['p3', 'p4', 'p5', 'p6', 'p7'] # ?
IOU_LABELS: [0, -1, 1] # 输出标签
IOU_THRESHOLDS: [0.4, 0.5] # IOU的阈值
NMS_THRESH_TEST: 0.5 # NMS的阈值
NUM_CLASSES: 80 # 训练数据的总类别数目
NUM_CONVS: 4 # 卷积层数目
PRIOR_PROB: 0.01 #?
SCORE_THRESH_TEST: 0.05 # 测试数据的置信度阈值
SMOOTH_L1_LOSS_BETA: 0.1 # L1loss平滑参数
TOPK_CANDIDATES_TEST: 1000 # 提前拿取的测试数据
ROI_BOX_CASCADE_HEAD: #
BBOX_REG_WEIGHTS: ((10.0, 10.0, 5.0, 5.0), (20.0, 20.0, 10.0, 10.0), (30.0, 30.0, 15.0, 15.0))
IOUS: (0.5, 0.6, 0.7)
ROI_BOX_HEAD:
BBOX_REG_WEIGHTS: (10.0, 10.0, 5.0, 5.0)
CLS_AGNOSTIC_BBOX_REG: False
CONV_DIM: 256
FC_DIM: 1024
NAME: FastRCNNConvFCHead
NORM:
NUM_CONV: 0
NUM_FC: 2
POOLER_RESOLUTION: 7
POOLER_SAMPLING_RATIO: 0
POOLER_TYPE: ROIAlignV2
SMOOTH_L1_BETA: 0.0
ROI_HEADS:
BATCH_SIZE_PER_IMAGE: 512
IN_FEATURES: ['p2', 'p3', 'p4', 'p5']
IOU_LABELS: [0, 1]
IOU_THRESHOLDS: [0.5]
NAME: StandardROIHeads
NMS_THRESH_TEST: 0.5
NUM_CLASSES: 80
POSITIVE_FRACTION: 0.25
PROPOSAL_APPEND_GT: True
SCORE_THRESH_TEST: 0.05
ROI_KEYPOINT_HEAD:
CONV_DIMS: (512, 512, 512, 512, 512, 512, 512, 512)
LOSS_WEIGHT: 1.0
MIN_KEYPOINTS_PER_IMAGE: 1
NAME: KRCNNConvDeconvUpsampleHead
NORMALIZE_LOSS_BY_VISIBLE_KEYPOINTS: True
NUM_KEYPOINTS: 17
POOLER_RESOLUTION: 14
POOLER_SAMPLING_RATIO: 0
POOLER_TYPE: ROIAlignV2
ROI_MASK_HEAD:
CLS_AGNOSTIC_MASK: False
CONV_DIM: 256
NAME: MaskRCNNConvUpsampleHead
NORM:
NUM_CONV: 4
POOLER_RESOLUTION: 14
POOLER_SAMPLING_RATIO: 0
POOLER_TYPE: ROIAlignV2
RPN:
BATCH_SIZE_PER_IMAGE: 256
BBOX_REG_WEIGHTS: (1.0, 1.0, 1.0, 1.0)
BOUNDARY_THRESH: -1
HEAD_NAME: StandardRPNHead
IN_FEATURES: ['p2', 'p3', 'p4', 'p5', 'p6']
IOU_LABELS: [0, -1, 1]
IOU_THRESHOLDS: [0.3, 0.7]
LOSS_WEIGHT: 1.0
NMS_THRESH: 0.7
POSITIVE_FRACTION: 0.5
POST_NMS_TOPK_TEST: 1000
POST_NMS_TOPK_TRAIN: 1000
PRE_NMS_TOPK_TEST: 1000
PRE_NMS_TOPK_TRAIN: 2000
SMOOTH_L1_BETA: 0.0
SEM_SEG_HEAD:
COMMON_STRIDE: 4
CONVS_DIM: 128
IGNORE_VALUE: 255
IN_FEATURES: ['p2', 'p3', 'p4', 'p5']
LOSS_WEIGHT: 1.0
NAME: SemSegFPNHead
NORM: GN
NUM_CLASSES: 54 #类别的数目
WEIGHTS: detectron2://ImageNetPretrained/MSRA/R-50.pkl # 加载的权重
OUTPUT_DIR: ./output
SEED: -1
SOLVER: #解决方案
BASE_LR: 0.0025 # 初始学习率
BIAS_LR_FACTOR: 1.0 #?
CHECKPOINT_PERIOD: 5000 # 没 5000个epoch进行一次测试
GAMMA: 0.1
IMS_PER_BATCH: 2 # 每个GPU的batch_siez大小
LR_SCHEDULER_NAME: WarmupMultiStepLR # 学习率衰减方式
MAX_ITER: 90000 # 到达该迭代次数则停止
MOMENTUM: 0.9 # 优化器动能
STEPS: (60000, 80000) # 到达指定迭代步数,则学习率衰减
WARMUP_FACTOR: 0.001
WARMUP_ITERS: 1000
WARMUP_METHOD: linear
WEIGHT_DECAY: 0.0001 # 权重衰减
WEIGHT_DECAY_BIAS: 0.0001 # 权重衰减系数
WEIGHT_DECAY_NORM: 0.0
TEST: # 测试相关配置
AUG: # AUG相关配置
ENABLED: False
FLIP: True # 水平翻转
MAX_SIZE: 4000 # 图片的最大尺寸
MIN_SIZES: (400, 500, 600, 700, 800, 900, 1000, 1100, 1200) # 图片的最小尺寸
DETECTIONS_PER_IMAGE: 100 # 每张图片检测到的最大目标数目
EVAL_PERIOD: 0 # 迭代多少次后进行训练
EXPECTED_RESULTS: [] # 期待的结果
KEYPOINT_OKS_SIGMAS: [] #?
PRECISE_BN: # 测试精确度,BN的配置
ENABLED: False # 时候启动BN
NUM_ITER: 200 # 迭代数目
VERSION: 2
VIS_PERIOD: 0
上面的配置注释,由于现在本人不是很熟悉fast-rcnn,所以不知道ROI的相关配置,就没有注释了,有知道的朋友写文档给我,然后我更新上去,一定会带上小哥的名字。
其实,在训练的时候,我们大多数的参数保持默认即可,只需要修改部分参数,具体怎么设置,请看下篇博客,下篇博客,我会带大家去训练自己的数据。