no image
[boostcamp] 부스트캠프 AI Tech 13주차 돌아보기
1. 잘한 것- 새로운 팀에서 프로젝트(Segmentation)에 대한 팀장을 맡아서 업무를 배분하여 협업이 될 수 있도록 지원했습니다. - 할당된 강의들을 제시간에 완료했습니다. - streamlit으로 프로젝트에서 사용할 시각화 웹 애플리케이션을 만들었습니다.    2. 부족한 것- 주간에 배웠던 내용들을 미리 정리하기로 계획했지만, 할당된 작업들로 인해 제대로 정리하지 못했습니다.- Leetcode, 백준 등 코딩테스트 문제를 매일 풀지는 못했습니다.  3. 배운 것- Segmentation 문제와 주요 지표 : https://seanpark11.tistory.com/156📖 Semantic Segmentation, Instacne Segmentation, Panoptic Segmentation,..
2024.11.15
no image
[Seg] Fully Convolutional Networks (FCN) for Segmentation 정리
1. Fully Convolution Networks1.1. 주요 특징Convolution 네트워크는 컴퓨터 비전에서 획기적으로 성능 향상을 이끈 구조입니다. 다양한 피쳐 맵(feature map)을 만들어서 여러 컴퓨터 비전의 작업에 활용했습니다. Semantic segmentation에서도 convolution 네트워크를 활용하려는 시도가 있었고, 이에 대한 효시가 된 논문이 있습니다. [1] 해당 논문에서 제시하고 있는 Segmentation을 위한 FCN의 설계 주요 특징은 다음과 같습니다.당시 좋은 성능을 내고 있던 VGG-16을 기본 구조(backbone)으로 사용Fully-connected layer를 Convolution layer로 대체Transposed convolution을 이용해 p..
2024.11.15
no image
[Seg] Segmentation Task와 주요 평가지표(Dice) 정리
1. Task의 분류Segmentation 또는 Image Segmentation은 컴퓨터 비전에서 연구되는 주요 분야 중 하나로, 이미지를 객체에 대응하는 여러 부분(segments)이나 영역으로 나누는 것입니다. 이미지의 픽셀을 레이블이나 카테고리에 할당해서 비슷한 것끼리 묶는 것을 목표로 하고 있습니다.[1] Segmentation은 크게 Semantic, Instance, Panoptic로 구분할 수 있습니다.  Semantic Segmentation은 이미지의 픽셀 단위로 분류해서 클래스나 객체인지를 구분하는 컴퓨터 비전의 한 영역입니다. 이 과제의 주요 목표는 매핑을 통해 이미지를 모두 구분할 수 있는 구분을 형성하는 것입니다. [2] Instance Segmentation은 이미지 안 있는 ..
2024.11.14
no image
[boostcamp] 부스트캠프 AI Tech 12주차 돌아보기
1. 잘한 것- CVAT를 사용해 데이터셋을 만드는 일련의 과정을 실습했습니다.- 시간 내 구현하지 못한 생성 문제를 프로젝트가 넘어서라도 구현했습니다. - 코딩 구현 공부를 위해 Leetcode와 백준 문제를 꾸준히 풀고 있습니다. 2. 부족한 것- 합성 데이터셋을 만드는 태스크를 할당받았지만, 시간 내에 구현하지 못했습니다. 3. 배운 것- OCR 문제 정의와 구조 : https://seanpark11.tistory.com/150📖 Text Detector, Text Recognizer, Serializer, Text Parser - OCR 지표 공부 : https://seanpark11.tistory.com/151📖 DetEval, IoU, TIoU, CLEval   - Labeling 도구로 ..
2024.11.08
no image
OCR 성능 평가 지표 알아보기 | DetEval, IoU, TIoU, CLEval
1. OCR 모델의 평가 OCR은 객체 탐지의 세부 영역으로 볼 수 있기 때문에 이전에 다뤄진 객체 탐지의 지표들을 참고해볼 수 있습니다.  참고자료:2024.11.02 - [노트/Computer Vision] - [OCR] 광학 문자 인식(OCR) 문제와 특징2024.10.02 - [노트/Computer Vision] - [OD] 객체 탐지(Object Detection) 성능 판단 지표 정리 | IOU, mAP, FPS, FLOPS OCR 모델들의 평가는 추론을 진행한 결과와 정답(Ground Truth, GT) 간 비교를 하고, 매칭 및 점수를 매기는 과정(Scoring)을 통해 평가합니다. 여기서 살펴봐야 할 것은 추론 결과와 GT가 어떻게 매칭되는지 판단하고, 그 매칭한 정도에서 어떻게 점수를 ..
2024.11.07
[OCR] 광학 문자 인식(OCR) 문제와 특징
1. 개념이전에 객체 인식 문제는 객체의 위치와 클래스를 분류하는 문제였다면, 문자 인식은 1개의 클래스(텍스트)로 구분된 여러 객체들을 인식하는 문제입니다. 흔하게 Optical Characer Recognition(OCR)으로 불리며, 다양한 소스(스캔 파일, 문서 이미지 등)에서 다양한 방식으로 입력(수기, 프린팅 등)된 텍스트를 변환하는 것 입니다.  문자 인식 문제는 환경에 따라 아래와 같이 크게 2가지로 분류할 수 있습니다. 전통적인 문서 형태에서 인식을 하는 것과 일상적인 이미지에서 문자를 인식(예를 들어, 도시 이미지에서 간판 인식)하는 문제 입니다. 후자는 Scene Text Recognition (STR)로도 불리며, 배경이나 문자의 형태가 더욱 복잡하기 때문에 문서보다 어렵다고 여겨집..
2024.11.02
no image
[boostcamp] 부스트캠프 AI Tech 11주차 돌아보기
1. 잘한 것- baseline을 보고 프로젝트 디렉토리를 구상해서 기본 프로젝트 구조를 제안했습니다. - Train dataset을 random split할 수 있도록 코드를 1차 구현했습니다. - 모델이 추론한 결과에 대해 시각화를 진행하고, 추가적으로 개선이 필요한 부분을 제안했습니다. - 강의, 과제 등 할당된 내용에 대해 모두 제시간에 완료했습니다. - 코딩 구현 공부를 위해 Leetcode도 새롭게 시작했습니다.  2. 부족한 것- 주간에 배웠던 내용들을 미리 정리하기로 계획했지만, 할당된 작업들로 인해 제대로 정리하지 못했습니다.- 데이터셋을 생성하는 것을 알아본다고 했지만, 적당한 방법론을 아직 찾지 못했습니다.  3. 배운 것- OCR을 위한의 Sub 모듈 및 태스크 : https://s..
2024.11.01
no image
[boostcamp] 부스트캠프 AI Tech 10주차 돌아보기
1. 잘한 것- 직접 모델을 돌리지는 않았지만, MMDetection 3 라이브러리를 살펴보고, 사용법에 대해 간단하게나마 익혔습니다. - 구현한 증강기법들을 바탕으로 실험을 수행하고 결과를 정리했습니다. - 구현한 증강기법을 custom dataset에 같이 넣고 작동할 수 있도록 리팩토링을 했습니다.- WandB 사용법을 간단하게나마 익히고 적용해봤습니다.- 금주에 할당된 코딩테스트 문제들을 모두 풀었습니다.  2. 부족한 것- 직접 모델을 적용하면서 실험하지 못했습니다. (제한된 서버 할당, 라이브러리에 대한 이해도가 낮은 상황 등에서 기인했는데, 다음에는 학습에 대해 조금 더 체계적인 방법으로 접근할 필요가 있을 것 같습니다.)- Scale-aware Auto Augmentation를 시도해본다고..
2024.10.25
no image
[boostcamp] 부스트캠프 AI Tech 9주차 돌아보기
1. 잘한 것- FPN 논문과 다양한 자료들을 최대한 이해하면서 논문 리뷰를 준비했고, 그에 대해서 좋은 피드백을 들었습니다.- 객체 탐지에서 적용할 수 있는 다양한 증강기법을 찾아보면서 라이브러리에 없는 것은 직접 구현했습니다. 2. 부족한 것- 코딩테스트 문제를 충분히 풀지 못했습니다.- Detectron2로 PANet으로 FPN보다 개선된 Neck구조를 구현해보려고 했으나, 라이브러리 사용법에 대한 충분한 이해가 없었기 때문에 끝내 만들지는 못했습니다. - WandB 사용법을 익힌다고 했는데 제대로 사용하지는 못했습니다. 3. 배운 것- 1 Stage Detector에 대한 정리 : https://seanpark11.tistory.com/144📖 YOLO, SSD, RetinaNet➡️ 모델들의 ..
2024.10.18
반응형

