(1-1) Welcome to Visualization (OT)

💡
Data Visualization이 무엇인지에 대해 알아본다.

데이터 시각화란?

데이터 시각화란 '데이터를 그래픽 요소로 매핑하여 시각적으로 표현하는 것'이라고 정의한다. 이 한 문장 내에는 '데이터', '그래픽 요소', '매핑', '시각적 표현'과 같은 매우 심오한 세부 분야가 포함되어 있다. 위에서 설명한 내용이 무엇인지 차근차근 알아가보자.

시각화 Task 구분의 예시

시각화는 객관적 점수가 존재하지 않는다. 하지만, 지금까지 연구되고 사용된 시각화의 모범사례를 공부함으로써 좋은 시각화를 만들어 낼 수 있을 것이다.


(1-2) 시각화의 요소

💡
데이터 셋과 시각화의 기본 요소에 대해 알아본다.

데이터 이해하기

데이터 시각화를 위해서는 '데이터'가 우선적으로 필요하다. 데이터가 없으면 불가능 한 작업이다. 데이터가 확보되었으면, 어떤 관점으로 시각화를 진행할 지를 결정하게 된다. Global한 데이터 셋의 관점으로 진행할 것인지, Loacl적으로 개별 데이터의 관점으로 진행할 것인지가 이에 해당한다.

데이터 셋은 수많은 종류가 존재한다. 각 데이터 셋의 특징에 따라 목적과 적용할 수 있는 기법이 크게 달라진다. 종류에 대한 대표적 예시로는, '정형 데이터', '시계열 데이터', '지도 데이터', '관계 데이터', '계층적 데이터' 등이 있다. 이런 데이터 내부의 값은 다양하게 분류할 수 있으나, 대표적으로는 4가지로 분류한다. 이러한 분류를 먼저 수행한 후에, 시각화의 방향을 설정하게 된다.

데이터 분류의 예시

시각화 이해하기

점, 선, 면은 시각화의 가장 기본적인 구성요소이다. 이런 요소를 Mark라고 하며, 각 Mark는 각자 변형될 수 있는 Channel을 갖는다.

Mark와 Channel의 예시

각 Channel을 활용할 때, 의식하지 않아도 효과가 생기는 전주의적 속성을 고려할 필요가 있다. 목적에 부합하는 특정 속성을 활용하는 것이 효과적이다.

전주의적 속성의 예시


(1-3) Python과 Matpoltlib

💡
Python의 가장 대표적인 시각화 패키지 Matplotlib에 대해 알아본다.

실습 코드

Github Gist


Project

오늘의 목표 및 진척상황

  • Baseline Code Loss Gamma 실험
  • Center Crop Size 재실험
  • Weight Decay 재실험
  • 다른 Model 성능 실험 (EfficientNet Series, ResNet Series, ResNeXt)
  • 상위권 캠퍼들 학습정리 참고
  • Multi Loss 성능 실험
  • Data Noise 처리 (Gender Part)

