├── .dev ├── gather_models.py └── upload_modelzoo.py ├── .github ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE │ ├── config.yml │ ├── error-report.md │ ├── feature_request.md │ └── general_questions.md └── workflows │ ├── build.yml │ └── deploy.yml ├── .gitignore ├── .pre-commit-config.yaml ├── .readthedocs.yml ├── LICENSE ├── README.md ├── configs ├── _base_ │ ├── datasets │ │ ├── ade20k.py │ │ ├── cityscapes.py │ │ ├── cityscapes_769x769.py │ │ ├── hengyang_600_normal.py │ │ ├── pascal_context.py │ │ ├── pascal_voc12.py │ │ ├── pascal_voc12_aug.py │ │ ├── potsdam_600.py │ │ ├── potsdam_600_normal.py │ │ ├── potsdam_600_viz.py │ │ ├── vaihingen_600.py │ │ ├── vaihingen_600_normal.py │ │ └── vaihingen_600_viz.py │ ├── default_runtime.py │ ├── models │ │ ├── ann_r50-d8.py │ │ ├── aspp_swin.py │ │ ├── ccnet_r50-d8.py │ │ ├── cgnet.py │ │ ├── danet_r50-d8.py │ │ ├── deeplabv3_r50-d8.py │ │ ├── deeplabv3plus_r50-d8.py │ │ ├── deeplabv3plus_r50-d8_boundary_loss.py │ │ ├── dnl_r50-d8.py │ │ ├── emanet_r50-d8.py │ │ ├── encnet_r50-d8.py │ │ ├── fast_scnn.py │ │ ├── fcn_hr18.py │ │ ├── fcn_r50-d8.py │ │ ├── fpn_r50.py │ │ ├── gcnet_r50-d8.py │ │ ├── nonlocal_r50-d8.py │ │ ├── ocrnet_hr18.py │ │ ├── ocrnet_r50-d8.py │ │ ├── pointrend_r50.py │ │ ├── psanet_r50-d8.py │ │ ├── pspnet_r50-d8.py │ │ ├── upernet_aspp_swin.py │ │ ├── upernet_r50.py │ │ ├── upernet_swin.py │ │ └── upernet_swin_boundary_loss.py │ └── schedules │ │ ├── schedule_160k.py │ │ ├── schedule_20k.py │ │ ├── schedule_240k.py │ │ ├── schedule_40k.py │ │ └── schedule_80k.py ├── ann │ ├── README.md │ ├── ann_r101-d8_512x1024_40k_cityscapes.py │ ├── ann_r101-d8_512x1024_80k_cityscapes.py │ ├── ann_r101-d8_512x512_160k_ade20k.py │ ├── ann_r101-d8_512x512_20k_voc12aug.py │ ├── ann_r101-d8_512x512_40k_voc12aug.py │ ├── ann_r101-d8_512x512_80k_ade20k.py │ ├── ann_r101-d8_769x769_40k_cityscapes.py │ ├── ann_r101-d8_769x769_80k_cityscapes.py │ ├── ann_r50-d8_512x1024_40k_cityscapes.py │ ├── ann_r50-d8_512x1024_80k_cityscapes.py │ ├── ann_r50-d8_512x512_160k_ade20k.py │ ├── ann_r50-d8_512x512_20k_voc12aug.py │ ├── ann_r50-d8_512x512_40k_voc12aug.py │ ├── ann_r50-d8_512x512_80k_ade20k.py │ ├── ann_r50-d8_769x769_40k_cityscapes.py │ └── ann_r50-d8_769x769_80k_cityscapes.py ├── ccnet │ ├── README.md │ ├── ccnet_r101-d8_512x1024_40k_cityscapes.py │ ├── ccnet_r101-d8_512x1024_80k_cityscapes.py │ ├── ccnet_r101-d8_512x512_160k_ade20k.py │ ├── ccnet_r101-d8_512x512_20k_voc12aug.py │ ├── ccnet_r101-d8_512x512_40k_voc12aug.py │ ├── ccnet_r101-d8_512x512_80k_ade20k.py │ ├── ccnet_r101-d8_769x769_40k_cityscapes.py │ ├── ccnet_r101-d8_769x769_80k_cityscapes.py │ ├── ccnet_r50-d8_512x1024_40k_cityscapes.py │ ├── ccnet_r50-d8_512x1024_80k_cityscapes.py │ ├── ccnet_r50-d8_512x512_160k_ade20k.py │ ├── ccnet_r50-d8_512x512_20k_voc12aug.py │ ├── ccnet_r50-d8_512x512_40k_voc12aug.py │ ├── ccnet_r50-d8_512x512_80k_ade20k.py │ ├── ccnet_r50-d8_769x769_40k_cityscapes.py │ └── ccnet_r50-d8_769x769_80k_cityscapes.py ├── cgnet │ ├── README.md │ ├── cgnet_512x1024_60k_cityscapes.py │ └── cgnet_680x680_60k_cityscapes.py ├── danet │ ├── README.md │ ├── danet_r101-d8_512x1024_40k_cityscapes.py │ ├── danet_r101-d8_512x1024_80k_cityscapes.py │ ├── danet_r101-d8_512x512_160k_ade20k.py │ ├── danet_r101-d8_512x512_20k_voc12aug.py │ ├── danet_r101-d8_512x512_40k_voc12aug.py │ ├── danet_r101-d8_512x512_80k_ade20k.py │ ├── danet_r101-d8_769x769_40k_cityscapes.py │ ├── danet_r101-d8_769x769_80k_cityscapes.py │ ├── danet_r50-d8_512x1024_40k_cityscapes.py │ ├── danet_r50-d8_512x1024_80k_cityscapes.py │ ├── danet_r50-d8_512x512_160k_ade20k.py │ ├── danet_r50-d8_512x512_20k_voc12aug.py │ ├── danet_r50-d8_512x512_40k_voc12aug.py │ ├── danet_r50-d8_512x512_80k_ade20k.py │ ├── danet_r50-d8_769x769_40k_cityscapes.py │ └── danet_r50-d8_769x769_80k_cityscapes.py ├── deeplabv3 │ ├── README.md │ ├── deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes.py │ ├── deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes.py │ ├── deeplabv3_r101-d8_480x480_40k_pascal_context.py │ ├── deeplabv3_r101-d8_480x480_80k_pascal_context.py │ ├── deeplabv3_r101-d8_512x1024_40k_cityscapes.py │ ├── deeplabv3_r101-d8_512x1024_80k_cityscapes.py │ ├── deeplabv3_r101-d8_512x512_160k_ade20k.py │ ├── deeplabv3_r101-d8_512x512_20k_voc12aug.py │ ├── deeplabv3_r101-d8_512x512_40k_voc12aug.py │ ├── deeplabv3_r101-d8_512x512_80k_ade20k.py │ ├── deeplabv3_r101-d8_769x769_40k_cityscapes.py │ ├── deeplabv3_r101-d8_769x769_80k_cityscapes.py │ ├── deeplabv3_r50-d8_480x480_40k_pascal_context.py │ ├── deeplabv3_r50-d8_480x480_80k_pascal_context.py │ ├── deeplabv3_r50-d8_512x1024_40k_cityscapes.py │ ├── deeplabv3_r50-d8_512x1024_80k_cityscapes.py │ ├── deeplabv3_r50-d8_512x512_160k_ade20k.py │ ├── deeplabv3_r50-d8_512x512_20k_voc12aug.py │ ├── deeplabv3_r50-d8_512x512_40k_voc12aug.py │ ├── deeplabv3_r50-d8_512x512_80k_ade20k.py │ ├── deeplabv3_r50-d8_769x769_40k_cityscapes.py │ └── deeplabv3_r50-d8_769x769_80k_cityscapes.py ├── deeplabv3plus │ ├── README.md │ ├── deeplabv3plus_r101-d8_512x512_240k_potsdam.py │ ├── deeplabv3plus_r101-d8_512x512_80k_hengyang.py │ ├── deeplabv3plus_r101-d8_512x512_80k_hengyang_boundary_loss.py │ ├── deeplabv3plus_r50-d8_512x512_240k_potsdam.py │ ├── deeplabv3plus_r50-d8_512x512_80k_hengyang.py │ ├── deeplabv3plus_r50-d8_512x512_80k_potsdam.py │ ├── deeplabv3plus_r50-d8_512x512_80k_potsdam_boundary_loss.py │ ├── deeplabv3plus_r50-d8_512x512_80k_potsdam_boundary_loss_viz.py │ ├── deeplabv3plus_r50-d8_512x512_80k_potsdam_viz.py │ ├── deeplabv3plus_r50-d8_512x512_80k_vaihingen.py │ ├── deeplabv3plus_r50-d8_512x512_80k_vaihingen_boundary_loss.py │ └── deeplabv3plus_r50-d8_512x512_80k_vaihingen_viz.py ├── dnlnet │ ├── README.md │ ├── dnl_r101-d8_512x1024_40k_cityscapes.py │ ├── dnl_r101-d8_512x1024_80k_cityscapes.py │ ├── dnl_r101-d8_512x512_160k_ade20k.py │ ├── dnl_r101-d8_512x512_80k_ade20k.py │ ├── dnl_r101-d8_769x769_40k_cityscapes.py │ ├── dnl_r101-d8_769x769_80k_cityscapes.py │ ├── dnl_r50-d8_512x1024_40k_cityscapes.py │ ├── dnl_r50-d8_512x1024_80k_cityscapes.py │ ├── dnl_r50-d8_512x512_160k_ade20k.py │ ├── dnl_r50-d8_512x512_80k_ade20k.py │ ├── dnl_r50-d8_769x769_40k_cityscapes.py │ └── dnl_r50-d8_769x769_80k_cityscapes.py ├── emanet │ ├── README.md │ ├── emanet_r101-d8_512x1024_80k_cityscapes.py │ ├── emanet_r101-d8_769x769_80k_cityscapes.py │ ├── emanet_r50-d8_512x1024_80k_cityscapes.py │ └── emanet_r50-d8_769x769_80k_cityscapes.py ├── encnet │ ├── README.md │ ├── encnet_r101-d8_512x1024_40k_cityscapes.py │ ├── encnet_r101-d8_512x1024_80k_cityscapes.py │ ├── encnet_r101-d8_512x512_160k_ade20k.py │ ├── encnet_r101-d8_512x512_20k_voc12aug.py │ ├── encnet_r101-d8_512x512_40k_voc12aug.py │ ├── encnet_r101-d8_512x512_80k_ade20k.py │ ├── encnet_r101-d8_769x769_40k_cityscapes.py │ ├── encnet_r101-d8_769x769_80k_cityscapes.py │ ├── encnet_r50-d8_512x1024_40k_cityscapes.py │ ├── encnet_r50-d8_512x1024_80k_cityscapes.py │ ├── encnet_r50-d8_512x512_160k_ade20k.py │ ├── encnet_r50-d8_512x512_20k_voc12aug.py │ ├── encnet_r50-d8_512x512_40k_voc12aug.py │ ├── encnet_r50-d8_512x512_80k_ade20k.py │ ├── encnet_r50-d8_769x769_40k_cityscapes.py │ ├── encnet_r50-d8_769x769_80k_cityscapes.py │ └── encnet_r50s-d8_512x512_80k_ade20k.py ├── fastscnn │ ├── README.md │ └── fast_scnn_4x8_80k_lr0.12_cityscapes.py ├── fcn │ ├── README.md │ ├── fcn_r101-d8_480x480_40k_pascal_context.py │ ├── fcn_r101-d8_480x480_80k_pascal_context.py │ ├── fcn_r101-d8_512x1024_40k_cityscapes.py │ ├── fcn_r101-d8_512x1024_80k_cityscapes.py │ ├── fcn_r101-d8_512x512_160k_ade20k.py │ ├── fcn_r101-d8_512x512_20k_voc12aug.py │ ├── fcn_r101-d8_512x512_40k_voc12aug.py │ ├── fcn_r101-d8_512x512_80k_ade20k.py │ ├── fcn_r101-d8_769x769_40k_cityscapes.py │ ├── fcn_r101-d8_769x769_80k_cityscapes.py │ ├── fcn_r50-d8_480x480_40k_pascal_context.py │ ├── fcn_r50-d8_480x480_80k_pascal_context.py │ ├── fcn_r50-d8_512x1024_40k_cityscapes.py │ ├── fcn_r50-d8_512x1024_80k_cityscapes.py │ ├── fcn_r50-d8_512x512_160k_ade20k.py │ ├── fcn_r50-d8_512x512_20k_voc12aug.py │ ├── fcn_r50-d8_512x512_40k_voc12aug.py │ ├── fcn_r50-d8_512x512_80k_ade20k.py │ ├── fcn_r50-d8_769x769_40k_cityscapes.py │ └── fcn_r50-d8_769x769_80k_cityscapes.py ├── fp16 │ ├── README.md │ ├── deeplabv3_r101-d8_512x1024_80k_fp16_cityscapes.py │ ├── deeplabv3plus_r101-d8_512x1024_80k_fp16_cityscapes.py │ ├── fcn_r101-d8_512x1024_80k_fp16_cityscapes.py │ └── pspnet_r101-d8_512x1024_80k_fp16_cityscapes.py ├── gcnet │ ├── README.md │ ├── gcnet_r101-d8_512x1024_40k_cityscapes.py │ ├── gcnet_r101-d8_512x1024_80k_cityscapes.py │ ├── gcnet_r101-d8_512x512_160k_ade20k.py │ ├── gcnet_r101-d8_512x512_20k_voc12aug.py │ ├── gcnet_r101-d8_512x512_40k_voc12aug.py │ ├── gcnet_r101-d8_512x512_80k_ade20k.py │ ├── gcnet_r101-d8_769x769_40k_cityscapes.py │ ├── gcnet_r101-d8_769x769_80k_cityscapes.py │ ├── gcnet_r50-d8_512x1024_40k_cityscapes.py │ ├── gcnet_r50-d8_512x1024_80k_cityscapes.py │ ├── gcnet_r50-d8_512x512_160k_ade20k.py │ ├── gcnet_r50-d8_512x512_20k_voc12aug.py │ ├── gcnet_r50-d8_512x512_40k_voc12aug.py │ ├── gcnet_r50-d8_512x512_80k_ade20k.py │ ├── gcnet_r50-d8_769x769_40k_cityscapes.py │ └── gcnet_r50-d8_769x769_80k_cityscapes.py ├── hrnet │ ├── README.md │ ├── fcn_hr18_480x480_40k_pascal_context.py │ ├── fcn_hr18_480x480_80k_pascal_context.py │ ├── fcn_hr18_512x1024_160k_cityscapes.py │ ├── fcn_hr18_512x1024_40k_cityscapes.py │ ├── fcn_hr18_512x1024_80k_cityscapes.py │ ├── fcn_hr18_512x512_160k_ade20k.py │ ├── fcn_hr18_512x512_20k_voc12aug.py │ ├── fcn_hr18_512x512_40k_voc12aug.py │ ├── fcn_hr18_512x512_80k_ade20k.py │ ├── fcn_hr18s_480x480_40k_pascal_context.py │ ├── fcn_hr18s_480x480_80k_pascal_context.py │ ├── fcn_hr18s_512x1024_160k_cityscapes.py │ ├── fcn_hr18s_512x1024_40k_cityscapes.py │ ├── fcn_hr18s_512x1024_80k_cityscapes.py │ ├── fcn_hr18s_512x512_160k_ade20k.py │ ├── fcn_hr18s_512x512_20k_voc12aug.py │ ├── fcn_hr18s_512x512_40k_voc12aug.py │ ├── fcn_hr18s_512x512_80k_ade20k.py │ ├── fcn_hr48_480x480_40k_pascal_context.py │ ├── fcn_hr48_480x480_80k_pascal_context.py │ ├── fcn_hr48_512x1024_160k_cityscapes.py │ ├── fcn_hr48_512x1024_40k_cityscapes.py │ ├── fcn_hr48_512x1024_80k_cityscapes.py │ ├── fcn_hr48_512x512_160k_ade20k.py │ ├── fcn_hr48_512x512_20k_voc12aug.py │ ├── fcn_hr48_512x512_40k_voc12aug.py │ └── fcn_hr48_512x512_80k_ade20k.py ├── mobilenet_v2 │ ├── README.md │ ├── deeplabv3_m-v2-d8_512x1024_80k_cityscapes.py │ ├── deeplabv3_m-v2-d8_512x512_160k_ade20k.py │ ├── deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes.py │ ├── deeplabv3plus_m-v2-d8_512x512_160k_ade20k.py │ ├── fcn_m-v2-d8_512x1024_80k_cityscapes.py │ ├── fcn_m-v2-d8_512x512_160k_ade20k.py │ ├── pspnet_m-v2-d8_512x1024_80k_cityscapes.py │ └── pspnet_m-v2-d8_512x512_160k_ade20k.py ├── nonlocal_net │ ├── README.md │ ├── nonlocal_r101-d8_512x1024_40k_cityscapes.py │ ├── nonlocal_r101-d8_512x1024_80k_cityscapes.py │ ├── nonlocal_r101-d8_512x512_160k_ade20k.py │ ├── nonlocal_r101-d8_512x512_20k_voc12aug.py │ ├── nonlocal_r101-d8_512x512_40k_voc12aug.py │ ├── nonlocal_r101-d8_512x512_80k_ade20k.py │ ├── nonlocal_r101-d8_769x769_40k_cityscapes.py │ ├── nonlocal_r101-d8_769x769_80k_cityscapes.py │ ├── nonlocal_r50-d8_512x1024_40k_cityscapes.py │ ├── nonlocal_r50-d8_512x1024_80k_cityscapes.py │ ├── nonlocal_r50-d8_512x512_160k_ade20k.py │ ├── nonlocal_r50-d8_512x512_20k_voc12aug.py │ ├── nonlocal_r50-d8_512x512_40k_voc12aug.py │ ├── nonlocal_r50-d8_512x512_80k_ade20k.py │ ├── nonlocal_r50-d8_769x769_40k_cityscapes.py │ └── nonlocal_r50-d8_769x769_80k_cityscapes.py ├── ocrnet │ ├── README.md │ ├── ocrnet_hr18_512x1024_160k_cityscapes.py │ ├── ocrnet_hr18_512x1024_40k_cityscapes.py │ ├── ocrnet_hr18_512x1024_80k_cityscapes.py │ ├── ocrnet_hr18_512x512_160k_ade20k.py │ ├── ocrnet_hr18_512x512_20k_voc12aug.py │ ├── ocrnet_hr18_512x512_40k_voc12aug.py │ ├── ocrnet_hr18_512x512_80k_ade20k.py │ ├── ocrnet_hr18s_512x1024_160k_cityscapes.py │ ├── ocrnet_hr18s_512x1024_40k_cityscapes.py │ ├── ocrnet_hr18s_512x1024_80k_cityscapes.py │ ├── ocrnet_hr18s_512x512_160k_ade20k.py │ ├── ocrnet_hr18s_512x512_20k_voc12aug.py │ ├── ocrnet_hr18s_512x512_40k_voc12aug.py │ ├── ocrnet_hr18s_512x512_80k_ade20k.py │ ├── ocrnet_hr48_512x1024_160k_cityscapes.py │ ├── ocrnet_hr48_512x1024_40k_cityscapes.py │ ├── ocrnet_hr48_512x1024_80k_cityscapes.py │ ├── ocrnet_hr48_512x512_160k_ade20k.py │ ├── ocrnet_hr48_512x512_20k_voc12aug.py │ ├── ocrnet_hr48_512x512_40k_voc12aug.py │ ├── ocrnet_hr48_512x512_80k_ade20k.py │ ├── ocrnet_r101-d8_512x1024_40k_b16_cityscapes.py │ ├── ocrnet_r101-d8_512x1024_40k_b8_cityscapes.py │ └── ocrnet_r101-d8_512x1024_80k_b16_cityscapes.py ├── point_rend │ ├── README.md │ ├── pointrend_r101_512x1024_80k_cityscapes.py │ ├── pointrend_r101_512x512_160k_ade20k.py │ ├── pointrend_r50_512x1024_80k_cityscapes.py │ └── pointrend_r50_512x512_160k_ade20k.py ├── psanet │ ├── README.md │ ├── psanet_r101-d8_512x1024_40k_cityscapes.py │ ├── psanet_r101-d8_512x1024_80k_cityscapes.py │ ├── psanet_r101-d8_512x512_160k_ade20k.py │ ├── psanet_r101-d8_512x512_20k_voc12aug.py │ ├── psanet_r101-d8_512x512_40k_voc12aug.py │ ├── psanet_r101-d8_512x512_80k_ade20k.py │ ├── psanet_r101-d8_769x769_40k_cityscapes.py │ ├── psanet_r101-d8_769x769_80k_cityscapes.py │ ├── psanet_r50-d8_512x1024_40k_cityscapes.py │ ├── psanet_r50-d8_512x1024_80k_cityscapes.py │ ├── psanet_r50-d8_512x512_160k_ade20k.py │ ├── psanet_r50-d8_512x512_20k_voc12aug.py │ ├── psanet_r50-d8_512x512_40k_voc12aug.py │ ├── psanet_r50-d8_512x512_80k_ade20k.py │ ├── psanet_r50-d8_769x769_40k_cityscapes.py │ └── psanet_r50-d8_769x769_80k_cityscapes.py ├── pspnet │ ├── README.md │ ├── pspnet_r101-d8_480x480_40k_pascal_context.py │ ├── pspnet_r101-d8_480x480_80k_pascal_context.py │ ├── pspnet_r101-d8_512x1024_40k_cityscapes.py │ ├── pspnet_r101-d8_512x1024_80k_cityscapes.py │ ├── pspnet_r101-d8_512x512_160k_ade20k.py │ ├── pspnet_r101-d8_512x512_20k_voc12aug.py │ ├── pspnet_r101-d8_512x512_40k_voc12aug.py │ ├── pspnet_r101-d8_512x512_80k_ade20k.py │ ├── pspnet_r101-d8_769x769_40k_cityscapes.py │ ├── pspnet_r101-d8_769x769_80k_cityscapes.py │ ├── pspnet_r50-d8_480x480_40k_pascal_context.py │ ├── pspnet_r50-d8_480x480_80k_pascal_context.py │ ├── pspnet_r50-d8_512x1024_40k_cityscapes.py │ ├── pspnet_r50-d8_512x1024_80k_cityscapes.py │ ├── pspnet_r50-d8_512x512_160k_ade20k.py │ ├── pspnet_r50-d8_512x512_20k_voc12aug.py │ ├── pspnet_r50-d8_512x512_40k_voc12aug.py │ ├── pspnet_r50-d8_512x512_80k_ade20k.py │ ├── pspnet_r50-d8_769x769_40k_cityscapes.py │ └── pspnet_r50-d8_769x769_80k_cityscapes.py ├── resnest │ ├── README.md │ ├── experiment0.py │ ├── experiment0_vaihingen.py │ ├── experiment0_vaihingen_viz.py │ ├── experiment0_viz.py │ ├── experiment1.py │ ├── experiment1_vaihingen.py │ ├── experiment1_viz.py │ ├── experiment5.py │ ├── experiment5_vaihingen.py │ ├── experiment5_viz.py │ ├── experiment8_vaihingen.py │ └── experiment8_viz.py ├── sem_fpn │ ├── README.md │ ├── fpn_r101_512x1024_80k_cityscapes.py │ ├── fpn_r101_512x512_160k_ade20k.py │ ├── fpn_r50_512x1024_80k_cityscapes.py │ └── fpn_r50_512x512_160k_ade20k.py ├── swin │ ├── aspp_swin_base_patch4_window7_300x300_potsdam_240k.py │ ├── upernet_aspp_swin_base_potsdam_normal_160k.py │ ├── upernet_aspp_swin_base_potsdam_normal_160k_RGB+NDSM+NDVI.py │ ├── upernet_aspp_swin_tiny_potsdam_normal_240k.py │ ├── upernet_swin_base_hengyang_normal_80k.py │ ├── upernet_swin_base_patch4_window7_300x300_potsdam_160k.py │ ├── upernet_swin_base_patch4_window7_300x300_potsdam_240k.py │ ├── upernet_swin_base_patch4_window7_512x512_160k_ade20k.py │ ├── upernet_swin_base_potsdam_normal_160k.py │ ├── upernet_swin_base_potsdam_normal_160k_rgb+ndsm+ndvi.py │ ├── upernet_swin_base_potsdam_normal_160k_rgb+ndsm.py │ ├── upernet_swin_base_potsdam_normal_160k_rgb+ndvi.py │ ├── upernet_swin_base_potsdam_normal_240k.py │ ├── upernet_swin_base_potsdam_normal_boundary_loss_160k.py │ ├── upernet_swin_base_potsdam_normal_boundary_loss_80k.py │ ├── upernet_swin_base_vaihingen_normal_240k.py │ ├── upernet_swin_base_vaihingen_normal_240k_rgb+ndsm.py │ ├── upernet_swin_small_patch4_window7_512x512_160k_ade20k.py │ ├── upernet_swin_tiny_patch4_window7_300x300_potsdam_160k.py │ ├── upernet_swin_tiny_patch4_window7_300x300_potsdam_160k_sgd.py │ ├── upernet_swin_tiny_patch4_window7_512x512_160k_ade20k.py │ └── upernet_swin_tiny_potsdam_normal_240k.py └── upernet │ ├── README.md │ ├── upernet_r101_512x1024_40k_cityscapes.py │ ├── upernet_r101_512x1024_80k_cityscapes.py │ ├── upernet_r101_512x512_160k_ade20k.py │ ├── upernet_r101_512x512_20k_voc12aug.py │ ├── upernet_r101_512x512_40k_voc12aug.py │ ├── upernet_r101_512x512_80k_ade20k.py │ ├── upernet_r101_769x769_40k_cityscapes.py │ ├── upernet_r101_769x769_80k_cityscapes.py │ ├── upernet_r50_512x1024_40k_cityscapes.py │ ├── upernet_r50_512x1024_80k_cityscapes.py │ ├── upernet_r50_512x512_160k_ade20k.py │ ├── upernet_r50_512x512_20k_voc12aug.py │ ├── upernet_r50_512x512_40k_voc12aug.py │ ├── upernet_r50_512x512_80k_ade20k.py │ ├── upernet_r50_769x769_40k_cityscapes.py │ └── upernet_r50_769x769_80k_cityscapes.py ├── demo ├── MMSegmentation_Tutorial.ipynb ├── demo.png ├── image_demo.py └── inference_demo.ipynb ├── docker └── Dockerfile ├── docs ├── Makefile ├── api.rst ├── changelog.md ├── conf.py ├── config.md ├── getting_started.md ├── index.rst ├── install.md ├── make.bat ├── model_zoo.md └── tutorials │ ├── data_pipeline.md │ ├── index.rst │ ├── new_dataset.md │ ├── new_modules.md │ └── training_tricks.md ├── mmcv_custom ├── __init__.py └── checkpoint.py ├── mmseg ├── __init__.py ├── apis │ ├── __init__.py │ ├── inference.py │ ├── test.py │ └── train.py ├── core │ ├── __init__.py │ ├── evaluation │ │ ├── __init__.py │ │ ├── class_names.py │ │ ├── eval_hooks.py │ │ └── mean_iou.py │ ├── seg │ │ ├── __init__.py │ │ ├── builder.py │ │ └── sampler │ │ │ ├── __init__.py │ │ │ ├── base_pixel_sampler.py │ │ │ └── ohem_pixel_sampler.py │ └── utils │ │ ├── __init__.py │ │ └── misc.py ├── datasets │ ├── __init__.py │ ├── ade.py │ ├── builder.py │ ├── chase_db1.py │ ├── cityscapes.py │ ├── custom.py │ ├── dataset_wrappers.py │ ├── drive.py │ ├── hengyang.py │ ├── hrf.py │ ├── pascal_context.py │ ├── pipelines │ │ ├── __init__.py │ │ ├── compose.py │ │ ├── formating.py │ │ ├── loading.py │ │ ├── test_time_aug.py │ │ └── transforms.py │ ├── potsdam.py │ ├── potsdam_viz.py │ ├── stare.py │ ├── vaihingen.py │ └── voc.py ├── models │ ├── __init__.py │ ├── backbones │ │ ├── __init__.py │ │ ├── cgnet.py │ │ ├── fast_scnn.py │ │ ├── hrnet.py │ │ ├── mobilenet_v2.py │ │ ├── resnest.py │ │ ├── resnet.py │ │ ├── resnext.py │ │ ├── swin_transformer.py │ │ └── unet.py │ ├── builder.py │ ├── decode_heads │ │ ├── __init__.py │ │ ├── ann_head.py │ │ ├── aspp_head.py │ │ ├── cascade_decode_head.py │ │ ├── cc_head.py │ │ ├── da_head.py │ │ ├── decode_head.py │ │ ├── dnl_head.py │ │ ├── ema_head.py │ │ ├── enc_head.py │ │ ├── fcn_head.py │ │ ├── fpn_head.py │ │ ├── gc_head.py │ │ ├── nl_head.py │ │ ├── ocr_head.py │ │ ├── point_head.py │ │ ├── psa_head.py │ │ ├── psp_head.py │ │ ├── sep_aspp_dnl_head.py │ │ ├── sep_aspp_dnl_head2.py │ │ ├── sep_aspp_head.py │ │ ├── sep_fcn_head.py │ │ └── uper_head.py │ ├── losses │ │ ├── __init__.py │ │ ├── accuracy.py │ │ ├── boundary_cross_entropy_loss.py │ │ ├── cross_entropy_loss.py │ │ ├── multi_loss.py │ │ └── utils.py │ ├── necks │ │ ├── __init__.py │ │ └── fpn.py │ ├── segmentors │ │ ├── __init__.py │ │ ├── base.py │ │ ├── cascade_encoder_decoder.py │ │ ├── encoder_decoder.py │ │ └── encoder_decoder_viz.py │ └── utils │ │ ├── __init__.py │ │ ├── inverted_residual.py │ │ ├── make_divisible.py │ │ ├── res_layer.py │ │ ├── self_attention_block.py │ │ └── up_conv_block.py ├── ops │ ├── __init__.py │ ├── encoding.py │ └── wrappers.py ├── utils │ ├── __init__.py │ ├── collect_env.py │ └── logger.py └── version.py ├── pytest.ini ├── requirements.txt ├── requirements ├── docs.txt ├── optional.txt ├── readthedocs.txt ├── runtime.txt └── tests.txt ├── resources ├── mmseg-logo.png └── seg_demo.gif ├── setup.cfg ├── setup.py ├── tests ├── test_config.py ├── test_data │ ├── test_dataset.py │ ├── test_dataset_builder.py │ ├── test_loading.py │ └── test_transform.py ├── test_eval_hook.py ├── test_mean_iou.py ├── test_models │ ├── test_backbone.py │ ├── test_forward.py │ ├── test_heads.py │ ├── test_losses.py │ ├── test_necks.py │ ├── test_segmentor.py │ └── test_unet.py ├── test_sampler.py └── test_utils │ └── test_inverted_residual_module.py └── tools ├── benchmark.py ├── convert_datasets ├── chase_db1.py ├── cityscapes.py ├── drive.py ├── hrf.py ├── pascal_context.py ├── stare.py └── voc_aug.py ├── dist_test.sh ├── dist_train.sh ├── dnl_heatmap_viz.py ├── get_flops.py ├── potsdam_cut.py ├── potsdam_cut_normal.py ├── potsdam_normal_pinjie.py ├── potsdam_pinjie.py ├── print_config.py ├── publish_model.py ├── pytorch2onnx.py ├── slurm_test.sh ├── slurm_train.sh ├── test.py ├── testing.py ├── train.py ├── vaihingen_cut.py ├── vaihingen_cut_normal.py ├── vaihingen_normal_pinjie.py ├── vaihingen_pinjie.py ├── valuation.py └── valuation_small_patten.py /.dev/upload_modelzoo.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import os 3 | import os.path as osp 4 | 5 | import oss2 6 | 7 | ACCESS_KEY_ID = os.getenv('OSS_ACCESS_KEY_ID', None) 8 | ACCESS_KEY_SECRET = os.getenv('OSS_ACCESS_KEY_SECRET', None) 9 | BUCKET_NAME = 'openmmlab' 10 | ENDPOINT = 'https://oss-accelerate.aliyuncs.com' 11 | 12 | 13 | def parse_args(): 14 | parser = argparse.ArgumentParser(description='Upload models to OSS') 15 | parser.add_argument('model_zoo', type=str, help='model_zoo input') 16 | parser.add_argument( 17 | '--dst-folder', 18 | type=str, 19 | default='mmsegmentation/v0.5', 20 | help='destination folder') 21 | args = parser.parse_args() 22 | return args 23 | 24 | 25 | def main(): 26 | args = parse_args() 27 | model_zoo = args.model_zoo 28 | dst_folder = args.dst_folder 29 | bucket = oss2.Bucket( 30 | oss2.Auth(ACCESS_KEY_ID, ACCESS_KEY_SECRET), ENDPOINT, BUCKET_NAME) 31 | 32 | for root, dirs, files in os.walk(model_zoo): 33 | for file in files: 34 | file_path = osp.relpath(osp.join(root, file), model_zoo) 35 | print(f'Uploading {file_path}') 36 | 37 | oss2.resumable_upload(bucket, osp.join(dst_folder, file_path), 38 | osp.join(model_zoo, file_path)) 39 | bucket.put_object_acl( 40 | osp.join(dst_folder, file_path), oss2.OBJECT_ACL_PUBLIC_READ) 41 | 42 | 43 | if __name__ == '__main__': 44 | main() 45 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/config.yml: -------------------------------------------------------------------------------- 1 | blank_issues_enabled: false 2 | 3 | contact_links: 4 | - name: MMSegmentation Documentation 5 | url: https://mmsegmentation.readthedocs.io 6 | about: Check the docs and FAQ to see if you question is already anwsered. 7 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/error-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Error report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | Thanks for your error report and we appreciate it a lot. 11 | 12 | **Checklist** 13 | 14 | 1. I have searched related issues but cannot get the expected help. 15 | 2. The bug has not been fixed in the latest version. 16 | 17 | **Describe the bug** 18 | A clear and concise description of what the bug is. 19 | 20 | **Reproduction** 21 | 22 | 1. What command or script did you run? 23 | 24 | ```none 25 | A placeholder for the command. 26 | ``` 27 | 28 | 2. Did you make any modifications on the code or config? Did you understand what you have modified? 29 | 3. What dataset did you use? 30 | 31 | **Environment** 32 | 33 | 1. Please run `python mmseg/utils/collect_env.py` to collect necessary environment infomation and paste it here. 34 | 2. You may add addition that may be helpful for locating the problem, such as 35 | - How you installed PyTorch [e.g., pip, conda, source] 36 | - Other environment variables that may be related (such as `$PATH`, `$LD_LIBRARY_PATH`, `$PYTHONPATH`, etc.) 37 | 38 | **Error traceback** 39 | 40 | If applicable, paste the error trackback here. 41 | 42 | ```none 43 | A placeholder for trackback. 44 | ``` 45 | 46 | **Bug fix** 47 | 48 | If you have already identified the reason, you can provide the information here. If you are willing to create a PR to fix it, please also leave a comment here and that would be much appreciated! 49 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | # Describe the feature 11 | 12 | **Motivation** 13 | A clear and concise description of the motivation of the feature. 14 | Ex1. It is inconvenient when [....]. 15 | Ex2. There is a recent paper [....], which is very helpful for [....]. 16 | 17 | **Related resources** 18 | If there is an official code release or third-party implementations, please also provide the information here, which would be very helpful. 19 | 20 | **Additional context** 21 | Add any other context or screenshots about the feature request here. 22 | If you would like to implement the feature and create a PR, please leave a comment here and that would be much appreciated. 23 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/general_questions.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: General questions 3 | about: Ask general questions to get help 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: deploy 2 | 3 | on: push 4 | 5 | jobs: 6 | build-n-publish: 7 | runs-on: ubuntu-latest 8 | if: startsWith(github.event.ref, 'refs/tags') 9 | steps: 10 | - uses: actions/checkout@v2 11 | - name: Set up Python 3.7 12 | uses: actions/setup-python@v2 13 | with: 14 | python-version: 3.7 15 | - name: Build MMSegmentation 16 | run: | 17 | pip install wheel 18 | python setup.py sdist bdist_wheel 19 | - name: Publish distribution to PyPI 20 | run: | 21 | pip install twine 22 | twine upload dist/* -u __token__ -p ${{ secrets.pypi_password }} 23 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | repos: 2 | - repo: https://gitlab.com/pycqa/flake8.git 3 | rev: 3.8.3 4 | hooks: 5 | - id: flake8 6 | - repo: https://github.com/asottile/seed-isort-config 7 | rev: v2.2.0 8 | hooks: 9 | - id: seed-isort-config 10 | - repo: https://github.com/timothycrosley/isort 11 | rev: 4.3.21 12 | hooks: 13 | - id: isort 14 | - repo: https://github.com/pre-commit/mirrors-yapf 15 | rev: v0.30.0 16 | hooks: 17 | - id: yapf 18 | - repo: https://github.com/pre-commit/pre-commit-hooks 19 | rev: v3.1.0 20 | hooks: 21 | - id: trailing-whitespace 22 | - id: check-yaml 23 | - id: end-of-file-fixer 24 | - id: requirements-txt-fixer 25 | - id: double-quote-string-fixer 26 | - id: check-merge-conflict 27 | - id: fix-encoding-pragma 28 | args: ["--remove"] 29 | - id: mixed-line-ending 30 | args: ["--fix=lf"] 31 | - repo: https://github.com/jumanjihouse/pre-commit-hooks 32 | rev: 2.1.4 33 | hooks: 34 | - id: markdownlint 35 | args: ["-r", "~MD002,~MD013,~MD029,~MD033,~MD034,~MD036"] 36 | - repo: https://github.com/myint/docformatter 37 | rev: v1.3.1 38 | hooks: 39 | - id: docformatter 40 | args: ["--in-place", "--wrap-descriptions", "79"] 41 | -------------------------------------------------------------------------------- /.readthedocs.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | 3 | python: 4 | version: 3.7 5 | install: 6 | - requirements: requirements/docs.txt 7 | - requirements: requirements/readthedocs.txt 8 | -------------------------------------------------------------------------------- /configs/_base_/datasets/cityscapes_769x769.py: -------------------------------------------------------------------------------- 1 | _base_ = './cityscapes.py' 2 | img_norm_cfg = dict( 3 | mean=[123.675, 116.28, 103.53], std=[58.395, 57.12, 57.375], to_rgb=True) 4 | crop_size = (769, 769) 5 | train_pipeline = [ 6 | dict(type='LoadImageFromFile'), 7 | dict(type='LoadAnnotations'), 8 | dict(type='Resize', img_scale=(2049, 1025), ratio_range=(0.5, 2.0)), 9 | dict(type='RandomCrop', crop_size=crop_size, cat_max_ratio=0.75), 10 | dict(type='RandomFlip', flip_ratio=0.5), 11 | dict(type='PhotoMetricDistortion'), 12 | dict(type='Normalize', **img_norm_cfg), 13 | dict(type='Pad', size=crop_size, pad_val=0, seg_pad_val=255), 14 | dict(type='DefaultFormatBundle'), 15 | dict(type='Collect', keys=['img', 'gt_semantic_seg']), 16 | ] 17 | test_pipeline = [ 18 | dict(type='LoadImageFromFile'), 19 | dict( 20 | type='MultiScaleFlipAug', 21 | img_scale=(2049, 1025), 22 | # img_ratios=[0.5, 0.75, 1.0, 1.25, 1.5, 1.75], 23 | flip=False, 24 | transforms=[ 25 | dict(type='Resize', keep_ratio=True), 26 | dict(type='RandomFlip'), 27 | dict(type='Normalize', **img_norm_cfg), 28 | dict(type='ImageToTensor', keys=['img']), 29 | dict(type='Collect', keys=['img']), 30 | ]) 31 | ] 32 | data = dict( 33 | train=dict(pipeline=train_pipeline), 34 | val=dict(pipeline=test_pipeline), 35 | test=dict(pipeline=test_pipeline)) 36 | -------------------------------------------------------------------------------- /configs/_base_/datasets/pascal_voc12_aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './pascal_voc12.py' 2 | # dataset settings 3 | data = dict( 4 | train=dict( 5 | ann_dir=['SegmentationClass', 'SegmentationClassAug'], 6 | split=[ 7 | 'ImageSets/Segmentation/train.txt', 8 | 'ImageSets/Segmentation/aug.txt' 9 | ])) 10 | -------------------------------------------------------------------------------- /configs/_base_/default_runtime.py: -------------------------------------------------------------------------------- 1 | # yapf:disable 2 | log_config = dict( 3 | interval=50, 4 | hooks=[ 5 | dict(type='TextLoggerHook', by_epoch=False), 6 | # dict(type='TensorboardLoggerHook') 7 | ]) 8 | # yapf:enable 9 | dist_params = dict(backend='nccl') 10 | log_level = 'INFO' 11 | load_from = None 12 | resume_from = None 13 | workflow = [('train', 1)] 14 | cudnn_benchmark = True 15 | -------------------------------------------------------------------------------- /configs/_base_/models/ann_r50-d8.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | pretrained='open-mmlab://resnet50_v1c', 6 | backbone=dict( 7 | type='ResNetV1c', 8 | depth=50, 9 | num_stages=4, 10 | out_indices=(0, 1, 2, 3), 11 | dilations=(1, 1, 2, 4), 12 | strides=(1, 2, 1, 1), 13 | norm_cfg=norm_cfg, 14 | norm_eval=False, 15 | style='pytorch', 16 | contract_dilation=True), 17 | decode_head=dict( 18 | type='ANNHead', 19 | in_channels=[1024, 2048], 20 | in_index=[2, 3], 21 | channels=512, 22 | project_channels=256, 23 | query_scales=(1, ), 24 | key_pool_scales=(1, 3, 6, 8), 25 | dropout_ratio=0.1, 26 | num_classes=19, 27 | norm_cfg=norm_cfg, 28 | align_corners=False, 29 | loss_decode=dict( 30 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 31 | auxiliary_head=dict( 32 | type='FCNHead', 33 | in_channels=1024, 34 | in_index=2, 35 | channels=256, 36 | num_convs=1, 37 | concat_input=False, 38 | dropout_ratio=0.1, 39 | num_classes=19, 40 | norm_cfg=norm_cfg, 41 | align_corners=False, 42 | loss_decode=dict( 43 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) 44 | # model training and testing settings 45 | train_cfg = dict() 46 | test_cfg = dict(mode='whole') 47 | -------------------------------------------------------------------------------- /configs/_base_/models/ccnet_r50-d8.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | pretrained='open-mmlab://resnet50_v1c', 6 | backbone=dict( 7 | type='ResNetV1c', 8 | depth=50, 9 | num_stages=4, 10 | out_indices=(0, 1, 2, 3), 11 | dilations=(1, 1, 2, 4), 12 | strides=(1, 2, 1, 1), 13 | norm_cfg=norm_cfg, 14 | norm_eval=False, 15 | style='pytorch', 16 | contract_dilation=True), 17 | decode_head=dict( 18 | type='CCHead', 19 | in_channels=2048, 20 | in_index=3, 21 | channels=512, 22 | recurrence=2, 23 | dropout_ratio=0.1, 24 | num_classes=19, 25 | norm_cfg=norm_cfg, 26 | align_corners=False, 27 | loss_decode=dict( 28 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 29 | auxiliary_head=dict( 30 | type='FCNHead', 31 | in_channels=1024, 32 | in_index=2, 33 | channels=256, 34 | num_convs=1, 35 | concat_input=False, 36 | dropout_ratio=0.1, 37 | num_classes=19, 38 | norm_cfg=norm_cfg, 39 | align_corners=False, 40 | loss_decode=dict( 41 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) 42 | # model training and testing settings 43 | train_cfg = dict() 44 | test_cfg = dict(mode='whole') 45 | -------------------------------------------------------------------------------- /configs/_base_/models/cgnet.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='SyncBN', eps=1e-03, requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | backbone=dict( 6 | type='CGNet', 7 | norm_cfg=norm_cfg, 8 | in_channels=3, 9 | num_channels=(32, 64, 128), 10 | num_blocks=(3, 21), 11 | dilations=(2, 4), 12 | reductions=(8, 16)), 13 | decode_head=dict( 14 | type='FCNHead', 15 | in_channels=256, 16 | in_index=2, 17 | channels=256, 18 | num_convs=0, 19 | concat_input=False, 20 | dropout_ratio=0, 21 | num_classes=19, 22 | norm_cfg=norm_cfg, 23 | loss_decode=dict( 24 | type='CrossEntropyLoss', 25 | use_sigmoid=False, 26 | loss_weight=1.0, 27 | class_weight=[ 28 | 2.5959933, 6.7415504, 3.5354059, 9.8663225, 9.690899, 9.369352, 29 | 10.289121, 9.953208, 4.3097677, 9.490387, 7.674431, 9.396905, 30 | 10.347791, 6.3927646, 10.226669, 10.241062, 10.280587, 31 | 10.396974, 10.055647 32 | ]))) 33 | # model training and testing settings 34 | train_cfg = dict(sampler=None) 35 | test_cfg = dict(mode='whole') 36 | -------------------------------------------------------------------------------- /configs/_base_/models/danet_r50-d8.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | pretrained='open-mmlab://resnet50_v1c', 6 | backbone=dict( 7 | type='ResNetV1c', 8 | depth=50, 9 | num_stages=4, 10 | out_indices=(0, 1, 2, 3), 11 | dilations=(1, 1, 2, 4), 12 | strides=(1, 2, 1, 1), 13 | norm_cfg=norm_cfg, 14 | norm_eval=False, 15 | style='pytorch', 16 | contract_dilation=True), 17 | decode_head=dict( 18 | type='DAHead', 19 | in_channels=2048, 20 | in_index=3, 21 | channels=512, 22 | pam_channels=64, 23 | dropout_ratio=0.1, 24 | num_classes=19, 25 | norm_cfg=norm_cfg, 26 | align_corners=False, 27 | loss_decode=dict( 28 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 29 | auxiliary_head=dict( 30 | type='FCNHead', 31 | in_channels=1024, 32 | in_index=2, 33 | channels=256, 34 | num_convs=1, 35 | concat_input=False, 36 | dropout_ratio=0.1, 37 | num_classes=19, 38 | norm_cfg=norm_cfg, 39 | align_corners=False, 40 | loss_decode=dict( 41 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) 42 | # model training and testing settings 43 | train_cfg = dict() 44 | test_cfg = dict(mode='whole') 45 | -------------------------------------------------------------------------------- /configs/_base_/models/deeplabv3_r50-d8.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | pretrained='open-mmlab://resnet50_v1c', 6 | backbone=dict( 7 | type='ResNetV1c', 8 | depth=50, 9 | num_stages=4, 10 | out_indices=(0, 1, 2, 3), 11 | dilations=(1, 1, 2, 4), 12 | strides=(1, 2, 1, 1), 13 | norm_cfg=norm_cfg, 14 | norm_eval=False, 15 | style='pytorch', 16 | contract_dilation=True), 17 | decode_head=dict( 18 | type='ASPPHead', 19 | in_channels=2048, 20 | in_index=3, 21 | channels=512, 22 | dilations=(1, 12, 24, 36), 23 | dropout_ratio=0.1, 24 | num_classes=19, 25 | norm_cfg=norm_cfg, 26 | align_corners=False, 27 | loss_decode=dict( 28 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 29 | auxiliary_head=dict( 30 | type='FCNHead', 31 | in_channels=1024, 32 | in_index=2, 33 | channels=256, 34 | num_convs=1, 35 | concat_input=False, 36 | dropout_ratio=0.1, 37 | num_classes=19, 38 | norm_cfg=norm_cfg, 39 | align_corners=False, 40 | loss_decode=dict( 41 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) 42 | # model training and testing settings 43 | train_cfg = dict() 44 | test_cfg = dict(mode='whole') 45 | -------------------------------------------------------------------------------- /configs/_base_/models/deeplabv3plus_r50-d8.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='BN', requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | pretrained='open-mmlab://resnet50_v1c', 6 | backbone=dict( 7 | type='ResNetV1c', 8 | depth=50, 9 | num_stages=4, 10 | out_indices=(0, 1, 2, 3), 11 | dilations=(1, 1, 2, 4), 12 | strides=(1, 2, 1, 1), 13 | norm_cfg=norm_cfg, 14 | norm_eval=False, 15 | style='pytorch', 16 | contract_dilation=True), 17 | decode_head=dict( 18 | type='DepthwiseSeparableASPPHead', 19 | in_channels=2048, 20 | in_index=3, 21 | channels=512, 22 | dilations=(1, 12, 24, 36), 23 | c1_in_channels=256, 24 | c1_channels=48, 25 | dropout_ratio=0.1, 26 | num_classes=19, 27 | norm_cfg=norm_cfg, 28 | align_corners=False, 29 | loss_decode=dict( 30 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 31 | auxiliary_head=dict( 32 | type='FCNHead', 33 | in_channels=1024, 34 | in_index=2, 35 | channels=256, 36 | num_convs=1, 37 | concat_input=False, 38 | dropout_ratio=0.1, 39 | num_classes=19, 40 | norm_cfg=norm_cfg, 41 | align_corners=False, 42 | loss_decode=dict( 43 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) 44 | # model training and testing settings 45 | train_cfg = dict() 46 | test_cfg = dict(mode='whole') 47 | -------------------------------------------------------------------------------- /configs/_base_/models/dnl_r50-d8.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | pretrained='open-mmlab://resnet50_v1c', 6 | backbone=dict( 7 | type='ResNetV1c', 8 | depth=50, 9 | num_stages=4, 10 | out_indices=(0, 1, 2, 3), 11 | dilations=(1, 1, 2, 4), 12 | strides=(1, 2, 1, 1), 13 | norm_cfg=norm_cfg, 14 | norm_eval=False, 15 | style='pytorch', 16 | contract_dilation=True), 17 | decode_head=dict( 18 | type='DNLHead', 19 | in_channels=2048, 20 | in_index=3, 21 | channels=512, 22 | dropout_ratio=0.1, 23 | reduction=2, 24 | use_scale=True, 25 | mode='embedded_gaussian', 26 | num_classes=19, 27 | norm_cfg=norm_cfg, 28 | align_corners=False, 29 | loss_decode=dict( 30 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 31 | auxiliary_head=dict( 32 | type='FCNHead', 33 | in_channels=1024, 34 | in_index=2, 35 | channels=256, 36 | num_convs=1, 37 | concat_input=False, 38 | dropout_ratio=0.1, 39 | num_classes=19, 40 | norm_cfg=norm_cfg, 41 | align_corners=False, 42 | loss_decode=dict( 43 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) 44 | # model training and testing settings 45 | train_cfg = dict() 46 | test_cfg = dict(mode='whole') 47 | -------------------------------------------------------------------------------- /configs/_base_/models/emanet_r50-d8.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | pretrained='open-mmlab://resnet50_v1c', 6 | backbone=dict( 7 | type='ResNetV1c', 8 | depth=50, 9 | num_stages=4, 10 | out_indices=(0, 1, 2, 3), 11 | dilations=(1, 1, 2, 4), 12 | strides=(1, 2, 1, 1), 13 | norm_cfg=norm_cfg, 14 | norm_eval=False, 15 | style='pytorch', 16 | contract_dilation=True), 17 | decode_head=dict( 18 | type='EMAHead', 19 | in_channels=2048, 20 | in_index=3, 21 | channels=256, 22 | ema_channels=512, 23 | num_bases=64, 24 | num_stages=3, 25 | momentum=0.1, 26 | dropout_ratio=0.1, 27 | num_classes=19, 28 | norm_cfg=norm_cfg, 29 | align_corners=False, 30 | loss_decode=dict( 31 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 32 | auxiliary_head=dict( 33 | type='FCNHead', 34 | in_channels=1024, 35 | in_index=2, 36 | channels=256, 37 | num_convs=1, 38 | concat_input=False, 39 | dropout_ratio=0.1, 40 | num_classes=19, 41 | norm_cfg=norm_cfg, 42 | align_corners=False, 43 | loss_decode=dict( 44 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) 45 | # model training and testing settings 46 | train_cfg = dict() 47 | test_cfg = dict(mode='whole') 48 | -------------------------------------------------------------------------------- /configs/_base_/models/fcn_r50-d8.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | pretrained='open-mmlab://resnet50_v1c', 6 | backbone=dict( 7 | type='ResNetV1c', 8 | depth=50, 9 | num_stages=4, 10 | out_indices=(0, 1, 2, 3), 11 | dilations=(1, 1, 2, 4), 12 | strides=(1, 2, 1, 1), 13 | norm_cfg=norm_cfg, 14 | norm_eval=False, 15 | style='pytorch', 16 | contract_dilation=True), 17 | decode_head=dict( 18 | type='FCNHead', 19 | in_channels=2048, 20 | in_index=3, 21 | channels=512, 22 | num_convs=2, 23 | concat_input=True, 24 | dropout_ratio=0.1, 25 | num_classes=19, 26 | norm_cfg=norm_cfg, 27 | align_corners=False, 28 | loss_decode=dict( 29 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 30 | auxiliary_head=dict( 31 | type='FCNHead', 32 | in_channels=1024, 33 | in_index=2, 34 | channels=256, 35 | num_convs=1, 36 | concat_input=False, 37 | dropout_ratio=0.1, 38 | num_classes=19, 39 | norm_cfg=norm_cfg, 40 | align_corners=False, 41 | loss_decode=dict( 42 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) 43 | # model training and testing settings 44 | train_cfg = dict() 45 | test_cfg = dict(mode='whole') 46 | -------------------------------------------------------------------------------- /configs/_base_/models/fpn_r50.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | pretrained='open-mmlab://resnet50_v1c', 6 | backbone=dict( 7 | type='ResNetV1c', 8 | depth=50, 9 | num_stages=4, 10 | out_indices=(0, 1, 2, 3), 11 | dilations=(1, 1, 1, 1), 12 | strides=(1, 2, 2, 2), 13 | norm_cfg=norm_cfg, 14 | norm_eval=False, 15 | style='pytorch', 16 | contract_dilation=True), 17 | neck=dict( 18 | type='FPN', 19 | in_channels=[256, 512, 1024, 2048], 20 | out_channels=256, 21 | num_outs=4), 22 | decode_head=dict( 23 | type='FPNHead', 24 | in_channels=[256, 256, 256, 256], 25 | in_index=[0, 1, 2, 3], 26 | feature_strides=[4, 8, 16, 32], 27 | channels=128, 28 | dropout_ratio=0.1, 29 | num_classes=19, 30 | norm_cfg=norm_cfg, 31 | align_corners=False, 32 | loss_decode=dict( 33 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0))) 34 | # model training and testing settings 35 | train_cfg = dict() 36 | test_cfg = dict(mode='whole') 37 | -------------------------------------------------------------------------------- /configs/_base_/models/gcnet_r50-d8.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | pretrained='open-mmlab://resnet50_v1c', 6 | backbone=dict( 7 | type='ResNetV1c', 8 | depth=50, 9 | num_stages=4, 10 | out_indices=(0, 1, 2, 3), 11 | dilations=(1, 1, 2, 4), 12 | strides=(1, 2, 1, 1), 13 | norm_cfg=norm_cfg, 14 | norm_eval=False, 15 | style='pytorch', 16 | contract_dilation=True), 17 | decode_head=dict( 18 | type='GCHead', 19 | in_channels=2048, 20 | in_index=3, 21 | channels=512, 22 | ratio=1 / 4., 23 | pooling_type='att', 24 | fusion_types=('channel_add', ), 25 | dropout_ratio=0.1, 26 | num_classes=19, 27 | norm_cfg=norm_cfg, 28 | align_corners=False, 29 | loss_decode=dict( 30 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 31 | auxiliary_head=dict( 32 | type='FCNHead', 33 | in_channels=1024, 34 | in_index=2, 35 | channels=256, 36 | num_convs=1, 37 | concat_input=False, 38 | dropout_ratio=0.1, 39 | num_classes=19, 40 | norm_cfg=norm_cfg, 41 | align_corners=False, 42 | loss_decode=dict( 43 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) 44 | # model training and testing settings 45 | train_cfg = dict() 46 | test_cfg = dict(mode='whole') 47 | -------------------------------------------------------------------------------- /configs/_base_/models/nonlocal_r50-d8.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | pretrained='open-mmlab://resnet50_v1c', 6 | backbone=dict( 7 | type='ResNetV1c', 8 | depth=50, 9 | num_stages=4, 10 | out_indices=(0, 1, 2, 3), 11 | dilations=(1, 1, 2, 4), 12 | strides=(1, 2, 1, 1), 13 | norm_cfg=norm_cfg, 14 | norm_eval=False, 15 | style='pytorch', 16 | contract_dilation=True), 17 | decode_head=dict( 18 | type='NLHead', 19 | in_channels=2048, 20 | in_index=3, 21 | channels=512, 22 | dropout_ratio=0.1, 23 | reduction=2, 24 | use_scale=True, 25 | mode='embedded_gaussian', 26 | num_classes=19, 27 | norm_cfg=norm_cfg, 28 | align_corners=False, 29 | loss_decode=dict( 30 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 31 | auxiliary_head=dict( 32 | type='FCNHead', 33 | in_channels=1024, 34 | in_index=2, 35 | channels=256, 36 | num_convs=1, 37 | concat_input=False, 38 | dropout_ratio=0.1, 39 | num_classes=19, 40 | norm_cfg=norm_cfg, 41 | align_corners=False, 42 | loss_decode=dict( 43 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) 44 | # model training and testing settings 45 | train_cfg = dict() 46 | test_cfg = dict(mode='whole') 47 | -------------------------------------------------------------------------------- /configs/_base_/models/pspnet_r50-d8.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | pretrained='open-mmlab://resnet50_v1c', 6 | backbone=dict( 7 | type='ResNetV1c', 8 | depth=50, 9 | num_stages=4, 10 | out_indices=(0, 1, 2, 3), 11 | dilations=(1, 1, 2, 4), 12 | strides=(1, 2, 1, 1), 13 | norm_cfg=norm_cfg, 14 | norm_eval=False, 15 | style='pytorch', 16 | contract_dilation=True), 17 | decode_head=dict( 18 | type='PSPHead', 19 | in_channels=2048, 20 | in_index=3, 21 | channels=512, 22 | pool_scales=(1, 2, 3, 6), 23 | dropout_ratio=0.1, 24 | num_classes=19, 25 | norm_cfg=norm_cfg, 26 | align_corners=False, 27 | loss_decode=dict( 28 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 29 | auxiliary_head=dict( 30 | type='FCNHead', 31 | in_channels=1024, 32 | in_index=2, 33 | channels=256, 34 | num_convs=1, 35 | concat_input=False, 36 | dropout_ratio=0.1, 37 | num_classes=19, 38 | norm_cfg=norm_cfg, 39 | align_corners=False, 40 | loss_decode=dict( 41 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) 42 | # model training and testing settings 43 | train_cfg = dict() 44 | test_cfg = dict(mode='whole') 45 | -------------------------------------------------------------------------------- /configs/_base_/models/upernet_r50.py: -------------------------------------------------------------------------------- 1 | # model settings 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | type='EncoderDecoder', 5 | pretrained='open-mmlab://resnet50_v1c', 6 | backbone=dict( 7 | type='ResNetV1c', 8 | depth=50, 9 | num_stages=4, 10 | out_indices=(0, 1, 2, 3), 11 | dilations=(1, 1, 1, 1), 12 | strides=(1, 2, 2, 2), 13 | norm_cfg=norm_cfg, 14 | norm_eval=False, 15 | style='pytorch', 16 | contract_dilation=True), 17 | decode_head=dict( 18 | type='UPerHead', 19 | in_channels=[256, 512, 1024, 2048], 20 | in_index=[0, 1, 2, 3], 21 | pool_scales=(1, 2, 3, 6), 22 | channels=512, 23 | dropout_ratio=0.1, 24 | num_classes=19, 25 | norm_cfg=norm_cfg, 26 | align_corners=False, 27 | loss_decode=dict( 28 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 29 | auxiliary_head=dict( 30 | type='FCNHead', 31 | in_channels=1024, 32 | in_index=2, 33 | channels=256, 34 | num_convs=1, 35 | concat_input=False, 36 | dropout_ratio=0.1, 37 | num_classes=19, 38 | norm_cfg=norm_cfg, 39 | align_corners=False, 40 | loss_decode=dict( 41 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4))) 42 | # model training and testing settings 43 | train_cfg = dict() 44 | test_cfg = dict(mode='whole') 45 | -------------------------------------------------------------------------------- /configs/_base_/schedules/schedule_160k.py: -------------------------------------------------------------------------------- 1 | # optimizer 2 | optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005) 3 | optimizer_config = dict() 4 | # learning policy 5 | lr_config = dict(policy='poly', power=0.9, min_lr=1e-4, by_epoch=False) 6 | # runtime settings 7 | runner = dict(type='IterBasedRunner', max_iters=160000) 8 | checkpoint_config = dict(by_epoch=False, interval=16000) 9 | evaluation = dict(interval=8000, metric='mIoU') 10 | -------------------------------------------------------------------------------- /configs/_base_/schedules/schedule_20k.py: -------------------------------------------------------------------------------- 1 | # optimizer 2 | optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005) 3 | optimizer_config = dict() 4 | # learning policy 5 | lr_config = dict(policy='poly', power=0.9, min_lr=1e-4, by_epoch=False) 6 | # runtime settings 7 | runner = dict(type='IterBasedRunner', max_iters=20000) 8 | checkpoint_config = dict(by_epoch=False, interval=2000) 9 | evaluation = dict(interval=2000, metric='mIoU') 10 | -------------------------------------------------------------------------------- /configs/_base_/schedules/schedule_240k.py: -------------------------------------------------------------------------------- 1 | # optimizer 2 | optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005) 3 | optimizer_config = dict() 4 | # learning policy 5 | lr_config = dict(policy='poly', power=0.9, min_lr=1e-4, by_epoch=False) 6 | # runtime settings 7 | runner = dict(type='IterBasedRunner', max_iters=240000) 8 | checkpoint_config = dict(by_epoch=False, interval=16000) 9 | evaluation = dict(interval=8000, metric='mIoU') 10 | -------------------------------------------------------------------------------- /configs/_base_/schedules/schedule_40k.py: -------------------------------------------------------------------------------- 1 | # optimizer 2 | optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005) 3 | optimizer_config = dict() 4 | # learning policy 5 | lr_config = dict(policy='poly', power=0.9, min_lr=1e-4, by_epoch=False) 6 | # runtime settings 7 | runner = dict(type='IterBasedRunner', max_iters=40000) 8 | checkpoint_config = dict(by_epoch=False, interval=4000) 9 | evaluation = dict(interval=4000, metric='mIoU') 10 | -------------------------------------------------------------------------------- /configs/_base_/schedules/schedule_80k.py: -------------------------------------------------------------------------------- 1 | # optimizer 2 | optimizer = dict(type='SGD', lr=0.01, momentum=0.9, weight_decay=0.0005) 3 | optimizer_config = dict() 4 | # learning policy 5 | lr_config = dict(policy='poly', power=0.9, min_lr=1e-4, by_epoch=False) 6 | # runtime settings 7 | runner = dict(type='IterBasedRunner', max_iters=80000) 8 | checkpoint_config = dict(by_epoch=False, interval=16000) 9 | evaluation = dict(interval=8000, metric='mIoU') 10 | -------------------------------------------------------------------------------- /configs/ann/ann_r101-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './ann_r50-d8_512x1024_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ann/ann_r101-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './ann_r50-d8_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ann/ann_r101-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './ann_r50-d8_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ann/ann_r101-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './ann_r50-d8_512x512_20k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ann/ann_r101-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './ann_r50-d8_512x512_40k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ann/ann_r101-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './ann_r50-d8_512x512_80k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ann/ann_r101-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './ann_r50-d8_769x769_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ann/ann_r101-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './ann_r50-d8_769x769_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ann/ann_r50-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ann_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/ann/ann_r50-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ann_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/ann/ann_r50-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ann_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/ann/ann_r50-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ann_r50-d8.py', '../_base_/datasets/pascal_voc12_aug.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_20k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 7 | -------------------------------------------------------------------------------- /configs/ann/ann_r50-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ann_r50-d8.py', '../_base_/datasets/pascal_voc12_aug.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 7 | -------------------------------------------------------------------------------- /configs/ann/ann_r50-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ann_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/ann/ann_r50-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ann_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/ann/ann_r50-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ann_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r101-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './ccnet_r50-d8_512x1024_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r101-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './ccnet_r50-d8_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r101-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './ccnet_r50-d8_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r101-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './ccnet_r50-d8_512x512_20k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r101-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './ccnet_r50-d8_512x512_40k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r101-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './ccnet_r50-d8_512x512_80k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r101-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './ccnet_r50-d8_769x769_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r101-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './ccnet_r50-d8_769x769_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r50-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ccnet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r50-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ccnet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r50-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ccnet_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r50-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ccnet_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_20k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r50-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ccnet_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r50-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ccnet_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r50-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ccnet_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/ccnet/ccnet_r50-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ccnet_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/danet/danet_r101-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './danet_r50-d8_512x1024_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/danet/danet_r101-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './danet_r50-d8_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/danet/danet_r101-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './danet_r50-d8_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/danet/danet_r101-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './danet_r50-d8_512x512_20k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/danet/danet_r101-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './danet_r50-d8_512x512_40k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/danet/danet_r101-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './danet_r50-d8_512x512_80k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/danet/danet_r101-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './danet_r50-d8_769x769_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/danet/danet_r101-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './danet_r50-d8_769x769_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/danet/danet_r50-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/danet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/danet/danet_r50-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/danet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/danet/danet_r50-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/danet_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/danet/danet_r50-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/danet_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_20k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/danet/danet_r50-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/danet_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/danet/danet_r50-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/danet_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/danet/danet_r50-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/danet_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/danet/danet_r50-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/danet_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3_r50-d8_512x1024_40k_cityscapes.py' 2 | model = dict( 3 | pretrained='open-mmlab://resnet101_v1c', 4 | backbone=dict( 5 | depth=101, 6 | dilations=(1, 1, 1, 2), 7 | strides=(1, 2, 2, 1), 8 | multi_grid=(1, 2, 4)), 9 | decode_head=dict( 10 | dilations=(1, 6, 12, 18), 11 | sampler=dict(type='OHEMPixelSampler', min_kept=100000))) 12 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r101-d16-mg124_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3_r50-d8_512x1024_80k_cityscapes.py' 2 | model = dict( 3 | pretrained='open-mmlab://resnet101_v1c', 4 | backbone=dict( 5 | depth=101, 6 | dilations=(1, 1, 1, 2), 7 | strides=(1, 2, 2, 1), 8 | multi_grid=(1, 2, 4)), 9 | decode_head=dict( 10 | dilations=(1, 6, 12, 18), 11 | sampler=dict(type='OHEMPixelSampler', min_kept=100000))) 12 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r101-d8_480x480_40k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3_r50-d8_480x480_40k_pascal_context.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r101-d8_480x480_80k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3_r50-d8_480x480_80k_pascal_context.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r101-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3_r50-d8_512x1024_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3_r50-d8_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3_r50-d8_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r101-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3_r50-d8_512x512_20k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r101-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3_r50-d8_512x512_40k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r101-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3_r50-d8_512x512_80k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r101-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3_r50-d8_769x769_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r101-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3_r50-d8_769x769_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r50-d8_480x480_40k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3_r50-d8.py', 3 | '../_base_/datasets/pascal_context.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=60), auxiliary_head=dict(num_classes=60)) 8 | test_cfg = dict(mode='slide', crop_size=(480, 480), stride=(320, 320)) 9 | optimizer = dict(type='SGD', lr=0.004, momentum=0.9, weight_decay=0.0001) 10 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r50-d8_480x480_80k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3_r50-d8.py', 3 | '../_base_/datasets/pascal_context.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=60), auxiliary_head=dict(num_classes=60)) 8 | test_cfg = dict(mode='slide', crop_size=(480, 480), stride=(320, 320)) 9 | optimizer = dict(type='SGD', lr=0.004, momentum=0.9, weight_decay=0.0001) 10 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r50-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r50-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r50-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | test_cfg = dict(mode='whole') 8 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r50-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_20k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r50-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r50-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | test_cfg = dict(mode='whole') 8 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r50-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/deeplabv3/deeplabv3_r50-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_240k_potsdam.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3plus_r50-d8_512x512_240k_potsdam.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_hengyang.py: -------------------------------------------------------------------------------- 1 | _base_ = './deeplabv3plus_r50-d8_512x512_80k_hengyang.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/deeplabv3plus/deeplabv3plus_r101-d8_512x512_80k_hengyang_boundary_loss.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3plus_r50-d8_boundary_loss.py', '../_base_/datasets/hengyang_600_normal.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=2), auxiliary_head=dict(num_classes=2)) 7 | test_cfg = dict(mode='whole') -------------------------------------------------------------------------------- /configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_240k_potsdam.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3plus_r50-d8.py', '../_base_/datasets/potsdam_600_normal.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_240k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=5), auxiliary_head=dict(num_classes=5)) 7 | test_cfg = dict(mode='whole') 8 | -------------------------------------------------------------------------------- /configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_hengyang.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3plus_r50-d8.py', '../_base_/datasets/hengyang_600_normal.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=2), auxiliary_head=dict(num_classes=2)) 7 | test_cfg = dict(mode='whole') 8 | -------------------------------------------------------------------------------- /configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3plus_r50-d8.py', '../_base_/datasets/potsdam_600.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=5), auxiliary_head=dict(num_classes=5)) 7 | test_cfg = dict(mode='whole') 8 | -------------------------------------------------------------------------------- /configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam_boundary_loss.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3plus_r50-d8_boundary_loss.py', '../_base_/datasets/potsdam_600.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=5), auxiliary_head=dict(num_classes=5)) 7 | test_cfg = dict(mode='whole') -------------------------------------------------------------------------------- /configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam_boundary_loss_viz.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3plus_r50-d8_boundary_loss.py', '../_base_/datasets/potsdam_600_viz.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | type='EncoderDecoderViz', 7 | decode_head=dict(num_classes=5), auxiliary_head=dict(num_classes=5) 8 | ) 9 | test_cfg = dict(mode='whole') 10 | optimizer = dict(type='SGD', lr=1.1e-4, momentum=0.9, weight_decay=0.0005) -------------------------------------------------------------------------------- /configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam_viz.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3plus_r50-d8.py', '../_base_/datasets/potsdam_600_viz.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | type='EncoderDecoderViz', 7 | decode_head=dict(num_classes=5), auxiliary_head=dict(num_classes=5) 8 | ) 9 | test_cfg = dict(mode='whole') 10 | optimizer = dict(type='SGD', lr=1.1e-4, momentum=0.9, weight_decay=0.0005) -------------------------------------------------------------------------------- /configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_vaihingen.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3plus_r50-d8.py', '../_base_/datasets/vaihingen_600.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=5), auxiliary_head=dict(num_classes=5)) 7 | test_cfg = dict(mode='whole') 8 | -------------------------------------------------------------------------------- /configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_vaihingen_boundary_loss.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3plus_r50-d8_boundary_loss.py', '../_base_/datasets/vaihingen_600.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=5), auxiliary_head=dict(num_classes=5)) 7 | test_cfg = dict(mode='whole') -------------------------------------------------------------------------------- /configs/deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_vaihingen_viz.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/deeplabv3plus_r50-d8.py', '../_base_/datasets/vaihingen_600_viz.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=5), auxiliary_head=dict(num_classes=5)) 7 | test_cfg = dict(mode='whole') 8 | -------------------------------------------------------------------------------- /configs/dnlnet/dnl_r101-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './dnl_r50-d8_512x1024_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/dnlnet/dnl_r101-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './dnl_r50-d8_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/dnlnet/dnl_r101-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './dnl_r50-d8_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/dnlnet/dnl_r101-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './dnl_r50-d8_512x512_80k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/dnlnet/dnl_r101-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './dnl_r50-d8_769x769_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/dnlnet/dnl_r101-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './dnl_r50-d8_769x769_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/dnlnet/dnl_r50-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/dnl_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/dnlnet/dnl_r50-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/dnl_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/dnlnet/dnl_r50-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/dnl_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/dnlnet/dnl_r50-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/dnl_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/dnlnet/dnl_r50-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/dnl_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/dnlnet/dnl_r50-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/dnl_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | optimizer = dict( 11 | paramwise_cfg=dict( 12 | custom_keys=dict(theta=dict(wd_mult=0.), phi=dict(wd_mult=0.)))) 13 | -------------------------------------------------------------------------------- /configs/emanet/emanet_r101-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './emanet_r50-d8_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/emanet/emanet_r101-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './emanet_r50-d8_769x769_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/emanet/emanet_r50-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/emanet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/emanet/emanet_r50-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/emanet_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r101-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './encnet_r50-d8_512x1024_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r101-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './encnet_r50-d8_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r101-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './encnet_r50-d8_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r101-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './encnet_r50-d8_512x512_20k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r101-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './encnet_r50-d8_512x512_40k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r101-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './encnet_r50-d8_512x512_80k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r101-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './encnet_r50-d8_769x769_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r101-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './encnet_r50-d8_769x769_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r50-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/encnet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r50-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/encnet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r50-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/encnet_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r50-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/encnet_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_20k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r50-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/encnet_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r50-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/encnet_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r50-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/encnet_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r50-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/encnet_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/encnet/encnet_r50s-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/encnet_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | backbone=dict(stem_channels=128), 7 | decode_head=dict(num_classes=150), 8 | auxiliary_head=dict(num_classes=150)) 9 | -------------------------------------------------------------------------------- /configs/fastscnn/README.md: -------------------------------------------------------------------------------- 1 | # Fast-SCNN for Semantic Segmentation 2 | 3 | ## Introduction 4 | 5 | ```latex 6 | @article{poudel2019fast, 7 | title={Fast-scnn: Fast semantic segmentation network}, 8 | author={Poudel, Rudra PK and Liwicki, Stephan and Cipolla, Roberto}, 9 | journal={arXiv preprint arXiv:1902.04502}, 10 | year={2019} 11 | } 12 | ``` 13 | 14 | ## Results and models 15 | 16 | ### Cityscapes 17 | 18 | | Method | Backbone | Crop Size | Lr schd | Mem (GB) | Inf time (fps) | mIoU | mIoU(ms+flip) | download | 19 | |------------|-----------|-----------|--------:|----------|----------------|------:|---------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| 20 | | Fast-SCNN | Fast-SCNN | 512x1024 | 80000 | 8.4 | 63.61 | 69.06 | - | [model](https://download.openmmlab.com/mmsegmentation/v0.5/fast_scnn/fast_scnn_4x8_80k_lr0.12_cityscapes-f5096c79.pth) | [log](https://download.openmmlab.com/mmsegmentation/v0.5/fast_scnn/fast_scnn_4x8_80k_lr0.12_cityscapes-20200807_165744.log.json) | 21 | -------------------------------------------------------------------------------- /configs/fastscnn/fast_scnn_4x8_80k_lr0.12_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fast_scnn.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | 6 | # Re-config the data sampler. 7 | data = dict(samples_per_gpu=8, workers_per_gpu=4) 8 | 9 | # Re-config the optimizer. 10 | optimizer = dict(type='SGD', lr=0.12, momentum=0.9, weight_decay=4e-5) 11 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r101-d8_480x480_40k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_r50-d8_480x480_40k_pascal_context.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r101-d8_480x480_80k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_r50-d8_480x480_80k_pascal_context.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r101-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_r50-d8_512x1024_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r101-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_r50-d8_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r101-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_r50-d8_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r101-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_r50-d8_512x512_20k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r101-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_r50-d8_512x512_40k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r101-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_r50-d8_512x512_80k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r101-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_r50-d8_769x769_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r101-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_r50-d8_769x769_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r50-d8_480x480_40k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/pascal_context.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | model = dict(decode_head=dict(num_classes=60)) 6 | test_cfg = dict(mode='slide', crop_size=(480, 480), stride=(320, 320)) 7 | optimizer = dict(type='SGD', lr=0.004, momentum=0.9, weight_decay=0.0001) 8 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r50-d8_480x480_80k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/pascal_context.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict(decode_head=dict(num_classes=60)) 6 | test_cfg = dict(mode='slide', crop_size=(480, 480), stride=(320, 320)) 7 | optimizer = dict(type='SGD', lr=0.004, momentum=0.9, weight_decay=0.0001) 8 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r50-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r50-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r50-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | test_cfg = dict(mode='whole') 8 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r50-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/pascal_voc12_aug.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_20k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 7 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r50-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/pascal_voc12_aug.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 7 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r50-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | test_cfg = dict(mode='whole') 8 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r50-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/fcn/fcn_r50-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/fp16/deeplabv3_r101-d8_512x1024_80k_fp16_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes.py' 2 | # fp16 settings 3 | optimizer_config = dict(type='Fp16OptimizerHook', loss_scale=512.) 4 | -------------------------------------------------------------------------------- /configs/fp16/deeplabv3plus_r101-d8_512x1024_80k_fp16_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes.py' 2 | # fp16 settings 3 | optimizer_config = dict(type='Fp16OptimizerHook', loss_scale=512.) 4 | -------------------------------------------------------------------------------- /configs/fp16/fcn_r101-d8_512x1024_80k_fp16_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = '../fcn/fcn_r101-d8_512x1024_80k_cityscapes.py' 2 | # fp16 settings 3 | optimizer_config = dict(type='Fp16OptimizerHook', loss_scale=512.) 4 | -------------------------------------------------------------------------------- /configs/fp16/pspnet_r101-d8_512x1024_80k_fp16_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = '../pspnet/pspnet_r101-d8_512x1024_80k_cityscapes.py' 2 | # fp16 settings 3 | optimizer_config = dict(type='Fp16OptimizerHook', loss_scale=512.) 4 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r101-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './gcnet_r50-d8_512x1024_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r101-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './gcnet_r50-d8_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r101-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './gcnet_r50-d8_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r101-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './gcnet_r50-d8_512x512_20k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r101-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './gcnet_r50-d8_512x512_40k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r101-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './gcnet_r50-d8_512x512_80k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r101-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './gcnet_r50-d8_769x769_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r101-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './gcnet_r50-d8_769x769_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r50-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/gcnet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r50-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/gcnet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r50-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/gcnet_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r50-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/gcnet_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_20k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r50-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/gcnet_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r50-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/gcnet_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r50-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/gcnet_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/gcnet/gcnet_r50-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/gcnet_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18_480x480_40k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_hr18.py', '../_base_/datasets/pascal_context.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | model = dict(decode_head=dict(num_classes=60)) 6 | test_cfg = dict(mode='slide', crop_size=(480, 480), stride=(320, 320)) 7 | optimizer = dict(type='SGD', lr=0.004, momentum=0.9, weight_decay=0.0001) 8 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18_480x480_80k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_hr18.py', '../_base_/datasets/pascal_context.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict(decode_head=dict(num_classes=60)) 6 | test_cfg = dict(mode='slide', crop_size=(480, 480), stride=(320, 320)) 7 | optimizer = dict(type='SGD', lr=0.004, momentum=0.9, weight_decay=0.0001) 8 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18_512x1024_160k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_hr18.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_hr18.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_hr18.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_hr18.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict(decode_head=dict(num_classes=150)) 6 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_hr18.py', '../_base_/datasets/pascal_voc12_aug.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_20k.py' 4 | ] 5 | model = dict(decode_head=dict(num_classes=21)) 6 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_hr18.py', '../_base_/datasets/pascal_voc12_aug.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | model = dict(decode_head=dict(num_classes=21)) 6 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fcn_hr18.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict(decode_head=dict(num_classes=150)) 6 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18s_480x480_40k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_480x480_40k_pascal_context.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18s_480x480_80k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_480x480_80k_pascal_context.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18s_512x1024_160k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x1024_160k_cityscapes.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18s_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x1024_40k_cityscapes.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18s_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x1024_80k_cityscapes.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18s_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x512_160k_ade20k.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18s_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x512_20k_voc12aug.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18s_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x512_40k_voc12aug.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr18s_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x512_80k_ade20k.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr48_480x480_40k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_480x480_40k_pascal_context.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w48', 4 | backbone=dict( 5 | extra=dict( 6 | stage2=dict(num_channels=(48, 96)), 7 | stage3=dict(num_channels=(48, 96, 192)), 8 | stage4=dict(num_channels=(48, 96, 192, 384)))), 9 | decode_head=dict( 10 | in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) 11 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr48_480x480_80k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_480x480_80k_pascal_context.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w48', 4 | backbone=dict( 5 | extra=dict( 6 | stage2=dict(num_channels=(48, 96)), 7 | stage3=dict(num_channels=(48, 96, 192)), 8 | stage4=dict(num_channels=(48, 96, 192, 384)))), 9 | decode_head=dict( 10 | in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) 11 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr48_512x1024_160k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x1024_160k_cityscapes.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w48', 4 | backbone=dict( 5 | extra=dict( 6 | stage2=dict(num_channels=(48, 96)), 7 | stage3=dict(num_channels=(48, 96, 192)), 8 | stage4=dict(num_channels=(48, 96, 192, 384)))), 9 | decode_head=dict( 10 | in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) 11 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr48_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x1024_40k_cityscapes.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w48', 4 | backbone=dict( 5 | extra=dict( 6 | stage2=dict(num_channels=(48, 96)), 7 | stage3=dict(num_channels=(48, 96, 192)), 8 | stage4=dict(num_channels=(48, 96, 192, 384)))), 9 | decode_head=dict( 10 | in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) 11 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr48_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x1024_80k_cityscapes.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w48', 4 | backbone=dict( 5 | extra=dict( 6 | stage2=dict(num_channels=(48, 96)), 7 | stage3=dict(num_channels=(48, 96, 192)), 8 | stage4=dict(num_channels=(48, 96, 192, 384)))), 9 | decode_head=dict( 10 | in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) 11 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr48_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x512_160k_ade20k.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w48', 4 | backbone=dict( 5 | extra=dict( 6 | stage2=dict(num_channels=(48, 96)), 7 | stage3=dict(num_channels=(48, 96, 192)), 8 | stage4=dict(num_channels=(48, 96, 192, 384)))), 9 | decode_head=dict( 10 | in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) 11 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr48_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x512_20k_voc12aug.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w48', 4 | backbone=dict( 5 | extra=dict( 6 | stage2=dict(num_channels=(48, 96)), 7 | stage3=dict(num_channels=(48, 96, 192)), 8 | stage4=dict(num_channels=(48, 96, 192, 384)))), 9 | decode_head=dict( 10 | in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) 11 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr48_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x512_40k_voc12aug.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w48', 4 | backbone=dict( 5 | extra=dict( 6 | stage2=dict(num_channels=(48, 96)), 7 | stage3=dict(num_channels=(48, 96, 192)), 8 | stage4=dict(num_channels=(48, 96, 192, 384)))), 9 | decode_head=dict( 10 | in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) 11 | -------------------------------------------------------------------------------- /configs/hrnet/fcn_hr48_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './fcn_hr18_512x512_80k_ade20k.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w48', 4 | backbone=dict( 5 | extra=dict( 6 | stage2=dict(num_channels=(48, 96)), 7 | stage3=dict(num_channels=(48, 96, 192)), 8 | stage4=dict(num_channels=(48, 96, 192, 384)))), 9 | decode_head=dict( 10 | in_channels=[48, 96, 192, 384], channels=sum([48, 96, 192, 384]))) 11 | -------------------------------------------------------------------------------- /configs/mobilenet_v2/deeplabv3_m-v2-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3/deeplabv3_r101-d8_512x1024_80k_cityscapes.py' 2 | model = dict( 3 | pretrained='mmcls://mobilenet_v2', 4 | backbone=dict( 5 | _delete_=True, 6 | type='MobileNetV2', 7 | widen_factor=1., 8 | strides=(1, 2, 2, 1, 1, 1, 1), 9 | dilations=(1, 1, 1, 2, 2, 4, 4), 10 | out_indices=(1, 2, 4, 6)), 11 | decode_head=dict(in_channels=320), 12 | auxiliary_head=dict(in_channels=96)) 13 | -------------------------------------------------------------------------------- /configs/mobilenet_v2/deeplabv3_m-v2-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3/deeplabv3_r101-d8_512x512_160k_ade20k.py' 2 | model = dict( 3 | pretrained='mmcls://mobilenet_v2', 4 | backbone=dict( 5 | _delete_=True, 6 | type='MobileNetV2', 7 | widen_factor=1., 8 | strides=(1, 2, 2, 1, 1, 1, 1), 9 | dilations=(1, 1, 1, 2, 2, 4, 4), 10 | out_indices=(1, 2, 4, 6)), 11 | decode_head=dict(in_channels=320), 12 | auxiliary_head=dict(in_channels=96)) 13 | -------------------------------------------------------------------------------- /configs/mobilenet_v2/deeplabv3plus_m-v2-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3plus/deeplabv3plus_r101-d8_512x1024_80k_cityscapes.py' 2 | model = dict( 3 | pretrained='mmcls://mobilenet_v2', 4 | backbone=dict( 5 | _delete_=True, 6 | type='MobileNetV2', 7 | widen_factor=1., 8 | strides=(1, 2, 2, 1, 1, 1, 1), 9 | dilations=(1, 1, 1, 2, 2, 4, 4), 10 | out_indices=(1, 2, 4, 6)), 11 | decode_head=dict(in_channels=320, c1_in_channels=24), 12 | auxiliary_head=dict(in_channels=96)) 13 | -------------------------------------------------------------------------------- /configs/mobilenet_v2/deeplabv3plus_m-v2-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3plus/deeplabv3plus_r101-d8_512x512_160k_ade20k.py' 2 | model = dict( 3 | pretrained='mmcls://mobilenet_v2', 4 | backbone=dict( 5 | _delete_=True, 6 | type='MobileNetV2', 7 | widen_factor=1., 8 | strides=(1, 2, 2, 1, 1, 1, 1), 9 | dilations=(1, 1, 1, 2, 2, 4, 4), 10 | out_indices=(1, 2, 4, 6)), 11 | decode_head=dict(in_channels=320, c1_in_channels=24), 12 | auxiliary_head=dict(in_channels=96)) 13 | -------------------------------------------------------------------------------- /configs/mobilenet_v2/fcn_m-v2-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = '../fcn/fcn_r101-d8_512x1024_80k_cityscapes.py' 2 | model = dict( 3 | pretrained='mmcls://mobilenet_v2', 4 | backbone=dict( 5 | _delete_=True, 6 | type='MobileNetV2', 7 | widen_factor=1., 8 | strides=(1, 2, 2, 1, 1, 1, 1), 9 | dilations=(1, 1, 1, 2, 2, 4, 4), 10 | out_indices=(1, 2, 4, 6)), 11 | decode_head=dict(in_channels=320), 12 | auxiliary_head=dict(in_channels=96)) 13 | -------------------------------------------------------------------------------- /configs/mobilenet_v2/fcn_m-v2-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = '../fcn/fcn_r101-d8_512x512_160k_ade20k.py' 2 | model = dict( 3 | pretrained='mmcls://mobilenet_v2', 4 | backbone=dict( 5 | _delete_=True, 6 | type='MobileNetV2', 7 | widen_factor=1., 8 | strides=(1, 2, 2, 1, 1, 1, 1), 9 | dilations=(1, 1, 1, 2, 2, 4, 4), 10 | out_indices=(1, 2, 4, 6)), 11 | decode_head=dict(in_channels=320), 12 | auxiliary_head=dict(in_channels=96)) 13 | -------------------------------------------------------------------------------- /configs/mobilenet_v2/pspnet_m-v2-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = '../pspnet/pspnet_r101-d8_512x1024_80k_cityscapes.py' 2 | model = dict( 3 | pretrained='mmcls://mobilenet_v2', 4 | backbone=dict( 5 | _delete_=True, 6 | type='MobileNetV2', 7 | widen_factor=1., 8 | strides=(1, 2, 2, 1, 1, 1, 1), 9 | dilations=(1, 1, 1, 2, 2, 4, 4), 10 | out_indices=(1, 2, 4, 6)), 11 | decode_head=dict(in_channels=320), 12 | auxiliary_head=dict(in_channels=96)) 13 | -------------------------------------------------------------------------------- /configs/mobilenet_v2/pspnet_m-v2-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = '../pspnet/pspnet_r101-d8_512x512_160k_ade20k.py' 2 | model = dict( 3 | pretrained='mmcls://mobilenet_v2', 4 | backbone=dict( 5 | _delete_=True, 6 | type='MobileNetV2', 7 | widen_factor=1., 8 | strides=(1, 2, 2, 1, 1, 1, 1), 9 | dilations=(1, 1, 1, 2, 2, 4, 4), 10 | out_indices=(1, 2, 4, 6)), 11 | decode_head=dict(in_channels=320), 12 | auxiliary_head=dict(in_channels=96)) 13 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r101-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './nonlocal_r50-d8_512x1024_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r101-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './nonlocal_r50-d8_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r101-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './nonlocal_r50-d8_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r101-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './nonlocal_r50-d8_512x512_20k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r101-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './nonlocal_r50-d8_512x512_40k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r101-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './nonlocal_r50-d8_512x512_80k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r101-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './nonlocal_r50-d8_769x769_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r101-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './nonlocal_r50-d8_769x769_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r50-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/nonlocal_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r50-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/nonlocal_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r50-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/nonlocal_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r50-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/nonlocal_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_20k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r50-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/nonlocal_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r50-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/nonlocal_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r50-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/nonlocal_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/nonlocal_net/nonlocal_r50-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/nonlocal_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18_512x1024_160k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ocrnet_hr18.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ocrnet_hr18.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ocrnet_hr18.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ocrnet_hr18.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | norm_cfg = dict(type='SyncBN', requires_grad=True) 6 | model = dict(decode_head=[ 7 | dict( 8 | type='FCNHead', 9 | in_channels=[18, 36, 72, 144], 10 | channels=sum([18, 36, 72, 144]), 11 | in_index=(0, 1, 2, 3), 12 | input_transform='resize_concat', 13 | kernel_size=1, 14 | num_convs=1, 15 | concat_input=False, 16 | dropout_ratio=-1, 17 | num_classes=150, 18 | norm_cfg=norm_cfg, 19 | align_corners=False, 20 | loss_decode=dict( 21 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), 22 | dict( 23 | type='OCRHead', 24 | in_channels=[18, 36, 72, 144], 25 | in_index=(0, 1, 2, 3), 26 | input_transform='resize_concat', 27 | channels=512, 28 | ocr_channels=256, 29 | dropout_ratio=-1, 30 | num_classes=150, 31 | norm_cfg=norm_cfg, 32 | align_corners=False, 33 | loss_decode=dict( 34 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 35 | ]) 36 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ocrnet_hr18.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_20k.py' 5 | ] 6 | norm_cfg = dict(type='SyncBN', requires_grad=True) 7 | model = dict(decode_head=[ 8 | dict( 9 | type='FCNHead', 10 | in_channels=[18, 36, 72, 144], 11 | channels=sum([18, 36, 72, 144]), 12 | in_index=(0, 1, 2, 3), 13 | input_transform='resize_concat', 14 | kernel_size=1, 15 | num_convs=1, 16 | concat_input=False, 17 | dropout_ratio=-1, 18 | num_classes=21, 19 | norm_cfg=norm_cfg, 20 | align_corners=False, 21 | loss_decode=dict( 22 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), 23 | dict( 24 | type='OCRHead', 25 | in_channels=[18, 36, 72, 144], 26 | in_index=(0, 1, 2, 3), 27 | input_transform='resize_concat', 28 | channels=512, 29 | ocr_channels=256, 30 | dropout_ratio=-1, 31 | num_classes=21, 32 | norm_cfg=norm_cfg, 33 | align_corners=False, 34 | loss_decode=dict( 35 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 36 | ]) 37 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ocrnet_hr18.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | norm_cfg = dict(type='SyncBN', requires_grad=True) 7 | model = dict(decode_head=[ 8 | dict( 9 | type='FCNHead', 10 | in_channels=[18, 36, 72, 144], 11 | channels=sum([18, 36, 72, 144]), 12 | in_index=(0, 1, 2, 3), 13 | input_transform='resize_concat', 14 | kernel_size=1, 15 | num_convs=1, 16 | concat_input=False, 17 | dropout_ratio=-1, 18 | num_classes=21, 19 | norm_cfg=norm_cfg, 20 | align_corners=False, 21 | loss_decode=dict( 22 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), 23 | dict( 24 | type='OCRHead', 25 | in_channels=[18, 36, 72, 144], 26 | in_index=(0, 1, 2, 3), 27 | input_transform='resize_concat', 28 | channels=512, 29 | ocr_channels=256, 30 | dropout_ratio=-1, 31 | num_classes=21, 32 | norm_cfg=norm_cfg, 33 | align_corners=False, 34 | loss_decode=dict( 35 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 36 | ]) 37 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ocrnet_hr18.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | norm_cfg = dict(type='SyncBN', requires_grad=True) 6 | model = dict(decode_head=[ 7 | dict( 8 | type='FCNHead', 9 | in_channels=[18, 36, 72, 144], 10 | channels=sum([18, 36, 72, 144]), 11 | in_index=(0, 1, 2, 3), 12 | input_transform='resize_concat', 13 | kernel_size=1, 14 | num_convs=1, 15 | concat_input=False, 16 | dropout_ratio=-1, 17 | num_classes=150, 18 | norm_cfg=norm_cfg, 19 | align_corners=False, 20 | loss_decode=dict( 21 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), 22 | dict( 23 | type='OCRHead', 24 | in_channels=[18, 36, 72, 144], 25 | in_index=(0, 1, 2, 3), 26 | input_transform='resize_concat', 27 | channels=512, 28 | ocr_channels=256, 29 | dropout_ratio=-1, 30 | num_classes=150, 31 | norm_cfg=norm_cfg, 32 | align_corners=False, 33 | loss_decode=dict( 34 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 35 | ]) 36 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18s_512x1024_160k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './ocrnet_hr18_512x1024_160k_cityscapes.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18s_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './ocrnet_hr18_512x1024_40k_cityscapes.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18s_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './ocrnet_hr18_512x1024_80k_cityscapes.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18s_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './ocrnet_hr18_512x512_160k_ade20k.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18s_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './ocrnet_hr18_512x512_20k_voc12aug.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18s_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './ocrnet_hr18_512x512_40k_voc12aug.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr18s_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './ocrnet_hr18_512x512_80k_ade20k.py' 2 | model = dict( 3 | pretrained='open-mmlab://msra/hrnetv2_w18_small', 4 | backbone=dict( 5 | extra=dict( 6 | stage1=dict(num_blocks=(2, )), 7 | stage2=dict(num_blocks=(2, 2)), 8 | stage3=dict(num_modules=3, num_blocks=(2, 2, 2)), 9 | stage4=dict(num_modules=2, num_blocks=(2, 2, 2, 2))))) 10 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr48_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './ocrnet_hr18_512x512_160k_ade20k.py' 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | pretrained='open-mmlab://msra/hrnetv2_w48', 5 | backbone=dict( 6 | extra=dict( 7 | stage2=dict(num_channels=(48, 96)), 8 | stage3=dict(num_channels=(48, 96, 192)), 9 | stage4=dict(num_channels=(48, 96, 192, 384)))), 10 | decode_head=[ 11 | dict( 12 | type='FCNHead', 13 | in_channels=[48, 96, 192, 384], 14 | channels=sum([48, 96, 192, 384]), 15 | input_transform='resize_concat', 16 | in_index=(0, 1, 2, 3), 17 | kernel_size=1, 18 | num_convs=1, 19 | norm_cfg=norm_cfg, 20 | concat_input=False, 21 | dropout_ratio=-1, 22 | num_classes=150, 23 | align_corners=False, 24 | loss_decode=dict( 25 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), 26 | dict( 27 | type='OCRHead', 28 | in_channels=[48, 96, 192, 384], 29 | channels=512, 30 | ocr_channels=256, 31 | input_transform='resize_concat', 32 | in_index=(0, 1, 2, 3), 33 | norm_cfg=norm_cfg, 34 | dropout_ratio=-1, 35 | num_classes=150, 36 | align_corners=False, 37 | loss_decode=dict( 38 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)) 39 | ]) 40 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_hr48_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './ocrnet_hr18_512x512_20k_voc12aug.py' 2 | norm_cfg = dict(type='SyncBN', requires_grad=True) 3 | model = dict( 4 | pretrained='open-mmlab://msra/hrnetv2_w48', 5 | backbone=dict( 6 | extra=dict( 7 | stage2=dict(num_channels=(48, 96)), 8 | stage3=dict(num_channels=(48, 96, 192)), 9 | stage4=dict(num_channels=(48, 96, 192, 384)))), 10 | decode_head=[ 11 | dict( 12 | type='FCNHead', 13 | in_channels=[48, 96, 192, 384], 14 | channels=sum([48, 96, 192, 384]), 15 | input_transform='resize_concat', 16 | in_index=(0, 1, 2, 3), 17 | kernel_size=1, 18 | num_convs=1, 19 | norm_cfg=norm_cfg, 20 | concat_input=False, 21 | dropout_ratio=-1, 22 | num_classes=21, 23 | align_corners=False, 24 | loss_decode=dict( 25 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=0.4)), 26 | dict( 27 | type='OCRHead', 28 | in_channels=[48, 96, 192, 384], 29 | channels=512, 30 | ocr_channels=256, 31 | input_transform='resize_concat', 32 | in_index=(0, 1, 2, 3), 33 | norm_cfg=norm_cfg, 34 | dropout_ratio=-1, 35 | num_classes=21, 36 | align_corners=False, 37 | loss_decode=dict( 38 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)) 39 | ]) 40 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_r101-d8_512x1024_40k_b16_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ocrnet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 6 | optimizer = dict(lr=0.02) 7 | lr_config = dict(min_lr=2e-4) 8 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_r101-d8_512x1024_40k_b8_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ocrnet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 6 | -------------------------------------------------------------------------------- /configs/ocrnet/ocrnet_r101-d8_512x1024_80k_b16_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/ocrnet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 6 | optimizer = dict(lr=0.02) 7 | lr_config = dict(min_lr=2e-4) 8 | -------------------------------------------------------------------------------- /configs/point_rend/pointrend_r101_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './pointrend_r50_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/point_rend/pointrend_r101_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './pointrend_r50_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/point_rend/pointrend_r50_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/pointrend_r50.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | lr_config = dict(warmup='linear', warmup_iters=200) 6 | -------------------------------------------------------------------------------- /configs/point_rend/pointrend_r50_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/pointrend_r50.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | norm_cfg = dict(type='SyncBN', requires_grad=True) 6 | model = dict(decode_head=[ 7 | dict( 8 | type='FPNHead', 9 | in_channels=[256, 256, 256, 256], 10 | in_index=[0, 1, 2, 3], 11 | feature_strides=[4, 8, 16, 32], 12 | channels=128, 13 | dropout_ratio=-1, 14 | num_classes=150, 15 | norm_cfg=norm_cfg, 16 | align_corners=False, 17 | loss_decode=dict( 18 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)), 19 | dict( 20 | type='PointHead', 21 | in_channels=[256], 22 | in_index=[0], 23 | channels=256, 24 | num_fcs=3, 25 | coarse_pred_each_layer=True, 26 | dropout_ratio=-1, 27 | num_classes=150, 28 | align_corners=False, 29 | loss_decode=dict( 30 | type='CrossEntropyLoss', use_sigmoid=False, loss_weight=1.0)) 31 | ]) 32 | lr_config = dict(warmup='linear', warmup_iters=200) 33 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r101-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './psanet_r50-d8_512x1024_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r101-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './psanet_r50-d8_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r101-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './psanet_r50-d8_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r101-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './psanet_r50-d8_512x512_20k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r101-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './psanet_r50-d8_512x512_40k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r101-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './psanet_r50-d8_512x512_80k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r101-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './psanet_r50-d8_769x769_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r101-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './psanet_r50-d8_769x769_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r50-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/psanet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r50-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/psanet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r50-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/psanet_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(mask_size=(66, 66), num_classes=150), 7 | auxiliary_head=dict(num_classes=150)) 8 | test_cfg = dict(mode='whole') 9 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r50-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/psanet_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_20k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r50-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/psanet_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r50-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/psanet_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(mask_size=(66, 66), num_classes=150), 7 | auxiliary_head=dict(num_classes=150)) 8 | test_cfg = dict(mode='whole') 9 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r50-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/psanet_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/psanet/psanet_r50-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/psanet_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r101-d8_480x480_40k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = './pspnet_r50-d8_480x480_40k_pascal_context.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r101-d8_480x480_80k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = './pspnet_r50-d8_480x480_80k_pascal_context.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r101-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './pspnet_r50-d8_512x1024_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r101-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './pspnet_r50-d8_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r101-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './pspnet_r50-d8_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r101-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './pspnet_r50-d8_512x512_20k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r101-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './pspnet_r50-d8_512x512_40k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r101-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './pspnet_r50-d8_512x512_80k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r101-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './pspnet_r50-d8_769x769_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r101-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './pspnet_r50-d8_769x769_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r50-d8_480x480_40k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/pspnet_r50-d8.py', 3 | '../_base_/datasets/pascal_context.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=60), auxiliary_head=dict(num_classes=60)) 8 | test_cfg = dict(mode='slide', crop_size=(480, 480), stride=(320, 320)) 9 | optimizer = dict(type='SGD', lr=0.004, momentum=0.9, weight_decay=0.0001) 10 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r50-d8_480x480_80k_pascal_context.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/pspnet_r50-d8.py', 3 | '../_base_/datasets/pascal_context.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=60), auxiliary_head=dict(num_classes=60)) 8 | test_cfg = dict(mode='slide', crop_size=(480, 480), stride=(320, 320)) 9 | optimizer = dict(type='SGD', lr=0.004, momentum=0.9, weight_decay=0.0001) 10 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r50-d8_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/pspnet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r50-d8_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/pspnet_r50-d8.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r50-d8_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/pspnet_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | test_cfg = dict(mode='whole') 8 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r50-d8_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/pspnet_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_20k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r50-d8_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/pspnet_r50-d8.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r50-d8_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/pspnet_r50-d8.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | test_cfg = dict(mode='whole') 8 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r50-d8_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/pspnet_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/pspnet/pspnet_r50-d8_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/pspnet_r50-d8.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/resnest/experiment0.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam.py' 2 | # _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_240k_potsdam.py' 3 | model = dict( 4 | pretrained='open-mmlab://resnest50', 5 | backbone=dict( 6 | type='ResNeSt', 7 | stem_channels=128, 8 | radix=2, 9 | reduction_factor=4, 10 | avg_down_stride=True)) 11 | -------------------------------------------------------------------------------- /configs/resnest/experiment0_vaihingen.py: -------------------------------------------------------------------------------- 1 | # _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_vaihingen.py' 2 | _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_vaihingen.py' 3 | model = dict( 4 | pretrained='open-mmlab://resnest50', 5 | backbone=dict( 6 | type='ResNeSt', 7 | stem_channels=128, 8 | radix=2, 9 | reduction_factor=4, 10 | avg_down_stride=True)) 11 | -------------------------------------------------------------------------------- /configs/resnest/experiment0_vaihingen_viz.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_vaihingen_viz.py' 2 | model = dict( 3 | pretrained='open-mmlab://resnest50', 4 | backbone=dict( 5 | type='ResNeSt', 6 | stem_channels=128, 7 | radix=2, 8 | reduction_factor=4, 9 | avg_down_stride=True)) 10 | -------------------------------------------------------------------------------- /configs/resnest/experiment0_viz.py: -------------------------------------------------------------------------------- 1 | # _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_240k_potsdam.py' 2 | _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam_viz.py' 3 | model = dict( 4 | pretrained='open-mmlab://resnest50', 5 | backbone=dict( 6 | type='ResNeSt', 7 | stem_channels=128, 8 | radix=2, 9 | reduction_factor=4, 10 | avg_down_stride=True)) 11 | -------------------------------------------------------------------------------- /configs/resnest/experiment1.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam.py' 2 | model = dict( 3 | pretrained='open-mmlab://resnest50', 4 | backbone=dict( 5 | type='ResNeSt', 6 | stem_channels=128, 7 | radix=2, 8 | reduction_factor=4, 9 | avg_down_stride=True), 10 | decode_head=dict( 11 | type='DepthwiseSeparableASPPDnlHead2', 12 | dilations=(1, 6, 12, 18), 13 | reduction=2, 14 | use_scale=True, 15 | mode='embedded_gaussian') 16 | ) 17 | -------------------------------------------------------------------------------- /configs/resnest/experiment1_vaihingen.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_vaihingen.py' 2 | model = dict( 3 | pretrained='open-mmlab://resnest50', 4 | backbone=dict( 5 | type='ResNeSt', 6 | stem_channels=128, 7 | radix=2, 8 | reduction_factor=4, 9 | avg_down_stride=True), 10 | decode_head=dict( 11 | type='DepthwiseSeparableASPPDnlHead2', 12 | dilations=(1, 6, 12, 18), 13 | reduction=2, 14 | use_scale=True, 15 | mode='embedded_gaussian') 16 | ) 17 | -------------------------------------------------------------------------------- /configs/resnest/experiment1_viz.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam_viz.py' 2 | model = dict( 3 | pretrained='open-mmlab://resnest50', 4 | backbone=dict( 5 | type='ResNeSt', 6 | stem_channels=128, 7 | radix=2, 8 | reduction_factor=4, 9 | avg_down_stride=True), 10 | decode_head=dict( 11 | type='DepthwiseSeparableASPPDnlHead2', 12 | dilations=(1, 6, 12, 18), 13 | reduction=2, 14 | use_scale=True, 15 | mode='embedded_gaussian') 16 | ) 17 | -------------------------------------------------------------------------------- /configs/resnest/experiment5.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam_boundary_loss.py' 2 | model = dict( 3 | pretrained='open-mmlab://resnest50', 4 | backbone=dict( 5 | type='ResNeSt', 6 | stem_channels=128, 7 | radix=2, 8 | reduction_factor=4, 9 | avg_down_stride=True)) 10 | -------------------------------------------------------------------------------- /configs/resnest/experiment5_vaihingen.py: -------------------------------------------------------------------------------- 1 | # _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_vaihingen.py' 2 | _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_vaihingen_boundary_loss.py' 3 | model = dict( 4 | pretrained='open-mmlab://resnest50', 5 | backbone=dict( 6 | type='ResNeSt', 7 | stem_channels=128, 8 | radix=2, 9 | reduction_factor=4, 10 | avg_down_stride=True)) 11 | -------------------------------------------------------------------------------- /configs/resnest/experiment5_viz.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam_boundary_loss_viz.py' 2 | model = dict( 3 | pretrained='open-mmlab://resnest50', 4 | backbone=dict( 5 | type='ResNeSt', 6 | stem_channels=128, 7 | radix=2, 8 | reduction_factor=4, 9 | avg_down_stride=True)) 10 | -------------------------------------------------------------------------------- /configs/resnest/experiment8_vaihingen.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_vaihingen_boundary_loss.py' 2 | model = dict( 3 | pretrained='open-mmlab://resnest50', 4 | backbone=dict( 5 | type='ResNeSt', 6 | stem_channels=128, 7 | radix=2, 8 | reduction_factor=4, 9 | avg_down_stride=True), 10 | decode_head=dict( 11 | type='DepthwiseSeparableASPPDnlHead2', 12 | dilations=(1, 6, 12, 18), 13 | reduction=2, 14 | use_scale=True, 15 | mode='embedded_gaussian')) 16 | -------------------------------------------------------------------------------- /configs/resnest/experiment8_viz.py: -------------------------------------------------------------------------------- 1 | _base_ = '../deeplabv3plus/deeplabv3plus_r50-d8_512x512_80k_potsdam_boundary_loss_viz.py' 2 | model = dict( 3 | pretrained='open-mmlab://resnest50', 4 | backbone=dict( 5 | type='ResNeSt', 6 | stem_channels=128, 7 | radix=2, 8 | reduction_factor=4, 9 | avg_down_stride=True), 10 | decode_head=dict( 11 | type='DepthwiseSeparableASPPDnlHead2', 12 | dilations=(1, 6, 12, 18), 13 | reduction=2, 14 | use_scale=True, 15 | mode='embedded_gaussian')) 16 | -------------------------------------------------------------------------------- /configs/sem_fpn/fpn_r101_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './fpn_r50_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/sem_fpn/fpn_r101_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './fpn_r50_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/sem_fpn/fpn_r50_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fpn_r50.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/sem_fpn/fpn_r50_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/fpn_r50.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict(decode_head=dict(num_classes=150)) 6 | -------------------------------------------------------------------------------- /configs/swin/upernet_swin_base_patch4_window7_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/upernet_swin.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_240k.py' 4 | ] 5 | model = dict( 6 | backbone=dict( 7 | embed_dim=128, 8 | depths=[2, 2, 18, 2], 9 | num_heads=[4, 8, 16, 32], 10 | window_size=7, 11 | ape=False, 12 | drop_path_rate=0.3, 13 | patch_norm=True, 14 | use_checkpoint=False 15 | ), 16 | decode_head=dict( 17 | in_channels=[128, 256, 512, 1024], 18 | num_classes=150 19 | ), 20 | auxiliary_head=dict( 21 | in_channels=512, 22 | num_classes=150 23 | )) 24 | 25 | # AdamW optimizer, no weight decay for position embedding & layer norm in backbone 26 | optimizer = dict(_delete_=True, type='AdamW', lr=0.00006, betas=(0.9, 0.999), weight_decay=0.01, 27 | paramwise_cfg=dict(custom_keys={'absolute_pos_embed': dict(decay_mult=0.), 28 | 'relative_position_bias_table': dict(decay_mult=0.), 29 | 'norm': dict(decay_mult=0.)})) 30 | 31 | lr_config = dict(_delete_=True, policy='poly', 32 | warmup='linear', 33 | warmup_iters=1500, 34 | warmup_ratio=1e-6, 35 | power=1.0, min_lr=0.0, by_epoch=False) 36 | 37 | # By default, models are trained on 8 GPUs with 2 images per GPU 38 | data=dict(samples_per_gpu=2) 39 | -------------------------------------------------------------------------------- /configs/swin/upernet_swin_small_patch4_window7_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/upernet_swin.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_240k.py' 4 | ] 5 | model = dict( 6 | backbone=dict( 7 | embed_dim=96, 8 | depths=[2, 2, 18, 2], 9 | num_heads=[3, 6, 12, 24], 10 | window_size=7, 11 | ape=False, 12 | drop_path_rate=0.3, 13 | patch_norm=True, 14 | use_checkpoint=False 15 | ), 16 | decode_head=dict( 17 | in_channels=[96, 192, 384, 768], 18 | num_classes=150 19 | ), 20 | auxiliary_head=dict( 21 | in_channels=384, 22 | num_classes=150 23 | )) 24 | 25 | # AdamW optimizer, no weight decay for position embedding & layer norm in backbone 26 | optimizer = dict(_delete_=True, type='AdamW', lr=0.00006, betas=(0.9, 0.999), weight_decay=0.01, 27 | paramwise_cfg=dict(custom_keys={'absolute_pos_embed': dict(decay_mult=0.), 28 | 'relative_position_bias_table': dict(decay_mult=0.), 29 | 'norm': dict(decay_mult=0.)})) 30 | 31 | lr_config = dict(_delete_=True, policy='poly', 32 | warmup='linear', 33 | warmup_iters=1500, 34 | warmup_ratio=1e-6, 35 | power=1.0, min_lr=0.0, by_epoch=False) 36 | 37 | # By default, models are trained on 8 GPUs with 2 images per GPU 38 | data=dict(samples_per_gpu=2) 39 | -------------------------------------------------------------------------------- /configs/swin/upernet_swin_tiny_patch4_window7_300x300_potsdam_160k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/upernet_swin.py', '../_base_/datasets/potsdam_600.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | backbone=dict( 7 | embed_dim=96, 8 | depths=[2, 2, 6, 2], 9 | num_heads=[3, 6, 12, 24], 10 | window_size=7, 11 | ape=False, 12 | drop_path_rate=0.3, 13 | patch_norm=True, 14 | use_checkpoint=False 15 | ), 16 | decode_head=dict( 17 | in_channels=[96, 192, 384, 768], 18 | num_classes=5 19 | ), 20 | auxiliary_head=dict( 21 | in_channels=384, 22 | num_classes=5 23 | )) 24 | 25 | # AdamW optimizer, no weight decay for position embedding & layer norm in backbone 26 | optimizer = dict(_delete_=True, type='AdamW', lr=0.0001, betas=(0.9, 0.999), weight_decay=0.01, 27 | paramwise_cfg=dict(custom_keys={'absolute_pos_embed': dict(decay_mult=0.), 28 | 'relative_position_bias_table': dict(decay_mult=0.), 29 | 'norm': dict(decay_mult=0.)})) 30 | 31 | lr_config = dict(_delete_=True, policy='poly', 32 | warmup='linear', 33 | warmup_iters=1500, 34 | warmup_ratio=1e-6, 35 | power=1.0, min_lr=0.0, by_epoch=False) 36 | 37 | # By default, models are trained on 8 GPUs with 2 images per GPU 38 | data=dict(samples_per_gpu=2) 39 | -------------------------------------------------------------------------------- /configs/swin/upernet_swin_tiny_patch4_window7_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/upernet_swin.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | backbone=dict( 7 | embed_dim=96, 8 | depths=[2, 2, 6, 2], 9 | num_heads=[3, 6, 12, 24], 10 | window_size=7, 11 | ape=False, 12 | drop_path_rate=0.3, 13 | patch_norm=True, 14 | use_checkpoint=False 15 | ), 16 | decode_head=dict( 17 | in_channels=[96, 192, 384, 768], 18 | num_classes=5 19 | ), 20 | auxiliary_head=dict( 21 | in_channels=384, 22 | num_classes=5 23 | )) 24 | 25 | # AdamW optimizer, no weight decay for position embedding & layer norm in backbone 26 | optimizer = dict(_delete_=True, type='AdamW', lr=0.00006, betas=(0.9, 0.999), weight_decay=0.01, 27 | paramwise_cfg=dict(custom_keys={'absolute_pos_embed': dict(decay_mult=0.), 28 | 'relative_position_bias_table': dict(decay_mult=0.), 29 | 'norm': dict(decay_mult=0.)})) 30 | 31 | lr_config = dict(_delete_=True, policy='poly', 32 | warmup='linear', 33 | warmup_iters=1500, 34 | warmup_ratio=1e-6, 35 | power=1.0, min_lr=0.0, by_epoch=False) 36 | 37 | # By default, models are trained on 8 GPUs with 2 images per GPU 38 | data=dict(samples_per_gpu=2) 39 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r101_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './upernet_r50_512x1024_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r101_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './upernet_r50_512x1024_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r101_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './upernet_r50_512x512_160k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r101_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './upernet_r50_512x512_20k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r101_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = './upernet_r50_512x512_40k_voc12aug.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r101_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = './upernet_r50_512x512_80k_ade20k.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r101_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './upernet_r50_769x769_40k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r101_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = './upernet_r50_769x769_80k_cityscapes.py' 2 | model = dict(pretrained='open-mmlab://resnet101_v1c', backbone=dict(depth=101)) 3 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r50_512x1024_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/upernet_r50.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_40k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r50_512x1024_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/upernet_r50.py', '../_base_/datasets/cityscapes.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r50_512x512_160k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/upernet_r50.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_160k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | test_cfg = dict(mode='whole') 8 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r50_512x512_20k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/upernet_r50.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_20k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r50_512x512_40k_voc12aug.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/upernet_r50.py', 3 | '../_base_/datasets/pascal_voc12_aug.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(num_classes=21), auxiliary_head=dict(num_classes=21)) 8 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r50_512x512_80k_ade20k.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/upernet_r50.py', '../_base_/datasets/ade20k.py', 3 | '../_base_/default_runtime.py', '../_base_/schedules/schedule_80k.py' 4 | ] 5 | model = dict( 6 | decode_head=dict(num_classes=150), auxiliary_head=dict(num_classes=150)) 7 | test_cfg = dict(mode='whole') 8 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r50_769x769_40k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/upernet_r50.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_40k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /configs/upernet/upernet_r50_769x769_80k_cityscapes.py: -------------------------------------------------------------------------------- 1 | _base_ = [ 2 | '../_base_/models/upernet_r50.py', 3 | '../_base_/datasets/cityscapes_769x769.py', '../_base_/default_runtime.py', 4 | '../_base_/schedules/schedule_80k.py' 5 | ] 6 | model = dict( 7 | decode_head=dict(align_corners=True), 8 | auxiliary_head=dict(align_corners=True)) 9 | test_cfg = dict(mode='slide', crop_size=(769, 769), stride=(513, 513)) 10 | -------------------------------------------------------------------------------- /demo/demo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zq7734509/mmsegmentation-multi-layer/4f2f5309464d1808a7cce78aa83839df85fcd5a0/demo/demo.png -------------------------------------------------------------------------------- /demo/image_demo.py: -------------------------------------------------------------------------------- 1 | from argparse import ArgumentParser 2 | 3 | from mmseg.apis import inference_segmentor, init_segmentor, show_result_pyplot 4 | from mmseg.core.evaluation import get_palette 5 | 6 | 7 | def main(): 8 | parser = ArgumentParser() 9 | parser.add_argument('img', help='Image file') 10 | parser.add_argument('config', help='Config file') 11 | parser.add_argument('checkpoint', help='Checkpoint file') 12 | parser.add_argument( 13 | '--device', default='cuda:0', help='Device used for inference') 14 | parser.add_argument( 15 | '--palette', 16 | default='cityscapes', 17 | help='Color palette used for segmentation map') 18 | args = parser.parse_args() 19 | 20 | # build the model from a config file and a checkpoint file 21 | model = init_segmentor(args.config, args.checkpoint, device=args.device) 22 | # test a single image 23 | result = inference_segmentor(model, args.img) 24 | # show the results 25 | show_result_pyplot(model, args.img, result, get_palette(args.palette)) 26 | 27 | 28 | if __name__ == '__main__': 29 | main() 30 | -------------------------------------------------------------------------------- /docker/Dockerfile: -------------------------------------------------------------------------------- 1 | ARG PYTORCH="1.6.0" 2 | ARG CUDA="10.1" 3 | ARG CUDNN="7" 4 | 5 | FROM pytorch/pytorch:${PYTORCH}-cuda${CUDA}-cudnn${CUDNN}-devel 6 | 7 | ENV TORCH_CUDA_ARCH_LIST="6.0 6.1 7.0+PTX" 8 | ENV TORCH_NVCC_FLAGS="-Xfatbin -compress-all" 9 | ENV CMAKE_PREFIX_PATH="$(dirname $(which conda))/../" 10 | 11 | RUN apt-get update && apt-get install -y git ninja-build libglib2.0-0 libsm6 libxrender-dev libxext6 \ 12 | && apt-get clean \ 13 | && rm -rf /var/lib/apt/lists/* 14 | 15 | # Install mmsegmentation 16 | RUN conda clean --all 17 | 18 | RUN pip install mmcv-full==latest+torch1.6.0+cu101 -f https://download.openmmlab.com/mmcv/dist/index.html 19 | RUN git clone https://github.com/open-mmlab/mmsegmenation.git /mmsegmentation 20 | WORKDIR /mmsegmentation 21 | RUN pip install -r requirements/build.txt 22 | RUN pip install --no-cache-dir -e . 23 | -------------------------------------------------------------------------------- /docs/Makefile: -------------------------------------------------------------------------------- 1 | # Minimal makefile for Sphinx documentation 2 | # 3 | 4 | # You can set these variables from the command line, and also 5 | # from the environment for the first two. 6 | SPHINXOPTS ?= 7 | SPHINXBUILD ?= sphinx-build 8 | SOURCEDIR = . 9 | BUILDDIR = _build 10 | 11 | # Put it first so that "make" without argument is like "make help". 12 | help: 13 | @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 14 | 15 | .PHONY: help Makefile 16 | 17 | # Catch-all target: route all unknown targets to Sphinx using the new 18 | # "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). 19 | %: Makefile 20 | @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) 21 | -------------------------------------------------------------------------------- /docs/api.rst: -------------------------------------------------------------------------------- 1 | API Reference 2 | ============== 3 | 4 | mmseg.apis 5 | -------------- 6 | .. automodule:: mmseg.apis 7 | :members: 8 | 9 | mmseg.core 10 | -------------- 11 | 12 | seg 13 | ^^^^^^^^^^ 14 | .. automodule:: mmseg.core.seg 15 | :members: 16 | 17 | evaluation 18 | ^^^^^^^^^^ 19 | .. automodule:: mmseg.core.evaluation 20 | :members: 21 | 22 | utils 23 | ^^^^^^^^^^ 24 | .. automodule:: mmseg.core.utils 25 | :members: 26 | 27 | mmseg.datasets 28 | -------------- 29 | 30 | datasets 31 | ^^^^^^^^^^ 32 | .. automodule:: mmseg.datasets 33 | :members: 34 | 35 | pipelines 36 | ^^^^^^^^^^ 37 | .. automodule:: mmseg.datasets.pipelines 38 | :members: 39 | 40 | mmseg.models 41 | -------------- 42 | 43 | segmentors 44 | ^^^^^^^^^^ 45 | .. automodule:: mmseg.models.segmentors 46 | :members: 47 | 48 | backbones 49 | ^^^^^^^^^^ 50 | .. automodule:: mmseg.models.backbones 51 | :members: 52 | 53 | decode_heads 54 | ^^^^^^^^^^^^ 55 | .. automodule:: mmseg.models.decode_heads 56 | :members: 57 | 58 | losses 59 | ^^^^^^^^^^ 60 | .. automodule:: mmseg.models.losses 61 | :members: 62 | -------------------------------------------------------------------------------- /docs/index.rst: -------------------------------------------------------------------------------- 1 | Welcome to MMSegmenation's documentation! 2 | ========================================= 3 | 4 | .. toctree:: 5 | :maxdepth: 2 6 | 7 | install.md 8 | getting_started.md 9 | config.md 10 | model_zoo.md 11 | 12 | .. toctree:: 13 | :maxdepth: 2 14 | :caption: Tutorials 15 | 16 | tutorials/index.rst 17 | 18 | .. toctree:: 19 | :caption: API Reference 20 | 21 | api.rst 22 | 23 | 24 | Indices and tables 25 | ================== 26 | 27 | * :ref:`genindex` 28 | * :ref:`search` 29 | -------------------------------------------------------------------------------- /docs/make.bat: -------------------------------------------------------------------------------- 1 | @ECHO OFF 2 | 3 | pushd %~dp0 4 | 5 | REM Command file for Sphinx documentation 6 | 7 | if "%SPHINXBUILD%" == "" ( 8 | set SPHINXBUILD=sphinx-build 9 | ) 10 | set SOURCEDIR=. 11 | set BUILDDIR=_build 12 | 13 | if "%1" == "" goto help 14 | 15 | %SPHINXBUILD% >NUL 2>NUL 16 | if errorlevel 9009 ( 17 | echo. 18 | echo.The 'sphinx-build' command was not found. Make sure you have Sphinx 19 | echo.installed, then set the SPHINXBUILD environment variable to point 20 | echo.to the full path of the 'sphinx-build' executable. Alternatively you 21 | echo.may add the Sphinx directory to PATH. 22 | echo. 23 | echo.If you don't have Sphinx installed, grab it from 24 | echo.http://sphinx-doc.org/ 25 | exit /b 1 26 | ) 27 | 28 | %SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 29 | goto end 30 | 31 | :help 32 | %SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% 33 | 34 | :end 35 | popd 36 | -------------------------------------------------------------------------------- /docs/tutorials/index.rst: -------------------------------------------------------------------------------- 1 | .. toctree:: 2 | :maxdepth: 2 3 | 4 | new_dataset.md 5 | data_pipeline.md 6 | new_modules.md 7 | training_tricks.md 8 | -------------------------------------------------------------------------------- /mmcv_custom/__init__.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from .checkpoint import load_checkpoint 4 | 5 | __all__ = ['load_checkpoint'] 6 | -------------------------------------------------------------------------------- /mmseg/__init__.py: -------------------------------------------------------------------------------- 1 | import mmcv 2 | 3 | from .version import __version__, version_info 4 | 5 | MMCV_MIN = '1.1.4' 6 | MMCV_MAX = '1.2.0' 7 | 8 | 9 | def digit_version(version_str): 10 | digit_version = [] 11 | for x in version_str.split('.'): 12 | if x.isdigit(): 13 | digit_version.append(int(x)) 14 | elif x.find('rc') != -1: 15 | patch_version = x.split('rc') 16 | digit_version.append(int(patch_version[0]) - 1) 17 | digit_version.append(int(patch_version[1])) 18 | return digit_version 19 | 20 | 21 | mmcv_min_version = digit_version(MMCV_MIN) 22 | mmcv_max_version = digit_version(MMCV_MAX) 23 | mmcv_version = digit_version(mmcv.__version__) 24 | 25 | 26 | assert (mmcv_min_version <= mmcv_version <= mmcv_max_version), \ 27 | f'MMCV=={mmcv.__version__} is used but incompatible. ' \ 28 | f'Please install mmcv>={mmcv_min_version}, <={mmcv_max_version}.' 29 | 30 | __all__ = ['__version__', 'version_info'] 31 | -------------------------------------------------------------------------------- /mmseg/apis/__init__.py: -------------------------------------------------------------------------------- 1 | from .inference import inference_segmentor, init_segmentor, show_result_pyplot 2 | from .test import multi_gpu_test, single_gpu_test 3 | from .train import get_root_logger, set_random_seed, train_segmentor 4 | 5 | __all__ = [ 6 | 'get_root_logger', 'set_random_seed', 'train_segmentor', 'init_segmentor', 7 | 'inference_segmentor', 'multi_gpu_test', 'single_gpu_test', 8 | 'show_result_pyplot' 9 | ] 10 | -------------------------------------------------------------------------------- /mmseg/core/__init__.py: -------------------------------------------------------------------------------- 1 | from .evaluation import * # noqa: F401, F403 2 | from .seg import * # noqa: F401, F403 3 | from .utils import * # noqa: F401, F403 4 | -------------------------------------------------------------------------------- /mmseg/core/evaluation/__init__.py: -------------------------------------------------------------------------------- 1 | from .class_names import get_classes, get_palette 2 | from .eval_hooks import DistEvalHook, EvalHook 3 | from .mean_iou import mean_iou 4 | 5 | __all__ = [ 6 | 'EvalHook', 'DistEvalHook', 'mean_iou', 'get_classes', 'get_palette' 7 | ] 8 | -------------------------------------------------------------------------------- /mmseg/core/seg/__init__.py: -------------------------------------------------------------------------------- 1 | from .builder import build_pixel_sampler 2 | from .sampler import BasePixelSampler, OHEMPixelSampler 3 | 4 | __all__ = ['build_pixel_sampler', 'BasePixelSampler', 'OHEMPixelSampler'] 5 | -------------------------------------------------------------------------------- /mmseg/core/seg/builder.py: -------------------------------------------------------------------------------- 1 | from mmcv.utils import Registry, build_from_cfg 2 | 3 | PIXEL_SAMPLERS = Registry('pixel sampler') 4 | 5 | 6 | def build_pixel_sampler(cfg, **default_args): 7 | """Build pixel sampler for segmentation map.""" 8 | return build_from_cfg(cfg, PIXEL_SAMPLERS, default_args) 9 | -------------------------------------------------------------------------------- /mmseg/core/seg/sampler/__init__.py: -------------------------------------------------------------------------------- 1 | from .base_pixel_sampler import BasePixelSampler 2 | from .ohem_pixel_sampler import OHEMPixelSampler 3 | 4 | __all__ = ['BasePixelSampler', 'OHEMPixelSampler'] 5 | -------------------------------------------------------------------------------- /mmseg/core/seg/sampler/base_pixel_sampler.py: -------------------------------------------------------------------------------- 1 | from abc import ABCMeta, abstractmethod 2 | 3 | 4 | class BasePixelSampler(metaclass=ABCMeta): 5 | """Base class of pixel sampler.""" 6 | 7 | def __init__(self, **kwargs): 8 | pass 9 | 10 | @abstractmethod 11 | def sample(self, seg_logit, seg_label): 12 | """Placeholder for sample function.""" 13 | pass 14 | -------------------------------------------------------------------------------- /mmseg/core/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from .misc import add_prefix 2 | 3 | __all__ = ['add_prefix'] 4 | -------------------------------------------------------------------------------- /mmseg/core/utils/misc.py: -------------------------------------------------------------------------------- 1 | def add_prefix(inputs, prefix): 2 | """Add prefix for dict. 3 | 4 | Args: 5 | inputs (dict): The input dict with str keys. 6 | prefix (str): The prefix to add. 7 | 8 | Returns: 9 | 10 | dict: The dict with keys updated with ``prefix``. 11 | """ 12 | 13 | outputs = dict() 14 | for name, value in inputs.items(): 15 | outputs[f'{prefix}.{name}'] = value 16 | 17 | return outputs 18 | -------------------------------------------------------------------------------- /mmseg/datasets/__init__.py: -------------------------------------------------------------------------------- 1 | from .ade import ADE20KDataset 2 | from .builder import DATASETS, PIPELINES, build_dataloader, build_dataset 3 | from .chase_db1 import ChaseDB1Dataset 4 | from .cityscapes import CityscapesDataset 5 | from .custom import CustomDataset 6 | from .dataset_wrappers import ConcatDataset, RepeatDataset 7 | from .drive import DRIVEDataset 8 | from .hrf import HRFDataset 9 | from .pascal_context import PascalContextDataset 10 | from .stare import STAREDataset 11 | from .voc import PascalVOCDataset 12 | from .potsdam import POTSDAMDataset 13 | from .vaihingen import VAIHINGENDataset 14 | from .potsdam_viz import POTSDAMVIZDataset 15 | from .hengyang import HENGYANGDataset 16 | __all__ = [ 17 | 'CustomDataset', 'build_dataloader', 'ConcatDataset', 'RepeatDataset', 18 | 'DATASETS', 'build_dataset', 'PIPELINES', 'CityscapesDataset', 19 | 'PascalVOCDataset', 'ADE20KDataset', 'PascalContextDataset', 20 | 'ChaseDB1Dataset', 'DRIVEDataset', 'HRFDataset', 'STAREDataset', 21 | 'POTSDAMDataset', 'VAIHINGENDataset', 'POTSDAMVIZDataset', 22 | 'HENGYANGDataset' 23 | ] 24 | -------------------------------------------------------------------------------- /mmseg/datasets/chase_db1.py: -------------------------------------------------------------------------------- 1 | import os.path as osp 2 | 3 | from .builder import DATASETS 4 | from .custom import CustomDataset 5 | 6 | 7 | @DATASETS.register_module() 8 | class ChaseDB1Dataset(CustomDataset): 9 | """Chase_db1 dataset. 10 | 11 | In segmentation map annotation for Chase_db1, 0 stands for background, 12 | which is included in 2 categories. ``reduce_zero_label`` is fixed to False. 13 | The ``img_suffix`` is fixed to '.png' and ``seg_map_suffix`` is fixed to 14 | '_1stHO.png'. 15 | """ 16 | 17 | CLASSES = ('background', 'vessel') 18 | 19 | PALETTE = [[120, 120, 120], [6, 230, 230]] 20 | 21 | def __init__(self, **kwargs): 22 | super(ChaseDB1Dataset, self).__init__( 23 | img_suffix='.png', 24 | seg_map_suffix='_1stHO.png', 25 | reduce_zero_label=False, 26 | **kwargs) 27 | assert osp.exists(self.img_dir) 28 | -------------------------------------------------------------------------------- /mmseg/datasets/drive.py: -------------------------------------------------------------------------------- 1 | import os.path as osp 2 | 3 | from .builder import DATASETS 4 | from .custom import CustomDataset 5 | 6 | 7 | @DATASETS.register_module() 8 | class DRIVEDataset(CustomDataset): 9 | """DRIVE dataset. 10 | 11 | In segmentation map annotation for DRIVE, 0 stands for background, which is 12 | included in 2 categories. ``reduce_zero_label`` is fixed to False. The 13 | ``img_suffix`` is fixed to '.png' and ``seg_map_suffix`` is fixed to 14 | '_manual1.png'. 15 | """ 16 | 17 | CLASSES = ('background', 'vessel') 18 | 19 | PALETTE = [[120, 120, 120], [6, 230, 230]] 20 | 21 | def __init__(self, **kwargs): 22 | super(DRIVEDataset, self).__init__( 23 | img_suffix='.png', 24 | seg_map_suffix='_manual1.png', 25 | reduce_zero_label=False, 26 | **kwargs) 27 | assert osp.exists(self.img_dir) 28 | -------------------------------------------------------------------------------- /mmseg/datasets/hengyang.py: -------------------------------------------------------------------------------- 1 | from .builder import DATASETS 2 | from .custom import CustomDataset 3 | 4 | 5 | @DATASETS.register_module() 6 | class HENGYANGDataset(CustomDataset): 7 | """ADE20K dataset. 8 | 9 | In segmentation map annotation for ADE20K, 0 stands for background, which 10 | is not included in 150 categories. ``reduce_zero_label`` is fixed to True. 11 | The ``img_suffix`` is fixed to '.jpg' and ``seg_map_suffix`` is fixed to 12 | '.png'. 13 | """ 14 | CLASSES = ( 15 | 'unbuild', 'build') 16 | 17 | PALETTE = [[0,0,0],[255,255,255]] 18 | 19 | def __init__(self, **kwargs): 20 | super(HENGYANGDataset, self).__init__( 21 | img_suffix='.png', 22 | seg_map_suffix='.png', 23 | # add input 24 | ir_img_suffix='.tif', 25 | dsm_img_suffix='.png', 26 | reduce_zero_label=True, 27 | **kwargs) 28 | -------------------------------------------------------------------------------- /mmseg/datasets/hrf.py: -------------------------------------------------------------------------------- 1 | import os.path as osp 2 | 3 | from .builder import DATASETS 4 | from .custom import CustomDataset 5 | 6 | 7 | @DATASETS.register_module() 8 | class HRFDataset(CustomDataset): 9 | """HRF dataset. 10 | 11 | In segmentation map annotation for HRF, 0 stands for background, which is 12 | included in 2 categories. ``reduce_zero_label`` is fixed to False. The 13 | ``img_suffix`` is fixed to '.png' and ``seg_map_suffix`` is fixed to 14 | '.png'. 15 | """ 16 | 17 | CLASSES = ('background', 'vessel') 18 | 19 | PALETTE = [[120, 120, 120], [6, 230, 230]] 20 | 21 | def __init__(self, **kwargs): 22 | super(HRFDataset, self).__init__( 23 | img_suffix='.png', 24 | seg_map_suffix='.png', 25 | reduce_zero_label=False, 26 | **kwargs) 27 | assert osp.exists(self.img_dir) 28 | -------------------------------------------------------------------------------- /mmseg/datasets/pipelines/__init__.py: -------------------------------------------------------------------------------- 1 | from .compose import Compose 2 | from .formating import (Collect, ImageToTensor, ToDataContainer, ToTensor, 3 | Transpose, to_tensor) 4 | from .loading import LoadAnnotations, LoadImageFromFile, LoadIR, LoadDSM 5 | from .test_time_aug import MultiScaleFlipAug 6 | from .transforms import (Normalize, Pad, PhotoMetricDistortion, RandomCrop, 7 | RandomFlip, Resize, SegRescale) 8 | 9 | __all__ = [ 10 | 'Compose', 'to_tensor', 'ToTensor', 'ImageToTensor', 'ToDataContainer', 11 | 'Transpose', 'Collect', 'LoadAnnotations', 'LoadImageFromFile', 12 | 'MultiScaleFlipAug', 'Resize', 'RandomFlip', 'Pad', 'RandomCrop', 13 | 'Normalize', 'SegRescale', 'PhotoMetricDistortion', 'LoadIR', 'LoadDSM' 14 | ] 15 | -------------------------------------------------------------------------------- /mmseg/datasets/potsdam.py: -------------------------------------------------------------------------------- 1 | from .builder import DATASETS 2 | from .custom import CustomDataset 3 | 4 | 5 | @DATASETS.register_module() 6 | class POTSDAMDataset(CustomDataset): 7 | """ADE20K dataset. 8 | 9 | In segmentation map annotation for ADE20K, 0 stands for background, which 10 | is not included in 150 categories. ``reduce_zero_label`` is fixed to True. 11 | The ``img_suffix`` is fixed to '.jpg' and ``seg_map_suffix`` is fixed to 12 | '.png'. 13 | """ 14 | CLASSES = ( 15 | 'build', 'car', 'grass', 'impervious', 'tree', ) 16 | 17 | PALETTE = [[0,0,255],[255,255,0],[0,255,255],[255,255,255],[0,255,0]] 18 | 19 | def __init__(self, **kwargs): 20 | super(POTSDAMDataset, self).__init__( 21 | img_suffix='.png', 22 | seg_map_suffix='.png', 23 | # add input 24 | ir_img_suffix='.tif', 25 | dsm_img_suffix='.png', 26 | reduce_zero_label=True, 27 | **kwargs) 28 | -------------------------------------------------------------------------------- /mmseg/datasets/potsdam_viz.py: -------------------------------------------------------------------------------- 1 | from .builder import DATASETS 2 | from .custom import CustomDataset 3 | 4 | 5 | @DATASETS.register_module() 6 | class POTSDAMVIZDataset(CustomDataset): 7 | """ADE20K dataset. 8 | 9 | In segmentation map annotation for ADE20K, 0 stands for background, which 10 | is not included in 150 categories. ``reduce_zero_label`` is fixed to True. 11 | The ``img_suffix`` is fixed to '.jpg' and ``seg_map_suffix`` is fixed to 12 | '.png'. 13 | """ 14 | CLASSES = ( 15 | 'build', 'car', 'grass', 'impervious', 'tree', ) 16 | 17 | PALETTE = [[0,0,255],[255,255,0],[0,255,255],[255,255,255],[0,255,0]] 18 | 19 | def __init__(self, **kwargs): 20 | super(POTSDAMVIZDataset, self).__init__( 21 | img_suffix='.png', 22 | seg_map_suffix='.png', 23 | reduce_zero_label=True, 24 | **kwargs) 25 | -------------------------------------------------------------------------------- /mmseg/datasets/stare.py: -------------------------------------------------------------------------------- 1 | import os.path as osp 2 | 3 | from .builder import DATASETS 4 | from .custom import CustomDataset 5 | 6 | 7 | @DATASETS.register_module() 8 | class STAREDataset(CustomDataset): 9 | """STARE dataset. 10 | 11 | In segmentation map annotation for STARE, 0 stands for background, which is 12 | included in 2 categories. ``reduce_zero_label`` is fixed to False. The 13 | ``img_suffix`` is fixed to '.png' and ``seg_map_suffix`` is fixed to 14 | '.ah.png'. 15 | """ 16 | 17 | CLASSES = ('background', 'vessel') 18 | 19 | PALETTE = [[120, 120, 120], [6, 230, 230]] 20 | 21 | def __init__(self, **kwargs): 22 | super(STAREDataset, self).__init__( 23 | img_suffix='.png', 24 | seg_map_suffix='.ah.png', 25 | reduce_zero_label=False, 26 | **kwargs) 27 | assert osp.exists(self.img_dir) 28 | -------------------------------------------------------------------------------- /mmseg/datasets/vaihingen.py: -------------------------------------------------------------------------------- 1 | from .builder import DATASETS 2 | from .custom import CustomDataset 3 | 4 | 5 | @DATASETS.register_module() 6 | class VAIHINGENDataset(CustomDataset): 7 | """ADE20K dataset. 8 | 9 | In segmentation map annotation for ADE20K, 0 stands for background, which 10 | is not included in 150 categories. ``reduce_zero_label`` is fixed to True. 11 | The ``img_suffix`` is fixed to '.jpg' and ``seg_map_suffix`` is fixed to 12 | '.png'. 13 | """ 14 | CLASSES = ( 15 | 'build', 'car', 'grass', 'impervious', 'tree', ) 16 | 17 | PALETTE = [[0,0,255],[255,255,0],[0,255,255],[255,255,255],[0,255,0]] 18 | 19 | def __init__(self, **kwargs): 20 | super(VAIHINGENDataset, self).__init__( 21 | img_suffix='.png', 22 | seg_map_suffix='.png', 23 | reduce_zero_label=True, 24 | **kwargs) 25 | -------------------------------------------------------------------------------- /mmseg/datasets/voc.py: -------------------------------------------------------------------------------- 1 | import os.path as osp 2 | 3 | from .builder import DATASETS 4 | from .custom import CustomDataset 5 | 6 | 7 | @DATASETS.register_module() 8 | class PascalVOCDataset(CustomDataset): 9 | """Pascal VOC dataset. 10 | 11 | Args: 12 | split (str): Split txt file for Pascal VOC. 13 | """ 14 | 15 | CLASSES = ('background', 'aeroplane', 'bicycle', 'bird', 'boat', 'bottle', 16 | 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', 17 | 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 18 | 'train', 'tvmonitor') 19 | 20 | PALETTE = [[0, 0, 0], [128, 0, 0], [0, 128, 0], [128, 128, 0], [0, 0, 128], 21 | [128, 0, 128], [0, 128, 128], [128, 128, 128], [64, 0, 0], 22 | [192, 0, 0], [64, 128, 0], [192, 128, 0], [64, 0, 128], 23 | [192, 0, 128], [64, 128, 128], [192, 128, 128], [0, 64, 0], 24 | [128, 64, 0], [0, 192, 0], [128, 192, 0], [0, 64, 128]] 25 | 26 | def __init__(self, split, **kwargs): 27 | super(PascalVOCDataset, self).__init__( 28 | img_suffix='.jpg', seg_map_suffix='.png', split=split, **kwargs) 29 | assert osp.exists(self.img_dir) and self.split is not None 30 | -------------------------------------------------------------------------------- /mmseg/models/__init__.py: -------------------------------------------------------------------------------- 1 | from .backbones import * # noqa: F401,F403 2 | from .builder import (BACKBONES, HEADS, LOSSES, SEGMENTORS, build_backbone, 3 | build_head, build_loss, build_segmentor) 4 | from .decode_heads import * # noqa: F401,F403 5 | from .losses import * # noqa: F401,F403 6 | from .necks import * # noqa: F401,F403 7 | from .segmentors import * # noqa: F401,F403 8 | 9 | __all__ = [ 10 | 'BACKBONES', 'HEADS', 'LOSSES', 'SEGMENTORS', 'build_backbone', 11 | 'build_head', 'build_loss', 'build_segmentor' 12 | ] 13 | -------------------------------------------------------------------------------- /mmseg/models/backbones/__init__.py: -------------------------------------------------------------------------------- 1 | from .cgnet import CGNet 2 | from .fast_scnn import FastSCNN 3 | from .hrnet import HRNet 4 | from .mobilenet_v2 import MobileNetV2 5 | from .resnest import ResNeSt 6 | from .resnet import ResNet, ResNetV1c, ResNetV1d 7 | from .resnext import ResNeXt 8 | from .unet import UNet 9 | from .swin_transformer import SwinTransformer 10 | 11 | __all__ = [ 12 | 'ResNet', 'ResNetV1c', 'ResNetV1d', 'ResNeXt', 'HRNet', 'FastSCNN', 13 | 'ResNeSt', 'MobileNetV2', 'UNet', 'CGNet', 'SwinTransformer' 14 | ] 15 | -------------------------------------------------------------------------------- /mmseg/models/decode_heads/__init__.py: -------------------------------------------------------------------------------- 1 | from .ann_head import ANNHead 2 | from .aspp_head import ASPPHead 3 | from .cc_head import CCHead 4 | from .da_head import DAHead 5 | from .dnl_head import DNLHead 6 | from .ema_head import EMAHead 7 | from .enc_head import EncHead 8 | from .fcn_head import FCNHead 9 | from .fpn_head import FPNHead 10 | from .gc_head import GCHead 11 | from .nl_head import NLHead 12 | from .ocr_head import OCRHead 13 | from .point_head import PointHead 14 | from .psa_head import PSAHead 15 | from .psp_head import PSPHead 16 | from .sep_aspp_head import DepthwiseSeparableASPPHead 17 | from .sep_fcn_head import DepthwiseSeparableFCNHead 18 | from .uper_head import UPerHead 19 | from .sep_aspp_dnl_head import DepthwiseSeparableASPPDnlHead 20 | from .sep_aspp_dnl_head2 import DepthwiseSeparableASPPDnlHead2 21 | 22 | __all__ = [ 23 | 'FCNHead', 'PSPHead', 'ASPPHead', 'PSAHead', 'NLHead', 'GCHead', 'CCHead', 24 | 'UPerHead', 'DepthwiseSeparableASPPHead', 'ANNHead', 'DAHead', 'OCRHead', 25 | 'EncHead', 'DepthwiseSeparableFCNHead', 'FPNHead', 'EMAHead', 'DNLHead', 26 | 'PointHead', 'DepthwiseSeparableASPPDnlHead', 'DepthwiseSeparableASPPDnlHead2' 27 | ] 28 | -------------------------------------------------------------------------------- /mmseg/models/decode_heads/cc_head.py: -------------------------------------------------------------------------------- 1 | import torch 2 | 3 | from ..builder import HEADS 4 | from .fcn_head import FCNHead 5 | 6 | try: 7 | from mmcv.ops import CrissCrossAttention 8 | except ModuleNotFoundError: 9 | CrissCrossAttention = None 10 | 11 | 12 | @HEADS.register_module() 13 | class CCHead(FCNHead): 14 | """CCNet: Criss-Cross Attention for Semantic Segmentation. 15 | 16 | This head is the implementation of `CCNet 17 | `_. 18 | 19 | Args: 20 | recurrence (int): Number of recurrence of Criss Cross Attention 21 | module. Default: 2. 22 | """ 23 | 24 | def __init__(self, recurrence=2, **kwargs): 25 | if CrissCrossAttention is None: 26 | raise RuntimeError('Please install mmcv-full for ' 27 | 'CrissCrossAttention ops') 28 | super(CCHead, self).__init__(num_convs=2, **kwargs) 29 | self.recurrence = recurrence 30 | self.cca = CrissCrossAttention(self.channels) 31 | 32 | def forward(self, inputs): 33 | """Forward function.""" 34 | x = self._transform_inputs(inputs) 35 | output = self.convs[0](x) 36 | for _ in range(self.recurrence): 37 | output = self.cca(output) 38 | output = self.convs[1](output) 39 | if self.concat_input: 40 | output = self.conv_cat(torch.cat([x, output], dim=1)) 41 | output = self.cls_seg(output) 42 | return output 43 | -------------------------------------------------------------------------------- /mmseg/models/losses/__init__.py: -------------------------------------------------------------------------------- 1 | from .accuracy import Accuracy, accuracy 2 | from .cross_entropy_loss import (CrossEntropyLoss, binary_cross_entropy, 3 | cross_entropy, mask_cross_entropy) 4 | from .utils import reduce_loss, weight_reduce_loss, weighted_loss 5 | from .boundary_cross_entropy_loss import BoundaryCrossEntropyLoss, one_hot, boundary, binary_cross_entropy, cross_entropy, mask_cross_entropy 6 | from .multi_loss import MultiLoss, one_hot, boundary, binary_cross_entropy, cross_entropy, mask_cross_entropy 7 | 8 | __all__ = [ 9 | 'accuracy', 'Accuracy', 'cross_entropy', 'binary_cross_entropy', 10 | 'mask_cross_entropy', 'CrossEntropyLoss', 'reduce_loss', 11 | 'weight_reduce_loss', 'weighted_loss', 'BoundaryCrossEntropyLoss', 12 | 'one_hot', 'boundary', 'MultiLoss' 13 | ] 14 | -------------------------------------------------------------------------------- /mmseg/models/necks/__init__.py: -------------------------------------------------------------------------------- 1 | from .fpn import FPN 2 | 3 | __all__ = ['FPN'] 4 | -------------------------------------------------------------------------------- /mmseg/models/segmentors/__init__.py: -------------------------------------------------------------------------------- 1 | from .cascade_encoder_decoder import CascadeEncoderDecoder 2 | from .encoder_decoder import EncoderDecoder 3 | from .encoder_decoder_viz import EncoderDecoderViz 4 | __all__ = ['EncoderDecoder', 'CascadeEncoderDecoder', 'EncoderDecoderViz'] 5 | -------------------------------------------------------------------------------- /mmseg/models/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from .inverted_residual import InvertedResidual 2 | from .make_divisible import make_divisible 3 | from .res_layer import ResLayer 4 | from .self_attention_block import SelfAttentionBlock 5 | from .up_conv_block import UpConvBlock 6 | 7 | __all__ = [ 8 | 'ResLayer', 'SelfAttentionBlock', 'make_divisible', 'InvertedResidual', 9 | 'UpConvBlock' 10 | ] 11 | -------------------------------------------------------------------------------- /mmseg/models/utils/make_divisible.py: -------------------------------------------------------------------------------- 1 | def make_divisible(value, divisor, min_value=None, min_ratio=0.9): 2 | """Make divisible function. 3 | 4 | This function rounds the channel number down to the nearest value that can 5 | be divisible by the divisor. 6 | 7 | Args: 8 | value (int): The original channel number. 9 | divisor (int): The divisor to fully divide the channel number. 10 | min_value (int, optional): The minimum value of the output channel. 11 | Default: None, means that the minimum value equal to the divisor. 12 | min_ratio (float, optional): The minimum ratio of the rounded channel 13 | number to the original channel number. Default: 0.9. 14 | Returns: 15 | int: The modified output channel number 16 | """ 17 | 18 | if min_value is None: 19 | min_value = divisor 20 | new_value = max(min_value, int(value + divisor / 2) // divisor * divisor) 21 | # Make sure that round down does not go down by more than (1-min_ratio). 22 | if new_value < min_ratio * value: 23 | new_value += divisor 24 | return new_value 25 | -------------------------------------------------------------------------------- /mmseg/ops/__init__.py: -------------------------------------------------------------------------------- 1 | from .encoding import Encoding 2 | from .wrappers import Upsample, resize 3 | 4 | __all__ = ['Upsample', 'resize', 'Encoding'] 5 | -------------------------------------------------------------------------------- /mmseg/utils/__init__.py: -------------------------------------------------------------------------------- 1 | from .collect_env import collect_env 2 | from .logger import get_root_logger 3 | 4 | __all__ = ['get_root_logger', 'collect_env'] 5 | -------------------------------------------------------------------------------- /mmseg/utils/collect_env.py: -------------------------------------------------------------------------------- 1 | from mmcv.utils import collect_env as collect_base_env 2 | from mmcv.utils import get_git_hash 3 | 4 | import mmseg 5 | 6 | 7 | def collect_env(): 8 | """Collect the information of the running environments.""" 9 | env_info = collect_base_env() 10 | env_info['MMSegmentation'] = f'{mmseg.__version__}+{get_git_hash()[:7]}' 11 | 12 | return env_info 13 | 14 | 15 | if __name__ == '__main__': 16 | for name, val in collect_env().items(): 17 | print('{}: {}'.format(name, val)) 18 | -------------------------------------------------------------------------------- /mmseg/utils/logger.py: -------------------------------------------------------------------------------- 1 | import logging 2 | 3 | from mmcv.utils import get_logger 4 | 5 | 6 | def get_root_logger(log_file=None, log_level=logging.INFO): 7 | """Get the root logger. 8 | 9 | The logger will be initialized if it has not been initialized. By default a 10 | StreamHandler will be added. If `log_file` is specified, a FileHandler will 11 | also be added. The name of the root logger is the top-level package name, 12 | e.g., "mmseg". 13 | 14 | Args: 15 | log_file (str | None): The log filename. If specified, a FileHandler 16 | will be added to the root logger. 17 | log_level (int): The root logger level. Note that only the process of 18 | rank 0 is affected, while other processes will set the level to 19 | "Error" and be silent most of the time. 20 | 21 | Returns: 22 | logging.Logger: The root logger. 23 | """ 24 | 25 | logger = get_logger(name='mmseg', log_file=log_file, log_level=log_level) 26 | 27 | return logger 28 | -------------------------------------------------------------------------------- /mmseg/version.py: -------------------------------------------------------------------------------- 1 | # Copyright (c) Open-MMLab. All rights reserved. 2 | 3 | __version__ = '0.8.0' 4 | 5 | 6 | def parse_version_info(version_str): 7 | version_info = [] 8 | for x in version_str.split('.'): 9 | if x.isdigit(): 10 | version_info.append(int(x)) 11 | elif x.find('rc') != -1: 12 | patch_version = x.split('rc') 13 | version_info.append(int(patch_version[0])) 14 | version_info.append(f'rc{patch_version[1]}') 15 | return tuple(version_info) 16 | 17 | 18 | version_info = parse_version_info(__version__) 19 | -------------------------------------------------------------------------------- /pytest.ini: -------------------------------------------------------------------------------- 1 | [pytest] 2 | addopts = --xdoctest --xdoctest-style=auto 3 | norecursedirs = .git ignore build __pycache__ data docker docs .eggs 4 | 5 | filterwarnings= default 6 | ignore:.*No cfgstr given in Cacher constructor or call.*:Warning 7 | ignore:.*Define the __nice__ method for.*:Warning 8 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | -r requirements/optional.txt 2 | -r requirements/runtime.txt 3 | -r requirements/tests.txt 4 | -------------------------------------------------------------------------------- /requirements/docs.txt: -------------------------------------------------------------------------------- 1 | recommonmark 2 | sphinx 3 | sphinx_markdown_tables 4 | sphinx_rtd_theme 5 | -------------------------------------------------------------------------------- /requirements/optional.txt: -------------------------------------------------------------------------------- 1 | cityscapesscripts 2 | -------------------------------------------------------------------------------- /requirements/readthedocs.txt: -------------------------------------------------------------------------------- 1 | mmcv 2 | torch 3 | torchvision 4 | -------------------------------------------------------------------------------- /requirements/runtime.txt: -------------------------------------------------------------------------------- 1 | matplotlib 2 | numpy 3 | -------------------------------------------------------------------------------- /requirements/tests.txt: -------------------------------------------------------------------------------- 1 | codecov 2 | flake8 3 | interrogate 4 | isort==4.3.21 5 | pytest 6 | xdoctest>=0.10.0 7 | yapf 8 | -------------------------------------------------------------------------------- /resources/mmseg-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zq7734509/mmsegmentation-multi-layer/4f2f5309464d1808a7cce78aa83839df85fcd5a0/resources/mmseg-logo.png -------------------------------------------------------------------------------- /resources/seg_demo.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zq7734509/mmsegmentation-multi-layer/4f2f5309464d1808a7cce78aa83839df85fcd5a0/resources/seg_demo.gif -------------------------------------------------------------------------------- /setup.cfg: -------------------------------------------------------------------------------- 1 | [yapf] 2 | based_on_style = pep8 3 | blank_line_before_nested_class_or_def = true 4 | split_before_expression_after_opening_paren = true 5 | 6 | [isort] 7 | line_length = 79 8 | multi_line_output = 0 9 | known_standard_library = setuptools 10 | known_first_party = mmseg 11 | known_third_party = PIL,cityscapesscripts,cv2,detail,matplotlib,mmcv,numpy,onnxruntime,oss2,pytest,scipy,torch 12 | no_lines_before = STDLIB,LOCALFOLDER 13 | default_section = THIRDPARTY 14 | -------------------------------------------------------------------------------- /tests/test_models/test_necks.py: -------------------------------------------------------------------------------- 1 | import torch 2 | 3 | from mmseg.models import FPN 4 | 5 | 6 | def test_fpn(): 7 | in_channels = [256, 512, 1024, 2048] 8 | inputs = [ 9 | torch.randn(1, c, 56 // 2**i, 56 // 2**i) 10 | for i, c in enumerate(in_channels) 11 | ] 12 | 13 | fpn = FPN(in_channels, 256, len(in_channels)) 14 | outputs = fpn(inputs) 15 | assert outputs[0].shape == torch.Size([1, 256, 56, 56]) 16 | assert outputs[1].shape == torch.Size([1, 256, 28, 28]) 17 | assert outputs[2].shape == torch.Size([1, 256, 14, 14]) 18 | assert outputs[3].shape == torch.Size([1, 256, 7, 7]) 19 | -------------------------------------------------------------------------------- /tests/test_sampler.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | import torch 3 | 4 | from mmseg.core import OHEMPixelSampler 5 | from mmseg.models.decode_heads import FCNHead 6 | 7 | 8 | def _context_for_ohem(): 9 | return FCNHead(in_channels=32, channels=16, num_classes=19) 10 | 11 | 12 | def test_ohem_sampler(): 13 | 14 | with pytest.raises(AssertionError): 15 | # seg_logit and seg_label must be of the same size 16 | sampler = OHEMPixelSampler(context=_context_for_ohem()) 17 | seg_logit = torch.randn(1, 19, 45, 45) 18 | seg_label = torch.randint(0, 19, size=(1, 1, 89, 89)) 19 | sampler.sample(seg_logit, seg_label) 20 | 21 | # test with thresh 22 | sampler = OHEMPixelSampler( 23 | context=_context_for_ohem(), thresh=0.7, min_kept=200) 24 | seg_logit = torch.randn(1, 19, 45, 45) 25 | seg_label = torch.randint(0, 19, size=(1, 1, 45, 45)) 26 | seg_weight = sampler.sample(seg_logit, seg_label) 27 | assert seg_weight.shape[0] == seg_logit.shape[0] 28 | assert seg_weight.shape[1:] == seg_logit.shape[2:] 29 | assert seg_weight.sum() > 200 30 | 31 | # test w.o thresh 32 | sampler = OHEMPixelSampler(context=_context_for_ohem(), min_kept=200) 33 | seg_logit = torch.randn(1, 19, 45, 45) 34 | seg_label = torch.randint(0, 19, size=(1, 1, 45, 45)) 35 | seg_weight = sampler.sample(seg_logit, seg_label) 36 | assert seg_weight.shape[0] == seg_logit.shape[0] 37 | assert seg_weight.shape[1:] == seg_logit.shape[2:] 38 | assert seg_weight.sum() == 200 39 | -------------------------------------------------------------------------------- /tests/test_utils/test_inverted_residual_module.py: -------------------------------------------------------------------------------- 1 | import pytest 2 | import torch 3 | 4 | from mmseg.models.utils import InvertedResidual 5 | 6 | 7 | def test_inv_residual(): 8 | with pytest.raises(AssertionError): 9 | # test stride assertion. 10 | InvertedResidual(32, 32, 3, 4) 11 | 12 | # test default config with res connection. 13 | # set expand_ratio = 4, stride = 1 and inp=oup. 14 | inv_module = InvertedResidual(32, 32, 1, 4) 15 | assert inv_module.use_res_connect 16 | assert inv_module.conv[0].kernel_size == (1, 1) 17 | assert inv_module.conv[0].padding == 0 18 | assert inv_module.conv[1].kernel_size == (3, 3) 19 | assert inv_module.conv[1].padding == 1 20 | assert inv_module.conv[0].with_norm 21 | assert inv_module.conv[1].with_norm 22 | x = torch.rand(1, 32, 64, 64) 23 | output = inv_module(x) 24 | assert output.shape == (1, 32, 64, 64) 25 | 26 | # test inv_residual module without res connection. 27 | # set expand_ratio = 4, stride = 2. 28 | inv_module = InvertedResidual(32, 32, 2, 4) 29 | assert not inv_module.use_res_connect 30 | assert inv_module.conv[0].kernel_size == (1, 1) 31 | x = torch.rand(1, 32, 64, 64) 32 | output = inv_module(x) 33 | assert output.shape == (1, 32, 32, 32) 34 | 35 | # test expand_ratio == 1 36 | inv_module = InvertedResidual(32, 32, 1, 1) 37 | assert inv_module.conv[0].kernel_size == (3, 3) 38 | x = torch.rand(1, 32, 64, 64) 39 | output = inv_module(x) 40 | assert output.shape == (1, 32, 64, 64) 41 | -------------------------------------------------------------------------------- /tools/dist_test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | CONFIG=$1 4 | CHECKPOINT=$2 5 | GPUS=$3 6 | PORT=${PORT:-29500} 7 | PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \ 8 | python -m torch.distributed.launch --nproc_per_node=$GPUS --master_port=$PORT \ 9 | $(dirname "$0")/test.py $CONFIG $CHECKPOINT --launcher pytorch ${@:4} 10 | -------------------------------------------------------------------------------- /tools/dist_train.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | CONFIG=$1 4 | GPUS=$2 5 | PORT=${PORT:-29500} 6 | 7 | PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \ 8 | python -m torch.distributed.launch --nproc_per_node=$GPUS --master_port=$PORT \ 9 | $(dirname "$0")/train.py $CONFIG --launcher pytorch ${@:3} 10 | -------------------------------------------------------------------------------- /tools/print_config.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | 3 | from mmcv import Config, DictAction 4 | 5 | 6 | def parse_args(): 7 | parser = argparse.ArgumentParser(description='Print the whole config') 8 | parser.add_argument('config', help='config file path') 9 | parser.add_argument( 10 | '--options', nargs='+', action=DictAction, help='arguments in dict') 11 | args = parser.parse_args() 12 | 13 | return args 14 | 15 | 16 | def main(): 17 | args = parse_args() 18 | 19 | cfg = Config.fromfile(args.config) 20 | if args.options is not None: 21 | cfg.merge_from_dict(args.options) 22 | print(f'Config:\n{cfg.pretty_text}') 23 | # dump config 24 | cfg.dump('example.py') 25 | 26 | 27 | if __name__ == '__main__': 28 | main() 29 | -------------------------------------------------------------------------------- /tools/publish_model.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | import subprocess 3 | 4 | import torch 5 | 6 | 7 | def parse_args(): 8 | parser = argparse.ArgumentParser( 9 | description='Process a checkpoint to be published') 10 | parser.add_argument('in_file', help='input checkpoint filename') 11 | parser.add_argument('out_file', help='output checkpoint filename') 12 | args = parser.parse_args() 13 | return args 14 | 15 | 16 | def process_checkpoint(in_file, out_file): 17 | checkpoint = torch.load(in_file, map_location='cpu') 18 | # remove optimizer for smaller file size 19 | if 'optimizer' in checkpoint: 20 | del checkpoint['optimizer'] 21 | # if it is necessary to remove some sensitive data in checkpoint['meta'], 22 | # add the code here. 23 | torch.save(checkpoint, out_file) 24 | sha = subprocess.check_output(['sha256sum', out_file]).decode() 25 | final_file = out_file.rstrip('.pth') + '-{}.pth'.format(sha[:8]) 26 | subprocess.Popen(['mv', out_file, final_file]) 27 | 28 | 29 | def main(): 30 | args = parse_args() 31 | process_checkpoint(args.in_file, args.out_file) 32 | 33 | 34 | if __name__ == '__main__': 35 | main() 36 | -------------------------------------------------------------------------------- /tools/slurm_test.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -x 4 | 5 | PARTITION=$1 6 | JOB_NAME=$2 7 | CONFIG=$3 8 | CHECKPOINT=$4 9 | GPUS=${GPUS:-4} 10 | GPUS_PER_NODE=${GPUS_PER_NODE:-4} 11 | CPUS_PER_TASK=${CPUS_PER_TASK:-5} 12 | PY_ARGS=${@:5} 13 | SRUN_ARGS=${SRUN_ARGS:-""} 14 | 15 | PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \ 16 | srun -p ${PARTITION} \ 17 | --job-name=${JOB_NAME} \ 18 | --gres=gpu:${GPUS_PER_NODE} \ 19 | --ntasks=${GPUS} \ 20 | --ntasks-per-node=${GPUS_PER_NODE} \ 21 | --cpus-per-task=${CPUS_PER_TASK} \ 22 | --kill-on-bad-exit=1 \ 23 | ${SRUN_ARGS} \ 24 | python -u tools/test.py ${CONFIG} ${CHECKPOINT} --launcher="slurm" ${PY_ARGS} 25 | -------------------------------------------------------------------------------- /tools/slurm_train.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -x 4 | 5 | PARTITION=$1 6 | JOB_NAME=$2 7 | CONFIG=$3 8 | GPUS=${GPUS:-4} 9 | GPUS_PER_NODE=${GPUS_PER_NODE:-4} 10 | CPUS_PER_TASK=${CPUS_PER_TASK:-5} 11 | SRUN_ARGS=${SRUN_ARGS:-""} 12 | PY_ARGS=${@:4} 13 | 14 | PYTHONPATH="$(dirname $0)/..":$PYTHONPATH \ 15 | srun -p ${PARTITION} \ 16 | --job-name=${JOB_NAME} \ 17 | --gres=gpu:${GPUS_PER_NODE} \ 18 | --ntasks=${GPUS} \ 19 | --ntasks-per-node=${GPUS_PER_NODE} \ 20 | --cpus-per-task=${CPUS_PER_TASK} \ 21 | --kill-on-bad-exit=1 \ 22 | ${SRUN_ARGS} \ 23 | python -u tools/train.py ${CONFIG} --launcher="slurm" ${PY_ARGS} 24 | -------------------------------------------------------------------------------- /tools/testing.py: -------------------------------------------------------------------------------- 1 | from PIL import Image 2 | import numpy as np 3 | from libtiff import TIFF 4 | img = Image.open('/media/allen/orange/mm_dataset/mydataset_Potsdam_600_normal/ndsm_dir/train/top_potsdam_02_10_RGB_000.png') 5 | print(img.mode) 6 | k = np.array(img) 7 | h,w = k.shape 8 | pad = k[:,-1] 9 | pad = pad[:,np.newaxis]; 10 | c = np.concatenate((k,pad),axis=1) 11 | tif = TIFF.open('/media/allen/orange/mm_dataset/potsdam_normal/dsm_test/top_potsdam_03_13_dsm_new.tif', mode='w') 12 | tif.write_image(c, compression=None) 13 | tif.close() 14 | a = 1 15 | # tif = TIFF.open('/home/allen/img1.tif', mode='w') 16 | # tif.write_image(k, compression=None) 17 | # tif.close() 18 | --------------------------------------------------------------------------------