Package: semantic-segmentation
Amazing-Semantic-SegmentationAmazing Semantic Segmentation on Tensorflow && Keras (include FCN, UNet, SegNet, PSPNet, PAN, RefineNet, DeepLabV3, DeepLabV3+, DenseASPP, BiSegNet ...)ModelsThe project supports these semantic segmentation models as follows:FCN-8s/16s/32s -Fully Convolutional Networks for Semantic SegmentationUNet -U-Net: Convolutional Networks for Biomedical Image SegmentationSegNet -SegNet:A Deep Convolutional Encoder-Decoder Architecture for Image SegmentationBayesian-SegNet -Bayesian SegNet: Model Uncertainty in Deep Convolutional Encoder-Decoder Architectures for Scene UnderstandingPSPNet -Pyramid Scene Parsing NetworkRefineNet -RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic SegmentationPAN -Pyramid Attention Network for Semantic SegmentationDeepLabV3 -Rethinking Atrous Convolution for Semantic Image SegmentationDeepLabV3Plus -Encoder-Decoder with Atrous Separable Convolution for Semantic Image SegmentationDenseASPP -DenseASPP for Semantic Segmentation in Street ScenesBiSegNet -BiSeNet: Bilateral Segmentation Network for Real-time Semantic SegmentationBase ModelsThe project supports these backbone models as follows, and your can choose suitable base model according to your needs.VGG16/19 -Very Deep Convolutional Networks for Large-Scale Image RecognitionResNet50/101/152 -Deep Residual Learning for Image RecognitionDenseNet121/169/201/264 -Densely Connected Convolutional NetworksMobileNetV1 -MobileNets: Efficient Convolutional Neural Networks for Mobile Vision ApplicationsMobileNetV2 -MobileNetV2: Inverted Residuals and Linear BottlenecksXception -Xception: Deep Learning with Depthwise Separable ConvolutionsXception-DeepLab -Encoder-Decoder with Atrous Separable Convolution for Semantic Image SegmentationDataset SettingThe folds of your dataset must satisfy the following structures:|-- dataset
|  |-- train
|  |  |-- images
|  |  |-- labels
|  |-- valid
|  |  |-- images
|  |  |-- labels
|  |-- test
|  |  |-- images
|  |  |-- labelsInstallationNumpypip install numpyPillowpip install pillowOpenCVpip install opencv-pythonTensorflowpip install tensorflow-gpuNote:The recommended version of tensorflow-gpu is 1.14 or 2.0. And if your tensorflow version is lower, you
need to modify some API or upgrade your tensorflow.UsageDownload:You can download the project through this command:git clone git@github.com:luyanger1799/Amazing-Semantic-Segmentation.gitTraining:The project contains complete codes for training, testing and predicting.
And you can perform a simple command as this to build a model on your dataset:python train.py --model FCN-8s --base_model ResNet50 --dataset "dataset_path" --num_classes "num_classes"The detailed command line parameters are as follows:usage: train.py [-h] --model MODEL [--base_model BASE_MODEL] --dataset DATASET
                --num_classes NUM_CLASSES [--random_crop RANDOM_CROP]
                [--crop_height CROP_HEIGHT] [--crop_width CROP_WIDTH]
                [--batch_size BATCH_SIZE]
                [--valid_batch_size VALID_BATCH_SIZE]
                [--num_epochs NUM_EPOCHS] [--initial_epoch INITIAL_EPOCH]
                [--h_flip H_FLIP] [--v_flip V_FLIP]
                [--brightness BRIGHTNESS [BRIGHTNESS ...]]
                [--rotation ROTATION]
                [--zoom_range ZOOM_RANGE [ZOOM_RANGE ...]]
                [--channel_shift CHANNEL_SHIFT]
                [--data_aug_rate DATA_AUG_RATE]
                [--checkpoint_freq CHECKPOINT_FREQ]
                [--validation_freq VALIDATION_FREQ]
                [--num_valid_images NUM_VALID_IMAGES]
                [--data_shuffle DATA_SHUFFLE] [--random_seed RANDOM_SEED]
                [--weights WEIGHTS]optional arguments:
  -h, --help            show this help message and exit
  --model MODEL         Choose the semantic segmentation methods.
  --base_model BASE_MODEL
                        Choose the backbone model.
  --dataset DATASET     The path of the dataset.
  --num_classes NUM_CLASSES
                        The number of classes to be segmented.
  --random_crop RANDOM_CROP
                        Whether to randomly crop the image.
  --crop_height CROP_HEIGHT
                        The height to crop the image.
  --crop_width CROP_WIDTH
                        The width to crop the image.
  --batch_size BATCH_SIZE
                        The training batch size.
  --valid_batch_size VALID_BATCH_SIZE
                        The validation batch size.
  --num_epochs NUM_EPOCHS
                        The number of epochs to train for.
  --initial_epoch INITIAL_EPOCH
                        The initial epoch of training.
  --h_flip H_FLIP       Whether to randomly flip the image horizontally.
  --v_flip V_FLIP       Whether to randomly flip the image vertically.
  --brightness BRIGHTNESS [BRIGHTNESS ...]
                        Randomly change the brightness (list).
  --rotation ROTATION   The angle to randomly rotate the image.
  --zoom_range ZOOM_RANGE [ZOOM_RANGE ...]
                        The times for zooming the image.
  --channel_shift CHANNEL_SHIFT
                        The channel shift range.
  --data_aug_rate DATA_AUG_RATE
                        The rate of data augmentation.
  --checkpoint_freq CHECKPOINT_FREQ
                        How often to save a checkpoint.
  --validation_freq VALIDATION_FREQ
                        How often to perform validation.
  --num_valid_images NUM_VALID_IMAGES
                        The number of images used for validation.
  --data_shuffle DATA_SHUFFLE
                        Whether to shuffle the data.
  --random_seed RANDOM_SEED
                        The random shuffle seed.
  --weights WEIGHTS     The path of weights to be loaded.If you only want to use the model in your own training code, you can do as this:from builders.model_builder import builder

model, base_model = builder(num_classes, input_size, model='SegNet', base_model=None)Note:If you don't give the parameter "base_model", the default backbone will be used.Testing:Similarly, you can evaluate the model on your own dataset:python test.py --model FCN-8s --base_model ResNet50 --dataset "dataset_path" --num_classes "num_classes" --weights "weights_path"Note:If the parameter "weights" is None, the weigths saved in default path will be loaded.Predicting:You can get the prediction of a single RGB image as this:python predict.py --model FCN-8s --base_model ResNet50 --num_classes "num_classes" --weights "weights_path" --image_path "image_path"PyPIAlternatively, you can install the project through PyPI.pip install semantic-segmentationAnd you can use model_builders to build different models or directly call the class of semantic segmentation.from semantic_segmentation import model_builders
net, base_net = model_builders(num_classes, input_size, model='SegNet', base_model=None)orfrom semantic_segmentation import models
net = models.FCN(num_classes, version='FCN-8s')(input_size=input_size)Pre-trainedDue to my limited computing resources, there is no pre-training model yet. And maybe it will be added in the future.FeedbackIf you like this work, please give me a star! And if you find
any errors or have any suggestions, please contact me.GitHub:luyanger1799Email:luyanger1799@outlook.com