개인 Project 진행 상황

  • EDA, Dataset

    • 데이터 파악 (특성별 plot, value_counts 확인)
    • 원핫인코딩 함수 생성
        def one_hot_encoding(data, dic):
            output = []
            for d in data:
                output.append(dic[d])
            return output
      
    • 파일 이름에서 특성들을 분리해 컬럼들로 묶어 데이터프레임 생성
        dic_gender = {'male': 0, 'female': 1}
      
        for d in data:
            mask = d.split('/')[-1][:1]
            features = d.split('/')[-2].split('_')
            ids.append(features[0])
            genders.append(dic_gender[features[1]])
            ages.append(int(features[3]) // 30)
            masks.append(mask)
      
        df = pd.DataFrame({'id': ids, 'gender': genders, 'age': ages, 'Mask': masks, 'target': None, 'img': data})
      
    • 리스트 컴프리핸션을 이용해 18개 클래스 (ground-truth) 컴비네이션 생성 후 추가
        combination = [(m, g, a) for m in ['m', 'i', 'n'] for g in [0, 1] for a in [0, 1, 2]]
      
        for i, (m, g, a) in enumerate(combination):
            df.loc[(df['Mask'] == m) & (df['gender'] == g) & (df['age'] == a), 
            'target'] = i
      
    • 랜덤 인덱스의 이미지와 타이틀 (클래스) subplot으로 출력

Peer session

  • Why are dot underscore ‘._’ files created?

  • Spacing bw subplots

  • My Q: 클래스가 3 가지 기준을 가지고 있는데, 단순히 총합인 18개로 구분해 학습시키는 것보다 더 좋은 방법이 있지 않을까? (모델 3개를 기준 별로 클래스를 나눠 가진 후 따로 학습한다던지)
    • 조원 A: RetinaNet처럼 다른 branch (혹은 head) 들로 task를 (여기서는 학습할 클래스) 분리하는 방법도 좋을 것 같아요.
  • Data imbalance 문제
    • 마스크 쓴 사진 5장 vs 마스크 안 쓴 사진 1장
    • 60세 이상 비율이 너무 적음
    • Focal loss 등을 시도해볼 수 있지 않을까?

강의

  • Problem definition

    • Tips
      • overview부터 꼼꼼히 읽기
      • 풀어야 할 문제 정의
      • Input / Output 파악
      • 어느 범위까지 일반화할 것인지 (솔루션이 어디서 어떻게 사용되는지)
    • Project overview
      • 마스크를 잘 착용했는지 image classification
      • I/O
        • Input: 사진 (마스크 착용 / 미착용 / 잘못된 착용)
        • Output: 18개 class (Mask, Gender, Age)
  • EDA

    • Exploratory Data Analysis
      • 탐색적 데이터 분석, 데이터를 이해하기 위한 노력