Segmentation.h¶
Go to the source code of this file.
Segmentation은 이미지에 유저가 지정한 클래스에 해당하는 영역을 찾아내는 기능입니다.
SAIGE VISION에서는 Segmentation의 검사 결과를 SaigeSegmentedObject 구조체로 반환합니다. 검출된 영역을 Contour라는 자유형 곡선 형태로 나타내며 점의 배열로 표현됩니다.
추론 옵션¶
Inspection Size Width, Height¶
SaigeHandleConfig 구조체를 사용하여 핸들 생성 시 설정할 수 있는 옵션 중 하나입니다. SaigeInferenceOption::batchSize 와 마찬가지로, 핸들 생성 시 메모리 설정 등에 영향을 주는 옵션으로, 핸들 생성 이후 값을 변경할 수 없습니다.
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | |
calcMask, calcScoremap, calcObject¶
Segmentation 기능은 클래스가 지정된 Contour 영역 정보인 SaigeSegmentedObject 뿐 아니라, 이미지의 각 픽셀 별로 어떤 클래스에 속하는지를 나타내는 Mask, 각 클래스 별 Score 값을 나타내는 Scoremap을 계산할 수 있습니다.
해당 검사 결과들을 계산하려면 아래와 같이 옵션을 설정합니다.
또한, calcObject 옵션이 true인 경우 각 클래스 별로 Score, Area Threshold 값을 적용하여 검출된 객체를 필터링할 수 있습니다.
Note
세 옵션 모두 false로 설정하여, 아무 값도 계산하지 않도록 설정할 수는 없습니다.
162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | |
Score, Area Thresholds¶
Object Detection과 마찬가지로, Segmentation에서도 클래스 별 Score, Area Threshold 값을 설정할 수 있습니다. 추가로, Segmentation에서는 Object Boundary Threshold 값을 설정할 수 있습니다. 모든 Threshold 옵션은 0번 OK 클래스에 대해서 값을 설정할 수 없습니다. 0번 클래스에 대한 기본 값은 아래와 같습니다.
objectBoundaryThreshold[0] = 100objectScoreThreshold[0] = 0objectAreaThreshold[0] = 0181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216
// ExampleSegRuntime.cpp:183 // 추론옵션 변경 options->objectAreaThresholdPerClass[1] = 500; options->objectAreaThresholdPerClass[2] = 500; flags = SAIGE_SET_OBJECT_AREA_THRESHOLD; retval = SaigeSetInferenceOption(handle, options, flags); if (retval < 0) { std::cerr << "SaigeSetInferenceOption() failed - " << SaigeStrError(retval) << std::endl; SaigeDestroyInferenceHandle(handle); SaigeDestroyInferenceResult(result); return retval; } options->objectScoreThresholdPerClass[1] = 200.0; options->objectScoreThresholdPerClass[2] = 200.0; flags = SAIGE_SET_OBJECT_SCORE_THRESHOLD; retval = SaigeSetInferenceOption(handle, options, flags); if (retval < 0) { std::cerr << "SaigeSetInferenceOption() failed - " << SaigeStrError(retval) << std::endl; SaigeDestroyInferenceHandle(handle); SaigeDestroyInferenceResult(result); return retval; } options->objectBoundaryThresholdPerClass[1] = 150; options->objectBoundaryThresholdPerClass[2] = 150; flags = SAIGE_SET_OBJECT_BOUNDARY_THRESHOLD; retval = SaigeSetInferenceOption(handle, options, flags); if (retval < 0) { std::cerr << "SaigeSetInferenceOption() failed - " << SaigeStrError(retval) << std::endl; SaigeDestroyInferenceHandle(handle); SaigeDestroyInferenceResult(result); return retval; }
추론 결과¶
Segmentation의 추론 결과는 Mask, Scoremap, Segmented Object로 나뉘어져 있습니다.
Mask와 Scoremap은 unsigned char* 포인터 변수에 배열 형태로 받아옵니다.
Segmented Object는 먼저 int numSegObj 변수에 검출된 객체의 개수를 받아오고, SaigeSegmentedObject 구조체 배열을 사용하여 객체 정보를 받아옵니다. 여기 예제에서는 C++의 STL vector를 사용하여 배열 메모리 할당/해제를 vector에서 처리하도록 하였습니다.