【2020华为云AI实战营】第三章作业Mask R-CNN模型训练配置参数解释
【摘要】 1 作业指南对于模型迅雷参数是这么讲的,稍微有点少第二步:生成相关配置项我们定义Config类的子类MyTrainConfig,指定相关的参数,较为关键的参数有:NAME: Config的唯一名称NUM_CLASSES: 分类的数量,COCO中共有80种物体+背景IMAGE_MIN_DIM和IMAGE_MAX_DIM: 图片的最大和最小尺寸,我们生成固定的128x128的图片,因此都设置为1...
1 作业指南对于模型迅雷参数是这么讲的,稍微有点少
第二步:生成相关配置项 我们定义Config类的子类MyTrainConfig,指定相关的参数,较为关键的参数有: NAME: Config的唯一名称 NUM_CLASSES: 分类的数量,COCO中共有80种物体+背景 IMAGE_MIN_DIM和IMAGE_MAX_DIM: 图片的最大和最小尺寸,我们生成固定的128x128的图片,因此都设置为128 TRAIN_ROIS_PER_IMAGE: 每张图片上训练的RoI个数 STEPS_PER_EPOCH和VALIDATION_STEPS: 训练和验证时,每轮的step数量,减少step的数量可以加速训练,但是检测精度降低
以下是稍微详细一点的,转自csdn
# 使用的gpu的数量,当使用cpu训练时,数量为1,一般设置为1就可以 GPU_COUNT = 1 # 每个GPU上要训练的图像数。一个12 GB的GPU通常可以处理2张1024x1024像素的图像。 # 根据您的GPU内存和图像大小进行调整。使用GPU能够处理的最高数字,以获得最佳性能,我们设置8可能会好一点 IMAGES_PER_GPU = 2 # steps_per_epoch为keras中的fit_generator函数中的参数,可以理解为每轮迭代多少次,fit_generator就是 # 因为训练集太大而设置的自动生成batch的函数,当这轮生成的batch数达到steps_per_epoch就进行下一个epoch。 # steps_per_epoch不需要考虑训练集大小,tensorboard会自动更新并在每个epoch结束时保存更新,此参数小意味着tensorboard更新的快。 # 验证集也是在epoch最后记录的,而且比较花时间,所以steps_per_epoch不要设置太小,避免在验证上花大量时间。 #按需求修改参数值 STEPS_PER_EPOCH = 120 # validation_steps也是fit_generator中的参数,当validation_data为验证集生成器时,validation_steps同样是验证集一轮的迭代次数, # 即生成的batch数,此参数越大验证越精确,但同样训练的也越慢。 # 在keras中,steps一般就是batchs of samples。 #按需求修改参数值。 VALIDATION_STEPS = 20 # 主干网络结构,resnet50 or resner101 BACKBONE = "resnet101" # 基于主干网络的降采样倍数,参照物是原始图片,这不能更改,在FPN中需要用到。 BACKBONE_STRIDES = [4, 8, 16, 32, 64] # 训练集中图片的类别数,包括背景 NUM_CLASSES = 1 # 按要求修改 # 使用FPN进行RPN时,从p2-p6对应的锚框的尺寸大小 RPN_ANCHOR_SCALES = (32, 64, 128, 256, 512) #基于rpn_anchor_scales的每个尺寸又对应3种比例。 RPN_ANCHOR_RATIOS = [0.5, 1, 2] # 锚步长 # 如果为1就为feature map中的每个点创建锚,如果是2就在feature map上跨一个点创建锚,以此类推。 RPN_ANCHOR_STRIDE = 1 # 非极大值抑制的阈值,可以剔除rpn生成的proposals中不合格的,在训练时可以修改阈值。 #注意NMS只在RPN网络的预测阶段在proposal layer使用 RPN_NMS_THRESHOLD = 0.7 # 在进行rpn训练时每幅图片使用多少个anchor RPN_TRAIN_ANCHORS_PER_IMAGE = 256 # 进行非极大值抑制后在训练和测试阶段输入的ROI个数,即通过proposal layer之后的rois的个数 POST_NMS_ROIS_TRAINING = 2000 POST_NMS_ROIS_INFERENCE = 1000 # instance masks 使用小尺寸以节省内存,建议使用高分辨率图片 USE_MINI_MASK = True MINI_MASK_SHAPE = (56, 56) # (height, width) of the mini-mask # 输入图片尺寸重置 #通常将图片设置为正方形,这样训练效果一般很好,重置大小是短边为IMAGE_MIN_DIM,长边不超过IMAGE_MAX_DIM,然后 # 用0填充至正方形,多个图片可以设置为一个batch #具体方法: # none: No resizing or padding. Return the image unchanged. # square: Resize and pad with zeros to get a square image # of size [max_dim, max_dim]. # pad64: Pads width and height with zeros to make them multiples of 64. # If IMAGE_MIN_DIM or IMAGE_MIN_SCALE are not None, then it scales # up before padding. IMAGE_MAX_DIM is ignored in this mode. # The multiple of 64 is needed to ensure smooth scaling of feature # maps up and down the 6 levels of the FPN pyramid (2**6=64). # crop: Picks random crops from the image. First, scales the image based # on IMAGE_MIN_DIM and IMAGE_MIN_SCALE, then picks a random crop of # size IMAGE_MIN_DIM x IMAGE_MIN_DIM. Can be used in training only. # IMAGE_MAX_DIM is not used in this mode. # 我们使用第二种方法 IMAGE_RESIZE_MODE = "square" IMAGE_MIN_DIM = 800 IMAGE_MAX_DIM = 1024 # 最小缩放比率。在MIN_IMAGE_DIM后进行检查,并可以强制进一步缩放。 # 例如,如果设置为2,那么图像的宽度和高度会增加一倍,甚至更多, # 即使MIN_IMAGE_DIM不需要它。但是,在“square”模式下,它可以被IMAGE_MAX_DIM覆盖。 IMAGE_MIN_SCALE = 0 # Image mean (RGB),np.array创建一个数组 MEAN_PIXEL = np.array([123.7, 116.8, 103.9]) # 每副图像使用多少roi作为后面分类和掩膜网络的输入,论文中采用512,但通常 # rpn产生不了那么多positive proposal,使得positive:negative为1:3 # 但可以修改非极大值抑制的阈值来增加roi数量。注意这是detection target layer的输出 TRAIN_ROIS_PER_IMAGE = 200 #train_rois_per_image # Positive roi的比例 ROI_POSITIVE_RATIO = 0.33 # poolalign中pooling后的大小,分为两段,一段用来分类,一段用来掩膜 POOL_SIZE = 7 MASK_POOL_SIZE = 14 # 掩膜网络最后的输出,如果改变这个值,就需要修改对应的掩膜网络, MASK_SHAPE = [28, 28] # 在一副图像中最多有多少gt实例数目 MAX_GT_INSTANCES = 100 # 在rpn和最后分类中做bounding boxing 回归的标准偏差。 RPN_BBOX_STD_DEV = np.array([0.1, 0.1, 0.2, 0.2]) BBOX_STD_DEV = np.array([0.1, 0.1, 0.2, 0.2]) # 最终检测包含的实例最大数量,即在测试阶段经过分类回归后的proposal中串行的输入到mask网络中的roi数量 DETECTION_MAX_INSTANCES = 100 # 在测试阶段的detection layer中用来过滤实例的分类得分没有达到这个置信度的目标,即在测试阶段的输入 # 由RPN网络生成的rois,经过fast rcnn后输出每个roi的分类得分和第二次边界回归值,然后判别这个分类得分中最高的类的得分 # 大于下面的置信度的roi才进入掩码网络生成掩码 DETECTION_MIN_CONFIDENCE = 0.7 # 置信度小于0.7就跳过检测 # 最终目标检测后被判别为属于实例的rois之间的NMS的非极大值抑制,这个是第二次修正后且置信度大于0.7的rois与GT的NMS阈值 # 且经过NMS后只选择置信度前100名输入到下一个mask网络 DETECTION_NMS_THRESHOLD = 0.3 # 学习率和动量 # 论文中学习率为0.02,会造成梯度爆炸,所以修改了 LEARNING_RATE = 0.001 LEARNING_MOMENTUM = 0.9 # 正则化权重衰减系数 WEIGHT_DECAY = 0.0001 # 为了更好的优化设置的损失权重,在训练阶段可以使用 LOSS_WEIGHTS = { "rpn_class_loss": 1., "rpn_bbox_loss": 1., "mrcnn_class_loss": 1., "mrcnn_bbox_loss": 1., "mrcnn_mask_loss": 1. } #在训练时是否使用rpn生成的roi,一般情况下为true,只有不经过rpn网络,直接调试后面的分类或者掩膜时,可以改为false USE_RPN_ROIS = True # 是否使用bn # None: Train BN layers. This is the normal mode # False: Freeze BN layers. Good when using a small batch size # True: (不使用). Set layer in training mode even when inferencing TRAIN_BN = False # Defaulting to False since batch size is often small # 梯度标准裁剪,暂时不知道用来干什么 GRADIENT_CLIP_NORM = 5.0 # gradient_clip_norm def __init__(self): """设置计算属性值""" # batch size大小如何设置 self.BATCH_SIZE = self.IMAGES_PER_GPU * self.GPU_COUNT # 输入图像尺寸如何重置 if self.IMAGE_RESIZE_MODE == "crop": self.IMAGE_SHAPE = np.array([self.IMAGE_MIN_DIM, self.IMAGE_MIN_DIM, 3]) else: self.IMAGE_SHAPE = np.array([self.IMAGE_MAX_DIM, self.IMAGE_MAX_DIM, 3]) # Image meta data length,暂时不知道干啥用 # See compose_image_meta() for details self.IMAGE_META_SIZE = 1 + 3 + 3 + 4 + 1 + self.NUM_CLASSES def display(self): """在不同的实验中显示配置中对应属性的值""" print("\nConfigurations:") for a in dir(self): if not a.startswith("__") and not callable(getattr(self, a)): print("{:30} {}".format(a, getattr(self, a))) print("\n") ———————————————— 版权声明:本文为CSDN博主「竹魂剑身琴心雪魄」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/lingshanshengzu/java/article/details/80401507
【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)