※ 본 내용은 Coursera, Machine Learning - Andrew Ng 강의, 강의자료를 바탕으로 작성하였습니다.

 

 

<Photo OCR problem>

 

photo OCR problem 예시

위 그림과 같이 사진에서 글씨를 추출해내는 기술을 photo OCR 이라고 한다.

 

위와 같은 문제를 해결하기 위해서는

photo OCR의 순서

input image -> text detection -> charater segmentation -> charater recognization

 

위와 같은 순서대로 진행되어야 한다.

이와 같은 구조를 machine learning pipeline이라고 한다.

 

- Sliding windows

text detection(사진에서 글씨로 쓰여진 부분을 찾아내는 것)에 대해 알아보기 앞서, 보행자 인식이 어떻게 이뤄지는 지에 대해 살펴보자.

 

보행자를 직사각형으로 인식하는 경우, 멀리 있는 사람과 가까이 있는 사람에 따라 그 크기는 달라질 수 있지만 가로와 세로의 비율은 어느 정도 일정할 것이다. 

sliding window 예시

따라서 위와 같은 비율로 왼쪽상단부터 우측 하단까지 window를 이동시키면서 이미지를 훑게되면 각 window의 위치별로 logistic regression 등의 방법을 통해 인식이 가능할 것이다.

window의 크기를 늘려가며 이미지를 scan하면, 보행자를 인식해낼 수 있다.

 

sliding 하며 얻는 이미지의 예시

 

text detection에서의 차이는 글씨의 경우 문장의 길이 등에 따라 가로 세로의 비율이 고정되어 있지 않다는 것이다.

따라서 우선 보행자를 탐색하듯 글씨 부분을 인식한 후, "expasion"을 통해 전체 문장을 인식한다.

 

Text Detection 예시

하단 좌측의 그림이 sliding window를 거쳐 글씨파트를 인식한 결과이고(밝을 수록 1에 가까움),

하든 우측의 그림이 expansion을 거친 후의 결과이다.

글씨파트를 인식한 결과에서 글씨로 인식된 부분을 조금 확장하고, 서로 이어진 부분을 하나의 문장으로 인식하는 것이 expansion이다.

이때, 세로의 비율이 가로의 비율보다 큰 경우는 문장으로 인식하지 않는다.(글씨를 가로로만 쓴다고 가정)

 

그렇게 글씨부를 추출하고 나면,

charater segmentation이나 character classification은 NN 등의 모델을 통해 수행하면 된다.

 

charater segmentation 예시

※charater segmentation은 글자를 구분하고 있는 이미지를 학습시키는 방식으로 수행할 수 있다.

 

 

- Artificial Data synthesis

bias가 낮은 모델에게 많은 데이터를 학습시키는 것은 성능이 좋은 모델을 만드는 좋은 방법 중 하나이다.

(learning curve 참고)

 

많은 데이터를 얻기 위해 artificial data를 생성하는 것도 하나의 좋은 방법이 될 수 있다.

 

artificial data를 얻는 것에는 대략 두 가지 방법이 있다.

(1) 직접 데이터 생성

(2) 기존의 데이터를 이용하기

 

(1)번의 방법을 photo OCR 중, text recognization에 적용하면 다음과 같다.

Synthetic data 예시

좌측의 그림은 실제 데이터이고, 우측의 그림은 제공되는 여러 폰트로 생성된 글씨를 임의의 배경에 합성한 예시이다.

이렇게 생성된 데이터를 학습에 사용하는 것은 도움이 될 것이다.

 

(2)번의 방법은 다음과 같다.

by distortion

기존의 이미지를 약간 변형하여, 조금 더 다양한 형태의 데이터를 만든 예시이다. 

만약 음성 처러에 관한 문제라면, 기존 데이터에 노이즈를 입힌 새로운 데이터들을 만드는 식으로 적용할 수 있을 것이다.

이 역시 다양한 데이터를 모델이 학습할 수 있도록 도와줄 것이다.

(*text 인식에서 이미지에 랜덤한 노이즈를 주는 것은 크게 도움이 되지 않는다고 한다)

 

 

데이터를 늘려 모델을 개선하는 것에 대해 정리하면 다음과 같다.

1. learning curve 등의 방법을 통해 모델이 low bias(high variance)한 모델인지 확인한다.

-> high bias의 경우 데이터의 수를 늘리는 것이 도움되지 않을 것이다.

 

2. 데이터의 수를 늘리는 것에 걸리는 시간을 고려해본다.

- 임의의 데이터 만들기

- 데이터를 직접 얻기

- Crowd source 로부터 얻기

 

데이터를 더 얻는 것은 어떻게 보면 단순한 문제이지만, 성능을 높이기위한 가장 효율적인 방법이 될 수 있다.

 

- Ceiling Analysis

이번 course의 다른 강의에서도 많이 다뤘듯이, 머신러닝 시스템을 구축할 때 성능을 개선하기 위해 어떤 작업을 수행해야할 지 결정하는 것은 중요하다.

단순히 직감 등에 의존하지 말고, 근거를 가지고 다음 작업을 정하는 것은 매우 중요하다.

 

그렇다면 machine learning pipeline 구조에서는 어떤 작업에 집중해야 할까?

Ceiling Analysis를 적용하여 판단하는 것이 이 결정에 도움이 될 것이다.

 

Ceiling Anlysis, Accuracy는 전체 process를 거친 후의 값을 의미

앞서 photo OCR 을 해결하기 위한 구조에서는 3개의 머신러닝 모델이 필요했다. 

만약 처음으로 구축한 모델에서 정확도가 72%가 나왔다고 해보자.(최종 OCR 결과의 정확도)

 

3개의 모델을 모두 개선하면 좋겠지만, 우선 순위를 정하자면 어떤 모델에 집중하는 것이 좋을지에 대해 판단하려면 Ceiling Analysis를 적용하면 된다.

 

가장 처음 적용하는 모델부터 임의로 100% 정확도의 결과를 만든 후 전체 모델의 성능 개선에 얼마나 도움이 되는지 살펴보는 방법이 Ceiling Analysis이다.

 

임의로 100% 정확도를 만든 다는 것은 수동으로 데이터를 처리하거나, 모델이 성공적으로 인지한 데이터만 사용하면 된다.

ex) Charater Segmentation 부분을 100%로 만들기 위해 직접 데이터를 구분하여 100% 구분된 데이터만 다음 단계로 제공

 

Ceiling Analysis를 적용하여 위 표와 같이

Text Detection을 정확하게 만들었을 때 전체 결과에서 17%의 향상,

segmentation에서 1%의 향상,

recognizatiioin에서 10%의 향상

의 결과가 나왔다고 해보자.

 

Text Detection 모델의 성능을 향상 시키는 것이 전체 시스템의 성능을 증가시키기 위한 가장 효율적인 방법이라는 것을 알 수 있다.

반대로 charater segmentation의 성능 개선에 많은 시간을 쓰는 것은 잘못된 선택일 것이다.

+ Recent posts