print('shape mismatch in %s. shape_1=%s, while shape_2=%s.' % (k, shape_1, shape_2)) _state_dict.update(new_state_dict) model.load_state_dict(_state_dict) if __name__ == '__main__': cfg = None if config_file == 0: cfg = PPYOLO_2x_Config() elif config_file == 1: cfg = PPYOLO_2x_Config() elif config_file == 2: cfg = PPYOLO_r18vd_Config() class_names = get_classes(cfg.classes_path) num_classes = len(class_names) # 步id,无需设置,会自动读。 iter_id = 0 # 创建模型 Backbone = select_backbone(cfg.backbone_type) backbone = Backbone(**cfg.backbone) IouLoss = select_loss(cfg.iou_loss_type) iou_loss = IouLoss(**cfg.iou_loss) iou_aware_loss = None if cfg.head['iou_aware']: IouAwareLoss = select_loss(cfg.iou_aware_loss_type) iou_aware_loss = IouAwareLoss(**cfg.iou_aware_loss) Loss = select_loss(cfg.yolo_loss_type)
config.gpu_options.per_process_gpu_memory_fraction = 1.0 set_session(tf.Session(config=config)) if __name__ == '__main__': classes_path = 'data/coco_classes.txt' # model_path可以是'yolov4.h5'、'./weights/step00001000.h5'这些。 # model_path = 'yolov4.h5' model_path = './weights/step00001000.h5' # input_shape越大,精度会上升,但速度会下降。 # input_shape = (320, 320) input_shape = (416, 416) # input_shape = (608, 608) num_anchors = 3 all_classes = get_classes(classes_path) num_classes = len(all_classes) inputs = layers.Input(shape=(None, None, 3)) yolo = YOLOv4(inputs, num_classes, num_anchors) yolo.load_weights(model_path, by_name=True) _decode = Decode(0.05, 0.45, input_shape, yolo, all_classes) # detect images in test floder. for (root, dirs, files) in os.walk('images/test'): if files: start = time.time() for f in files: path = os.path.join(root, f) image = cv2.imread(path) image, boxes, scores, classes = _decode.detect_image(
# 验证集图片的相对路径 eval_pre_path = cfg.val_pre_path anno_file = cfg.val_path from pycocotools.coco import COCO val_dataset = COCO(anno_file) val_img_ids = val_dataset.getImgIds() images = [] # 只跑有gt的图片,跟随PaddleDetection for img_id in val_img_ids: ins_anno_ids = val_dataset.getAnnIds( imgIds=img_id, iscrowd=False) # 读取这张图片所有标注anno的id if len(ins_anno_ids) == 0: continue img_anno = val_dataset.loadImgs(img_id)[0] images.append(img_anno) all_classes = get_classes(cfg.classes_path) num_classes = len(all_classes) # 创建模型 Backbone = select_backbone(cfg.backbone_type) backbone = Backbone(**cfg.backbone) Fpn = select_fpn(cfg.fpn_type) fpn = Fpn(**cfg.fpn) Head = select_head(cfg.head_type) head = Head(fcos_loss=None, nms_cfg=cfg.nms_cfg, **cfg.head) fcos = FCOS(backbone, fpn, head) if use_gpu: fcos = fcos.cuda() fcos.load_state_dict(torch.load(model_path)) fcos.eval( ) # 必须调用model.eval()来设置dropout和batch normalization layers在运行推理前,切换到评估模式。