1. 잘한 것

- 새로운 팀에서 프로젝트(Segmentation)에 대한 팀장을 맡아서 업무를 배분하여 협업이 될 수 있도록 지원했습니다. 

- 할당된 강의들을 제시간에 완료했습니다. 

- streamlit으로 프로젝트에서 사용할 시각화 웹 애플리케이션을 만들었습니다.   

 

2. 부족한 것

- 주간에 배웠던 내용들을 미리 정리하기로 계획했지만, 할당된 작업들로 인해 제대로 정리하지 못했습니다.

- Leetcode, 백준 등 코딩테스트 문제를 매일 풀지는 못했습니다. 

 

3. 배운 것

- Segmentation 문제와 주요 지표 : https://seanpark11.tistory.com/156

📖 Semantic Segmentation, Instacne Segmentation, Panoptic Segmentation, Dice

 

- FCN for Segmentation : https://seanpark11.tistory.com/157

📖 FCN, Transpose Convolution, Skip connection

 

4. 시도할 것

- UNet 계열 모델들을 실험할 계획입니다.

- smp 라이브러리를 사용할 수 있도록 프로젝트 코드를 수정해볼 계획입니다.

- 시간이 날 경우 auto augmentation을 통해 최적의 데이터 증강 조합을 찾아볼 계획입니다.

 

