资源算法image-segmentation-keras

image-segmentation-keras

2020-01-08 | |  41 |   0 |   0

Image Segmentation Keras : Implementation of Segnet, FCN, UNet, PSPNet and other models in Keras.

PyPI versionDownloadsBuild StatusSay Thanks!GPLv3 licenseTwitter

Implementation of various Deep Image Segmentation models in keras.

Link to the full blog post with tutorial : https://divamgupta.com/image-segmentation/2019/06/06/deep-learning-semantic-segmentation-keras.html

Our Other Repositories

Contributors

Divam Gupta : https://divamgupta.com Twitter

Rounaq Jhunjhunu wala

Models

Following models are supported:

model_nameBase ModelSegmentation Model
fcn_8Vanilla CNNFCN8
fcn_32Vanilla CNNFCN8
fcn_8_vggVGG 16FCN8
fcn_32_vggVGG 16FCN32
fcn_8_resnet50Resnet-50FCN32
fcn_32_resnet50Resnet-50FCN32
fcn_8_mobilenetMobileNetFCN32
fcn_32_mobilenetMobileNetFCN32
pspnetVanilla CNNPSPNet
vgg_pspnetVGG 16PSPNet
resnet50_pspnetResnet-50PSPNet
unet_miniVanilla Mini CNNU-Net
unetVanilla CNNU-Net
vgg_unetVGG 16U-Net
resnet50_unetResnet-50U-Net
mobilenet_unetMobileNetU-Net
segnetVanilla CNNSegnet
vgg_segnetVGG 16Segnet
resnet50_segnetResnet-50Segnet
mobilenet_segnetMobileNetSegnet



Getting Started

Prerequisites

  • Keras 2.0

  • opencv for python

  • Theano / Tensorflow / CNTK

apt-get install -y libsm6 libxext6 libxrender-dev
pip install opencv-python

Installing

Install the module

pip install keras-segmentation

or

pip install git+https://github.com/divamgupta/image-segmentation-keras

or

git clone https://github.com/divamgupta/image-segmentation-kerascd image-segmentation-keras
python setup.py install

pip install will be available soon!

Pre-trained models:

from keras_segmentation.pretrained import pspnet_50_ADE_20K , pspnet_101_cityscapes, pspnet_101_voc12

model = pspnet_50_ADE_20K() # load the pretrained model trained on ADE20k datasetmodel = pspnet_101_cityscapes() # load the pretrained model trained on Cityscapes datasetmodel = pspnet_101_voc12() # load the pretrained model trained on Pascal VOC 2012 dataset# load any of the 3 pretrained modelsout = model.predict_segmentation(    inp="input_image.jpg",    out_fname="out.png")

Preparing the data for training

You need to make two folders

  • Images Folder - For all the training images

  • Annotations Folder - For the corresponding ground truth segmentation images

The filenames of the annotation images should be same as the filenames of the RGB images.

The size of the annotation image for the corresponding RGB image should be same.

For each pixel in the RGB image, the class label of that pixel in the annotation image would be the value of the blue pixel.

Example code to generate annotation images :

import cv2import numpy as np

ann_img = np.zeros((30,30,3)).astype('uint8')
ann_img[ 3 , 4 ] = 1 # this would set the label of pixel 3,4 as 1cv2.imwrite( "ann_1.png" ,ann_img )

Only use bmp or png format for the annotation images.

Download the sample prepared dataset

Download and extract the following:

https://drive.google.com/file/d/0B0d9ZiqAgFkiOHR1NTJhWVJMNEU/view?usp=sharing

You will get a folder named dataset1/

Using the python module

You can import keras_segmentation in  your python script and use the API

from keras_segmentation.models.unet import vgg_unet

model = vgg_unet(n_classes=51 ,  input_height=416, input_width=608  )

model.train(    train_images =  "dataset1/images_prepped_train/",    train_annotations = "dataset1/annotations_prepped_train/",    checkpoints_path = "/tmp/vgg_unet_1" , epochs=5)

out = model.predict_segmentation(    inp="dataset1/images_prepped_test/0016E5_07965.png",    out_fname="/tmp/out.png")import matplotlib.pyplot as plt
plt.imshow(out)# evaluating the model print(model.evaluate_segmentation( inp_images_dir="dataset1/images_prepped_test/"  , annotations_dir="dataset1/annotations_prepped_test/" ) )

Usage via command line

You can also use the tool just using command line

Visualizing the prepared data

You can also visualize your prepared annotations for verification of the prepared data.

python -m keras_segmentation verify_dataset 
 --images_path="dataset1/images_prepped_train/" 
 --segs_path="dataset1/annotations_prepped_train/"  
 --n_classes=50
python -m keras_segmentation visualize_dataset 
 --images_path="dataset1/images_prepped_train/" 
 --segs_path="dataset1/annotations_prepped_train/"  
 --n_classes=50

Training the Model

To train the model run the following command:

python -m keras_segmentation train 
 --checkpoints_path="path_to_checkpoints" 
 --train_images="dataset1/images_prepped_train/" 
 --train_annotations="dataset1/annotations_prepped_train/" 
 --val_images="dataset1/images_prepped_test/" 
 --val_annotations="dataset1/annotations_prepped_test/" 
 --n_classes=50 
 --input_height=320 
 --input_width=640 
 --model_name="vgg_unet"

Choose model_name from the table above

Getting the predictions

To get the predictions of a trained model

python -m keras_segmentation predict 
 --checkpoints_path="path_to_checkpoints" 
 --input_path="dataset1/images_prepped_test/" 
 --output_path="path_to_predictions"

Model Evaluation

To get the IoU scores

python -m keras_segmentation evaluate_model 
 --checkpoints_path="path_to_checkpoints" 
 --images_path="dataset1/images_prepped_test/" 
 --segs_path="dataset1/annotations_prepped_test/"

Fine-tuning from existing segmentation model

The following example shows how to fine-tune a model with 10 classes .

from keras_segmentation.models.model_utils import transfer_weightsfrom keras_segmentation.pretrained import pspnet_50_ADE_20Kfrom keras_segmentation.models.pspnet import pspnet_50

pretrained_model = pspnet_50_ADE_20K()

new_model = pspnet_50( n_classes=51 )

transfer_weights( pretrained_model , new_model  ) # transfer weights from pre-trained model to your modelnew_model.train(    train_images =  "dataset1/images_prepped_train/",    train_annotations = "dataset1/annotations_prepped_train/",    checkpoints_path = "/tmp/vgg_unet_1" , epochs=5)

Projects using keras-segmentation

Here are a few projects which are using our library :

If you use our code in a publicly available project, please add the link here ( by posting an issue or creating a PR )


上一篇:tf-keras-SegNet

下一篇:Keras-SegNet-Basic

用户评价
全部评价

热门资源

  • seetafaceJNI

    项目介绍 基于中科院seetaface2进行封装的JAVA...

  • spark-corenlp

    This package wraps Stanford CoreNLP annotators ...

  • Keras-ResNeXt

    Keras ResNeXt Implementation of ResNeXt models...

  • capsnet-with-caps...

    CapsNet with capsule-wise convolution Project ...

  • shih-styletransfer

    shih-styletransfer Code from Style Transfer ...