IF Kakao 참관기 Day02

첫째 날에 이어 둘째 날이 밝았다. 새삼 느낀 점인데 컨퍼런스를 참가하는 것만으로도 매우 지친다는.. 더군다나 평소 출근 시간보다 더 빨리 준비해서 코엑스로 나가야 했던 탓에 아침부터 너무너무 피곤했다.

전날과 같이 체크인?을 하고 컨퍼런스를 들으러 입장!

1. 성인 이미지 세계에서 살아남는 법

발표자: herschel.alway (카카오)

LINK

1. 프로젝트의 목적

  • 모델을 이용해 15%의 인력만 사용하도록 인력 효율화
  • 생산 컨텐츠 대비 모니터링 리소스 부족
  • 유해한 이미지를 최대한 빠른 시간에 규제한다.

2. 이미지 ID 를 이용한 자동처리

  • 이미지 ID를 이용한 자동처리
    • 중복 이미지 제거
    • 이미지 크기 변화에 대한 대응

3. 색상분포도

  • 가설: 성인 이미지의 색상분포도를 표현하면 대부분이 특정색(피부색)에 집중될 것이다.
    • 약간의 차이는 있지만 비슷한 분포를 가짐
    • 가설 기각
  • 가설: 하늘 + 바다 풍경 이미지의 색상분포도는 성인 이미지 색상분포도와 다를 것이다.
    • 비슷한 분포를 가지는 경우가 많았음.
    • 누드촬영 → 해변에서 찍는 경우, 바다안에서
    • 가설 기각
  • KNN 적용
    • 가장 가까운 거리에 있는 K개의 값을 통한 분류
    • 다수결, 거리의 가중합 등으로 분류
    • 장점
      • 특별한 학습과정 필요 없음.
      • 데이터 노이즈에 영향이 적다
    • 단점
      • 매번 거리값을 계산해야함.
      • 고차원 데이터인 이미지에서 거리값을 구하는데 많은 코스트를 사용.
    • 속도 문제 개선
      • Approximate kNN
      • 기존보다 300배 정도 빨라짐
      • 대신 정확도가 감소
  • 이미지가 군집화되지 않았다 → 23%의 정확도
  • 결론: 단순 픽셀의 색상 정보만으로는 분류가 어려움

4. CNN을 이용한 분류

  • 단순 픽셀 정볼르 넘어선 이미지의 특성을 학습하고자 함.
  • 학습속도보다는 분류 속도를 더 중시
  • Inception 사용 → 76% 정확도
  • inference → 0.4sec
  • 데이터 불균형 문제
    • high precision, low recall
    • random under sampling
      • 무작위로 데이털르 제거함
    • tomek link
      • 서로 다른 클래스값이 거리가 가까운 경우를 찾아서 데이터 많은 클래스는 제거
    • condensed nearest neighbour
      • 가까운 거리의 같은 클래스인 경우 제거함
  • 반복되는 코드 작성
    • tensorflow slim
  • fine-tuning
  • 데이터의 균등화, 드작성 최소화, 파인튜닝, 네트워크 구조 변경
  • 파라미터 튜닝

5. Ensemble

  • 서로 다른 모델의 결과는 정답의 종류, 범위가 다를 것이다.
  • 다수결 의사결정 방식
  • 정확도에 큰 변함 없음.
  • 오차에 서로 상관관계를 가지기 때문

6. 고민하고 있는 주제

  • blackbox
    • gradcam, lime
  • 데이터 불균형
    • undersampling
      • 중요 특징이 누락될 여지

개인적으로 많이 아쉬운 세션이였다. 금융데이터 세션을 들으려다 예전 회사에서 진행했던 프로젝트 주제라 어떻게 했는지 궁금해서 참여했는데, 기대에는 못미쳤던 것 같다. 물론, 처음 해보시는 분야에서의 삽질기를 공유해주시는 것은 매우 좋지만, 조금 더 각 단계에서의 기술 선택 근거와 현재에는 어떻게 생각이 바뀌었는지 등이 추가되었다면 더 좋지 않았을까하는 생각 (다소 정확하지 않은 내용을 정답처럼 말씀하신 부분이 있어서 아쉬움)

2.README.ocr: 딥러닝 기반 문자인식 프로젝트

발표자: Louis.park (카카오)

LINK

1. Introduction

  • Text Detection + Recognition
  • OCR이 어려운 이유
    • 분류해야하는 기호가 많음
    • 같은 문자라고 해도 서체에 따라 다르게 보임
    • 크기 또한, 같은 문자에 대해 다르게 적용

2. Collecting Data for OCR

  • 데이터셋을 어떻게 모았는지?
  • 공개 데이터셋 사용
    • 많은 양의 데이터를 손쉽게 얻음
    • 레이블에 노이즈, 원하는 언어에 대한 데이터를 구할 수 없음.
  • 직접 레이블링
    • 양질의 데이터를 얻을 수 있음, 애매한 경우 annotation을 원하는 대로 조절 가능.
    • 비용이 많이 듬.
  • 합성 데이터 (synthText)
    • 배경이미지와 폰트, 텍스트를 원하는 대로 바꿀 수 있음. 대량의 데이터를 쉽게 만들 수 있음.
    • 배경 이미지에 비싼 라벨이 필요, 사실적이지 않은 데이터가 생성될 수 있음.
  • 자체 개발 데이터 합성 툴
    • 배경이미지와 폰트, 텍스트를 원하는대로 바꿀 수 있음. 대량의 데이터를 쉽게 만듬.
    • 파라미터 튜닝 필요