반응형
반응형

1. Fully Convolution Networks

1.1. 주요 특징

Convolution 네트워크는 컴퓨터 비전에서 획기적으로 성능 향상을 이끈 구조입니다. 다양한 피쳐 맵(feature map)을 만들어서 여러 컴퓨터 비전의 작업에 활용했습니다. Semantic segmentation에서도 convolution 네트워크를 활용하려는 시도가 있었고, 이에 대한 효시가 된 논문이 있습니다. [1]

 

해당 논문에서 제시하고 있는 Segmentation을 위한 FCN의 설계 주요 특징은 다음과 같습니다.

  • 당시 좋은 성능을 내고 있던 VGG-16을 기본 구조(backbone)으로 사용
  • Fully-connected layer를 Convolution layer로 대체
  • Transposed convolution을 이용해 pixel-wise 예측을 수행

1.2. Convolution 연산이 필요한 이유

Fully-conneted layer는 모든 신경망들이 연결되어 1차원의 평탄화된 행렬을 통해 이미지를 분류하는데 사용되는 층입니다. 평탄화되어 있는만큼 위치에 대한 정보가 없어지기 때문에 이미지 정보를 담기에는 적절하지 않습니다.

FC 연산[2]

 

반면에, Convolution은 필터/커널이 이동하면서 연산을 수행하기 때문에 위치 정보가 해치지 않은 상태로 피쳐 맵을 추출할 수 있고, 커널이 이동만 하면되기 때문에 입력의 크기에 상관이 없습니다.

Convolution 연산[2]

1.3. Transposed convolution

Convolution 네트워크의 층을 통과할 때마다 패딩, 스트라이드 등에 따라 다르긴 하지만, 해상도가 갈수록 줄어듭니다. VGG의 경우 최종 층에서 나온 것은 1/32 수준인데, Segmentation에서는 원본 이미지에 표시를 해야 하기 때문에 복원을 위한 업샘플링 과정이 필요합니다. 

 

 각 요소의 값에 더 큰 커널을 적용하면 단순히 곱이되는 방식으로 커널 사이즈만큼의 행렬이 생성됩니다. 그것을 모든 요소에 적용하고 그 위치에 맞춘 다음 최종적으로 합을 진행하면 업샘플링이 가능합니다. 아래 그림은 2x2 입력값을 스트라이드 1의 커널 사이즈 3x3을 통해 4x4로 늘려주는 과정입니다. [3] 만약 더 큰 사이즈를 원할 경우 스트라이드를 키우면 더 큰 사이즈로 업샘플링이 가능할 것입니다. 이렇게 스트라이드가 1이 아닌 convolution을 strided convolution이라 합니다. 

 

Transpose Convolution [3]

 

이러한 convolution 연산을 행렬로 표현하면 sparse한 커널 행렬을 역행렬을 구해서 곱해주면 업샘플링한 값을 구할 수 있습니다. 이는 전치(transpose)해서 우변에 곱하는 과정과 동일하기 때문에 transposed convolution이라고 합니다. 이러한 과정이 역으로 convolution한 것처럼 보인다고 해서 deconvolution이라는 명칭이 많이 활용되기는 하지만,엄밀한 의미에서 convolution의 역연산은 아니기 때문에 정확한 표기는 아닙니다.

 

Transposed convolution 역시 다른 convolution과 동일하게 학습이 되는 파라미터로 파이토치를 통해 구현이 가능합니다. 파이토치에서 구현하려면 아래와 같이 적을 수 있습니다. 

 

torch.nn.ConvTranspose2d()

 

 

ConvTranspose2d — PyTorch 2.5 documentation

Shortcuts

pytorch.org

1.4. 구조

FCN의 구조는 기존의 convoltion 네트워크와 거의 동일합니다. 기본적인 convolution 구조에서 forward 연산을 통해 추론과 backward로 학습이 진행이되고, 맨 마지막 예측은 transpose convolution을 통해 pixel-wise 예측을 수행합니다. 

