본문 바로가기

2019년 혁신성장 청년인재 집중양성(빅데이터)/[COURSERA] Machine Learning Stanford Uni

[week11] Problem Description and Pipeline, Photo OCR(Optical Character Recognition)

 

1. OCR의 문제만 보더라도, Text detection, Character segmentation, Character classification이라는 세가지의 모듈로 구성된다.

 

2. 그렇다면 어떻게 파이프라인을 구성해야 할까?

 

B. Sliding Window

 

 

 

1. 먼저 텍스트 인식을 하기전에, 사람인식 문제를 살펴 보자. 사진 속의 사람을 인식하기 위해서 슬라이딩 윈도우 기법을 사용한다.

 

2. 슬라이딩 윈도우 기법은, 코끼리 다리 만지듯 사진을 자신이 설정한 창의 크기대로 다 살펴보는 것이다. 내가 설정한 창에서 학습된 결과의 양성 반응이 나타난다면 보행자가 있는 것으로 판별하는 것이다.

 

3. 그렇기 때문에, 일정한 비율의 사이즈를 정한 뒤, 사람인 것과 사람이 아닌 사진으로 트레이닝 셋을 만든 뒤에 학습을 시키고, 테스트 사진에서 창의 비율을 유지한 체 크기를 늘리면서 보행자를 찾는 것이다.

 

 

 

1. 텍스트 디텍션도 그와 같다. 글자와 글자 아닌 것으로 데이터셋을 만든 뒤에 학습시킨다. 그리고 비율을 늘려가면서 모든 텍스트를 찾는 것이다.

 

1. 그렇게 찾은 텍스트들은 왼쪽 아래와 같은 사진으로 표시된다. 그리고 여기서, 선택된 흰색의 픽셀을 확장시키는 것이다. 확장 시키면 오른쪽 아래의 사진과 같이 사진이 변환된다. 그 후, 텍스트의 비율이 맞지 않은 상자를 제거하고 선택한다.

 

 

1. 그렇게 인식한 텍스트에 대해서도, 다음 학습이 진행된다. 어디서 뛰어쓰기 되는지를 인식을 해야 하기 떄문에, 문자의 사이와 그렇지 않은 문자나 공백을 트레인 셋으로 학습을 시킨다. 

 

2. 이 과정이 지니가면 문자를 인식할 수 있게 된다.

 

1. 마지막은 문자와 답을 인식시켜서, 우리가 기존에 배웠던 로지스틱 분류의 문제로 문자 분류를 해결한다.

 

 

 

C. getting lots of Data and Artificial Data

 

 

1. 트레인 데이터가 부족하다. 그렇다면 인공적으로 합성한 데이터를 쓰면 되는데, 문자인식에 한해서는 무료 폰트의 문자에다가 배경을 랜덤으로 뿌려서 트레인 셋을 만들 수 있다.

 

 

1.두 번째 방법은 문자 사진을 왜곡하는 것이다. 다양한 왜곡 방법으로 많은 수의 트레인 셋을 얻을 수 있고 실제로 효과가 있다.

 

1. 소리도 인공적으로 합성하여 트레인셋을 증폭 시킬 수 있다.

 

 

1. 실제 합성이나 왜곡을 할 때, 그 예시가 테스트 셋에 있는 왜곡과도 비슷해야지만 증폭된 트레인 셋은 그 역할을 다 할 수 있다. 

 

2. 사람의 눈에도 별 차이가 없는 왜곡은 머신러닝에서도 소용이 없다. 아래의 예시처럼, 밝기조절 해봤자 내눈에도 별차이가 없는 것처럼, 왜곡을 했다고 하지만, 그저 똑같은 트레인 셋을 복제해놓은 것이나 다름이 없다. 결정적으로 세타를 긍정적인 방향으로 조정하는데 영향이 없는 것이다.

 

 

1. 먼저 데이터를 얻기전에 확실해 해야 한다. 더 많은 데이터를 얻는 것이 좋은 효과를 줄 것인가를 학습곡선을 그려본뒤 확인해야 한다. 

 

2. 즉 m의 수가 많아 짐에 따라, 트레인 셋에 대한 비용이 증가와, CV에 대한 비용의 증가가 감소하고 있는 가를 확인 해야 하는 것이다. 낮은 바이어스(편견)을 가지고 있다는 것이 확인 되어야만, 학습양이 충분하지 않다는 근거를 확보할 수 있는 것이다. 즉, 모델의 자아가 있다면, 이 아이는 아직 개념이 없는 것이다. 뭐가 맞는지 틀린지도 모르니 테스트의 비용과 트레인의 비용이 큰 차이가 있는 것이다. 

 

 

3.  그리고 나서, 질문하라. 어떻게 10배 뻥튀기를 할 수 있을까? 10배 뻥튀기 된다면 정말 성능은 좋아진다.

 

4. 첫번째는 앞 서 말한 합성, 두 번째는 직접 레이블링이다. 그리고 세번째는 크라우드 소스라는 외주를 사용하는 것.

 

5. 겁먹지 말고 계산해보라. 하나의 레이블을 하는데 얼마만큼의 비용이 드는지를 말이다. 10초에 하나 레이블 하여서 10,000개의 레이블을 하는데 얼마나의 시간이 걸리는 지 확인하고 과감하게 시도해보라. 성능이 분명히 효과가 있을 것이다.

 

 

D. Ceiling Analysis: What Part of the Pipeline to Work on Next

 

1. 일련의 여러 머신러닝 모듈로 이루어진 작업이 완료 된 후, 어떻게 성능을 향상 시킬 것인가?

 

2. 어떻게 한정된 시간을 가장 효율적으로 사용할 것인가에 대한 질문의 답은 Ceiling analysis로 답할 수 있다.

 

4. 위의 그림과 같이, 각각의 모듈이 100%의 정확도를 보인다고 가정했을 떄, 전체의 정확도를 확인해보는 것이다. 그리고 그 정확도의 변화가 가장 큰 곳에 더 많은 시간과 자원을 쏟는 것이다.

 

1. 또 다른 예시로, 사진 속 인물이 친구인지 아닌지를 구분한다고 할 때, 위와 같은 사진은 위 처럼 파이프라인이 그려질 수 있다.

 

2. 위에서 했던 방법과 마찬가지로 아래와 같이 정확도의 변화를 확인할 수 있다.

 

3. 중요한 예시는, 배경제거가 0.1%의 성능 향상을 보였다는 것이다. 그러니까 아무리 잘하더라도 0.1%이니, 시간과 돈이 많은 것이 아니면 다른 곳에 더 많은 자원을 쏟는 것이 좋다는 것이다.