직면했던 문제와 학습한 내용

  1. Baseline Code의 Loss 재실험

    기존에 Baseline은 Gamma 값이 2인 Weight Cross Entropy Loss를 사용했었다. 어제의 Center Crop 실험이 최고 점수를 갱신해서 Baseline을 재정비 했는데, 이 실험 당시 Gamma 값을 적용하지 않았던 것을 발견했다. 이에, Gamma값을 2로 놓고 재실험을 진행했다. 신기하게도, 이번에는 Gamma가 1인 상태가 더 높은 성능을 보였다. 이 결과를 통해 Baseline의 WCE Loss의 Gamma값은 1로 갱신됐다.

  1. Center Crop Size 재실험

    Crop Size를 변경하면서, Batch Size에 대한 변화 등의 이슈가 생겼다. 이에 여러 Size별로 어느정도의 Batch Size를 사용할 수 있는지 확인했고, 일부 Size에 대해 성능 실험을 진행했다. 320x256의 경우에는, 20 Pixel 정도의 차이라서 그런지 완전히 동일한 결과가 나왔다.

  1. Weight Decay 재실험

    Flip과 Rotation이 Size 변경 이후에 좋은 결과를 냈듯, Weight Decay도 그렇지 않을까 실험을 진행해봤다. 아쉽게도, 명백하게 성능이 떨어지는 것을 확인했다. 앞으로, 이 대회 간에는 다시 실험하지는 않을 것 같다.

  1. 다른 Model 학습

    어느정도 Pipeline이 정리된 것 같고, 새로운 시도를 하기에는 구현이 오래 걸리는 시점이 되었다. 남는 시간 동안 다른 Model을 학습시켜서 성능을 확인하고, Ensemble에 사용하고자 실험을 진행했다. ResNet34, ResNet50, ResNeXt50은, 구조가 달라서인지 명백하게 성능이 떨어져서, Ensemble에도 사용하기 어려울 지경이었다. 추론 단계까지 수행하지 않고, 중간 성능을 보고 학습을 중단했다. EfficientNet은 먼저 b4와 b7에 대해서 실험을 진행했다. b0로 실험을 진행했어서인지, 학습 시간이 너무 길게만 느껴졌다. b7은 중간 결과만으로도 성능이 하락하는 것이 보여서 학습을 중단했다. b4는 최종 제출까지 수행했는데, 예상 외로 높은 성능 향상을 보였다. 지금 기준으로 5등에 육박하는 성능을 보였다. b4가 오히려 너무 복잡하지는 않을까 싶은 마음에 b3도 학습해보았으나, b4보다 아주 살짝 성능이 낮았다. b5에 대해서도 검증해볼 필요가 생겼다.

  1. 상위권 캠퍼들의 학습정리 확인

    내가 생각하는 아이디어를 구현하기는 힘들고, 다른 사람들은 어떻게하나 궁금했다. 상위에 있는 캠퍼분들은 어떤 아이디어를 가지고 있는지 궁금해서, 일일이 학습정리 노트를 방문했다. 시도해볼만한 아이디어나 관심 생기는 키워드는 다음과 같았다. Seed 값 변경, 명암과 밝기와 콘트라스트 Augmentation, Upsampling, Google Vision API, 3개의 출력을 갖는 End-to-End Model구조

  1. Multi Loss 실험

    20조 Peer들 덕분에 새로운 아이디어를 얻을 수 있었다. 각종 Loss를 묶어서 하나의 Loss로 사용하는 것이다. 이전에 실험했던, Focal Loss와 F1 Loss 모두 그럭저럭 나쁘지 않은 결과를 보여줬었기 때문에, 이를 모두 사용해서 실험을 수행했다. 결과는 미세하게 성능 하락이 있었다. 지금은 F1 Loss를 빼고, WCE Loss와 Focal Loss를 5:5로 합쳐서 학습을 진행하고 있다.

  1. Noise Data 처리

    이전부터 오래오래 생각만 해오던 작업이다. 최초의 내 아이디어는 다음과 같았다. 클래스에 해당하는 모든 Image를 Vector 공간에 Mapping 시키고, Centroid에서 먼 Data들을 확인하는 형태로 Noise Data를 찾는 것이다. 혹은, Image의 평균을 계산하고 이와 유사도가 낮은 Data를 선별하는 형태로 Noise Data를 찾으려고 했었다. 하지만 이에 대한 정보를 찾으면 찾을수록 너무 어렵게만 느껴졌다.

    지금은 조금은 무식하지만 확실한 방법으로 Data Cleansing을 수행하고 있다. 1 Epoch 정도로 학습된 Model로, 모든 Data에 대해 추론을 수행한다. 이 때, Threads Hold가 낮은 Data를 찾는다. 해당 Data를 시각화 하여, Label을 확인하고 Image Directory를 수정한다. 아직 Gender에 대해서도 전부 수행하지 못한 상태이고, 이 작업이 끝나면 Mask에 대해서도 수행할 예정이다.

추가로 진행 할 사항

  • Multi Loss 제출 및 Baseline 정비
  • Data Noise Gender Part 마무리, Mask Part 작업
  • Mix-up 적용 방안 강구
  • Albumentation 확인

'네이버 부스트캠프 AI Tech' 카테고리의 다른 글

[P1] Day 48  (0) 2021.04.11
[P1] Day 47  (0) 2021.04.11
[P1] Sunday 5 April  (0) 2021.04.11
[P1] Saturday 4 April  (0) 2021.04.11
[P1] Day 45  (0) 2021.04.11

+ Recent posts