콘텐츠로 이동

Classification.h

Go to the source code of this file.

Classification은 이미지를 유저에 의해 정해진 몇 가지 종류(클래스, class)들로 분류합니다.

이미지가 각 클래스에 속할 확률을 점수로 계산한 후 점수가 가장 높은 클래스로 해당 이미지를 분류합니다.

추론 옵션

See also: SaigeInferenceOption

Class Activation Map

Classification 기능에서는 Class Activation Map을 계산할 수 있습니다. 이는 이미지 픽셀별로 클래스 활성화 정도에 대한 분포 정보를 제공합니다. 이 기능을 사용하려면 calcClassActivationMap 값을 true로 설정하고, 플래그로 SAIGE_SET_CALC_CLASS_ACTIVATION_MAP 설정합니다.

Warning

최적화 기능을 적용하는 경우에는 계산할 수 없습니다. 이 예제에서는 optimize 옵션값이 false인 경우에만 Class Activation Map을 계산하도록 설정합니다.

164
165
166
167
168
169
170
171
172
173
174
175
176
// ExampleClsRuntime.cpp:166

if (verbosity >= 3 && optimize == false) {
    options->calcClassActivationMap = true;
    retval = SaigeSetInferenceOption(handle, options, SAIGE_SET_CALC_CLASS_ACTIVATION_MAP);
    if (retval < 0) {
        std::cerr << "SaigeSetInferenceOption() failed - " << SaigeStrError(retval)
                  << std::endl;
        SaigeDestroyInferenceHandle(handle);
        SaigeDestroyInferenceResult(result);
        return retval;
    }
}

검사 결과

Classification 기능에서는 Class 별 Score값, 이미지의 분류 결과 클래스 ID, 추론 시간을 받아올 수 있습니다.

Additional Scores

각 클래스 별 추가 Score인 SaigeInferenceOption::additionalScores 를 설정할 수 있습니다. 이를 통해 특정 클래스에 가중치를 부여할 수 있습니다. 이 옵션이 적용된 결과를 받아오기 위해서는 SaigeGetInferenceResultScore 함수의 두 번째 인자에 true를 전달해야 합니다.

244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
// ExampleClsRuntime.cpp:246

std::vector<float> score;
int classId;
score.resize(modelInfo->numOfClasses);
retval = SaigeGetInferenceResultScore(result, score.data(), true);
if (retval < 0) {
    std::cerr << "SaigeGetInferenceResultScore() failed - " << SaigeStrError(retval)
              << std::endl;
    SaigeDestroyInferenceHandle(handle);
    SaigeDestroyInferenceResult(result);
    return retval;
}

retval = SaigeGetInferenceResultClass(result, &classId);
if (retval < 0) {
    std::cerr << "SaigeGetInferenceResultClass() failed - " << SaigeStrError(retval)
              << std::endl;
    SaigeDestroyInferenceHandle(handle);
    SaigeDestroyInferenceResult(result);
    return retval;
}

retval = SaigeGetInferenceResultInspectionTime(result, &imreadTime, &inferenceTime,
                                               &postProcessingTime);
if (retval < 0) {
    std::cerr << "SaigeGetInferenceResultClass() failed - " << SaigeStrError(retval)
              << std::endl;
    SaigeDestroyInferenceHandle(handle);
    SaigeDestroyInferenceResult(result);
    return retval;
}

See also: SaigeGetInferenceResultClass, SaigeGetInferenceResultScore, SaigeGetInferenceResultInspectionTime