구조 [1]

2. FCN에서 성능 향상 방법

2.1. stride 축소

하지만 진짜 구분해야 하는 ground truth에 비해 세밀함이 부족한 경우들이 많이 보였습니다. 아래 사진을 보면 경계선이 많이 사라진 것을 확인할 수 있는데, 이는 Max Pooling을 지나면서 손실된 정보들 때문입니다. 따라서 Pooling 층을 지나면서 잃어버린 정보에 대한 복원이 필요하고 손실이 발생하기 전에 정보를 합쳐서 정보를 보존하는 방식을 채택합니다.  

손실된 이미지 경계선 정보[1]

 

정보를 합치는 방법은 ResNet에서도 언급된 skip connection (이전 층의 정보를 더하기) 방식으로 개선합니다. 최종층이 1/32이었기 때문에 최종 층에서 나온 Transpose Conv에서 나온 값(FCN-32s)과 1/16 층에서 나온 값을 1x1 Conv를 통과시켜서 합쳐서 예측을 수행한 것이 FCN-16s 입니다.

 

여기서 더 나아간 것이 FCN-16s 예측값과  1/8 층에서 나온 값을 1x1 conv 통과시켜서 합쳐 Transpose Conv를 통해 예측을 수행한 것이 FCN-8s 입니다. 위 이미지에서 확인할 수 있듯 이전 층의 정보를 합쳐줄수록 더욱 선명한 결과값이 나오는 것을 확인할 수 있습니다. 

skip connection [1]

3. 참고자료

[1] Evan Shelhamer, Jonathan Long, Trevor Darrell. "Fully Convolutional Networks for Semantic Segmentation" 

[2] https://builtin.com/machine-learning/fully-connected-layer

[3] 김현우. "Lecture 3. Semantic Segmentation의 기초와 이해". boostcamp ai tech.

[4] https://zzsza.github.io/data/2018/02/23/introduction-convolution/

반응형
반응형

1. Task의 분류

Segmentation 또는 Image Segmentation은 컴퓨터 비전에서 연구되는 주요 분야 중 하나로, 이미지를 객체에 대응하는 여러 부분(segments)이나 영역으로 나누는 것입니다. 이미지의 픽셀을 레이블이나 카테고리에 할당해서 비슷한 것끼리 묶는 것을 목표로 하고 있습니다.[1] Segmentation은 크게 Semantic, Instance, Panoptic로 구분할 수 있습니다. 

 

Semantic Segmentation은 이미지의 픽셀 단위로 분류해서 클래스나 객체인지를 구분하는 컴퓨터 비전의 한 영역입니다. 이 과제의 주요 목표는 매핑을 통해 이미지를 모두 구분할 수 있는 구분을 형성하는 것입니다. [2] Instance Segmentation은 이미지 안 있는 개별 객체를 경계와 개별 객체에 고유한 레이블을 부여하는 것입니다. [3] Panoptic Segmentation은 semantic과 instance의 결합된 버전으로 장면에 대한 전반적인 이해를 하는 것을 목표로 하고 있습니다. 이미지를 의미에 따라 나누는 것은 semantic, 각 개별 객체를 구분해내는 것은 instance의 방법을 따라가는 것으로 주어진 이미지에서 의미 레이블과 고유의 인스턴스 id를 부여합니다. [4]

 

아래 이미지를 참고하면 각각에 대해 한번에 와닿게 이해할 수 있을 겁니다. 

Segmentation 구분 [5]

 

2. 주요 지표

객체 탐지 문제와 유사하게 면적을 계산할 수 있는만큼 Segmentation 역시 IoU를 활용해 평가지표로 활용할 수 있습니다. 

 

2024.10.02 - [노트/Computer Vision] - [OD] 객체 탐지(Object Detection) 성능 판단 지표 정리 | IOU, mAP, FPS, FLOPS

 

[OD] 객체 탐지(Object Detection) 성능 판단 지표 정리 | IOU, mAP, FPS, FLOPS

IoUIoU (Intersection Over Union)은 모델이 얼마나 객체 탐지를 정확하게 했는지, 즉 모델이 찾은 객체의 위치가 실제 데이터셋의 ground truth와 겹치는지를 확인하는 지표 입니다. 영문 명칭에서 확인할

seanpark11.tistory.com

 

이와 유사하게 두개의 영역이 얼마나 겹쳐져 있는지 살펴보는 또 다른 지표인 Dice 라는 것이 존재합니다. 원래 명칭은 Dice-Sørensen coefficient라고 하는데, 두 샘플 사이의 유사도를 측정하는 통계치입니다. 공식은 아래와 같습니다. 

