Image Classification - 두 번쨰 시도
25 Aug 2021 | Deep Learning두번째로는 성별, 마스크 유무, 나이에 따른 모델을 각각 만들었다.
그 다음 단순히 모델의 결과를 합치지만 했는데, 이때문인지 적중률이 더 줄어든거같기도 하다.
그래도 모델을 각각 나누니 어떤 부분에서 문제가 되는지 좀 알 것같다.
일단 하면서 알아낸 점 들을 적어봐야겠다.
-
나이
나이를 예측하는 것의 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
해당 함수로 조정을 하니, 적어도 나이는 꽤나 봐줄만한 모델이 나왔다.
-
성별
한 가지 간과한점이 있다. 마스크를 낀 사람과 안 낀 사람에 같은 클래스에 넣는게 맞는건가도 싶었다.
이 때문인가.. 단순히 성별을 추론하는것도 생각보다 만족스럽지는 않았다.
마스크를 끼고 안끼고 4가지 클래스를 만들고, 0~1번은 남자, 2~3번은 여자로 추축하는 모델을 만들어봐야겠다. -
마스크
생각보다 incorrect와 mask 사이에 많은 간섭이 있는것같다.
incorrect로 추론되는게 상당히많아서 이를 줄이는 방법을 모색해야될 것 같다.