콘텐츠로 이동

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을 계산하도록 설정합니다.

174
175
176
177
178
179
180
181
182
183
184
185
186
// ExampleClsRuntime.cpp:176

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를 전달해야 합니다.

254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
// ExampleClsRuntime.cpp:256

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