ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [CV Project] 육안으로 분간하기도 힘든 문서 딥러닝으로 분류하기
    프로그래밍/Project 2024. 11. 12. 01:39

    Document Type Classification(문서 타입 분류) 경진대회

    개요

     

    모든 기업에서 다양한 형태의 문서를 만들어서 사용해 왔고, 지금도 수많은 문서들이 새로 만들어지고 있다.

    그렇게 쌓인 문서들은 보관하기에는 많은 공간을 필요로 하기에, 많은 기업들이 쌓인 문서들을 데이터화해서 저장 및 보관하고 있다.

    그런 문서의 데이터화 작업에서 핵심이 될 수 있는 기술이 문서의 타입을 분류하는 것이라고 생각한다.

     

    당장 개인이 가지고 있는 문서만 해도, 보험이나 휴대전화, 인터넷 가입, 월세 임대 등의 계약서부터 병원에 갔을 때 받게되는 진단서나 처방전, 물품 구매 시 받는 영수증까지 그 외에도 수많은 문서들이 있다.

    그렇기에 처음 이 주제를 봤을 때 기업에서 뿐만 아니라 개인의 생활에서도 유용하게 활용할 수 있지 않을까 생각했다.

     

    EDA

    우선적으로 데이터를 확인해본 결과, 주어진 데이터는 17개의 클래스로 나눠져 있고, test 데이터셋(3140개)이 train 데이터셋(1570개)의 2배라는 사실을 확인했다.

    그리고 train 데이터셋은 1, 13, 14번 클래스의 데이터 수가 다른 클래스들보다 확연히 적었다.

     

    파란색: test 데이터셋 / 노란색: train 데이터셋

    추가로 각 이미지들의 가로 세로 사이즈 분포를 확인해 봤는데 test 데이터셋과 train 데이터셋의 분포가 같은 경향을 보여서 이후에 다른 추가적인 처리는 하지 않기로 했다.

     

    각종 Augmentation 적용 예시

    test 데이터셋을 육안으로 확인해보니 같은 클래스의 이미지를 Mixed-up 한 것부터, horizontalFlip, verticalFlip, Gaussian Noise, Rotate, Cutout 등 다양한 Augmentation들이 적용되어 있었다. (test 데이터 셋의 저작권 문제로 예시 이미지로 대체)

     

    데이터 증강

     

    이번 프로젝트에서 우리 팀은 두 가지 버전의 데이터셋을 사용했다.

    Dataset Version Dataset Size Augmentation Process Advantage Weakness
    Dataset 1 19만개 1. 오버샘플링 (1, 13, 14 클래스)
    2. 이미지 로테이션 (3.6도 씩 회전)
    3. 기본 변형 (Noise, Flip, Contrast, Gaussian Noise, ...)
    4. 고급 변형 (Cutout, Cutmix, Mixup)
    전체 회전 이미지에
    대해서 강점을 가짐
    학습 시간의 증가
    더 많은 계산 자원 요구
    Dataset 2 12만개 1. 이미지 로테이션 (여러 각도로 회전, 배경 흰색으로 설정)
    2. 기본 변형 (Noise, Flip, Contrast)
    3. 고급 변형 (Cutout, Elastic transformation, Mixup, ...)
    육안으로도 분류하기
    어려운 이미지에 강점
    학습 시간의 증가
    더 많은 계산 자원 요구

     

    두 가지 버전의 데이터셋 사용은 보다 다양한 데이터를 사용하는 것이 모델이 좀 더 정확하게 예측하는 데 도움이 되지 않을까 하는 생각에서 출발한 아이디어였다.

    다음 내용에서 좀 더 자세하게 알 수 있겠지만 결과적으로 두 가지 데이터 셋이 가지는 강점이 달랐고, 모델의 성능에도 크게 영향을 주는 것으로 보였다.

     

    모델

     

    모델은 ConvNext 부터 EfficientNet-B4, EfficientDet, ResNet50까지 총 4가지를 사용했다.

      ConvNext-Tiny EfficientNet-B4 EfficientNet-B4 EfficientDet ResNet50
    Input Size 224 x 224 384 x 384 384 x 384 512 x 512 224 x 224
    Early
    Stopping
    O O O O O
    Label
    Smoothing
    O X X X O
    Loss
    Function
    Focal Loss Asymmetric Loss Weighted Cross
    Entropy
    Focal Loss Focal Loss
    Freeze
    Level
    Backbone Freeze
    → Classifier
    Backbone Freeze
    → Classifier
    Backbone Freeze
    → Classifier 
    Backbone Freeze
    BiFPN + Classifier
    Backbone Freeze
    → Classifier
    Dataset Dataset1 Dataset2 Dataset2 + Additional Augmentation for Class 3, 4  Dataset1 Dataset1
    Dataset
    Split
    Random Split Random Split Random Split Random Split Random Split
    Learning
    Rate
    Scheduler
    CosineAnnealingLR CosineAnnealingLR CosineAnnealingLR CosineAnnealingLR CosineAnnealingLR
    F1-Score 0.9412 0.9137 0.8972 0.8807 0.8825

     

    위 표를 보면 Label Smoothing의 적용 여부부터, 사용되는 Loss Function의 종류, Freeze Level, 사용하는 Dataset까지 각 모델들을 최대한 다양하게 활용해보고자 했다.

     

    그중 점수가 잘 나온 두 가지 모델이 ConvNext-tiny와 EfficientNet-B4 (Dataset2) 였는데, 비교적 고르게 예측하는 모습을 보인 ConvNext와는 다르게 EfficientNet은 3, 4 클래스에 대해서 제대로 예측하지 못하는 모습을 보였다.

    이 부분을 해결하고자 Loss Function을 Weighted Cross Entropy로 변경했고, Dataset도 기존 Dataset 2 버전에서 3, 4 클래스의 데이터만 추가로 증강해서 다시 학습시켰다.

    물론 해당 모델은 3, 4 클래스에 좀 더 초점을 맞추도록 학습시킨 것이기에 전체적인 성능에서는 이전 모델에 비해 약간 안 좋아졌지만 (F1-Score: 0.9137 -> 0.8972) 3, 4 클래스에서의 예측을 좀 더 잘하는 것이 필요하다고 생각해서 앙상블 하는 데 사용했다.

     

    결과

     

    중간 점수
    최종 점수

     

    test 데이터셋의 일부만 사용해서 평가할 때는 F1-Score가 0.9525 였지만, 전체 test 데이터셋으로 평가한 F1-Score가 0.9482로 약간 떨어졌음에도 등수는 올라간 것을 보고, 다른 팀이 만든 모델보다 우리 팀이 만들 모델이 비교적 좀 더 안정적이고 정확하게 예측해서 등수가 바뀌는 결과로 나타났다고 생각했다.

     

    느낀 점

     

    주어진 데이터셋을 처음 볼 때 이렇게까지 상태가 안 좋은 문서들이 있을까 라는 생각을 했는데 찾아보다 보니 문서화된 지 오래됐거나, 보관 장소의 온습도 등과 같이 변수가 결과적으로 육안으로 확인이 힘든 문서를 만드는 일이 비일비재하다는 것을 알게 됐다.

    그런 문서들을 최대한 복원하고, 분류하는 것이 기업의 입장에서는 사소하다고 생각할 수도 있는 모든 자원을 효율적으로 관리할 수 있도록 도움을 줄 것이고, 개인의 상황에서도 실수로 물에 젖은 중요한 문서를 복원하는 등의 활용이 가능하겠다는 생각이 들었다.

    약간은 다르겠지만 실제로 명함을 저장하는 서비스도 있고, 문서를 분류하는 것뿐만 아니라 각종 Scan 앱으로 문서를 스캔할 때 왜곡되는 것을 최대한 완화하는 데도 활용이 가능하지 않을까 싶다.

Designed by Tistory.