CastleJo의 개발일지

Image Classification - 두 번쨰 시도

|

두번째로는 성별, 마스크 유무, 나이에 따른 모델을 각각 만들었다.

그 다음 단순히 모델의 결과를 합치지만 했는데, 이때문인지 적중률이 더 줄어든거같기도 하다.

그래도 모델을 각각 나누니 어떤 부분에서 문제가 되는지 좀 알 것같다.

일단 하면서 알아낸 점 들을 적어봐야겠다.

  1. 나이

    나이를 예측하는 것의 LossFn에 CE를 적용하는 것이 정말 옳은것인가? 생각했다.
    생각해보니 아닌 것 같아서 나이를 측정할 때 사용하는 Loss함수를 재정의했다.

     class AgeLoss(nn.Module):
         def __init__(self):
             super().__init__()
    
         def forward(self, agePred, ageLabel):
             # 각 확률의 총합을 1로 만든다  
             ageProbability = F.softmax(agePred, dim=1)
    
             # 그 확률에 대한 행렬을 모든 라벨이 순차적으로 있는 1차원 행렬에 곱한다
             # 여기서 제대로 된 예측값이 나옴
             ageExpect = torch.sum(Variable(torch.arange(minAge, maxAge+1))*ageProbability,1)
    
             # 해당 결괏값과 label값의 l1 loss를 구한다
             ageLoss = F.smooth_l1_loss(input=ageExpect, target=ageLabel.float())
    
             return ageLoss
    

    해당 함수로 조정을 하니, 적어도 나이는 꽤나 봐줄만한 모델이 나왔다.

  2. 성별

    한 가지 간과한점이 있다. 마스크를 낀 사람과 안 낀 사람에 같은 클래스에 넣는게 맞는건가도 싶었다.

    이 때문인가.. 단순히 성별을 추론하는것도 생각보다 만족스럽지는 않았다.
    마스크를 끼고 안끼고 4가지 클래스를 만들고, 0~1번은 남자, 2~3번은 여자로 추축하는 모델을 만들어봐야겠다.

  3. 마스크

    생각보다 incorrect와 mask 사이에 많은 간섭이 있는것같다.
    incorrect로 추론되는게 상당히많아서 이를 줄이는 방법을 모색해야될 것 같다.