Dice Sorensen Coefficient [6]

 

IOU 공식은 교집합을 합집합으로 나눈 것이었지만, Dice는 교집합의 2배를 각각 집합을 더한 것만큼 나눈 것이기 때문에 수치적으로 조금 차이가 있을 수 있습니다.  

 

이를 컴퓨터에서도 사용할 수 있게끔 boolean으로 풀어쓰면 아래와 같습니다. 겹치는 것은 2배해서 분자와 분모에 모두 넣고 분모에는 추가적으로 Ground Truth에는 있지만 Prediction에는 없는 것(FN)과 Ground Truth에는 없지만 Prediction에만 있는 것(FP)까지 함께 더합니다. 

Dice Sorensen Coefficient [6]

참고자료

[1] https://paperswithcode.com/task/image-segmentation

[2] https://paperswithcode.com/task/semantic-segmentation

[3] https://paperswithcode.com/task/instance-segmentation

[4] https://paperswithcode.com/task/panoptic-segmentation

[5] https://mindy-support.com/news-post/what-is-image-segmentation-the-basics-and-key-techniques/

[6] https://en.wikipedia.org/wiki/Dice-S%C3%B8rensen_coefficient

반응형
반응형

1. 잘한 것

- CVAT를 사용해 데이터셋을 만드는 일련의 과정을 실습했습니다.

- 시간 내 구현하지 못한 생성 문제를 프로젝트가 넘어서라도 구현했습니다. 

- 코딩 구현 공부를 위해 Leetcode와 백준 문제를 꾸준히 풀고 있습니다.

 

2. 부족한 것

- 합성 데이터셋을 만드는 태스크를 할당받았지만, 시간 내에 구현하지 못했습니다.

 

3. 배운 것

- OCR 문제 정의와 구조 : https://seanpark11.tistory.com/150

📖 Text Detector, Text Recognizer, Serializer, Text Parser

 

- OCR 지표 공부 : https://seanpark11.tistory.com/151

📖 DetEval, IoU, TIoU, CLEval  

 

- Labeling 도구로 데이터셋 만들기 :  https://seanpark11.tistory.com/152

📖 CVAT

 

4. 시도할 것

- 공부했던 내용들을 정리할 예정입니다.

반응형
반응형

1. OCR 모델의 평가 

OCR은 객체 탐지의 세부 영역으로 볼 수 있기 때문에 이전에 다뤄진 객체 탐지의 지표들을 참고해볼 수 있습니다. 

 

참고자료:

2024.11.02 - [노트/Computer Vision] - [OCR] 광학 문자 인식(OCR) 문제와 특징

2024.10.02 - [노트/Computer Vision] - [OD] 객체 탐지(Object Detection) 성능 판단 지표 정리 | IOU, mAP, FPS, FLOPS

 

OCR 모델들의 평가는 추론을 진행한 결과와 정답(Ground Truth, GT) 간 비교를 하고, 매칭 및 점수를 매기는 과정(Scoring)을 통해 평가합니다. 여기서 살펴봐야 할 것은 추론 결과와 GT가 어떻게 매칭되는지 판단하고, 그 매칭한 정도에서 어떻게 점수를 계산할 것인지에 대한 방법론입니다. 

 

2. 어떻게 매칭할 것인가

2.1. 기본 개념

두 영역 간 매칭 여부를 판단하고, 그에 따라 매칭 행렬을 계산합니다. 매칭 행렬을 계산하기 위해 알아야 할 기본 개념은 아래와 같습니다. 

 

  • Area Recall : 정답과 예측의 교집합 넓이 / 정답 넓이
  • Area Precision : 정답과 예측의 교집합 넓이 / 예측 넓이  

또한, 매칭의 방식에 대해서도 구분할 수 있는데, 정확히 하나씩 매칭되는 경우(One-to-One) / 하나의 정답에 여러 개를 매칭하는 경우(One-to-Many, Split Case), 여러 정답에 하나의 예측을 하는 경우(Many-to-One, Merge Case)가 있습니다.

 

2.2. DetEval 

DetEval은 아래 조건을 모두 충족하면 1, 아니면 0으로 해서 매칭 행렬을 설정합니다.

  • area recall >= 0.8
  • area precision >= 0.4

그리고 one-to-one, many-to-one은 1을 그대로 유지, one-to-many는 0~1 사이 값(예를 들어, 0.8)으로 페널티를 줍니다. 이렇게 하고 각각의 예측 영역 기준의 평균 값이 Precision과 정답 영역 기준의 평균 값인 Recall을 계산해 둘의 조화평균을 구합니다. 이 숫자가 이미지에 대한 최종 점수입니다.

 

