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전용, 인풋 이미지에 적용되는 리사이즈 비율입니다. 추론 이미지에도 동일하게 적용됩니다.)
- Crop Size (Segmentation전용, 학습 때 사용된 패치의 사이즈입니다. 추론 이미지와는 관련 없습니다)
- Image Resize (IAD 전용, 인풋 이미지에 적용되는 리사이즈 입니다. 추론 이미지에도 동일하게 적용됩니다)
자세한 내용은 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() 합니다.