OCR을 위한 데이터 처리

J. Hwang·2024년 11월 6일
0

이번 포스팅에서는 특히 OCR 태스크에서 데이터를 가공하는 방법에 대해서 알아보겠다.

Augmentation

좋은 데이터란, 골고루 분포하면서 일정한 기준으로 라벨링된 데이터를 의미한다. 그러나 좋은 데이터를 다량으로 확보하기는 쉽지 않고, 대체로 처음에는 편향되고 적은 양의 데이터를 가지고 시작하게 된다. 이 때 augmentation을 기존의 데이터를 다양한 방식으로 변형하여 골고루 분포하면서 다양성을 증가시킨 데이터를 확보할 수 있다. (자세한 것은 data augmentation 참조)

그러나 geometric transform을 적용했을 때 OCR 태스크에서 오히려 문제가 생길 수도 있다.

위의 그림처럼 Random Crop, Random Rotation 등의 augmentation을 적용했을 때 글자가 잘리거나 포함되지 못하는 경우 학습 과정에서 모델에 혼동을 주거나, positive sample의 비중이 낮아지면서 오히려 성능 저하가 발생할 수 있다.

따라서 OCR 태스크에서는 1) 이미지에서 최소 1개의 개체를 포함할 수 있도록, 2) 잘리는 개체가 없도록 신중하게 augmentationd을 진행해야 한다.

그러나 이는 쉽지 않은 방법이다. 왜냐하면 개체를 한 개 이상 포함한다는 규칙을 지키다 보면 글자와 멀리 있는 배경에서는 hard negative sampling이 잘 되지 않기 때문이다. 이는 별도의 hard negative mining 기법을 도입해서 해결할 수 있다. 또 다른 문제는, 개체 잘림을 방지하는 규칙을 지키다 보면 밀집된 영역에서는 샘플링이 잘 되지 않기 때문에 밀도에 대한 bias가 생기게 된다. 이는 처음부터 개체 잘림을 방지하기 위한 augmentation을 실행하기 보다는 augmentation 후에 잘린 개체는 마스킹 처리해서 학습에서 무시될 수 있도록 하면 해결할 수 있다.


합성 데이터 제작

기본적으로 데이터의 양이 많을수록 학습을 시켰을 때 성능이 향상될 수 있다. 데이터를 대량으로 수집하는 것은 어려우므로, 합성 데이터를 제작하는 것도 데이터를 증량하는 데 한 가지 수가 될 수 있다. 특히나 합성 데이터를 제작하는 것은 비용이 훨씬 적게 들고, 개인정보나 라이선스 제약으로부터도 자유롭고, 더 세밀한 수준의 annotation도 쉽게 얻을 수 있다는 장점이 있다.

위의 tool들을 활용해서 합성 데이터를 제작한 후, pre-trained model을 불러와 합성 데이터로 한 번 더 pre-train을 진행한다. 그 이후 원래 가지고 있던 train dataset으로 fine-tuning을 수행하면 모델 성능을 향상시킬 수 있다.

profile
Let it code

0개의 댓글