From 6300438e7185f7a1ffa3f604861516fe1932ef72 Mon Sep 17 00:00:00 2001 From: Guanghua Yu <742925032@qq.com> Date: Mon, 21 Sep 2020 19:01:48 +0800 Subject: [PATCH] add pcb baseline config (#1455) --- configs/pcb/README.md | 10 ++ configs/pcb/faster_fpn_reader.yml | 99 ++++++++++++++ configs/pcb/faster_rcnn_r34_fpn_1x.yml | 106 +++++++++++++++ configs/pcb/fcos_r50_fpn_1x.yml | 181 +++++++++++++++++++++++++ configs/pcb/yolov3_darknet.yml | 66 +++++++++ configs/pcb/yolov3_reader.yml | 111 +++++++++++++++ 6 files changed, 573 insertions(+) create mode 100644 configs/pcb/README.md create mode 100644 configs/pcb/faster_fpn_reader.yml create mode 100644 configs/pcb/faster_rcnn_r34_fpn_1x.yml create mode 100644 configs/pcb/fcos_r50_fpn_1x.yml create mode 100644 configs/pcb/yolov3_darknet.yml create mode 100644 configs/pcb/yolov3_reader.yml diff --git a/configs/pcb/README.md b/configs/pcb/README.md new file mode 100644 index 000000000..3ebe8690d --- /dev/null +++ b/configs/pcb/README.md @@ -0,0 +1,10 @@ +# 印刷电路板(PCB)瑕疵数据集模型 +- 印刷电路板(PCB)瑕疵数据集:[数据下载链接](http://robotics.pkusz.edu.cn/resources/dataset/),是一个公共的合成PCB数据集,由北京大学发布,其中包含1386张图像以及6种缺陷(缺失孔,鼠标咬伤,开路,短路,杂散,伪铜),用于检测,分类和配准任务。我们选取了其中适用与检测任务的693张图像,随机选择593张图像作为训练集,100张图像作为验证集。AIStudio数据集链接:[印刷电路板(PCB)瑕疵数据集](https://aistudio.baidu.com/aistudio/datasetdetail/52914) + +## 已提供的基线模型 +- YOLOv3-Darknet +- Faster-RCNN-R34 +- FCOS-R50-FPN + +## 优化后高mAP模型 +将在9月29日发布,敬请期待。 diff --git a/configs/pcb/faster_fpn_reader.yml b/configs/pcb/faster_fpn_reader.yml new file mode 100644 index 000000000..171817ede --- /dev/null +++ b/configs/pcb/faster_fpn_reader.yml @@ -0,0 +1,99 @@ +TrainReader: + inputs_def: + fields: ['image', 'im_info', 'im_id', 'gt_bbox', 'gt_class', 'is_crowd'] + dataset: + !COCODataSet + image_dir: images + anno_path: Annotations/train.json + dataset_dir: /home/aistudio/work/PCB_DATASET + sample_transforms: + - !DecodeImage + to_rgb: true + - !RandomFlipImage + prob: 0.5 + - !NormalizeImage + is_channel_first: false + is_scale: true + mean: [0.485,0.456,0.406] + std: [0.229, 0.224,0.225] + - !ResizeImage + target_size: 800 + max_size: 1333 + interp: 1 + use_cv2: true + - !Permute + to_bgr: false + channel_first: true + batch_transforms: + - !PadBatch + pad_to_stride: 32 + use_padded_im_info: false + batch_size: 1 + shuffle: true + worker_num: 2 + use_process: false + +EvalReader: + inputs_def: + fields: ['image', 'im_info', 'im_id', 'im_shape'] + dataset: + !COCODataSet + image_dir: images + anno_path: Annotations/val.json + dataset_dir: /home/aistudio/work/PCB_DATASET + sample_transforms: + - !DecodeImage + to_rgb: true + with_mixup: false + - !NormalizeImage + is_channel_first: false + is_scale: true + mean: [0.485,0.456,0.406] + std: [0.229, 0.224,0.225] + - !ResizeImage + interp: 1 + max_size: 1333 + target_size: 800 + use_cv2: true + - !Permute + channel_first: true + to_bgr: false + batch_transforms: + - !PadBatch + pad_to_stride: 32 + use_padded_im_info: true + batch_size: 1 + shuffle: false + drop_empty: false + worker_num: 2 + +TestReader: + inputs_def: + # set image_shape if needed + fields: ['image', 'im_info', 'im_id', 'im_shape'] + dataset: + !ImageFolder + anno_path: /home/aistudio/work/PCB_DATASET/Annotations/val.json + sample_transforms: + - !DecodeImage + to_rgb: true + with_mixup: false + - !NormalizeImage + is_channel_first: false + is_scale: true + mean: [0.485,0.456,0.406] + std: [0.229, 0.224,0.225] + - !ResizeImage + interp: 1 + max_size: 1333 + target_size: 800 + use_cv2: true + - !Permute + channel_first: true + to_bgr: false + batch_transforms: + - !PadBatch + pad_to_stride: 32 + use_padded_im_info: true + batch_size: 1 + shuffle: false diff --git a/configs/pcb/faster_rcnn_r34_fpn_1x.yml b/configs/pcb/faster_rcnn_r34_fpn_1x.yml new file mode 100644 index 000000000..7f9cfdd52 --- /dev/null +++ b/configs/pcb/faster_rcnn_r34_fpn_1x.yml @@ -0,0 +1,106 @@ +architecture: FasterRCNN +max_iters: 3558 +use_gpu: true +snapshot_iter: 1000 +log_smooth_window: 20 +save_dir: output +pretrain_weights: https://paddle-imagenet-models-name.bj.bcebos.com/ResNet34_pretrained.tar +metric: COCO +weights: output/faster_rcnn_r34_fpn_1x/model_final +num_classes: 7 + +FasterRCNN: + backbone: ResNet + fpn: FPN + rpn_head: FPNRPNHead + roi_extractor: FPNRoIAlign + bbox_head: BBoxHead + bbox_assigner: BBoxAssigner + +ResNet: + norm_type: bn + norm_decay: 0. + depth: 34 + feature_maps: [2, 3, 4, 5] + freeze_at: 2 + +FPN: + min_level: 2 + max_level: 6 + num_chan: 256 + spatial_scale: [0.03125, 0.0625, 0.125, 0.25] + +FPNRPNHead: + anchor_generator: + anchor_sizes: [32, 64, 128, 256, 512] + aspect_ratios: [0.5, 1.0, 2.0] + stride: [16.0, 16.0] + variance: [1.0, 1.0, 1.0, 1.0] + anchor_start_size: 32 + min_level: 2 + max_level: 6 + num_chan: 256 + rpn_target_assign: + rpn_batch_size_per_im: 256 + rpn_fg_fraction: 0.5 + rpn_positive_overlap: 0.7 + rpn_negative_overlap: 0.3 + rpn_straddle_thresh: 0.0 + train_proposal: + min_size: 0.0 + nms_thresh: 0.7 + pre_nms_top_n: 2000 + post_nms_top_n: 2000 + test_proposal: + min_size: 0.0 + nms_thresh: 0.7 + pre_nms_top_n: 1000 + post_nms_top_n: 1000 + +FPNRoIAlign: + canconical_level: 4 + canonical_size: 224 + min_level: 2 + max_level: 5 + box_resolution: 7 + sampling_ratio: 2 + +BBoxAssigner: + batch_size_per_im: 512 + bbox_reg_weights: [0.1, 0.1, 0.2, 0.2] + bg_thresh_lo: 0.0 + bg_thresh_hi: 0.5 + fg_fraction: 0.25 + fg_thresh: 0.5 + +BBoxHead: + head: TwoFCHead + nms: + keep_top_k: 100 + nms_threshold: 0.5 + score_threshold: 0.05 + +TwoFCHead: + mlp_dim: 1024 + +LearningRate: + base_lr: 0.0025 + schedulers: + - !PiecewiseDecay + gamma: 0.1 + milestones: [2372, 3261] + - !LinearWarmup + start_factor: 0.1 + steps: 500 + +OptimizerBuilder: + optimizer: + momentum: 0.9 + type: Momentum + regularizer: + factor: 0.0001 + type: L2 + +_READER_: 'faster_fpn_reader.yml' +TrainReader: + batch_size: 2 diff --git a/configs/pcb/fcos_r50_fpn_1x.yml b/configs/pcb/fcos_r50_fpn_1x.yml new file mode 100644 index 000000000..3c25c615e --- /dev/null +++ b/configs/pcb/fcos_r50_fpn_1x.yml @@ -0,0 +1,181 @@ +architecture: FCOS +max_iters: 3558 +use_gpu: true +snapshot_iter: 1000 +log_smooth_window: 20 +log_iter: 20 +save_dir: output +pretrain_weights: https://paddle-imagenet-models-name.bj.bcebos.com/ResNet50_cos_pretrained.tar +metric: COCO +weights: output/fcos_r50_fpn_1x/model_final +num_classes: 6 + +FCOS: + backbone: ResNet + fpn: FPN + fcos_head: FCOSHead + +ResNet: + norm_type: affine_channel + norm_decay: 0. + depth: 50 + feature_maps: [3, 4, 5] + freeze_at: 2 + +FPN: + min_level: 3 + max_level: 7 + num_chan: 256 + use_c5: false + spatial_scale: [0.03125, 0.0625, 0.125] + has_extra_convs: true + +FCOSHead: + num_classes: 80 + fpn_stride: [8, 16, 32, 64, 128] + num_convs: 4 + norm_type: "gn" + fcos_loss: FCOSLoss + norm_reg_targets: True + centerness_on_reg: True + use_dcn_in_tower: False + nms: MultiClassNMS + +MultiClassNMS: + score_threshold: 0.025 + nms_top_k: 1000 + keep_top_k: 100 + nms_threshold: 0.6 + background_label: -1 + +FCOSLoss: + loss_alpha: 0.25 + loss_gamma: 2.0 + iou_loss_type: "giou" + reg_weights: 1.0 + +LearningRate: + base_lr: 0.00125 + schedulers: + - !PiecewiseDecay + gamma: 0.1 + milestones: [2372, 3261] + - !LinearWarmup + start_factor: 0.3333333333333333 + steps: 500 + +OptimizerBuilder: + optimizer: + momentum: 0.9 + type: Momentum + regularizer: + factor: 0.0001 + type: L2 + +TrainReader: + inputs_def: + fields: ['image', 'im_info', 'fcos_target'] + dataset: + !COCODataSet + image_dir: images + anno_path: Annotations/train.json + dataset_dir: /home/aistudio/work/PCB_DATASET + with_background: false + sample_transforms: + - !DecodeImage + to_rgb: true + - !RandomFlipImage + prob: 0.5 + - !NormalizeImage + is_channel_first: false + is_scale: true + mean: [0.485,0.456,0.406] + std: [0.229, 0.224,0.225] + - !ResizeImage + target_size: 800 + max_size: 1333 + interp: 1 + use_cv2: true + - !Permute + to_bgr: false + channel_first: true + batch_transforms: + - !PadBatch + pad_to_stride: 128 + use_padded_im_info: false + - !Gt2FCOSTarget + object_sizes_boundary: [64, 128, 256, 512] + center_sampling_radius: 1.5 + downsample_ratios: [8, 16, 32, 64, 128] + norm_reg_targets: True + batch_size: 2 + shuffle: true + worker_num: 4 + use_process: false + +EvalReader: + inputs_def: + fields: ['image', 'im_id', 'im_shape', 'im_info'] + dataset: + !COCODataSet + image_dir: images + anno_path: Annotations/val.json + dataset_dir: /home/aistudio/work/PCB_DATASET + with_background: false + sample_transforms: + - !DecodeImage + to_rgb: true + with_mixup: false + - !NormalizeImage + is_channel_first: false + is_scale: true + mean: [0.485,0.456,0.406] + std: [0.229, 0.224,0.225] + - !ResizeImage + target_size: 800 + max_size: 1333 + interp: 1 + use_cv2: true + - !Permute + channel_first: true + to_bgr: false + batch_transforms: + - !PadBatch + pad_to_stride: 128 + use_padded_im_info: true + batch_size: 1 + shuffle: false + worker_num: 2 + use_process: false + +TestReader: + inputs_def: + # set image_shape if needed + fields: ['image', 'im_id', 'im_shape', 'im_info'] + dataset: + !ImageFolder + anno_path: /home/aistudio/work/PCB_DATASET/Annotations/val.json + with_background: false + sample_transforms: + - !DecodeImage + to_rgb: true + with_mixup: false + - !NormalizeImage + is_channel_first: false + is_scale: true + mean: [0.485,0.456,0.406] + std: [0.229, 0.224,0.225] + - !ResizeImage + interp: 1 + max_size: 1333 + target_size: 800 + use_cv2: true + - !Permute + channel_first: true + to_bgr: false + batch_transforms: + - !PadBatch + pad_to_stride: 128 + use_padded_im_info: true + batch_size: 1 + shuffle: false diff --git a/configs/pcb/yolov3_darknet.yml b/configs/pcb/yolov3_darknet.yml new file mode 100644 index 000000000..32de78fae --- /dev/null +++ b/configs/pcb/yolov3_darknet.yml @@ -0,0 +1,66 @@ +architecture: YOLOv3 +use_gpu: true +max_iters: 1780 +log_smooth_window: 20 +save_dir: output +snapshot_iter: 1000 +metric: COCO +pretrain_weights: https://paddle-imagenet-models-name.bj.bcebos.com/DarkNet53_pretrained.tar +weights: output/yolov3_darknet/model_final +num_classes: 6 +use_fine_grained_loss: false + +YOLOv3: + backbone: DarkNet + yolo_head: YOLOv3Head + +DarkNet: + norm_type: sync_bn + norm_decay: 0. + depth: 53 + +YOLOv3Head: + anchor_masks: [[6, 7, 8], [3, 4, 5], [0, 1, 2]] + anchors: [[10, 13], [16, 30], [33, 23], + [30, 61], [62, 45], [59, 119], + [116, 90], [156, 198], [373, 326]] + norm_decay: 0. + yolo_loss: YOLOv3Loss + nms: + background_label: -1 + keep_top_k: 100 + nms_threshold: 0.45 + nms_top_k: 1000 + normalized: false + score_threshold: 0.01 + +YOLOv3Loss: + # batch_size here is only used for fine grained loss, not used + # for training batch_size setting, training batch_size setting + # is in configs/yolov3_reader.yml TrainReader.batch_size, batch + # size here should be set as same value as TrainReader.batch_size + batch_size: 8 + ignore_thresh: 0.7 + label_smooth: true + +LearningRate: + base_lr: 0.00025 + schedulers: + - !PiecewiseDecay + gamma: 0.1 + milestones: + - 1180 + - 1630 + - !LinearWarmup + start_factor: 0. + steps: 500 + +OptimizerBuilder: + optimizer: + momentum: 0.9 + type: Momentum + regularizer: + factor: 0.0005 + type: L2 + +_READER_: 'yolov3_reader.yml' diff --git a/configs/pcb/yolov3_reader.yml b/configs/pcb/yolov3_reader.yml new file mode 100644 index 000000000..817657082 --- /dev/null +++ b/configs/pcb/yolov3_reader.yml @@ -0,0 +1,111 @@ +TrainReader: + inputs_def: + fields: ['image', 'gt_bbox', 'gt_class', 'gt_score'] + num_max_boxes: 50 + dataset: + !COCODataSet + image_dir: images + anno_path: Annotations/train.json + dataset_dir: /home/aistudio/work/PCB_DATASET + with_background: false + sample_transforms: + - !DecodeImage + to_rgb: True + with_mixup: True + - !MixupImage + alpha: 1.5 + beta: 1.5 + - !ColorDistort {} + - !RandomExpand + fill_value: [123.675, 116.28, 103.53] + - !RandomCrop {} + - !RandomFlipImage + is_normalized: false + - !NormalizeBox {} + - !PadBox + num_max_boxes: 50 + - !BboxXYXY2XYWH {} + batch_transforms: + - !RandomShape + sizes: [320, 352, 384, 416, 448, 480, 512, 544, 576, 608] + random_inter: True + - !NormalizeImage + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + is_scale: True + is_channel_first: false + - !Permute + to_bgr: false + channel_first: True + # Gt2YoloTarget is only used when use_fine_grained_loss set as true, + # this operator will be deleted automatically if use_fine_grained_loss + # is set as false + - !Gt2YoloTarget + anchor_masks: [[6, 7, 8], [3, 4, 5], [0, 1, 2]] + anchors: [[10, 13], [16, 30], [33, 23], + [30, 61], [62, 45], [59, 119], + [116, 90], [156, 198], [373, 326]] + downsample_ratios: [32, 16, 8] + batch_size: 8 + shuffle: true + mixup_epoch: 250 + drop_last: true + worker_num: 8 + bufsize: 16 + use_process: true + + +EvalReader: + inputs_def: + fields: ['image', 'im_size', 'im_id'] + num_max_boxes: 50 + dataset: + !COCODataSet + image_dir: images + anno_path: Annotations/val.json + dataset_dir: /home/aistudio/work/PCB_DATASET + with_background: false + sample_transforms: + - !DecodeImage + to_rgb: True + - !ResizeImage + target_size: 608 + interp: 2 + - !NormalizeImage + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + is_scale: True + is_channel_first: false + - !PadBox + num_max_boxes: 50 + - !Permute + to_bgr: false + channel_first: True + batch_size: 8 + drop_empty: false + worker_num: 8 + bufsize: 16 + +TestReader: + inputs_def: + image_shape: [3, 608, 608] + fields: ['image', 'im_size', 'im_id'] + dataset: + !ImageFolder + anno_path: /home/aistudio/work/PCB_DATASET/Annotations/val.json + with_background: false + sample_transforms: + - !DecodeImage + to_rgb: True + - !ResizeImage + target_size: 608 + interp: 2 + - !NormalizeImage + mean: [0.485, 0.456, 0.406] + std: [0.229, 0.224, 0.225] + is_scale: True + is_channel_first: false + - !Permute + to_bgr: false + channel_first: True + batch_size: 1 -- GitLab