Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A simple PyTorch codebase for semantic segmentation using Cityscapes.

License

NotificationsYou must be signed in to change notification settings

hoya012/semantic-segmentation-tutorial-pytorch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Semantic Segmentation Tutorial using PyTorch. Based on2020 ECCV VIPriors Challange Start Code, implements semantic segmentation codebase and add some tricks.

Editer: Hoseong Lee (hoya012)

0. Experimental Setup

0-1. Prepare Library

pipinstall-rrequirements.txt

0-2. Download dataset (MiniCity from CityScapes)

We will use MiniCity Dataset from Cityscapes. This dataset is used for 2020 ECCV VIPriors Challenge.

0-3. Dataset Simple EDA (Exploratory Data Analysis) - Class Distribution, Sample Distribution

benchmark class

CityscapesClass('road',7,0,'flat',1,False,False, (128,64,128)),CityscapesClass('sidewalk',8,1,'flat',1,False,False, (244,35,232)),CityscapesClass('building',11,2,'construction',2,False,False, (70,70,70)),CityscapesClass('wall',12,3,'construction',2,False,False, (102,102,156)),CityscapesClass('fence',13,4,'construction',2,False,False, (190,153,153)),CityscapesClass('pole',17,5,'object',3,False,False, (153,153,153)),CityscapesClass('traffic light',19,6,'object',3,False,False, (250,170,30)),CityscapesClass('traffic sign',20,7,'object',3,False,False, (220,220,0)),CityscapesClass('vegetation',21,8,'nature',4,False,False, (107,142,35)),CityscapesClass('terrain',22,9,'nature',4,False,False, (152,251,152)),CityscapesClass('sky',23,10,'sky',5,False,False, (70,130,180)),CityscapesClass('person',24,11,'human',6,True,False, (220,20,60)),CityscapesClass('rider',25,12,'human',6,True,False, (255,0,0)),CityscapesClass('car',26,13,'vehicle',7,True,False, (0,0,142)),CityscapesClass('truck',27,14,'vehicle',7,True,False, (0,0,70)),CityscapesClass('bus',28,15,'vehicle',7,True,False, (0,60,100)),CityscapesClass('train',31,16,'vehicle',7,True,False, (0,80,100)),CityscapesClass('motorcycle',32,17,'vehicle',7,True,False, (0,0,230)),CityscapesClass('bicycle',33,18,'vehicle',7,True,False, (119,11,32)),

from 0 to 18 class, count labeled pixels

deeplab v3 baseline test set result

  • Dataset has severe Class-Imbalance problem.
    • IoU of minor class is very low. (wall, fence, bus, train)
classesIoUnIoU--------------------------------road          :0.963nansidewalk      :0.762nanbuilding      :0.856nanwall          :0.120nanfence         :0.334nanpole          :0.488nantrafficlight :0.563nantrafficsign  :0.631nanvegetation    :0.884nanterrain       :0.538nansky           :0.901nanperson        :0.7320.529rider         :0.3740.296car           :0.8970.822truck         :0.4440.218bus           :0.2440.116train         :0.0330.006motorcycle    :0.4920.240bicycle       :0.6380.439--------------------------------ScoreAverage :0.5730.333--------------------------------

1. Training Baseline Model

  • I useDeepLabV3 from torchvision.

    • ResNet-50 Backbone, ResNet-101 Backbone
  • I use 4 RTX 2080 Ti GPUs. (11GB x 4)

  • If you have just 1 GPU or small GPU Memory, please use smaller batch size (<= 8)

pythonbaseline.py--save_pathbaseline_run_deeplabv3_resnet50--crop_size5761152--batch_size8;
pythonbaseline.py--save_pathbaseline_run_deeplabv3_resnet101--modelDeepLabv3_resnet101--train_size5121024--test_size5121024--crop_size384768--batch_size8;

1-1. Loss Functions

  • I tried 3 loss functions.
    • Cross-Entropy Loss
    • Class-Weighted Cross Entropy Loss
    • Focal Loss
  • You can choose loss function using--loss argument.
    • I recommend default (ce) or Class-Weighted CE loss. Focal loss didn'y work well in my codebase.
# Cross Entropy Losspythonbaseline.py--save_pathbaseline_run_deeplabv3_resnet50--crop_size5761152--batch_size8;
# Weighted Cross Entropy Losspythonbaseline.py--save_pathbaseline_run_deeplabv3_resnet50_wce--crop_size5761152--batch_size8--lossweighted_ce;
# Focal Losspythonbaseline.py--save_pathbaseline_run_deeplabv3_resnet50_focal--crop_size5761152--batch_size8--lossfocal--focal_gamma2.0;

1-2. Normalization Layer

  • I tried 4 normalization layer.

    • Batch Normalization (BN)
    • Instance Normalization (IN)
    • Group Normalization (GN)
    • Evolving Normalization (EvoNorm)
  • You can choose normalization layer using--norm argument.

    • I recommend BN.
# Batch Normalizationpythonbaseline.py--save_pathbaseline_run_deeplabv3_resnet50--crop_size5761152--batch_size8;
# Instance Normalizationpythonbaseline.py--save_pathbaseline_run_deeplabv3_resnet50_instancenorm--crop_size5761152--batch_size8--norminstance;
# Group Normalizationpythonbaseline.py--save_pathbaseline_run_deeplabv3_resnet50_groupnorm--crop_size5761152--batch_size8--normgroup;
# Evolving Normalizationpythonbaseline.py--save_pathbaseline_run_deeplabv3_resnet50_evonorm--crop_size5761152--batch_size8--normevo;

1-3. Additional Augmentation Tricks

  • Propose 2 data augmentation techniques (CutMix, copyblob)

  • CutMix Augmentation

  • CopyBlob Augmentation

    • To tackle Class-Imbalance, use CopyBlob augmentation with visual inductive prior.
      • Wall must be located on the sidewalk
      • Fence must be located on the sidewalk
      • Bus must be located on the Road
      • Train must be located on the Road
# CutMix Augmentationpythonbaseline.py--save_pathbaseline_run_deeplabv3_resnet50_cutmix--crop_size5761152--batch_size8--cutmix;
# CopyBlob Augmentationpythonbaseline.py--save_pathbaseline_run_deeplabv3_resnet50_copyblob--crop_size5761152--batch_size8--copyblob;

2. Inference

  • After training, we can evaluate using trained models.
    • I recommend same value fortrain_size andtest_size.
pythonbaseline.py--save_pathbaseline_run_deeplabv3_resnet50--batch_size4--predict;

2-1. Multi-Scale Infernece (Test Time Augmentation)

  • I use [0.5, 0.75, 1.0, 1.25, 1.5, 1.75, 2.0, 2.2] scales for Multi-Scale Inference. Additionaly, use H-Flip.
    • Must use single batch (batch_size=1)
# Multi-Scale Inferencepythonbaseline.py--save_pathbaseline_run_deeplabv3_resnet50--batch_size1--predict--mst;

2-2. Calculate Metric using Validation Set

pythonevaluate.py--resultsbaseline_run_deeplabv3_resnet50/results_val--batch_size1--predict--mst;

3. Final Result

  • My final single model result is0.6069831962012341
    • Achieve 5th place on the leaderboard.
    • But, didn't submit short-paper, so my score is not official score.
  • If i use bigger model and bigger backbone, performance will be improved.. maybe..
  • If i use ensemble various models, performance will be improved!
  • Leader board can be found inCodalab Challenge Page

4. Reference

About

A simple PyTorch codebase for semantic segmentation using Cityscapes.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors2

  •  
  •  

[8]ページ先頭

©2009-2025 Movatter.jp