Download evaluate.py from Dororo99/SatforHDMap_AID4AD_modified: direct link, hf CLI and curl.
- Browser
- Download file 4.43 kB
-
https://huggingface.co/Dororo99/SatforHDMap_AID4AD_modified/resolve/main/evaluate.py
- Command line
-
hf download hf://Dororo99/SatforHDMap_AID4AD_modified/evaluate.py
-
curl -L -o evaluate.py https://huggingface.co/Dororo99/SatforHDMap_AID4AD_modified/resolve/main/evaluate.py
4.43 kB
| import argparse | |
| import tqdm | |
| import torch | |
| from data.dataset import semantic_dataset | |
| from data.const import NUM_CLASSES | |
| from evaluation.iou import get_batch_iou | |
| from model import get_model | |
| def onehot_encoding(logits, dim=1): | |
| max_idx = torch.argmax(logits, dim, keepdim=True) | |
| one_hot = logits.new_full(logits.shape, 0) | |
| one_hot.scatter_(dim, max_idx, 1) | |
| return one_hot | |
| def eval_iou(model, val_loader): | |
| model.eval() | |
| total_intersects = 0 | |
| total_union = 0 | |
| with torch.no_grad(): | |
| for imgs, trans, rots, intrins, post_trans, post_rots, lidar_data, lidar_mask, car_trans, yaw_pitch_roll, semantic_gt, instance_gt, direction_gt, prior_map in tqdm.tqdm(val_loader): | |
| semantic, embedding, direction = model(imgs.cuda(), trans.cuda(), rots.cuda(), intrins.cuda(), | |
| post_trans.cuda(), post_rots.cuda(), lidar_data.cuda(), | |
| lidar_mask.cuda(), car_trans.cuda(), yaw_pitch_roll.cuda(), | |
| prior_map.cuda()) | |
| semantic_gt = semantic_gt.cuda().float() | |
| intersects, union = get_batch_iou(onehot_encoding(semantic), semantic_gt) | |
| total_intersects += intersects | |
| total_union += union | |
| return total_intersects / (total_union + 1e-7) | |
| def main(args): | |
| data_conf = { | |
| 'num_channels': NUM_CLASSES + 1, | |
| 'image_size': args.image_size, | |
| 'xbound': args.xbound, | |
| 'ybound': args.ybound, | |
| 'zbound': args.zbound, | |
| 'dbound': args.dbound, | |
| 'thickness': args.thickness, | |
| 'angle_class': args.angle_class, | |
| } | |
| train_loader, val_loader = semantic_dataset(args.version, args.dataroot, data_conf, args.bsz, args.nworkers) | |
| model = get_model(args.model, data_conf, args.instance_seg, args.embedding_dim, args.direction_pred, args.angle_class) | |
| model.load_state_dict(torch.load(args.modelf), strict=False) | |
| model.cuda() | |
| print(eval_iou(model, val_loader)) | |
| if __name__ == '__main__': | |
| parser = argparse.ArgumentParser() | |
| # multi_gpu config | |
| parser.add_argument("--multi_gpu", type=bool, default=True) | |
| # logging config | |
| parser.add_argument("--logdir", type=str, default='./runs') | |
| # nuScenes config | |
| parser.add_argument('--dataroot', type=str, default='dataset/nuScenes/') | |
| parser.add_argument('--version', type=str, default='v1.0-mini', choices=['v1.0-trainval', 'v1.0-mini']) | |
| # model config | |
| parser.add_argument("--model", type=str, default='HDMapNet_cam') | |
| # training config | |
| parser.add_argument("--nepochs", type=int, default=30) | |
| parser.add_argument("--max_grad_norm", type=float, default=5.0) | |
| parser.add_argument("--pos_weight", type=float, default=2.13) | |
| parser.add_argument("--bsz", type=int, default=4) | |
| parser.add_argument("--nworkers", type=int, default=10) | |
| parser.add_argument("--lr", type=float, default=1e-3) | |
| parser.add_argument("--weight_decay", type=float, default=1e-7) | |
| # finetune config | |
| parser.add_argument('--finetune', action='store_true') | |
| parser.add_argument('--modelf', type=str, default=None) | |
| # data config | |
| parser.add_argument("--thickness", type=int, default=5) | |
| parser.add_argument("--image_size", nargs=2, type=int, default=[128, 352]) | |
| parser.add_argument("--xbound", nargs=3, type=float, default=[-30.0, 30.0, 0.15]) | |
| parser.add_argument("--ybound", nargs=3, type=float, default=[-15.0, 15.0, 0.15]) | |
| parser.add_argument("--zbound", nargs=3, type=float, default=[-10.0, 10.0, 20.0]) | |
| parser.add_argument("--dbound", nargs=3, type=float, default=[4.0, 45.0, 1.0]) | |
| # embedding config | |
| parser.add_argument('--instance_seg', action='store_true') | |
| parser.add_argument("--embedding_dim", type=int, default=16) | |
| parser.add_argument("--delta_v", type=float, default=0.5) | |
| parser.add_argument("--delta_d", type=float, default=3.0) | |
| # direction config | |
| parser.add_argument('--direction_pred', action='store_true') | |
| parser.add_argument('--angle_class', type=int, default=36) | |
| # loss config | |
| parser.add_argument("--scale_seg", type=float, default=1.0) | |
| parser.add_argument("--scale_var", type=float, default=1.0) | |
| parser.add_argument("--scale_dist", type=float, default=1.0) | |
| parser.add_argument("--scale_direction", type=float, default=0.2) | |
| args = parser.parse_args() | |
| main(args) | |