2.3. IoU와 TIoU

IoU는 이전 정리 글(링크)에서 다룬 것처럼 예측과 정답의 교집합 영역이 일정 기준(보통 0.5) 이상이 넘은 경우에만 매칭 행렬 값을 1로 두는 방법입니다. 하지만, 이 방법에서 맹점은 예측에서 부족하거나 넘치는 영역에 대해서는 반영되지 않는다는 점인데요. 이를 보완하기 위해 등장한 것이 Tightness-aware IoU, 즉 TIoU가 등장합니다.

 

TIoU는 부족하거나 초과된 영역 크기에 비례해서 IoU 점수에 페널티를 주는 방식입니다. 각각 Recall과 Precision은 아래와 같이 계산할 수 있습니다. 앞서 얘기한 것처럼 두가지 케이스(부족/초과)가 존재할 수 있는데, 부족 영역의 경우 페널티를 주기 위해서는 정답 영역 기준이므로 Recall로 들어가게 되고 반대로 초과 영역은 페널티를 주기 위해서는 분모에 예측 영역이 되어야 하기 때문에 Precision으로 간주합니다. 

 

  • Recall = IoU * (1-penalty)  where penalty = 부족 영영 / 정답 영역
  • Precision = IoU * (1-penalty)  where penalty = 초과 영역 / 예측 영역 

이렇게 계산된 recall과 precision의 조화평균을 취해주면 최종 점수를 계산할 수 있습니다.

 

2.4. CLEval 

Character-Level Evaluation(CLEval)은 기존에 영역 기준만으로 측정하는 지표들의 한계를 극복하기 위해 등장했습니다. 즉, 얼마나 맣은 글자를 맞추고 틀렸느냐를 평가하기 위해 등장한 지표인데, 글자 영역을 글자 수만큼 등분하고, 등분한 영역에서 센터를 Pseudo Character Centers(PCCs)를 계산합니다.

 

텍스트의 기준점 잡기 [2]

 

위 이미지는 텍스트의 기준점을 잡는 방법에 대한 것으로 PCC는 이미지의 좌측에 한 글자에 해당하는 이미지에서 m-m 을 기준으로 한다고 이해하면 될 것 같습니다. 이렇게 영역에 PCC가 몇개나 있는지 계산합니다.

 

점수는 정답 기준과 예측 기준으로 두가지를 구해 조화평균하여 산출합니다. 각각의 점수는 다음 식을 사용해서 계산하는데, 각 표시가 기준마다 의미하는 바가 다르므로 그 아래의 표를 참고해주시기 바랍니다.

 

- ( Correct Number - Granual Penalty ) / Total Number

구분 정답 기준 (Recall) 예측 기준 (Precision)
Correct Number 정답 영역 내 PCC 중 예측 영역에 속한 PCC 숫자 예측 영역 PCC별 예측 영역의 개수를 나눈 것들의 합
Granual Penalty 정답 영역 내 PCC를 포함한 예측 영역의 개수 -1 예측 영역과 관련된 정답 영역의 개수 - 1
Total Number 정답 영역 내 PCC 개수 정답 영역 내 PCC 개수 

 

참고자료

[1] 유하늘. "(7강) OCR 성능 평가". Boost Camp

[2] https://pillow.readthedocs.io/en/stable/handbook/text-anchors.html#text-anchors

반응형
반응형

1. 개념

이전에 객체 인식 문제는 객체의 위치와 클래스를 분류하는 문제였다면, 문자 인식은 1개의 클래스(텍스트)로 구분된 여러 객체들을 인식하는 문제입니다. 흔하게 Optical Characer Recognition(OCR)으로 불리며, 다양한 소스(스캔 파일, 문서 이미지 등)에서 다양한 방식으로 입력(수기, 프린팅 등)된 텍스트를 변환하는 것 입니다. 

 

문자 인식 문제는 환경에 따라 아래와 같이 크게 2가지로 분류할 수 있습니다. 전통적인 문서 형태에서 인식을 하는 것과 일상적인 이미지에서 문자를 인식(예를 들어, 도시 이미지에서 간판 인식)하는 문제 입니다. 후자는 Scene Text Recognition (STR)로도 불리며, 배경이나 문자의 형태가 더욱 복잡하기 때문에 문서보다 어렵다고 여겨집니다.

 

2. 주요 특징 

