UFO(Universal Format for OCR) 가 무엇인가??
OCR기술이 발전하면서, 다양한 데이터셋이 등장하고 있습니다. 하지만 각 데이터셋은 저마다의 형식(json, txt, xml, csv 등)을 가지고 있어 이를 통합적으로 처리하기 어려운 경우가 많습니다. 이런 문제를 해결하기 위해 UFO(Universal Format for OCR)가 등장했습니다. UFO는 다양한 파일 형식을 하나로 통합하고, 서로 다른 OCR 모듈에서도 쉽게 사용할 수 있도록 하기 위한 통합 포맷입니다.
1. UFO의 목적
UFO의 주요 목적은 다양한 형식의 데이터를 하나의 표준 포맷으로 통합하여 처리하는 것입니다. 이 포맷은 특히 다음과 같은 목표를 가지고 설계되었습니다:
- 파일 형식 통합: 각각의 Public Dataset의 파일 형식(json, txt, xml, csv 등)을 하나의 통일된 포맷으로 변환하여 여러 데이터셋을 쉽게 다룰 수 있도록 합니다.
- 다양한 모듈 간 호환성: UFO는 Detector, Recognizer, Parser와 같은 서로 다른 모듈에서도 모두 쉽게 사용할 수 있어야 합니다. 즉, 서로 다른 기능을 수행하는 모델이나 도구들이 통일된 데이터 구조를 사용할 수 있게 하여 개발 효율성을 높입니다.
- 모델 개선을 위한 케이스 추가: 모델 개선을 위해 필요한 다양한 정보를 UFO 포맷에 포함시킬 수 있습니다. 예를 들어 이미지 단위의 특성(손글씨, blur 여부), 글자 영역 단위의 특성(가려짐, 글자 진행 방향 등)을 UFO 데이터에 포함시켜 더 많은 정보를 바탕으로 학습 및 분석을 할 수 있습니다
2. UFO 포맷의 특징: 병렬 구조로 구성된 데이터 처리
UFO(Universal Format for OCR)는 단순한 데이터 포맷 이상의 유연성과 확장성을 제공합니다. 특히, json 파일 안에서 요소 탐색이 쉽게 Graph Structure(그래프 구조)를 기반으로 만들어졌기 때문에, 문서 내 여러 구성 요소들을 효과적으로 탐색하고 활용할 수 있습니다. UFO의 특징은 하나의 이미지 내 정보들이 모두 병렬적으로(parallel) 존재한다는 점입니다. 즉, 다양한 형태의 OCR 데이터를 동시에 가져와 분석할 수 있는 장점을 제공합니다.
UFO 포맷의 병렬 구조
UFO 포맷은 병렬 구조로 구성되어 있어, 이미지에서 paragraph(문단), words(단어), chars(글자)와 같은 정보들을 동시에 병렬로 탐색할 수 있습니다. 이를 통해 다양한 모델 학습에 필요한 데이터를 간단하게 추출할 수 있습니다.
예를 들어, UFO 포맷을 활용하면 특정 이미지 파일에서 문단 정보를 가져오고 싶을 때, 바로 paragraph를 호출해 문단 단위의 정보를 처리할 수 있습니다.
- Serializer 모델 개발: 문단 단위로 정보를 가져와 사용하고자 할 때, UFO 포맷 내에서 이미지에서 문단 정보를 병렬로 가져와 모델 학습에 활용할 수 있습니다.
- Recognizer 모델 학습: 단어 단위로 OCR 결과를 가져와 학습하고자 할 때, UFO는 이미지 내에서 단어 단위의 데이터를 병렬로 가져오는 기능을 제공합니다.
- Parser 모델 학습: 글자 단위로 OCR 결과를 가져와 학습하고자 할 때, UFO는 이미지 내에서 글자(chars) 단위의 정보를 병렬로 가져오는 구조를 가지고 있습니다.
이런 병렬 구조는 UFO 포맷의 가장 큰 장점 중 하나로, 다양한 데이터 형식을 한 번에 처리할 수 있도록 돕습니다. 이미지를 처리하는 과정에서 문단, 단어, 글자 단위의 정보를 각각 독립적으로 병렬 처리할 수 있어, 모델이 필요로 하는 특정 정보만을 빠르게 가져와 사용할 수 있습니다.
또한 UFO는 Graph Structure로 구성되어 있기 때문에, 데이터를 탐색하고 추출하는 과정이 매우 유연합니다. 각 단계에서 필요한 정보를 병렬적으로 호출할 수 있으며, 이는 다양한 OCR 응용 프로그램에서 사용하기에 매우 적합한 구조를 제공합니다.
3. UFO 포맷 데이터 구조
1) Dataset 레벨
한 데이터셋 내의 모든 이미지들에 관해 하나의 UFO 형식의 JSON 파일로 이루어져 있다.
2) Image 레벨
UFO 포맷에서 각 이미지별로 저장되는 정보는 다음과 같습니다.
- paragraphs(문단): 이미지 내 문단 단위의 텍스트 정보.
- words(단어): 이미지에서 인식된 단어 단위의 정보.
- characters(글자): 각 글자 단위의 세부 정보.
- image width(이미지 가로 크기): 이미지의 가로 크기(폭).
- image height(이미지 세로 크기): 이미지의 세로 크기(높이).
- image tag(이미지 태그): 이미지에 대한 태그 정보.
- annotation log(주석 기록): 이미지와 관련된 주석 정보.
- license tag(라이선스 태그): 이미지의 라이선스와 관련된 태그.
UFO 포맷의 주요 공통 요소가 있다.
1. ids
각 문단(paragraph), 이미지(image), 글자(character) 등 레벨별로 모든 요소에 고유한 ID 넘버를 부여합니다. 이러한 ID는 순서와 상관없이 단순히 각 객체를 구분하는 용도로 사용됩니다.
2. points
라벨링된 각 객체의 위치 좌표를 기록합니다. 이 좌표는 문서의 좌측 상단에서 시작해 시계방향으로 x, y 좌표를 기록하며, nested list 형태로 구성됩니다.
- 기본적으로 4개의 점으로 구성된 Bounding Box(bbox)가 사용되며, 더 복잡한 다각형(6점, 8점 등) 형태로도 저장이 가능합니다.
[[x1, y1], [x2, y2], [x3, y3], [x4, y4]]
3. language
문서 내 텍스트가 사용된 언어를 정의합니다. 다양한 언어가 포함된 문서의 경우, 각 글자의 언어가 지정됩니다.
- 예시: "en", "ko", "others", ["en", "ko"] 등의 방식으로 여러 언어를 나타낼 수 있습니다.
4.tags
성능에 영향을 주지 않지만, 개별 요소에 대한 추가적인 정보를 기록할 수 있는 태그로서 활용됩니다. 예를 들어, 이미지를 태그로 분류하거나 단어에 대한 추가 정보를 기록하는 방식입니다.
5. confidence
OCR 모델이 예측한 결과에 대한 신뢰도 점수를 함께 표시할 수 있습니다. 특히 pseudo-label의 경우 confidence score도 함께 제공되어, 모델의 결과에 대한 신뢰도를 평가할 수 있습니다.
3) Paragraph 레벨
문서 내에서 문단 단위의 정보를 다루는 레벨입니다. 문단 단위로 텍스트를 분석하고, 각 문단의 위치 좌표, 사용된 언어, 신뢰도 등 다양한 메타데이터를 기록합니다. Paragraph 레벨은 OCR 결과를 문단 단위로 나누어 처리함으로써 문서의 구조적 이해를 돕고, 문서 내 다양한 텍스트 요소들을 세분화하여 관리할 수 있게 해 줍니다.
Paragraph 레벨의 주요 요소
- points (좌표):
Paragraph 레벨에서 가장 중요한 요소는 문단의 위치 좌표입니다. 각 문단은 Bounding Box나 다각형 좌표로 표현되며, 문서 내에서 해당 문단이 어디에 위치하는지를 나타냅니다. 이 좌표는 x, y 좌표값으로 기록되며, 왼쪽 상단부터 시계 방향으로 값을 기록하는 방식입니다. 문서에서 문단의 정확한 위치를 파악함으로써, 이미지 상에서 해당 문단을 시각적으로 식별하고 분석할 수 있습니다. - language (언어):
각 문단에서 사용된 언어 정보도 함께 기록됩니다. 다국어로 작성된 문서나 문단별로 언어가 다른 경우, Paragraph 레벨에서 언어 정보를 명확히 구분함으로써 OCR 처리 과정에서 정확한 번역이나 분석이 가능해집니다. - confidence (신뢰도):
OCR 모델이 문단의 텍스트를 인식하는 과정에서 예측한 결과에 대한 신뢰도 점수입니다. 신뢰도는 0과 1 사이의 값으로 표현되며, 모델이 해당 문단을 얼마나 정확하게 인식했는지에 대한 확신 정도를 나타냅니다. 이를 통해 후속 처리에서 신뢰도가 낮은 문단에 대해 추가적인 검토가 가능하게 됩니다.
4) Word 레벨
문서 내 개별 단어에 대한 정보를 처리하고 저장하는 레벨입니다. 이 레벨은 각 단어의 좌표, 텍스트(문자열), 언어, 신뢰도 등을 기록하여, 문서 내에서 단어 단위의 정보를 세분화하고 분석하는 데 유용합니다. Word 레벨은 특히 텍스트 추출과 번역, 텍스트 정렬 등에서 중요한 역할을 합니다.
Word 레벨의 주요 요소
- transcription (문자열):
각 단어에 대한 텍스트 정보입니다. 즉, OCR 시스템이 해당 영역에서 추출한 실제 단어 또는 글자가 여기에 기록됩니다. 예를 들어, 이미지에서 인식된 텍스트가 "LAWSON"일 경우 해당 정보가 transcription 항목에 저장됩니다. - points (좌표):
단어가 문서 이미지에서 위치한 좌표 정보를 나타냅니다. 이 좌표는 다각형 형태로 기록되며, 단어가 이미지 상에서 어디에 위치하는지를 정확하게 나타냅니다. 이를 통해 각 단어의 위치를 시각적으로 파악할 수 있습니다. - 언어 정보와 태그:
각 단어가 어떤 언어로 작성되었는지를 기록합니다. 또한 단어가 읽을 수 있는지 없는지에 대한 정보(가독성), 또는 텍스트가 흐릿하거나, 초점이 맞지 않는 등의 특성도 함께 태그로 기록할 수 있습니다. 이러한 태그는 OCR 모델의 성능을 개선하는 데 사용될 수 있습니다. - 특이 사항 (예: illegibility):
Word 레벨에서 특이사항으로 기록되는 **illegibility(가독성)**은 단어가 읽기 어려운 상태인지 여부를 판단하여 저장합니다. 이 정보는 OCR 모델이 단어를 인식하는 데 어려움이 있을 경우 추가적인 후처리를 위해 사용됩니다.
5) Character 레벨
Character 레벨은 UFO(Universal Format for OCR) 포맷에서 개별 글자(characters) 단위로 정보를 저장하는 가장 세분화된 레벨입니다. 이 레벨에서는 각 글자의 위치 좌표, 텍스트(문자), 신뢰도(confidence) 등을 기록하여 OCR 시스템이 이미지 내의 개별 글자를 정확하게 인식하고 분석할 수 있게 해줍니다. Character 레벨은 텍스트 인식 과정에서 매우 중요한 역할을 하며, 정확한 문자 인식을 가능하게 하는 핵심 정보들을 포함하고 있습니다.
Character 레벨의 주요 요소
- transcription (문자):
개별 글자에 대한 텍스트 정보를 기록합니다. 예를 들어, 이메일 주소에서 각 문자가 어떻게 인식되었는지 저장하며, 예시 이미지에서는 "E", "g", "i" 등의 개별 문자가 각각 저장되어 있습니다. - points (좌표):
문자가 이미지 내에서 어디에 위치하는지 나타내는 좌표 정보입니다. Character 레벨에서는 각 글자가 위치한 Bounding Box 좌표를 저장하며, 이를 통해 이미지 상에서 개별 글자의 위치를 시각적으로 파악할 수 있습니다. - confidence (신뢰도):
OCR 모델이 해당 글자를 인식한 결과에 대한 신뢰도 점수입니다. 이 값은 0에서 1 사이의 값을 가지며, 모델이 해당 글자를 얼마나 정확하게 인식했는지 나타냅니다. 신뢰도는 후처리 작업에서 중요한 역할을 하며, OCR 모델의 결과가 충분히 신뢰할 만한지 판단하는 데 사용됩니다.
6) Annotation Log와 License Tag
Annotation Log와 License Tag는 데이터 품질 관리와 추적을 위해 중요한 역할을 합니다. 이 요소들은 데이터를 사용하는 데 필요한 정보를 제공하며, 특히 데이터가 어떻게 생성되었고 어떤 라이선스로 사용할 수 있는지에 대한 명확한 기록을 남깁니다.
Annotation Log는 데이터 생성 및 수정 과정에서 발생하는 이슈나 변경 사항을 추적하기 위한 정보를 기록하는 부분입니다. 이를 통해 데이터의 작업 내역을 확인하고, 문제 발생 시 그 원인을 추적할 수 있습니다. 특히 데이터 품질 관리를 위해 필수적인 요소로 작용합니다.
- Worker: 해당 데이터를 생성하거나 수정한 작업자의 아이디를 기록합니다. 이를 통해 누가 작업을 수행했는지 확인할 수 있습니다.
- Timestamp: 해당 파일이 생성되거나 수정된 날짜와 시간을 기록합니다. 시간 기록은 데이터 변경 내역을 추적할 때 유용하게 사용됩니다.
- Tool_version: 데이터를 생성하는 데 사용된 도구의 버전 정보를 기록합니다. 다양한 버전의 툴이 사용될 수 있기 때문에, 데이터가 어떤 버전의 툴로 작업되었는지를 알 수 있습니다.
- Source: 데이터가 만들어진 출처나 관련된 소스를 기록합니다. (예시에서는 null로 표기됨)
License Tag는 데이터 사용과 관련된 라이선스 정보를 기록하는 부분입니다. 이 정보는 데이터가 어떻게 사용될 수 있는지, 누구에게 허가되었는지에 대한 중요한 정보를 포함하고 있어, 이후 데이터 사용 시 법적 문제를 방지하는 데 도움이 됩니다.
- Usability: 해당 데이터가 사용 가능한지를 나타냅니다. 예를 들어, 데이터를 자유롭게 사용할 수 있는지 여부를 true/false 값으로 기록합니다.
- Public: 이 데이터가 public dataset인지를 나타냅니다. 공공 데이터인 경우 true로 표기됩니다.
- Commercial: 해당 데이터가 상업적으로 사용 가능한지 여부를 나타냅니다. 상업적 이용이 가능한 데이터는 true로 표기됩니다.
- Type: 라이선스의 구체적인 종류를 나타냅니다. 예를 들어, "CC BY"와 같은 구체적인 라이선스 형태가 여기에 기록됩니다.
- Holder: 원본 데이터의 소유자를 기록합니다. 데이터의 저작권자나 소유자가 누구인지를 명시하여, 추후 데이터 사용 시 관련된 소유권 문제를 처리할 수 있도록 돕습니다.
이 정보들은 특히 데이터 품질 관리와 법적 문제 방지에서 중요한 역할을 합니다. Annotation Log는 데이터 생성 및 수정 과정에서의 이슈를 추적하고 관리하는 데 도움을 주며, License Tag는 데이터를 사용함에 있어 적절한 권한을 가지고 있는지를 판단하는 데 필요한 정보를 제공합니다.
끝.
감사합니다.
'딥러닝 (Deep Learning) > [02] - 데이터' 카테고리의 다른 글
의료 데이터를 다룰 때 주의해야 할 윤리적, 법적 문제 (3) | 2024.11.26 |
---|---|
이미지 기반 손 뼈 EDA (6) | 2024.11.11 |
[04] - OCR 기반 문서 이해 (2) | 2024.10.30 |
[02] - OCR Tasks (8) | 2024.10.30 |
[01] Data-Centric AI (10) | 2024.10.28 |