3. Scene Text Detection

  • regression based vs segmentation based
  • regression based
    • EAST
      • 빠른 속도
      • 작거나 큰 글자에 취약, 불규칙하게 배열된 글자 검출 불가능, 복잡한 후처리, 글자의 양끝을 잘 못잡아냄
  • segmentation based
    • DeepLab v3+
      • 글자의 크기변화에 robust, 후처리 간소화, 단어의 양끝 잘리는 현상 감소
      • 작은 글자 여러줄이 가까이 붙어있으면 한줄로 인식.
    • PixelLink
      • 각 픽셀마다 주변 8개 픽셀이 같은 단어에 속하는지 여부를 예측

4. Scene Text Recognition

  • 합성데이터(16400K) + 실제 데이터 (427k w/ data augmentation)
  • 전체 데이터의 약 2%를 실제 데이터로 사용
  • 배치 내에서 synth vs real이 10:1이 되도록 weighted sampling
  • 8%정도의 성능 향상 → 합성데이터의 퀄리티가 실제 데이터와 많이 다르다는 반증이 되기도 함.
  • 불규칙한 텍스트 인식
    • ASTER
      • STN
    • 세로쓰기, 돌아가있는 글자

5. Conclusion

  • 시연

OCR에 대해서 잘 설명해 주신 듯 한데 아마 난이도 조절을 하는 과정에서 세부적인 내용이 좀 빠진 것이 아닌가 하는 생각. 모바일에 올리는 과정에서 어떤 어려움이 있었는지가 궁금했고, 발표에 등장한 예시가 체리피킹은 아닌지와 같은 생각이 들어서 조금 더 많은 예시가 있었으면 좋았겠다는 생각.

3.카카오에서는 어떻게 OpenJDK를 활용하고있을까?

발표자: Felix.sh (카카오)

LINK

원래 들으려고 했던 세션이 아니긴 했지만, 다른 세션에 사람이 몰린 탓에 다소 늦게 들어가서 들었다. 실제 운영하고 있는 서버에서 JDK 변경을 진행했기에 와닿았던 세션.

4.Korean의 Korean 체험기

발표자: keith.gotkeys (카카오페이)

LINK

1.구조적 어려움

  • 한국어에서 독보적으로 뛰어난 형태소 분석기는 없음.
  • 형태소 분석
    • POS 태깅
    • Stemming
  • Word Piece Embedding(WPE)
    • 언어학적 지식 없이도 stemming 가능
    • 많이 사용하는 subword를 기준으로 나눔
  • Jamo Piece Embedding(JPE)
    • 인터넷 용어 및 오탈자에 보다 적합
  • 첫 + 가 + 끝 - 호환형 변환 사전 제작
  • NSMC, 3I4K 사용

2.활용적 어려움

  • TextCNN
    • kernel 사이즈 거리의 관계 고려
    • 병렬처리 가능
  • RNN
    • Vanishing gradient
    • 병렬처리 불가능 → 느림.
  • BERT
    • 양방향성 문맥정보를 반영한 벡터로 표현
    • 병렬처리가능
  • JAMO
    • 세종 코퍼스 + 위키피디아 + 나무위키

다른 세션들과 다르게, 카카오페이에서 오신 분이 직접 발표자 분의 이력(인턴)을 말씀해주셔서 새로웠음. 페이 인턴이라면 아마 6개월 정도 진행됐을 듯 한데, 그리 길지 않은 시간에 많은 내용을 진행했다는 생각. 다만, 발표에 있어서는 청중 이해가 목적이 아니라 인터넷 상에 있는 내용을 그대로 읊는 느낌. 추가적으로 자모로 나눠서 접근하는 방식은 이미 많이 쓰이고 있는 방식일텐데, 그에 대해 조금은 본인이 처음 진행했다는 뉘앙스로 말씀하신 것 같아 영상이 올라오면 다시 한 번 들어볼 필요가 있을 듯.

05. 카카오의 오픈소스 관리 시스템 : Olive 로 오픈소스를 요리하다

발표자: robin.hwang, violet.blue (카카오)

LINK

  • 오픈소스 분석툴
    • cleardefined
  • Olive를 써라

1. 오픈소스 사용

  • FOSS
  • 오픈소스는 반드시 무료는 아님.

2. 오픈소스 관리

  • Hermes
    • dependency 설정파일 분석
    • 라이센스 정보 확인

3. Olive

  • open source 분석 툴
  • 깃헙에 있는 소스코드를 올리브를 통하여 분석
  • 사용된 OSS 컴포넌트를 식별
  • 리뷰를 거친후 고지문 발송

오픈소스가 많이 쓰이는 만큼 매우 중요한 부분이고, 좀 더 오픈소스 관리를 쉽게 하기 위한 툴을 개발한다는 것은 좋은 접근이라 생각. 다만 마지막 세션이라 청중의 집중도가 떨어졌고, 발표가 다소 대기업의 실적발표와 같은 느낌을 줘서 아쉬움이 있었음.