Skip to content

Surface Defect Detection with Segmentation-Decision Network on KolektorSDD

License

Notifications You must be signed in to change notification settings

skokec/segdec-net-jim2019

Folders and files

NameName
Last commit message
Last commit date

Latest commit

7784910 · Jun 24, 2021

History

11 Commits
Jul 22, 2019
Jun 24, 2021
Jun 24, 2021
Jun 11, 2019
Jun 11, 2019
Jun 19, 2019
Jun 11, 2019
Aug 12, 2019

Repository files navigation

Surface Defect Detection with Segmentation-Decision Network on KolektorSDD

Official TensorFlow implementation for Segmentation-based deep-learning approach for surface-defect detection that uses segmentation and decision networks for the detection of surface defects. This work was done in collaboration with Kolektor Group d.o.o..

CC BY-NC-SA 4.0

Code and the dataset are licensed under Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License. For comerical use please contact [email protected].

CC BY-NC-SA 4.0

Citation:

Please cite JIM 2019 journal paper:

@article{Tabernik2019JIM,
  author = {Tabernik, Domen and {\v{S}}ela, Samo and Skvar{\v{c}}, Jure and Sko{\v{c}}aj, Danijel},
  journal = {Journal of Intelligent Manufacturing},
  title = {{Segmentation-Based Deep-Learning Approach for Surface-Defect Detection}},
  year = {2019},
  month = {May},
  day = {15},
  issn={1572-8145},
  doi={10.1007/s10845-019-01476-x}
}

Dependencies:

  • python2.7
  • TensorFlow r1.1 or newer (tested up to r1.8)
  • python libs: numpy, scipy, six, PIL, sklearn, pylab, matplotlib

Dataset

The full dataset Kolektor Surface Defect Dataset (KolektorSDD) is available here.

We split the dataset into three folds to perform 3-fold cross validation. The splits are available at http://box.vicos.si/skokec/gostop/KolektorSDD-training-splits.zip.

Fully prepared TensorFlow dataset split into 3 folds is available at http://box.vicos.si/skokec/gostop/KolektorSDD-dilate=5-tensorflow.zip.

Usage of training/evaluation code

The following files are used to train/evaluate the model:

  • segdec_train.py: MAIN ENTRY for training and evaluation
  • segdec_model.py: model file for the network
  • segdec_data.py: dataset class for training the model

Using the TensorFlow ready KolektorSDD (with dilate=5 for mask) dataset you can train and evaluate with the following:

# 1. Download and extract `KolektorSDD-dilate=5-tensorflow.zip`
mkdir db
cd db
wget http://box.vicos.si/skokec/gostop/KolektorSDD-dilate=5-tensorflow.zip
unzip -x KolektorSDD-dilate=5-tensorflow.zip
cd ..


# Empty folder where models/results will be stored
export OUTPUT_FOLDER=`pwd`/output

# folder where `KolektorSDD-dilate=5-tensorflow.zip` is extracted (must contain `KolektorSDD-dilate=5` subfolder).
export DATASET_FOLDER=`pwd`/db

mkdir $OUTPUT_FOLDER

# 2. Train only segmentation network first:

python -u segdec_train.py --fold=0,1,2 --gpu=0 --max_steps=6600 --train_subset=train \
        --seg_net_type=ENTROPY \
        --size_height=1408 \
        --size_width=512 \
        --with_seg_net=True \
        --with_decision_net=False \
        --storage_dir=$OUTPUT_FOLDER \
        --dataset_dir=$DATASET_FOLDER \
        --datasets=KolektorSDD-dilate=5 \
        --name_prefix=full-size_cross-entropy

# 3. Train and evaluate decision network based on existing segmentation network:

# The `--pretrained_main_folder` must point to the folder where 'fold_XY' subfolders with the trained segmentation models are.
# NOTE: Getting several `Not found: Key tower_0//decision` warrnings when loading the model is OK since the pre-trained model does not have decision net layers yet.

python -u segdec_train.py --fold=0,1,2 --gpu=0 --max_steps=6600 --train_subset=train \
            --seg_net_type=ENTROPY \
            --size_height=1408 \
            --size_width=512 \
            --with_seg_net=False \
            --with_decision_net=True \
            --storage_dir=$OUTPUT_FOLDER \
            --dataset_dir=$DATASET_FOLDER \
            --datasets=KolektorSDD-dilate=5 \
            --name_prefix=decision-net_full-size_cross-entropy \
            --pretrained_main_folder=$OUTPUT_FOLDER/segdec_train/KolektorSDD-dilate=5/full-size_cross-entropy


# 4. Print evaluation metrics combined from all folds

python -u segdec_print_eval.py $OUTPUT_FOLDER/segdec_eval/KolektorSDD-dilate=5/decision-net_full-size_cross-entropy

Note: The model is sensitive to random data shuffles during the training and will lead to different performance with different runs.

About

Surface Defect Detection with Segmentation-Decision Network on KolektorSDD

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages