Skip to main content

Conditional Random Field Implementation for segmentation models as used in Deeplab-v2

Project description

License: MIT PyPI

Fully Connected CRF

This repo implements CRF as described in Deeplab paper it takes about 0.2 seconds per image. Following image is taken form DeepLab paper

alt text

Requirements

Python <= 3.6
pydensecrf
cv2
matplotlib
gray2color

It takes following arguments. For details visit project page.

        ⚠ Zero pixels are consdered background
        img_path : path to an image, 
                        Format [H, W, 3]; values ranging from [0, 255]
        model_op_path : path model output of the same input image.
                        Format [H, W]; values ranging from [0, num_of_classes]
        num_of_classes : number of classes in a dataset e.g. in cityscape has 30 classes
        clr_op : color the output or not a bool
        pallet2use : see https://pypi.org/project/gray2color/ for details
        img_w : for resizing image and mask to same size default is 1024
        img_h : for resizing image and mask to same size default is 512
        apperance_kernel : The PairwiseBilateral term in CRF a list of values in order [sxy, srgb, compat]  
                            default values are [8, 164, 100]
        spatial_kernel : The PairwiseGaussian term in CRF a list of values in order [sxy, compat]  
                            default values are [3, 10]

Why CRF?

CRF’s are used for smoothing the noisy segmentation maps. See image below.

alt text

Types of CRF

Grid CRF

alt text

Fully connected CRF

This is the one implemented in this repo.

alt text

Some mathematical Background

FC CRF consists of two Guassian Kernels one is called appearance kernel and other is called spatioal kernel. The spatial kernel is used of controlling the smoothness of the segmented regions. and the appearace kernel controls which regions of segemneted image should be combined to one after lookin at origina input image.

alt text

You can control the parameters of these kernels as follwoing

# inside the CRF function and class change;
#        1. increasing sxy puts more focus on changing intensity
#        2. if we increase srgb the pixels in close proximity will be assigned one class 
#           (high value will cause the erosion like effect at boundaries)

FC-CRF in Machine Learning Pipeling

alt text

Example Usage

from seg_crf import Seg_CRF

img_path='D:/Anaconda/Image_analysis/cat.png'
model_op_path='D:/Anaconda/Image_analysis/mask.png'

crf = Seg_CRF(img_path, model_op_path, 2, img_w=1024, img_h=512, clr_op=True, pallet2use ='cityscape')

gray, rgb = crf.start()
plt.imshow(rgb)

Appearance and Spatial Kernel

# Default Values are
apperance_kernel = [8, 164, 100] # PairwiseBilateral [sxy, srgb, compat]  
spatial_kernel = [3, 10]         # PairwiseGaussian  [sxy, compat] 

# or if you want to to specify seprately for each XY direction and RGB color channel then

apperance_kernel = [(1.5, 1.5), (64, 64, 64), 100] # PairwiseBilateral [sxy, srgb, compat]  
spatial_kernel = [(0.5, 0.5), 10]                  # PairwiseGaussian  [sxy, compat] 
# Use like
crf = Seg_CRF(img_path, model_op_path, 2, img_w=1024, img_h=512,
                 apperance_kernel=apperance_kernel, spatial_kernel=spatial_kernel,
                 clr_op=True, pallet2use ='cityscape')

gray, rgb = crf.start()

Visual Results

For binar and multiclass segementation

alt text

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

seg_crf-0.1.2.tar.gz (4.5 kB view details)

Uploaded Source

Built Distribution

seg_crf-0.1.2-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file seg_crf-0.1.2.tar.gz.

File metadata

  • Download URL: seg_crf-0.1.2.tar.gz
  • Upload date:
  • Size: 4.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.24.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.7.6

File hashes

Hashes for seg_crf-0.1.2.tar.gz
Algorithm Hash digest
SHA256 c98a666dcdf047fe38d41172cd7ce8d8aea03de55a13e1cd6d6e761af4e8f4b2
MD5 8c79cb04d130d5b1da6f94e680be87b6
BLAKE2b-256 219b28c1dd01b7ff575d9c1f18af2ea6a7bb02613cd9bede477d56d70a2c8d29

See more details on using hashes here.

File details

Details for the file seg_crf-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: seg_crf-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 5.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.24.0 requests-toolbelt/0.9.1 tqdm/4.50.2 CPython/3.7.6

File hashes

Hashes for seg_crf-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 128951bee9b4d7fef0b7f736a99544832a67dd6a4f33a2b8727271b61844a82a
MD5 795cb71fb1f031885c0563bd1be18df9
BLAKE2b-256 247eba7a2fbab92c1646241e3e8183b8d184dccc9ebe29d071b9ff8fee2e1b47

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page