광학 문자 인식 (OCR) 프로젝트를 수행하려고합니다. 몇 가지 연구를 한 후에 흥미로운 것으로 보이는 아키텍처 인 CNN + RNN + CTC를 발견했습니다. CNN (Convoluted Neural Network) 및 RNN (Recurrent Neural Network)에 익숙하지만 CTC (Connectionistor Temporal Classification) 란 무엇입니까? 평신도의 용어로 설명하고 싶습니다.
광학 문자 인식 (OCR) 프로젝트를 수행하려고합니다. 몇 가지 연구를 한 후에 흥미로운 것으로 보이는 아키텍처 인 CNN + RNN + CTC를 발견했습니다. CNN (Convoluted Neural Network) 및 RNN (Recurrent Neural Network)에 익숙하지만 CTC (Connectionistor Temporal Classification) 란 무엇입니까? 평신도의 용어로 설명하고 싶습니다.
답변:
다음을 포함하는 데이터 세트가 있습니다.
따라서 데이터 세트는 다음과 같이 보일 수 있습니다.
신경망 (NN)은 이미지의 각 가능한 수평 위치 (종종 문헌에서 시간 단계 t 라고도 함)에 대한 점수를 출력합니다 . 너비 2 (t0, t1) 및 가능한 문자 2 개 ( "a", "b")가있는 이미지의 경우 다음과 같습니다.
| t0 | t1
--+-----+----
a | 0.1 | 0.6
b | 0.9 | 0.4
이러한 NN을 훈련 시키려면 이미지에서 실제 텍스트의 문자가있는 각 이미지에 대해 지정해야합니다. 예를 들어, "Hello"라는 텍스트가 포함 된 이미지를 생각해보십시오. 이제 "H"가 시작하고 끝나는 위치를 지정해야합니다 (예 : "H"는 10 번째 픽셀에서 시작하여 25 번째 픽셀까지 진행). "e", "l, ...의 경우와 동일합니다. 지루하게 들리고 큰 데이터 세트에는 어려운 작업입니다.
이런 식으로 완전한 데이터 세트에 주석을 달았더라도 다른 문제가 있습니다. NN은 각 시간 단계에서 각 캐릭터의 점수를 출력합니다. 장난감 예제는 위의 표를 참조하십시오. 우리는 이제 시간 단계마다 가장 가능성이 높은 문자를 취할 수 있습니다. 이는 장난감 예제에서 "b"와 "a"입니다. 이제 더 큰 텍스트 (예 : "Hello")를 생각해보십시오. 작가가 가로 방향으로 많은 공간을 사용하는 쓰기 스타일을 가지고 있다면 각 문자는 여러 시간 간격을 차지할 것입니다. 시간 단계마다 가장 가능성이 높은 문자를 사용하면 "HHHHHHHHHeeeellllllllloooo"와 같은 텍스트를 얻을 수 있습니다. 이 텍스트를 어떻게 올바른 출력으로 변환해야합니까? 각 중복 문자를 제거 하시겠습니까? 이로 인해 "Helo"가 나오지 않습니다. 따라서 영리한 사후 처리가 필요합니다.
CTC는 두 가지 문제를 모두 해결합니다.
이것이 어떻게 달성됩니까?
이를 설명하기 위해 다음 이미지를 살펴보십시오. 음성 인식의 맥락에서 텍스트 인식은 동일합니다. 문자의 정렬 및 위치가 다르더라도 디코딩은 두 스피커 모두에 대해 동일한 텍스트를 생성합니다.
더 읽을 거리 :