교원dacon_논문 reading
CtC loss
Intro
- 음성인식이나 문자인식(OCR)에서 target sequence와 output sequence 길이가 다를때, ouput 길이가 target보다 길때, loss function을 정의하는 방법
- 'hello'라는 음성 파일로부터 -> 'hello'라는 text를 만드는 것이 목적
=> 'hhhellloo'와 같은 형태로 문자열을 만들어 냄
- 음성 속도가 일정하지 않아 합쳐야하는 character와 합치지 않아야하는 character를 구분할 필요가 있다
blank 개념
- 연속된 같은 character는 하나로 합치고(merger), 실제 연속된 character는 다르게 처리하기 위한 개년
- 실제 연속된 character 사이에는 blank를 넣은 형태로 모델이 예측하게 만듬
- hello => 'l','-','-','l'
- apple => 'p','-','p'
- blank가 1개 이상 사이에 들어가는 것도 가능
- blank 개념이 도입되면서, 주어진 GT가 될 수 있는 output이 여러개 될 수 있음
optimizaton
- blank 개념에 따라, 여러개의 output에 대한 확률을 모두 합해 최대화 될 수 있도록 optimization을 수행
- GT(target)이 'a'라면 Prediction이 'a'가 될 수 있는 모든 output의 확률 합이 최대화 될 수 있도록 optimizton
- prediction이 'a'(GT)가 되는 모든 경우를 찾아 확률을 합함 : (aa,a-,-a)=> dynamic programming 기법 사용
use
- 텍스트를 인식하는 컴퓨터를 필요로 할때,
- 피처 시퀀스를 추출하는 CRNN과 시퀀스로부터 정보를 전파하는 RNN…
- 각각의 시퀀스 요소에 대한 문자의 점수를 출력해 행렬로 표현한다.
- CTC의 사용 이유
- text-lines의 이미지가 있는 데이터셋을 생성
- 각 이미지의 수평 위치에 대해 일치하는 문자를 지정
- 각각의 수평적인 위치에 문자 점수를 출력하도록 뉴럴 네트워크를 학습
- 문제
- 데이터 셋에 어노테이션을 생성하는 것은 시간이 많이 걸린다.
- 문자 단위 점수만 얻기 때문에, 최종 텍스트를 얻기 위해서는 몇몇 추가적인 과정이 필요
- 하나의 문자는 여러 개의 수평 위치에 걸처져 있을 수 있따.
- 예를 들어 ‘o’는 넓은 문자이기 때문에 ‘ttooo’를 얻게된다. ⇒ 모든 중복된 t와 o를 제거해야 함
- BUT 원래 텍스트가 ‘too’일 때, 모든 중복된 ‘o’를 제거하면 잘못된 결과를 얻게 된다.
⇒ 문제 해결 필요 ⇒ CTC로 2가지 문제 해결 가능
- 이미지에서 발생된 텍스트의 CTC loss function에 대해만 언급해야 한다.
- 인식된 텍스트에 대해 추가적인 처리가 필요하지 않다.
CTC 작동 원리
- 각각 수평적인 위치의 이미지를 어노테이션 하는 것을 원치 않는다.
- 뉴럴 네트워크의 아웃풋 행렬 그리고 일치하는 ground-truth(GT) 텍스트 만을 CTC loss function에 제공
- 어디서 각각의 문자가 발생되는지 어떻게 알 수 있을까?
- 알 수 없다.
- 이미지에서 GT 텍스트의 모든 가능한 정렬(조정)을 시도하고 모든 점수의 합계를 취한다.
- 각 정렬의 합계가 높은 값을 가지면 GT 텍스트의 점수도 높은 값을 가진다.
- Encoding the text
- 중복된 문자 어떻게 인코드 하는지의 이슈
- pseudo-character(blank)로 해결
- 특별한 문자는 다음의 텍스트에서 ‘-’로 표시되어진다.
- (중복 문자 문제를 해결하기 위해 코딩 스키마를 사용)
- 텍스트 인코딩 시, 어떤 위치에든 임의의 많은 blank를 넣을 수 있다.
- 그리고 blank들은 디코딩할 때 제거됨
Loss calculation
- 뉴럴 네트워크에 훈련시키기 위해 주어진 이미지와 GT텍스트의 쌍에 대한 loss 값을 계산할 필요가 있다.
- 뉴럴 네트워크가 매 타입 스텝에 각각의 문자의 점수를 포함하는 행렬을 출력
- 손실 값은 GT 텍스트의 모든 정렬 가능한 점수가 합해짐으로서 계산된다.
- Dynamic Programming 기법 사용
- 이동 규칙을 적용해 path를 만든다
- apple 이 될 수 있는 valid path에 따라 순환식을 만들어 Forward, Backward Computation 적용
Decoding
- Best path decoding
- 타임 스텝마다 가장 가능성이 높은 문자를 채택함으로써 최고의 길을 계산
- 중복 문자를 먼저 제거하면서 인코딩을 하지 않는다. 그 길에 있는 모든 blank를 지운다. 남아있는 문자는 인식된 텍스트
- ‘a’,‘b’, ‘-’로 구성된 문자 / 5번의 타임 스텝
- 이 행렬의 최고의 길을 찾는 디코더를 적용
- t0에서 가장 가능성이 높은 문자 ‘a’
- t1 : t0와 같음
- t2 : t0와 같음
- t3 : blank가 높은 점수
- t4 : ‘b’가 가장 가능성이 높다
⇒ ‘aaa-b’ 라는 경로를 줌 ⇒ 중복된 문자를 제거 ⇒ ‘a-b’가 남는다
⇒ 남아있는 경로에서 blank를 제거 ⇒ 그러면 인식된 텍스트로서 ‘ab’라는 결과 출력
reference
https://soyoung-new-challenge.tistory.com/16
CTC(Connectionist Temporal Classification)-조희철