OCR은 객체 탐지와 비슷한 것 같지만, 그것만이 갖고 있는 고유의 특징들이 있습니다. 먼저 클래스의 분류가 텍스트로만 분류된다는 점입니다. 일반 객체 탐지는 해당 객체가 무엇인지 분류해야 하는 작업이 존재하지만, 글자 검축은 텍스트라는 단일 클래스이기 때문에 위치만 예측하는 문제 입니다.

 

OCR의 대상에 따라 다양한 특성이 나타납니다. 논문과 같이 문자가 많은 경우는 매우 높은 객체 밀도를 보이기도 하고, 문장 형태로 된 데이터는 극단적으로 긴 종횡비가 나타나기도 합니다. 글자가 놓여있는 형태에 따라서 가로, 세로 쓰기에 따라 가로가 길거나 세로가 더 길 수 있습니다. 

 

글의 목적에 따라서 글의 배치 형태(가로,세로 뿐 아니라 휘어진 형태까지), 크기, 심지어 폰트까지 달라지기도 합니다. 그리고 한글처럼 띄어쓰기에 따라 의미가 달라질 수 있는 언어의 경우 문자의 박스 형태가 모호하게 설정될 수도 있습니다. OCR 문제 해결을 위해서는 이러한 특징들을 고려해서 판단할 필요가 있습니다. 

 

3. OCR 문제 해결 

앞서 이야기한 것처럼 OCR은 글자 객체를 찾고(Text Detection), 글자를 인식(Text Recognition)하는 과정으로 이뤄져 있습니다. 이러한 과정을 모듈화해서 살펴볼 수 있는데, Text Detector / Text Recognizer / Serializer / Text Parser로  크게 4가지 구분할 수 있습니다.

3.1. Text Detector

Text Detector는 글자의 위치만 반환하는 역할을 수행합니다. 이미지를 입력으로 받아서 각 글자의 영역별 위치정보를 반환하게 됩니다. 이 때 반환하는 위치 정보는 (x, y, w, h)가 될 수도 있고, 각 점의 좌표를 반환할 수도 있습니다. 

3.2. Text Recognizer

Text Recognizer는 Text Detector에서 나온 글자 영역 정보를 바탕으로 영역 내의 글자 인식을 수행합니다. 이미지 전체를 대상으로 판단하지는 않고 해당 영역만을 참고합니다. 이 task는 컴퓨터 비전과 자연어 처리를 모두 해야하는 작업으로 최근에 각광을 받는 Multi-modal의 성격을 띈다고도 볼 수 있습니다. Text Recognizer를 통과하게 되면 해당 영역의 글자 값을 반환하게 됩니다.

3.3. Serializer

Serializer는 해당 영역에서 인식한 글자를 자연어 처리를 할 수 있도록 정렬을 수행합니다. 예를 들어, 한글은 좌상단에서 우하단 방향으로 일반적으로 읽습니다. 그리고 단락별로 구분이 되어있기도 하죠. 이러한 규칙을 바탕으로 자연어를 처리할 수 있게끔 정렬을 수행합니다. 

3.4. Text Parser

Text Parser는 앞서 정리된 텍스트들에서 의미를 부여하는 역할을 수행합니다. 많이 사용하는 방법 중 하나는 이미 정의된 key-value에서 글자 영역별 의미를 추출합니다. BIO Tagging을 통해 문장에서 정의된 개체에 대한 값을 추출하는 방법이 있습니다. BIO 태깅은 Begin(개체가 시작하는 부분), Inside(개체의 내부), Outside(개체가 아닌 부분)으로 나눠서 태그를 진행하는 방식입니다. 태그가 완료된 이후에는 개체인 B와 I에 대해서만 사용하는 방식입니다. [2]

 

4. 참고자료

[1] 유하늘. "3. OCR Tasks". 부스트캠프 ai tech

[2] 12-04 개체명 인식의 BIO 표현 이해하기 - 딥 러닝을 이용한 자연어 처리 입문

 

반응형
반응형

1. 잘한 것

- baseline을 보고 프로젝트 디렉토리를 구상해서 기본 프로젝트 구조를 제안했습니다. 

- Train dataset을 random split할 수 있도록 코드를 1차 구현했습니다. 

- 모델이 추론한 결과에 대해 시각화를 진행하고, 추가적으로 개선이 필요한 부분을 제안했습니다. 

- 강의, 과제 등 할당된 내용에 대해 모두 제시간에 완료했습니다. 

- 코딩 구현 공부를 위해 Leetcode도 새롭게 시작했습니다. 

 

2. 부족한 것

- 주간에 배웠던 내용들을 미리 정리하기로 계획했지만, 할당된 작업들로 인해 제대로 정리하지 못했습니다.

- 데이터셋을 생성하는 것을 알아본다고 했지만, 적당한 방법론을 아직 찾지 못했습니다. 

 

