MASK-RCNN自定义数据集优化思路(pytorch)
- 调整优化器GSD->AdamW也许有用
- 不使用imagenet的标准化参数(std,mean),计算自己数据集的标准化参数传入进行训练.(如果模型照片不是通用图像也许表现会跟好)
- 如果细长条的对象无法被准确识别,尝试调整AnchorGenerator的aspect_ratios,以引入更多比例的候选框.例如:((0.25, 0.5, 1.0, 2.0, 4.0),)
- boxhead的实现,使用FastRCNNConvFCHead来代替pytorch的默认TwoMLPHead实现
box_head = FastRCNNConvFCHead((256, 7, 7), [256, 256, 256, 256], [1024],norm_layer=torch.nn.BatchNorm2d
)
- 如果mask的边缘贴合的并不是很好,特别是原尺寸的过大时,使用更大尺寸的mask_roi_pool来优化结果,例如:
mask_roi_pool = MultiScaleRoIAlign(featmap_names=["0", "1", "2", "3"], output_size=56, sampling_ratio=2)
加载模型示例
# 加载模型self.model = mask_rcnn.maskrcnn_resnet50_fpn(num_classes=config.NUM_CLASSES,weights=None,backbone_weights=ResNet50_Weights.IMAGENET1K_V2,image_mean=mean,image_std=std,trainable_backbone_layers=config.TRAINABLE_BACKBONE_LAYERS,rpn_anchor_generator=config.RPN_ANCHOR_GENERATOR,box_nms_thresh=0.2,box_head=box_head,mask_roi_pool=mask_roi_pool)