• 시작하기
  • 개발가이드
  • API 레퍼런스
  • 릴리즈 노트
Search Results for

    Show / Hide Table of Contents
    • Quick Start
    • Classification
    • Detection
    • Segmentation
    • IAD (Image Anomaly Detection)
    • OCR
    • IEN (Image Enhancement)
    • ROD (Rotated Object Detection)

    Detection


    이 문서는 SaigieVision을 통해 이미지를 'Detection(검출)' 하는 방법에 대해 설명합니다.

    여러분이 앞서 제공된 Quick Start 를 끝냈다면, 'Detection'을 수행하는 방법은 그리 어렵지 않습니다.

    아래 코드 블럭은 간단하게 Detection 검사 진행 방법에 대해서 설명합니다.

    {
        // Prepare
        SrImage srImage = new SrImage(@"..\..\sample.png");
        string modelPath = @"..\..\model.saigedet";
        int gpuIndex = 0;
    
        // Initialize
        DetectionEngine engine = new DetectionEngine(modelPath, gpuIndex);
    
        // Model Info
        ModelInfo model = engine.GetModelInfo();
    
        // Option
        DetectionOption option = engine.GetInferenceOption();
        option.CalcTime = true;
        option.MaxNumOfDetectedObjects[1] = -1;
        option.MaxNumOfDetectedObjects[2] = -1;    
        option.ObjectScoreThresholdPerClass[1] = 50;
        option.ObjectScoreThresholdPerClass[2] = 50
        option.ObjectAreaThresholdPerClass[1] = 0;
        option.ObjectAreaThresholdPerClass[2] = 0
        
        engine.SetInferenceOption(option);
    
        // Inspection & Get Result
        DetectionResult result = engine.Inspection(srImage);
        Console.WriteLine($"ImreadTime:{result.InspectionTime.ImreadTime}");
        Console.WriteLine($"InferenceTime:{result.InspectionTime.InferenceTime}");
        Console.WriteLine($"PostProcessingTime:{result.InspectionTime.PostProcessingTime}");
        foreach (var detectedObject in result.DetectedObjects)
        {
            Console.WriteLine($"Name:{detectedObject.ClassInfo.Name}");
            Console.WriteLine($"Area:{detectedObject.Area}");
            Console.WriteLine($"Score:{detectedObject.Score}");
        }
    
        // optional
        srImage.Dispose();
    }
    

    Prepare

        SrImage srImage = new SrImage(@"..\..\sample.png");
        string modelPath = @"..\..\model.saigedet";
        int gpuIndex = 0;
    

    DetectionEngine 을 사용하기 위해 필요한 모든 데이터를 준비하는 과정입니다. 일반적으로 아래와 같은 3가지를 요구합니다.

    • 검사에 사용할 GPU
    • 검사에 사용할 샘플 이미지들
    • 검사에 사용할 모델( .saigedet 파일)

    SaigeVision은 NVIDIA사의 GPU만을 지원하고 있습니다.
    GPU Index에 대해서는 명령 프롬프트 (command) 창을 통해 nvidia-smi 명령어를 입력하면 GPU의 index를 확인할 수 있습니다.

    이미지는 SrImage 객체를 통해 생성 가능합니다. 8bit, 16bit 형태의 이미지를 GrayScale, RGB, RGBA 형태로 제공이 됩니다.

    Initialize

        DetectionEngine engine = new DetectionEngine(modelPath, gpuIndex)
    

    DetectionEngine 생성자에서 .saigedet 모델파일에 대한 경로와 GPU Index를 매개변수로 설정하여 생성합니다.

    Model Info (Optional)

        ModelInfo model = engine.GetModelInfo();
    

    ModelInfo 는 .saigedet 모델 파일에 대한 정보를 확인할 수 있습니다. 일반적으로 아래와 같은 정보를 확인할 수 있습니다.

    • Network Type (어떤 종류의 딥러닝 네트워크를 사용했는지 나타냅니다)
    • Classes Information (클래스 정보입니다. name, color에 대한 정보들을 확인할 수 있습니다.)
    • Developer Version (모델을 학습할 때 사용한 SaigeVision Developer의 버전입니다.)
    • Server Version (모델을 학습할 때 사용한 SaigeVision Developer의 구성 요소 중 서버의 버전입니다.)
    • Module Version (모델을 학습할 때 사용한 SaigeVision Developer의 구성 요소 중 딥러닝 모듈의 버전입니다.)
    • Roi Information (ROI 정보입니다.)
    • Resize Factor (Segmentation, IEN 전용, 인풋 이미지에 적용되는 리사이즈 비율입니다. 추론 이미지에도 동일하게 적용됩니다.)
    • Crop Size (Segmentation, IEN 전용, 학습 때 사용된 패치의 사이즈입니다. 추론 이미지와는 관련 없습니다)
    • Image Resize (IAD, CLS 전용, 인풋 이미지에 적용되는 리사이즈 입니다. 추론 이미지에도 동일하게 적용됩니다)

    자세한 내용은 Model Info 문서를 통하여 확인할 수 있습니다.

    Option (Optional)

        DetectionOption option = engine.GetInferenceOption();
        option.MaxNumOfDetectedObjects[1] = -1;
        option.ObjectScoreThresholdPerClass[1] = 50;
        option.ObjectAreaThresholdPerClass[1] = 0;
        engine.SetInferenceOption(option);
    

    DetectionOption 에서 GetInferenceOption() 을 통해서 옵션에 대해서 정보를 받을 수 있습니다.
    SetInferenceOption() 을 통해서 옵션에 대해서 설정을 할 수 있습니다.
    옵션은 아래와 같은 정보들을 설정할 수 있습니다.

    • Calc Time (추론 API 실행에 소요되는 시간을 세분화하여 출력할지 결정합니다.)
    • MaxNumOfDetectedObjects (출할 detected object의 최대 개수입니다.)
    • ObjectScoreThresholdPerClass (클래스별 object area threshold 값입니다.)
    • ObjectAreaThresholdPerClass (클래스별 object score threshold 값입니다.)

    자세한 내용은 Detection Option 문서를 통하여 확인할 수 있습니다.

    Inspection & Result

        DetectionResult result = engine.Inspection(bmp);
        Console.WriteLine($"ImreadTime:{result.InspectionTime.ImreadTime}");
        Console.WriteLine($"InferenceTime:{result.InspectionTime.InferenceTime}");
        Console.WriteLine($"PostProcessingTime:{result.InspectionTime.PostProcessingTime}");
        foreach (var detectedObject in result.DetectedObjects)
        {
            Console.WriteLine($"Name:{detectedObject.ClassInfo.Name}");
            Console.WriteLine($"Area:{detectedObject.Area}");
            Console.WriteLine($"Score:{detectedObject.Score}");
        }
    

    코드에서 볼수 있는 것처럼 'Inspection'을 수행하는 주 함수는 engine.Inspect()입니다. 모든 종류의 Engine들은 이러한 공통의 Inspect() 함수를 보유하고 있습니다. 또한, 다양한 사용을 위해 여러 형태로 중첩 되어 있습니다. 비동기로 검사하는 등의 여러 시나리오에서 선택적으로 사용할 수 있습니다.

    DetectionResult 에서 결과에 대한 모든 정보를 확인할 수 있습니다. Detection 의 경우 아래와 같은 정보를 결과로 확인할 수 있습니다.

    • Detected Objects (Detection을 통해 검출된 영역의 정보를 받아 옵니다.)
    • Insepction Time (추론 API 실행에 소요된 시간을 밀리초 단위로 받아 옵니다.)

    Optional

        srImage.Dispose();
    

    이 예제에서는 검사에 사용했던 SrImage들을 더 이상 사용할 곳이 없이게 Dispose() 합니다.

    • Improve this Doc
    In This Article
    Back to top Generated by DocFX