3. 배운 것

- OCR을 위한의 Sub 모듈 및 태스크 : https://seanpark11.tistory.com/150

📖 OCR의 문제 정의, Text Detector, Text Recognizer, Serializer, Text Parser  

 

- Labeling 도구 

📖 LabelMe, CVAT, Hasty Labeling Toool, Roboflow

 

4. 시도할 것

- K-Fold Cross Validation에 대해 공부하고, 구현해서 실험을 진행할 계획입니다. 

- 논문으로 공부했던 내용을 정리해서 블로그에 올릴 계획입니다. 

반응형
반응형

1. 잘한 것

- 직접 모델을 돌리지는 않았지만, MMDetection 3 라이브러리를 살펴보고, 사용법에 대해 간단하게나마 익혔습니다. 

- 구현한 증강기법들을 바탕으로 실험을 수행하고 결과를 정리했습니다. 

- 구현한 증강기법을 custom dataset에 같이 넣고 작동할 수 있도록 리팩토링을 했습니다.

- WandB 사용법을 간단하게나마 익히고 적용해봤습니다.

- 금주에 할당된 코딩테스트 문제들을 모두 풀었습니다. 

 

2. 부족한 것

- 직접 모델을 적용하면서 실험하지 못했습니다. (제한된 서버 할당, 라이브러리에 대한 이해도가 낮은 상황 등에서 기인했는데, 다음에는 학습에 대해 조금 더 체계적인 방법으로 접근할 필요가 있을 것 같습니다.)

- Scale-aware Auto Augmentation를 시도해본다고 했으나, 팀 내부에서 활용하기로 한 MMDetectoin에서 적용하는 방법을 알 수가 없어서 실제로 적용해보지는 못했습니다.

 

3. 배운 것

- 라이브러리별 이미지 처리 방법

📖 OpenCV, Albumentations, PyTorch, PIL

➡️ 어렴풋하게 알고있었던 내용을 리팩토링하면서 겪은 시행착오를 바탕으로 내용을 공부했습니다. 

 

- Git을 활용한 협업 경험 

📖 Branch 생성, Pull request, Merge 등 실습으로만 경험했던 상황을 직접 프로젝트에 적용해봤습니다. 또한, Readme 초안을 작성해보면서 markup 방법을 일부 알았습니다.   

 

4. 시도할 것

- 차주에 있을 Data-centric 프로젝트에 대해 알아보고 미리 준비/계획할 생각입니다.

- 최종 프로젝트와 미래 커리어를 대비한 주제에 대해 알아보고 준비할 시간을 주말동안 갖고자 합니다.

반응형
반응형

 

1. 잘한 것

- FPN 논문과 다양한 자료들을 최대한 이해하면서 논문 리뷰를 준비했고, 그에 대해서 좋은 피드백을 들었습니다.

- 객체 탐지에서 적용할 수 있는 다양한 증강기법을 찾아보면서 라이브러리에 없는 것은 직접 구현했습니다.

 

2. 부족한 것

- 코딩테스트 문제를 충분히 풀지 못했습니다.

- Detectron2로 PANet으로 FPN보다 개선된 Neck구조를 구현해보려고 했으나, 라이브러리 사용법에 대한 충분한 이해가 없었기 때문에 끝내 만들지는 못했습니다. 

- WandB 사용법을 익힌다고 했는데 제대로 사용하지는 못했습니다.

 

3. 배운 것

- 1 Stage Detector에 대한 정리 : https://seanpark11.tistory.com/144

📖 YOLO, SSD, RetinaNet

➡️ 모델들의 구조와 핵심 아이디어들을 이해하고, 향후 구현이나 직접 적용에도 많이 사용할 것으로 기대됩니다.

 

- FPN에 대한 심층적인 리뷰

FPN-Feature Pyramid Networks for Object Detection.pptx
3.80MB

 

 

 

📖 Lateral connection, RPN과 RoI를 계산하는 것에 대한 이해 

➡️ 논문 리뷰를 준비하면서 공부했던 feature map 추출 과정은 향후에도 많이 이용할 것 같습니다. 

 

- 객체탐지에서 많이 사용하는 증강기법

📖 Flip, Color Zitter, Mosaic, Mixup, Crop (특히, Mosaic은 직접 구현) 

➡️ 증강기법을 구현해보려는 시도를 하면서 Albumentations에 대한 이해도를 조금 높일 수 있었습니다. 

 

4. 시도할 것

- 간단하게라도 WandB 적용을 통해 사용법을 익힐 예정입니다.

- Scale-aware Auto Augmentation을 적용해볼 예정입니다. 

반응형