[인공지능] 딥러닝에서의 Classification 문제

PROLCY·2023년 11월 5일
0

인공지능

목록 보기
5/37

오늘은 딥러닝에서의 classification 문제에 대해 알아보자.

이 글을 적은 이유

https://velog.io/@ckd248/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Camera-View-Adjustment-Prediction-for-Improving-Image-Composition-1
https://velog.io/@ckd248/%EB%85%BC%EB%AC%B8-%EB%A6%AC%EB%B7%B0-Camera-View-Adjustment-Prediction-for-Improving-Image-Composition-2

이전에 읽었던 구도 가이드 AI의 논문에서는 상, 하, 좌, 우에 대해서만 가이드를 하고, 대각선 방향은 연속적인 모델 추론으로 해결한다고 서술되어 있었다. 그래서 모델도 multi-class classification으로 구도 변경의 종류를 예측하고 있었는데, 이를 multi-label classification으로 변경하여 대각선 방향도 구도 변경의 한 종류로 추론 가능하도록 변경하고 학습을 시키려고 한다. 따라서 multi-label classification을 조사한 겸 글을 적어본다.

Binary Classification이란?

  • 입력값에 대해 True/False로 분류
  • ex) 이 이미지는 개를 나타내는가, 나타내지 않는가? -> [1] or [0]
  • Loss 함수: Binary CrossEntropy Loss
    https://pytorch.org/docs/stable/generated/torch.nn.BCELoss.html
  • 모델의 아웃풋이 0 이상 1 이하의 확률값으로 나와야 하며, 특정한 threshold를 정해 아웃풋이 이것보다 크다면 True, 작다면 False로 취급

Multi-Class Classification이란?

  • Binary Classification가 하나의 class라면, Multi-Class Classification은 class가 여러 개
  • ex) 이 이미지는 개를 나타내는가, 고양이를 나타내는가? -> [1, 0] or [0, 1]
  • Loss 함수: CrossEntropy Loss
    https://pytorch.org/docs/stable/generated/torch.nn.CrossEntropyLoss.html
  • 모델의 아웃풋은 각 class에 대한 확률로 나와야 하며, 각 class의 확률 총 합은 1(Softmax Function). 가장 높은 확률을 가진 class를 True로 취급.

Multi-Label Classification이란?

  • Multi-Class Classification에서는 각 class 중 하나의 값만 취했다면, Multi-Label Classification에서는 여러 값을 취할 수 있음
  • ex) 이 이미지는 개를 나타내는가, 고양이를 나타내는가, 개와 고양이 모두를 포함하는가? -> [1, 0], [0, 1], [1, 1]
  • Loss 함수: 각 class에 대해 Binary CrossEntropy Loss를 취한 형태
    https://pytorch.org/docs/stable/generated/torch.nn.MultiLabelSoftMarginLoss.html
  • 모델의 아웃풋은 각 class에 대한 확률로 나와야 하며, 총 합이 1일 필요는 없음. 각 class마다 특정한 threshold를 설정해 해당하는 class의 아웃풋이 threshold보다 크다면 True, 작다면 False로 취급


사진 출처: https://www.researchgate.net/figure/a-Binary-classification-b-Multi-class-classification-c-Multi-Label-classification_fig1_342378595

마무리

Multi-Label Classification은 threshold를 정하는 것이 어려운 것 같다. 각 class마다 threshold에 의해서 받는 영향이 다를 수도 있으니 각각 따로 설정해줘야 하는 것이 힘든 점이다. 글 앞쪽에서 서술했듯 구도 가이드를 multi-label classification으로 변경하여 학습을 하고 있는데, 성능이 원래 모델만큼만 나와줬으면 좋겠다.

0개의 댓글