精华内容
下载资源
问答
  • ViDi 红色:分割段和缺陷检测 ViDi 红色工具用于探检测异常和美观缺陷。无论是装饰表面上的划痕挂擦、不完整或不正确的组件,还是织品上的纺织问题,红色工具只需学习物体的正常外观,包括明显但可容受许的差异,...
  • ViDi 红色:分割段和缺陷检测 ViDi 红色工具用于探检测异常和美观缺陷。无论是装饰表面上的划痕挂擦、不完整或不正确的组件,还是织品上的纺织问题,红色工具只需学习物体的正常外观,包括明显但可容受许的差异,...
  • ViDi 红色:分割段和缺陷检测 ViDi 红色工具用于探检测异常和美观缺陷。无论是装饰表面上的划痕挂擦、不完整或不正确的组件,还是织品上的纺织问题,红色工具只需学习物体的正常外观,包括明显但可容受许的差异,...
  • ViDi 红色:分割段和缺陷检测 ViDi 红色工具用于探检测异常和美观缺陷。无论是装饰表面上的划痕挂擦、不完整或不正确的组件,还是织品上的纺织问题,红色工具只需学习物体的正常外观,包括明显但可容受许的差异,...
  • halcon20.05示例程序 * * Deep learning anomaly detection example. * * This example demonstrates the general workflow for anomaly detection * based on deep learning. * * The workflow typically ...

    halcon20.05示例程序

    * 
    * Deep learning anomaly detection example.
    * 
    * This example demonstrates the general workflow for anomaly detection
    * based on deep learning.
    * 
    * The workflow typically consists of four steps which are described here:
    * 1. Dataset preprocessing.
    * 2. Training of the model and threshold estimation on 'ok' images.
    * 3. Qualitative evaluation of the trained model.
    * 4. Inference on new images.
    * 
    dev_update_off ()
    dev_close_window ()
    set_system ('seed_rand', 73)
    * 
    * 
    * ***   0.) SET INPUT/OUTPUT PATHS   ***
    * 
    * Set path to data.
    get_image_dir (HalconImages)
    * 
    * Base directory containing the folders with the used images.
    * There must be a 'good' or 'ok' subfolder in ImageDir.
    * For training, only images in the 'good' or 'ok' folders are used.
    * Images in subfolders named differently will be treated as containing anomalies.
    * They can be used for qualitative evaluation later.
    * 
    * Note: You can immediately train an anomaly detection model on your own data as long
    * as your images not showing any anomaly are located in a subfolder called 'good' or 'ok'.
    ImageDir := HalconImages + '/bottles'
    ImageSubDirs := ['good','broken_large','broken_small','contamination']
    * 
    * Folder where the ground truth anomaly regions are stored.
    * This folder is not required for training.
    * If there is no ground truth data available, set AnomalyDir to [].
    AnomalyDir := HalconImages + '/labels/bottles'
    * 
    * Folder where the preprocessed samples will be stored.
    OutputDir := './anomaly_bottle_data'
    * 
    * Dataset specific preprocessing.
    ExampleSpecificPreprocessing := true
    * 
    * Set image size. It should be large enough if the defects are small.
    * Please refer to the documentation of read_dl_model for possible restrictions
    * depending on the network.
    ImageWidth := 320
    ImageHeight := 320
    * 
    * Set the complexity of the model which roughly describes the capability of the model
    * to handle complex application images. A higher value can improve the performance but
    * increases the time needed to train the model.
    Complexity := 15
    * 
    * 
    * ***   1.) PREPARE   ***
    * 
    * Read and preprocess an anomaly detection dataset.
    * For optimal performance it is beneficial to do a custom
    * preprocessing step that defines input domains.
    * 
    * Load and split the dataset.
    create_dict (GenParamDataset)
    set_dict_tuple (GenParamDataset, 'image_sub_dirs', ImageSubDirs)
    read_dl_dataset_anomaly (ImageDir, AnomalyDir, [], [], GenParamDataset, DLDataset)
    * 
    * Note: make sure that every split contains at least one 'ok' image.
    * For a small number of images in the dataset you might need to increase
    * the validation fraction.
    split_dl_dataset (DLDataset, 50, 10, [])
    * 
    * Load the anomaly detection model and set parameters.
    * For documentation see set_dl_model_param () and get_dl_model_param ().
    read_dl_model ('initial_dl_anomaly_medium.hdl', DLModelHandle)
    set_dl_model_param (DLModelHandle, 'image_width', ImageWidth)
    set_dl_model_param (DLModelHandle, 'image_height', ImageHeight)
    set_dl_model_param (DLModelHandle, 'complexity', Complexity)
    set_dl_model_param (DLModelHandle, 'runtime', 'gpu')
    set_dl_model_param (DLModelHandle, 'runtime_init', 'immediately')
    * 
    * Set preprocessing parameters and preprocess.
    create_dict (PreprocessSettings)
    set_dict_tuple (PreprocessSettings, 'overwrite_files', true)
    create_dl_preprocess_param ('anomaly_detection', ImageWidth, ImageHeight, 3, [], [], 'constant_values', 'full_domain', [], [], [], [], DLPreprocessParam)
    preprocess_dl_dataset (DLDataset, OutputDir, DLPreprocessParam, PreprocessSettings, DLDatasetFileName)
    * 
    * Run a specific preprocessing for this example.
    * Note: For your own application, this step needs to be adapted.
    * In case the possible areas for defects (ROI) on the images can be restricted,
    * we recommend to define these areas as domains. For this example, this is
    * done in the exemplary procedure preprocess_dl_sample_bottle.
    get_dict_tuple (DLDataset, 'samples', DatasetSamples)
    if (ExampleSpecificPreprocessing)
        read_dl_samples (DLDataset, [0:|DatasetSamples| - 1], DLSampleBatch)
        preprocess_dl_samples_bottle (DLSampleBatch)
        write_dl_samples (DLDataset, [0:|DatasetSamples| - 1], DLSampleBatch, [], [])
    endif
    * 
    * Visually inspect ten randomly selected preprocessed DLSamples.
    create_dict (WindowDict)
    for Index := 0 to 9 by 1
        SampleIndex := int(rand(1) * |DatasetSamples|)
        read_dl_samples (DLDataset, SampleIndex, DLSample)
        dev_display_dl_data (DLSample, [], DLDataset, 'anomaly_ground_truth', [], WindowDict)
        dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
        * 
        get_dict_tuple (WindowDict, 'anomaly_ground_truth', WindowHandles)
        dev_set_window (WindowHandles[0])
        dev_disp_text ('Preprocessed image', 'window', 'top', 'left', 'black', [], [])
        * 
        stop ()
    endfor
    dev_close_window_dict (WindowDict)
    * 
    stop ()
    * 
    * 
    * ***   2.) TRAIN   ***
    * 
    * Create training parameters.
    * 
    * Control whether the training progress is displayed (true/false).
    EnableDisplay := true
    * 
    * Set a threshold for the training error and a maximum number of training epochs.
    * If the training error falls below this threshold, the training is finished.
    * Otherwise the training continues until the maximum number of epochs is reached.
    ErrorThreshold := 0.001
    MaxNumEpochs := 15
    * 
    * Set the domain ratio which controls the fraction of each image used for training.
    * The training result might be improved by setting a greater value, but this also
    * increases the training time.
    DomainRatio := 0.25
    * 
    * Regularization noise can make the training more robust. In case the training fails,
    * setting a higher value might help.
    RegularizationNoise := 0.01
    * 
    create_dict (TrainParamAnomaly)
    set_dict_tuple (TrainParamAnomaly, 'regularization_noise', RegularizationNoise)
    set_dict_tuple (TrainParamAnomaly, 'error_threshold', ErrorThreshold)
    set_dict_tuple (TrainParamAnomaly, 'domain_ratio', DomainRatio)
    create_dl_train_param (DLModelHandle, MaxNumEpochs, [], EnableDisplay, 73, 'anomaly', TrainParamAnomaly, TrainParam)
    * 
    * The training and thus the call of train_dl_model_anomaly_dataset ()
    * is done using the following procedure. This may take some time.
    train_dl_model (DLDataset, DLModelHandle, TrainParam, 0, TrainResults, TrainInfos, EvaluationInfos)
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
    * 
    dev_close_window ()
    * 
    * Store the trained model.
    write_dl_model (DLModelHandle, 'model_final.hdl')
    * 
    * 
    * ***   3.) EVALUATE   ***
    * 
    * Calculate classification and segmentation thresholds and perform evaluation.
    * 
    * Set the factor used to calculate the anomaly score. See the documentation of
    * get_dl_model_param for details.
    * This parameter can help to improve the anomaly score for a better classification
    * between 'ok' and 'nok' images. For example, in case the defects are small, a larger
    * value might be suitable.
    StandardDeviationFactor := 1.0
    set_dl_model_param (DLModelHandle, 'standard_deviation_factor', StandardDeviationFactor)
    * 
    * Estimate threshold values. They are used to determine whether a pixel or image
    * is regarded as anomalous. The procedure compute_dl_anomaly_thresholds returns
    * possible suggestions based on the dataset used. Depending on the application, manual
    * fine-tuning may be beneficial.
    create_dict (GenParamThreshold)
    set_dict_tuple (GenParamThreshold, 'enable_display', 'true')
    compute_dl_anomaly_thresholds (DLModelHandle, DLDataset, GenParamThreshold, AnomalySegmentationThreshold, AnomalyClassificationThresholds)
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
    * 
    dev_close_window ()
    * 
    * Set generic evaluation parameters and evaluate the model on the test split.
    create_dict (GenParamEvaluation)
    set_dict_tuple (GenParamEvaluation, 'measures', 'all')
    set_dict_tuple (GenParamEvaluation, 'anomaly_classification_thresholds', AnomalyClassificationThresholds)
    evaluate_dl_model (DLDataset, DLModelHandle, 'split', 'test', GenParamEvaluation, EvaluationResult, EvalParams)
    * 
    * Set display parameters.
    create_dict (GenParamDisplay)
    * 
    * Visualize the histogram over the anomaly scores and with it the classification
    * thresholds used for the evaluation.
    set_dict_tuple (GenParamDisplay, 'display_mode', ['score_histogram','score_legend'])
    create_dict (WindowDict)
    dev_display_anomaly_detection_evaluation (EvaluationResult, EvalParams, GenParamDisplay, WindowDict)
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', 'box', 'true')
    stop ()
    * 
    dev_close_window_dict (WindowDict)
    * 
    * Visualize evaluation results such as precision, recall, and confusion matrix
    * for a given classification threshold.
    set_dict_tuple (GenParamDisplay, 'display_mode', ['pie_charts_precision','pie_charts_recall','absolute_confusion_matrix'])
    * Select evaluation results for one threshold by its index in
    * AnomalyClassificationThresholds for display.
    set_dict_tuple (GenParamDisplay, 'classification_threshold_index', 2)
    create_dict (WindowDict)
    dev_display_anomaly_detection_evaluation (EvaluationResult, EvalParams, GenParamDisplay, WindowDict)
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
    * 
    dev_close_window_dict (WindowDict)
    * 
    * 
    * ***   4.) INFER   ***
    * 
    * To demonstrate the inference steps, we apply the
    * trained model to some randomly chosen example images.
    list_image_files (ImageDir + '/' + ImageSubDirs, 'default', 'recursive', ImageFiles)
    tuple_shuffle (ImageFiles, ImageFilesShuffled)
    * 
    * Choose thresholds for inference.
    InferenceClassificationThreshold := AnomalyClassificationThresholds[2]
    InferenceSegmentationThreshold := AnomalySegmentationThreshold
    * 
    * Create dictionary with dataset parameters used for display.
    create_dict (DLDatasetInfo)
    set_dict_tuple (DLDatasetInfo, 'class_names', ['ok','nok'])
    set_dict_tuple (DLDatasetInfo, 'class_ids', [0,1])
    * 
    create_dict (WindowDict)
    for IndexInference := 0 to min2(|ImageFilesShuffled|,10) - 1 by 1
        read_image (Image, ImageFilesShuffled[IndexInference])
        gen_dl_samples_from_images (Image, DLSample)
        preprocess_dl_samples (DLSample, DLPreprocessParam)
        * 
        * Use the same dataset specific preprocessing as for training.
        if (ExampleSpecificPreprocessing)
            preprocess_dl_samples_bottle (DLSample)
        endif
        * 
        apply_dl_model (DLModelHandle, DLSample, [], DLResult)
        * 
        * Apply thresholds to classify regions and the entire image.
        threshold_dl_anomaly_results (InferenceSegmentationThreshold, InferenceClassificationThreshold, DLResult)
        * 
        * Display the inference result.
        dev_display_dl_data (DLSample, DLResult, DLDatasetInfo, ['anomaly_result','anomaly_image'], [], WindowDict)
        dev_disp_text ('Press F5 (continue)', 'window', 'bottom', 'center', 'black', [], [])
        stop ()
    endfor
    * 
    dev_close_window_dict (WindowDict)

    无注释版

    dev_update_off ()
    dev_close_window ()
    set_system ('seed_rand', 73)
    
    * ***   0.) SET INPUT/OUTPUT PATHS   ***
    
    get_image_dir (HalconImages)
    ImageDir := HalconImages + '/bottles'
    ImageSubDirs := ['good','broken_large','broken_small','contamination']
    AnomalyDir := HalconImages + '/labels/bottles'
    OutputDir := './anomaly_bottle_data'
    
    ExampleSpecificPreprocessing := true
    ImageWidth := 320
    ImageHeight := 320
    Complexity := 15
    
    * ***   1.) PREPARE   ***
    create_dict (GenParamDataset)
    set_dict_tuple (GenParamDataset, 'image_sub_dirs', ImageSubDirs)
    read_dl_dataset_anomaly (ImageDir, AnomalyDir, [], [], GenParamDataset, DLDataset)
    split_dl_dataset (DLDataset, 50, 10, [])
    read_dl_model ('initial_dl_anomaly_medium.hdl', DLModelHandle)
    set_dl_model_param (DLModelHandle, 'image_width', ImageWidth)
    set_dl_model_param (DLModelHandle, 'image_height', ImageHeight)
    set_dl_model_param (DLModelHandle, 'complexity', Complexity)
    set_dl_model_param (DLModelHandle, 'runtime', 'gpu')
    set_dl_model_param (DLModelHandle, 'runtime_init', 'immediately')
    create_dict (PreprocessSettings)
    set_dict_tuple (PreprocessSettings, 'overwrite_files', true)
    create_dl_preprocess_param ('anomaly_detection', ImageWidth, ImageHeight, 3, [], [], 'constant_values', 'full_domain', [], [], [], [], DLPreprocessParam)
    preprocess_dl_dataset (DLDataset, OutputDir, DLPreprocessParam, PreprocessSettings, DLDatasetFileName)
    get_dict_tuple (DLDataset, 'samples', DatasetSamples)
    if (ExampleSpecificPreprocessing)
        read_dl_samples (DLDataset, [0:|DatasetSamples| - 1], DLSampleBatch)
        preprocess_dl_samples_bottle (DLSampleBatch)
        write_dl_samples (DLDataset, [0:|DatasetSamples| - 1], DLSampleBatch, [], [])
    endif
    
    create_dict (WindowDict)
    for Index := 0 to 9 by 1
        SampleIndex := int(rand(1) * |DatasetSamples|)
        read_dl_samples (DLDataset, SampleIndex, DLSample)
        dev_display_dl_data (DLSample, [], DLDataset, 'anomaly_ground_truth', [], WindowDict)
        dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
        get_dict_tuple (WindowDict, 'anomaly_ground_truth', WindowHandles)
        dev_set_window (WindowHandles[0])
        dev_disp_text ('Preprocessed image', 'window', 'top', 'left', 'black', [], [])
        stop ()
    endfor
    dev_close_window_dict (WindowDict)
    stop ()
    
    * ***   2.) TRAIN   ***
    EnableDisplay := true
    ErrorThreshold := 0.001
    MaxNumEpochs := 15
    DomainRatio := 0.25
    RegularizationNoise := 0.01
    create_dict (TrainParamAnomaly)
    set_dict_tuple (TrainParamAnomaly, 'regularization_noise', RegularizationNoise)
    set_dict_tuple (TrainParamAnomaly, 'error_threshold', ErrorThreshold)
    set_dict_tuple (TrainParamAnomaly, 'domain_ratio', DomainRatio)
    create_dl_train_param (DLModelHandle, MaxNumEpochs, [], EnableDisplay, 73, 'anomaly', TrainParamAnomaly, TrainParam)
    
    train_dl_model (DLDataset, DLModelHandle, TrainParam, 0, TrainResults, TrainInfos, EvaluationInfos)
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
    dev_close_window ()
    write_dl_model (DLModelHandle, 'model_final.hdl')
    
    * ***   3.) EVALUATE   ***
    StandardDeviationFactor := 1.0
    set_dl_model_param (DLModelHandle, 'standard_deviation_factor', StandardDeviationFactor)
    create_dict (GenParamThreshold)
    set_dict_tuple (GenParamThreshold, 'enable_display', 'true')
    compute_dl_anomaly_thresholds (DLModelHandle, DLDataset, GenParamThreshold, AnomalySegmentationThreshold, AnomalyClassificationThresholds)
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
    dev_close_window ()
    create_dict (GenParamEvaluation)
    set_dict_tuple (GenParamEvaluation, 'measures', 'all')
    set_dict_tuple (GenParamEvaluation, 'anomaly_classification_thresholds', AnomalyClassificationThresholds)
    evaluate_dl_model (DLDataset, DLModelHandle, 'split', 'test', GenParamEvaluation, EvaluationResult, EvalParams)
    create_dict (GenParamDisplay)
    set_dict_tuple (GenParamDisplay, 'display_mode', ['score_histogram','score_legend'])
    create_dict (WindowDict)
    dev_display_anomaly_detection_evaluation (EvaluationResult, EvalParams, GenParamDisplay, WindowDict)
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', 'box', 'true')
    stop ()
    dev_close_window_dict (WindowDict)
    set_dict_tuple (GenParamDisplay, 'display_mode', ['pie_charts_precision','pie_charts_recall','absolute_confusion_matrix'])
    set_dict_tuple (GenParamDisplay, 'classification_threshold_index', 2)
    create_dict (WindowDict)
    dev_display_anomaly_detection_evaluation (EvaluationResult, EvalParams, GenParamDisplay, WindowDict)
    dev_disp_text ('Press Run (F5) to continue', 'window', 'bottom', 'right', 'black', [], [])
    stop ()
    dev_close_window_dict (WindowDict)
    
    * ***   4.) INFER   ***
    list_image_files (ImageDir + '/' + ImageSubDirs, 'default', 'recursive', ImageFiles)
    tuple_shuffle (ImageFiles, ImageFilesShuffled)
    
    InferenceClassificationThreshold := AnomalyClassificationThresholds[2]
    InferenceSegmentationThreshold := AnomalySegmentationThreshold
    create_dict (DLDatasetInfo)
    set_dict_tuple (DLDatasetInfo, 'class_names', ['ok','nok'])
    set_dict_tuple (DLDatasetInfo, 'class_ids', [0,1])
    create_dict (WindowDict)
    for IndexInference := 0 to min2(|ImageFilesShuffled|,10) - 1 by 1
        read_image (Image, ImageFilesShuffled[IndexInference])
        gen_dl_samples_from_images (Image, DLSample)
        preprocess_dl_samples (DLSample, DLPreprocessParam)
        if (ExampleSpecificPreprocessing)
            preprocess_dl_samples_bottle (DLSample)
        endif
        apply_dl_model (DLModelHandle, DLSample, [], DLResult)
        threshold_dl_anomaly_results (InferenceSegmentationThreshold, InferenceClassificationThreshold, DLResult)
        dev_display_dl_data (DLSample, DLResult, DLDatasetInfo, ['anomaly_result','anomaly_image'], [], WindowDict)
        dev_disp_text ('Press F5 (continue)', 'window', 'bottom', 'center', 'black', [], [])
        stop ()
    endfor
    dev_close_window_dict (WindowDict)

     

     

    展开全文
  • ViDi 蓝色:固定 ViDi 蓝色工具用于寻找和定位图像中的一个或多个...蓝色工具都能通过学习有注释的图像来定位且和识别复杂的功能特征和物体。要培训蓝色工具,您只需提供标记了目标功能特征的图像。技术交流13642395590
  • 深度学习实现缺陷检测算法汇总

    万次阅读 多人点赞 2020-02-17 16:51:08
    作者:Tom Hardy Date:2020-1-6 来源:总结|深度学习...深度学习在特征提取和定位上取得了非常好的效果,越来越多的学者和工程人员开始将深度学习算法引入到缺陷检测领域中,下面将会介绍几种深度学习算法在缺陷...

    作者:Tom Hardy
    Date:2020-1-6
    来源:总结|深度学习实现缺陷检测

    前言

    缺陷检测是工业上非常重要的一个应用,由于缺陷多种多样,传统的机器视觉算法很难做到对缺陷特征完整的建模和迁移,复用性不大,要求区分工况,这会浪费大量的人力成本。深度学习在特征提取和定位上取得了非常好的效果,越来越多的学者和工程人员开始将深度学习算法引入到缺陷检测领域中,下面将会介绍几种深度学习算法在缺陷检测领域中的应用。

    1、A fast and robust convolutional neural network-based defect detection model in product quality control

    检测对象:布匹缺陷。

    主要思想:这是一篇比较早的文章了,主要通过对输入图像进行切片,然后把切片图像送入深度学习网络中做判断,较为简单。在推理时,通过滑窗检测方式进行逐位置识别。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    优缺点:
    1、 由于使用分类方式,准确率较为高
    2、 由于滑窗遍历,速度慢

    2、Automatic Defect Detection of Fasteners on the Catenary Support Device Using Deep Convolutional Neural Network(基于深度卷积网络的接触网支架紧固件缺陷自动检测)

    检测对象:紧固件是否缺失。

    主要思想:检测接触网支架紧固件是否缺陷,采用方式为Object Detection。

    在这里插入图片描述
    文章主要采用三阶段方式:

    在这里插入图片描述
    第一阶段:定位主要结构件位置,采用SSD作为检测网络。
    在这里插入图片描述
    第二阶段:对第一阶段检测出的各个结构图像中的紧固件做检测,也是采用Object Detection方式。

    在这里插入图片描述
    第三阶段:在第二阶段的基础上,对检测图像进行crop,将其送到分类网络进行分类,看是否缺少紧固件。

    在这里插入图片描述
    思路也算比较简单,但不是端到端,实际应用起来可能比较困难。

    3、Automatic Fabric Defect Detection with a Multi-Scale Convolutional Denoising Autoencoder Network Model(基于多尺度卷积消噪自编码网络模型的织物疵点自动检测)

    检测对象:纺织物和布匹的瑕疵点检测。

    主要思想:织物疵点检测是纺织制造业质量控制中必不可少的环节。传统的织物检测通常采用人工视觉的方法进行,效率低,长期工业应用精度差。论文提出使用高斯金字塔结合语义分割的方式来重建缺陷,推理阶段通过结合多尺度结果,完成融合。这种方法在织物疵点检测中有几个突出的优点。首先,只需少量的无缺陷样本就可以进行训练。这对于收集大量有缺陷样品困难且不可行的情况尤其重要。其次,由于采用了多模态积分策略,与一般的检测方法相比,该方法具有更高的鲁棒性和准确性。第三,根据我们的结果,它可以处理多种类型的纺织面料,从简单到复杂。实验结果表明,该模型具有较强的鲁棒性和良好的整体性能。

    模型结构:

    在这里插入图片描述
    在这里插入图片描述

    检测结果:

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    4、An Unsupervised-Learning-Based Approach for Automated Defect Inspection on Textured Surfaces

    检测对象:作者和上一篇文章相同,思想也非常相像,主要是针对均匀和非规则纹理表面上的缺陷。这里不再多叙述,有兴趣的话可以阅读原论文~
    在这里插入图片描述

    5、Automatic Metallic Surface Defect Detection and Recognition with Convolutional Neural Networks

    检测对象:金属表面缺陷检测

    主要思想: 本文讨论了用一种能准确定位和分类从实际工业环境中获取的输入图像中出现的缺陷的双重过程来自动检测金属缺陷。设计了一种新的级联自动编码器(CASAE)结构,用于缺陷的分割和定位。级联网络将输入的缺陷图像转化为基于语义分割的像素级预测掩模。利用压缩卷积神经网络(CNN)将分割结果的缺陷区域划分为特定的类。利用工业数据集可以成功地检测出各种条件下的金属缺陷。实验结果表明,该方法满足金属缺陷检测的稳健性和准确性要求。同时,它也可以扩展到其他检测应用中。

    其实还是使用语义分割网络先定位像素级别的缺陷位置,然后通过分类网络对缺陷进行识别。

    在这里插入图片描述
    在这里插入图片描述

    实验结果:

    在这里插入图片描述

    6、Autonomous Structural Visual Inspection Using Region-Based Deep Learning for Detecting Multiple Damage Types

    检测对象:混凝土裂缝、中、高两级钢腐蚀、螺栓腐蚀和钢分层五种损伤类型

    主要思想:通过Faster RCNN检测网络实现的,偏应用型的一篇文章,效果不是特别好,这里只提供一个检测思路,详细内容请看论文。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    7、A Surface Defect Detection Method Based on Positive Samples

    检测对象:密集织物

    主要思想:本文提出了一种新的基于正样本训练的缺陷检测框架。基本检测的概念是建立一个重建网络,它可以修复样本中存在的缺陷区域,然后对输入样本与恢复样本进行比较,以指示缺陷区域的准确。结合GAN和自动编码器进行缺陷图像重建,利用LBP进行图像局部对比度检测缺陷。在算法的训练过程中,只需要正样本,不需要缺陷样本和人工标注。

    主要结构:

    在这里插入图片描述
    在这里插入图片描述

    在训练阶段,x是从训练集中随机拍摄的随机照片。C(x∼| x)是一个人工缺陷模块。它的功能是自动生成损坏的、有缺陷的样本,x∼是它的输出。EN和DE构成一个自动编码器,EN是一个编码器,DE是一个解码器,整个自动编码器在G an模型中可以看作是一个生成器。G的任务是修复有缺陷的图片。D是一个鉴别器,D的输出是它的鉴别器是真正样本的概率。

    在测试阶段,我们将测试图像x输入到自动编码器G中,得到恢复图像y,然后使用LBP算法提取x和y的特征,并比较x的每个像素的特征,其中x和y的特征差异较大,即缺陷。

    通过GAN的方式来进行缺陷检测和重建一直是个热点方向,而且效果比较好,本文的思路算是比较新颖,值得借鉴。

    实验结果:

    在这里插入图片描述
    8、Segmentation-based deep-learning approach for surface-defect detection

    检测对象:表面缺陷检测、裂纹检测(金属)

    主要思想:本文主要采用了两个网络,一个是判别网络,一个是分割网络。分割网络主要完成缺陷的分割,而判别网络在此基础上对缺陷作进一步分类。

    在这里插入图片描述
    在这里插入图片描述

    算法很新颖,实验结果也还不错:

    在这里插入图片描述

    9、SDD-CNN: Small Data-Driven Convolution Neural Networks for Subtle Roller Defect Inspection(小数据驱动卷积神经网络在轧辊微小缺陷检测中的应用)

    检测对象:轧辊微小缺陷检查

    主要思想:滚柱轴承是旋转机械中最关键、应用最广泛的部件之一。外观缺陷检测是轴承质量控制的关键。然而,在实际工业中,轴承缺陷往往是极其细微的,并且发生的概率很低。这就导致了正负样本数量的分布差异,使得依靠数据驱动的检测方法难以开发和部署。本文提出了一种用于轧辊微小缺陷检测的小数据驱动卷积神经网络(SDD-CNN)一种用于小数据预处理的集成方法。首先,应用标签膨胀(LD)来解决类分布不平衡的问题。其次,提出了一种半监督数据增广(SSDA)方法,以更有效和可控的方式扩展数据集。该方法通过训练一个粗糙的CNN模型来生成地面真值类激活,并指导图像的随机裁剪。第三,介绍了CNN模型的四种变体,即SqueezeNet v1, Inception v3,VGG-16, and ResNet-18,并将其用于轧辊表面缺陷的检测和分类。最后,进行了一系列丰富的实验和评估,表明SDD-CNN模型,特别是SDD Inception v3模型,在滚筒缺陷分类任务中执行得非常好,top-1精度达到99.56%。此外,与原始CNN模型相比,SDD-CNN模型的收敛时间和分类精度都有显著提高。

    网络结构:

    在这里插入图片描述
    实验结果:

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • 总结|深度学习实现缺陷检测

    千次阅读 2020-02-02 16:30:48
    作者:Tom Hardy Date:2020-01-06 ...深度学习在特征提取和定位上取得了非常好的效果,越来越多的学者和工程人员开始将深度学习算法引入到缺陷检测领域中,下面将会介绍几种深度学习算法在缺陷检...

    作者:Tom Hardy
    Date:2020-01-06
    来源:总结|深度学习实现缺陷检测

    展开全文
  • 使用深度学习 进行缺陷检测 链接: 千顺智能. 数据库– GRIMA database http://dmery.ing.puc.cl/index.php/material/gdxray/ steel surface defects – Micro surface defect database faculty.neu.edu....

    使用深度学习 进行缺陷检测

    链接: 千顺智能.

    数据库–

    GRIMA database

    http://dmery.ing.puc.cl/index.php/material/gdxray/

    steel surface defects – Micro surface defect database

    faculty.neu.edu.cn/me/songkc/vision-based_SIS_Steel.html

    faculty.neu.edu.cn/yunhyan/SCACM.html

    https://github.com/abin24/Magnetic-tile-defect-datasets

    https://github.com/abin24/For-share

    https://github.com/cuilimeng/CrackForest-dataset

    https://github.com/maweifei/Bridge_Crack_Image_Data

    前言
    深度学习在计算机视觉主流领域已经应用的很成熟,但是在工业领域(某些领域应用也很成熟),比如产品表面缺陷检测,总感觉没有发挥深度学习的强大能力,近几年表面缺陷的 相关研究主要是集中在各种借鉴主流神经网络框架,从CNN到YOLO,SSD,甚至到语义分割的FCN相关论文,通过一些技术,对框架进行轻量化,对缺陷进行分类或检测。不过,逃不出一个基础:一定要有缺陷样本可供训练,而且数量不能太少!当然,也有一些课题组记住稀疏编码、字典学习、稀疏自编码等对表面缺陷进行检测,这类方法很有局限性,主要针对那些有周期性背景纹理的图像,比如丝织品,印刷品等。

    很多课题组、工业软件公司都想开发出一些切合实际应用的算法软件,在缺陷检测领域,比较好的公司有:VIDI、Halcon等,听说海康威视也在搞工业产品方便的算法研究。

    下面开始说下这篇文章,文章是今年发表的,我不知道前人有没有这样的尝试,作者提出只依据已有的正常表面图像样本,通过一定的技术手段对缺陷样本进行检测,很好的将最近研究火热的GAN应用于框架中,这一年,课题组的老师也一直讨论这种方法的可行性,缺陷的检测要不要有缺陷样本,从稀疏自编码,小样本学习再到计算机视觉研究热点之一的零样本学习,得出结论:大多数工业产品表面缺陷检测是需要缺陷样本或者人为制作的缺陷样本,论文虽然是没有直接使用生产线上的缺陷样本,但是通过算法人为的产生了缺陷样本,并很好的融合和GAN在图像修复领域的强大能力,整个框架的设计很巧妙。

    论文下载链接:A Surface Defect Detection Method Based on Positive Samples

    文章思路:论文的整体思路就是GAN在图像修复和重建方便具有很强大的能力,通过人为的去在正常样本上“随意”添加一些缺陷,训练阶段让GAN去学习一个可以修复这些缺陷区域的网络,检测阶段时,输入一个真实缺陷样本,训练好的GAN会对其进行修复,再基于LBP可完成缺陷检测。整个算法框架不需要真实的缺陷样本和手工标签,但是在框架中通过人工会产生一些缺陷区域。

    具体实施:

    (1)结合GAN和Autoencoder算法进行图像样本修复(重建);

    (2)利用LBP算法比较恢复后的图像和原始输入图像,从而更准确的找到缺陷的位置。

    2.文章主要内容
    论文的主体框架思想是基于GAN网络的结构。GAN 主要包括了两个部分,即生成器 generator  G与判别器 discriminator D。生成器主要用来学习真实图像分布从而让自身生成的图像更加真实,以“骗过”判别器。判别器则需要对接收的图片进行真假判别。在整个过程中,生成器努力地让生成的图像更加真实,而判别器则努力地去识别出图像的真假,这个过程相当于一个博弈过程,随着时间的推移,生成器和判别器在不断地进行对抗,最终两个网络达到了一个动态均衡:生成器生成的图像接近于真实图像分布,而判别器识别不出真假图像,对于给定图像的预测为真的概率基本接近 0.5(这段话从李宏毅老师那引用的,致敬李老师)。


    训练阶段示意图
    训练阶段
    在训练阶段,模型采用一些图像处理技术,人为的在正常样本图像上产生一些缺陷(示意图中的红色框模块),使用由自编码器构成的G模块进行缺陷修复学习,学习的目标是与正常样本之间的L1范数最小,通过一定数量的样本训练可以获得有缺陷修复能力的G模块。GAN用于图像修复的一些资料可以参考[3][4],当然也可以参考论文里的参考文献。


    测试阶段
    测试阶段
    在测试阶段,将上步骤训练好的G模块作为测试阶段的图片修复模块,对于输出的图像样本,假如存在缺陷区域,通过修复模块G将得到修复后的图像,与原缺陷样本图像一起作为LBP算法的输入,通过LBP算法对其缺陷区域进行精确定位。

    3. 其他细节
    3.1缺陷生成

    在实际训练中,论文作者手工生成一些缺陷样本,如图3所示,训练网络自动修复缺陷。另外作者也通过一些技术进行了样本的扩充,比如加入高斯噪声、随机resize大小等。


    缺陷生成
    3.2缺陷图像重建

    缺陷图像重建部分主要的作用是:缺陷图像重建后尽量和正常样本一样,作者在这部分在文献[5][6]基础上进行框架修改的,比如使用L1 distance作为衡量重建差异的目标函数。

    然后实验中作者又发现只使用L1不行,图像边缘等细节可能会衡量不准确,又加入GAN loss来提升网络的重建效果。


    标题
     最后,得到了下面目标函数。

    3.3缺陷检测

    因为使用GAN修复后的图片和原始缺陷样本图片之间在像素级的细节上有一些差异,作者使用了前几年在人脸领域应用比较好的LBP算法进行缺陷区域的检测,这里不介绍算法的细节,示意图如下。

     

    4.实验
    文章对DAGM 2007数据集和织物密集图像进行了验证实验。实验表明,提出的GAN+LBP算法和有足够训练样本的监督训练算法具有较高的检测准确率。实验使用两种类型的数据集,4.1是印花纹表面,4.2是织物表面。

    4.1Texture surface


    测试样本

    结果对比

    a.原始图像,b.修复图像,c.论文方法,d. FCN方法,e.真实标签
    4.2Fabric Picture

    实验中缺陷样本的类型有五种。实验样本按背景分有三类,每类包含5个缺陷样本,25个正常样本。


    测试样本

    结果对比
     


    测试结果
    a.原始图像,b.修复图像,c.论文方法,d. FCN方法,e.真实标签
    参考文献

    [1] Zhao Z, Li B, Dong R, et al. A Surface Defect Detection Method Based on Positive Samples[C]// Pacific Rim International Conference on Artificial Intelligence. Springer, Cham, 2018:473-481.

    [2] Wu X. Fully Convolutional Networks for Semantic Segmentation[J]. Computer Science, 2015.

    [3] Li Y, Liu S, Yang J, et al. Generative Face Completion[J]. 2017.

    [4]. Yang C, Lu X, Lin Z, et al. High-Resolution Image Inpainting using Multi-Scale Neural Patch Synthesis[J]. arXiv preprint arXiv:1611.09969, 2016.

    [5]Image-to-Image Translation with Conditional Adversarial Networks

    [6]Unsupervised representation learning with deep convolutional generative adversarial networks
    --------------------- 
    作者:庆志的小徒弟 
    来源:CSDN 
    原文:https://blog.csdn.net/qq_27871973/article/details/82683043 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 使用深度学习 进行缺陷检测

    千次阅读 2018-11-11 16:25:49
    使用深度学习 进行缺陷检测 链接: 千顺智能. 数据库– GRIMA database http://dmery.ing.puc.cl/index.php/material/gdxray/ steel surface defects – Micro surface defect database faculty.neu.edu....
  • 汇总 | 深度学习实现缺陷检测方法

    千次阅读 2020-03-16 12:20:10
    深度学习在特征提取和定位上取得了非常好的效果,越来越多的学者和工程人员开始将深度学习算法引入到缺陷检测领域中,下面将会介绍几种深度学习算法在缺陷检测领域中的应用。 1、A fast and robust convolutional ne...
  • 深度学习-缺陷检测

    万次阅读 2018-08-23 10:47:38
    数据库-- GRIMA database ...steel surface defects -- Micro surface ...HALCON--基于无监督的缺陷检测 Improving Unsupervised Defect Segmentation by Applying Structural Similarity to Autoencoders
  • 基于深度学习识别模型的缺陷检测

    万次阅读 多人点赞 2018-12-03 16:05:25
    近年来,基于深度学习的识别算法越来越成熟,许多公司开始尝试把深度学习算法应用到工业场合中。 二、缺陷数据 如下图所示,这里以布匹数据作为案例,常见的有以下三种缺陷,磨损、白点、多线。 如何制作训练...
  • 深度学习实现工业零件的缺陷检测

    万次阅读 多人点赞 2018-09-12 16:29:31
    工业零件在制造完成的时候,往往需要去检测其完整性和功能性。如下图所示,从左上到右下,分别是擦花、漏底、碰凹、凸粉。本篇博文主要讲解如何去识别这四类图像,所用框架为keras-2.1.6+tensorflow-1.7.0+GTX1060。...
  • (秒杀 DeepLabV3 和Unet 的缺陷检测网络)基于分割的深度学习表面缺陷检测方法(cvpr2019)的一个Tensorflow实现
  • GalileoX训练平台是深度学习表面缺陷检测训练平台,标准外观检测解决方案 我们公司主要是用深度学习技术(AI)做的表面瑕疵检测,是国内最早一批将深度学习技术用于工业瑕疵识别领域的标准产品。我们能解决传统算法...
  • 深度学习在特征提取和定位上取得了非常好的效果,越来越多的学者和工程人员开始将深度学习算法引入到缺陷检测领域中,下面将会介绍几种深度学习算法在缺陷检测领域中的应用。 A fast and robust convolutional ne....
  • 这个例子演示了在Vision开发模块中使用Model Importer API来使用深度学习缺陷检查应用程序执行对象检测特性 说明 这个例子使用了一个预先训练过的模型——SSD_MobilenetV1,它是在TensorFlow中训练的。使用模型...
  • 深度学习实现零件缺陷检测源代码

    热门讨论 2018-09-12 16:18:16
    结合VGG和残差网络实现工业零件的缺陷检测,基于keras和tensorflow可以直接运行使用
  • 针对工业铝材缺陷检测中由缺陷样本稀疏带来的训练过拟合、泛化性能差等问题,提出一种基于多任务深度学习的铝材缺陷检测方法。先基于Faster RCNN设计一个包含铝材区域分割、缺陷多标签分类和缺陷目标检测的多任务深度...
  • 经过少量样品训练得到测试结果,表明深度学习对传统视觉算法比较棘手的缺陷检测方面,能简单粗暴的解决问题,后续就是增加缺陷样品的收集,标注,以及模型的训练。龙哥手把手教您LabVIEW视觉设计课程火热上线!!...
  • Halcon 深度学习分类之工业缺陷检测

    千次阅读 热门讨论 2020-05-12 19:36:07
    前言 上两篇文章分别介绍了...那么接下来将会详细介绍Halcon 深度学习分类之工业缺陷检测流程。 说明:产品真实图像不方便展示,敬请谅解。 制作自己的训练样本 要想训练网络,首先得制作自己的数据集。水果分类中一共
  • labview深度学习应用于缺陷检测 视觉龙哥出品 标注产品后通过训练平台完成模型训练 经过少量样品训练得到测试结果,表明深度学习对传统视觉算法比较棘手的缺陷检测方面,能简单粗暴的解决...
  • 缺陷检测,一直是困扰工业界的一个难题,现在电子消费品如此普及,一些传统方法检测不理想,或是不能实现的项目,自然而然的有人就想到通过深度学习来解决. 电池片瑕疵分为: 低效 黑点 划伤 隐裂 破片 划伤 通过传统...
  • 题目: 基于深度学习的表面缺陷检测方法综述 作者: 陶显,侯伟,徐德 收稿日期: 2019-11-27 网络首发日期: 2020-04-02 1 缺陷检测问题的定义 缺陷的定义: 在机器视觉任务中, 缺陷倾向于是人类经验上的概念, 而...
  • 深度学习实现异常检测/缺陷检测

    千次阅读 2021-02-24 07:00:00
    点击上方“3D视觉工坊”,选择“星标”干货第一时间送达作者:Mia Morton编译:ronghuaiyang(新机器视觉)导读创建异常检测模型,实现生产线上异常检测过程的自动化。在选择数...
  • 深度学习之瑕疵缺陷检测

    万次阅读 2019-06-20 10:26:23
    先附一些参考文章,后续再更新: https://blog.csdn.net/u012968002/article/details/81976612 https://blog.csdn.net/dlh_sycamore/article/details/87886198

空空如也

空空如也

1 2 3 4 5 ... 15
收藏数 283
精华内容 113
关键字:

深度学习缺陷检测