[Data Centric] 2. Annotation
Annotation Guide
- Data Centric 접근으로 모델의 성능을 올릴 때 중요한 것은 골고루 모여진 데이터와 라벨링 노이즈가 없는 데이터이다. Annotation 은 특히 라벨링 노이즈와 관련이 있다.
- 라벨링 노이즈가 없는 데이터가 많아야 좋은 성능이 나오는 모델을 학습시킬 수 있고, Annotation Guide 가 잘 작성되어야 라벨링 노이즈가 없어진다.
Annotation 가이드라인
- 좋은 데이터를 확보하기 위한 과정을 정리해 놓은 문서이다.
- 다시 한번 중요한 것은 좋은 데이터는 골고루 모여 있고 일정하게 라벨링 된 데이터이다.
-
일반적으로 데이터를 자연스럽게 모으면 아래와 같은 분포를 보인다.
- 흔한 샘플은 많이 보이고 드문 경우에 대한 샘플은 적게 모인다. 이 때 희귀 케이스의 데이터는 라벨링 노이즈도 크다.
-
데이터를 골고루 모으기 위해서는 특이 케이스를 발견하고 해당 샘플들을 더 확보하려고 신경쓰고 노력해야 한다.
-
일정하게 라벨링된 데이터를 모으려면 특이 케이스들을 포함한 라벨링 가이드를 만들어야 한다.
- 따라서 좋은 데이터는 골고루 모여있는 Raw Data 와 일정하게 라벨링된 Ground Truth 로 만들어진다.
- 일반적인 가이드라인은 라벨링에 관한 내용만 담고 있다. 그러나 가이드라인은 데이터셋 구축 시 실제 라벨링할 작업자들에게 규칙 및 주의사항을 전달하는 문서로서, 데이터 구축 목적, 라벨링 대상 이미지 소개, 기본적 용어 정의(BBOX, 전사, 태그 등), Annotation 규칙(작업불가 이미지 정의, 작업 불가 영역(illegibility = True) 정의, BBOX 작업 방식 정의, 최종 format 등) 이 포함된다.
- 학습 목적
- 목적에 따라 글자 영역 annotation 이 바뀔 수 있다. 단, 목적에 맞게 일관되게 해야 한다. 목적에 맞지 않는 annotation 방식은 모두 라벨링 노이즈가 된다.
목적에 따라 annotation이 바뀔 순 있어도, 목적에 맞게 일관되어야 한다.
- 데이터의 일관성
- 원하는 작업을 명확하게 언급하게 하는 것이 일관성 측면에서는 더 좋다.
추가 가이드를 주면 더 일관되게 나올 수 있다.
- 학습 목적
- 이러한 가이드 라인 작성 시 세가지 요소가 조화롭게 있어야 한다.
- 특이 케이스
- 가능하면 모든 경우가 다 고려되어야 한다.
- 단순함
- 모든 케이스를 다루는 가이드라인이 너무 장황하면 분량도 많고 작업자들이 다 숙지 못해서 라벨링 노이즈가 발생할 수 있다.
- 명확함
- 동일한 가이드라인에 대해서 작업자 별로 다른 해석의 여지를 줄이도록 최대한 명확히 작성해야 한다.
- 특이 케이스
데이터셋 구축 파이프라인
- 그렇다면 가이드라인 제작이 전체 데이터셋 구축 프로세스 중 어디에 위치할까?
-
가이드라인은 이미지 수집 가이드라인과 annotation 가이드라인으로 나뉠 수 있다.
- 이는 데이터 제작 목적 설정과 연관이 있다. 어떤 목적을 달성하고자 하는지, 타겟 모델의 in/out 형태에 따라 가이드라인이 달라지는 것이다.
- 데이터 제작 목적은 서비스 요구사항으로부터 도출된다. 준비된 데이터로 모델링하고 학습된 모델의 성능 평가 분석으로 개선 포인트를 찾는다.
- 이 개선 포인트로 데이터 제작 목적을 재수립한다.
-
제작 목적 설정의 예시를 들어보자.
서비스 요구사항 : 영수증 인식에 사용할 OCR 엔진 개발
서비스 요구사항 : 범용 OCR 엔진 개발
- 이처럼 서비스 요구사항으로부터 데이터 제작 목적을 설정했다면 그에 맞게 가이드 라인을 제작한다.
-
이미지 수집 가이드 라인의 예시를 들어보자.
- Raw image 수집에서는 제작 목적을 생각하여 골고루 이미지를 모아야 한다. 그리고 위 예시처럼 이미지 수집에 대한 수단과 그 안에서 생기는 질문과 답 등이 모두 가이드라인에 들어가 있어야 한다.
-
Raw Image 수집 - 크롤링
- 크롤링에서 제일 중요한 영향을 주는 것이 검색어(키워드)이다.
- 관련된 검색어 집합이 가이드라인에 잘 명시가 되어 있어야 한다.
- 크기, 색상 등도 추가 조건으로 사용할 수 있다. 이미지 크기는 되도록 큰 것으로 한다. 왜냐하면 작은 size의 이미지를 resize 하면 노이즈가 존재하고, Augmentation 을 효율적으로 하기 위함이다.
- 저작권, 사용권, 라이센스 조건을 추가할 수 있다. 상업적으로 사용 시 반드시 조건을 걸어서 해당 라이센스에 맞는 이미지만 모을 수 있어야 한다.
- 크롤링 이후에 원치 않는 데이터도 다수 포함될 수 있다. 검색 알고리즘이 완벽하지 않기 때문이다.
- 따라서 좋은 키워드 선정과 필터링이 필요하다. 학습에 도움이 되지 않는 이미지를 걸러내는 것이 필터링이다.
- Raw Image 수집 - 크라우드 소싱
- 크라우드 소싱은 사람들이 직접 이미지를 모으는 것이다.
- 이는 특이한 케이스를 수집할 때 용이하다.
- 원하는 케이스에 대한 설명과 예시 이미지, 나쁜 예시 이미지를 가이드에 잘 담으면 수집하고자 하는 이미지를 모을 수 있다.
- 시간과 비용이 많이 들어서 합성 데이터 제작이나 크롤링 방식으로 구하기 힘든 이미지를 모을 때 주로 사용한다.
- 수집 시 개인정보, 저작권 이슈에서 자유롭다.
General OCR Dataset 예제로 알아보는 가이드라인 작성법
- 작업자들이 라벨링을 어떻게 해야 할지는 가이드라인에 담겨있다.
-
이러한 가이드 라인은 수차례 수정을 거치는 작업이다.
- 먼저 1) 데이터 제작 목적에 맞게 가이드를 작성한다. 2) 작성을 마치고 작업자에게 가이드 교육을 한다. 3) 라벨링 작업을 실시한다. 4) 작업이 완료되면 라벨링 정보에 대해 문제가 없는지 별도의 검수자가 확인한다. 5) 문제가 없다면 AI 개발팀에게 넘겨져 실제로 모델링을 수행하면서 최종 점검을 실시한다.
- 라벨링 작업과 라벨링 검수자는 실제 데이터를 하나하나씩 보는 역할을 한다. 가이드 관련 질문도 많다.
- 초기에는 아주 많은 QnA 가 있기 때문에 처음에 아주 소량의 데이터로 우선 pilot 라벨링 작업을 하고 이를 통해 가이드 완성도를 빠르게 올리는 것이 중요하다.
- 4번째의 라벨링 검수 단계는 라벨링 노이즈 관점에서의 검수다.
- 5번째의 AI 팀의 데이터 검수 단계는 데이터 분포와 라벨링 노이즈 관점에서의 검수다. 이 때 주로 나오는 피드백은 모델 구조를 변경해야 해서 라벨링 방식을 변경하는 경우 혹은 특이 케이스에 대한 성능을 끌어올리기 위해 데이터를 추가로 수집하는 경우에 대한 것이다.
-
라벨링 방식에 대해서 탐색을 많이 해야 하거나, 일반 사람들에게 익숙하지 않는 데이터에 대해 라벨링을 할 경우에는 가이드 작성 횟수가 높아 가이드 작성/수정/교육 비용이 크기 때문에 외주보다 차라리 내부에서 인력을 고용해서 진행하는 것이 효율적일 수 있다.
- 가이드라인 제작 작업 전체 효율성을 올리기 위해 초반에는 커뮤니케이션을 많이 해서 가이드의 완성도를 올리는 것이 좋다. 따라서 초반에는 많은 양이 아니라 소수의 양으로 pilot 라벨링 작업을 진행하면서 가이드의 수정 정도를 보고, 점점 데이터 양을 올려가는 것이 좋다.
-
또한 가이드라인 versioning 이 중요하다.
- 가이드라인은 수정이 많고, 변경 history tracking, 버전 가지치기 를 할 때에도 어떤 버전을 근간으로 했는지 추적이 가능해야 하기 때문이다.
- 라벨링 작업을 하기 전에 가이드의 완성도를 최대한 끌어올리면 좋기 때문에 내부 인력을 통해서 pilot labeling 을 하면서 여러 특이 케이스에 선제적으로 대응하면 좋다.
- tool 마다 기본 기능이 다 다르고 원하는 기능이 없을 수 있어, 내부적으로 annotation tool 을 가지고 있고 필요에 따라 tool 을 개선하는 것이 팀에 있어 큰 자산이 된다.
- 다음은 가이드라인 작성 시 고려되는 내용이다.
-
기본적인 용어 정의
- Points 는 4개 이상의 점의 좌표값으로 표현한다.
- illegibility 는 학습에 사용되지 않는 영역을 지정할 때 사용되는 용어다. 학습에 도움되지 않을 것 같은 영역을 대략적으로 지정하여 이 태그를 달아준다.
- <UNK>는 글자 영역 내에 글자가 있지만 인식기 학습에 사용하지 않을 때에 달아준다.
- Annotation 규칙
- HOLD 이미지 기준으로 예시를 들어보자.
- 이미지 내 글자가 없는 경우, 이미지의 모든 글자 영역 속 글자를 알아보기 어려운 경우(blur), 같은 글자 혹은 패턴이 5회 이상 반복되는 이미지
- 위와 같은 경우는 라벨링 작업 대비 학습에 도움되는 정도가 적을 것이라 판단되면 HOLD 처리한다.
- 영어/한국어가 아닌 외국어가 1/3 이상인 이미지, 개인정보가 포함된 이미지 (얼굴, 자동차 번호판 등), Born-digital 이미지 (사람이 촬영한 이미지가 아니라 디지털 형태로 생성된 이미지)
- 충분히 합성 데이터로 만들 수 있고, 합성 데이터로 만들면 라벨링 작업이 필요없기 때문에 굳이 완성된 디지털 이미지를 가져와서 라벨링 하는 것은 비용 대비 효율이 떨어진다.
- BBOX 작업 방식 정의
- Points 영역의 경우 느슨한 것 보다는 타이트하게 영역을 지정하라고 가이드하는 것이 데이터 일관성 측면에서 더 낫다.
- 일관되게 작업하는 것이 매우 중요하다.
- 구부러진 글자 영역
- 단어가 심하게 곡선 배열된 경우 짝수 개의 점들로 이루어진 polygon 형태의 Points 를 지정한다. 글자의 위아래에 점이 쌍을 이루게 하여, 점들을 기준으로 사각형 모양의 박스가 만들어지는 것이 좋다.
- 이 때 일관된 작업을 위해 추가정보를 주면, 최대 점의 개수는 12개로 제한(위, 아래 각 6개)하고, 변곡점이 명확할 때만 점을 찍는다는 정보를 줄 수 있다. 이 때 오해의 소지를 줄이기 위해 예시를 들어주면 좋다.
- Orientation 정보 - 진행 방향 및 그에 따른 좌표 순서
- 가로쓰기, 세로쓰기, 불규칙의 경우가 있을 수 있다.
- 이 때 진행 방향 및 좌표 순서를 맞춰주기 위해서 좌표 시작점은 첫 글자의 좌상단, 그 후로는 시계방향에 맞춰 점을 찍는다.
- 그 외
- 어디까지를 하나의 글자 영역으로 정의하여 Points 로 표기할지?
- 띄어쓰기 기준? 한 단어 내에서 글자 크기가 급격히 차이나는 경우? 등등 어떤 기준으로 하나의 글자 영역을 정의할까? 를 고민해야 한다.
- 작업 불가 영역
- 이를 미리 정의하는 것은 학습에 크게 도움이 되지 않을 영역이 있으면 별도로 표시해서 실제 학습 시에 해당 영역을 제외시키기 위함이다.
- 크게 4가지 경우가 있다.
- 글자를 알아보기 어려울 정도로 밀도가 높거나, 글자가 일부 뭉개져서 알아보기 어려운 영역에 대해서 Points 로 지정하고 illegibility 를 True 로 지정한다.
- 그렇게 되면 검출기 학습 시에 해당 부분에 대한 Loss 값이 반영되지 않는다. illegibility 를 트리거로 loss 업데이트 시에 빼주기 때문이다.
-
글자가 존재하지만 잘려 있거나 겹쳐져서 인식하는데 크게 도움이 되지 않을 경우도 Points 로 지정하고 illegibility 를 True 로 지정한다.
- 작업의 대상이 되는 글자 영역에 대해서도 명확히 해줄 필요가 있다.
- 옛날 한글, 기타 로마자 등
- 작성된 가이드대로 작업된 결과물들을 어떤 format 으로 파일화 할 것인지에 대해서도 정해야 한다.
- 데이터를 활용하는 개발자들이 DataLoader 를 쉽게 작성할 수 있다.
- 데이터 포맷이 변경되면 이전에 작업된 파일들도 최신 포맷으로 변경되어야 이전 데이터를 버리지 않고 활용 가능하다.
- 데이터 포맷을 고민할 때, 수정될 때의 이전 데이터 활용 여부도 반드시 염두 해야 한다.
- 글자를 알아보기 어려울 정도로 밀도가 높거나, 글자가 일부 뭉개져서 알아보기 어려운 영역에 대해서 Points 로 지정하고 illegibility 를 True 로 지정한다.
-
- Annotation 가이드는 절대 한번에 완성되지 않고, 완벽한 가이드는 존재하지 않는다. 아무리 많은 데이터를 사전에 보고 가이드를 작성해도, 실제 annotation 을 진행하다 보면 언제나 예외 케이스가 발생한다.
- 이 반복작업을 어떻게 효율화할 지 고민해야 한다.
- 일관성
- 가이드 작성의 가장 큰 초점이다. 같은 케이스를 다르게 처리하는 경우가 없도록 해야 한다.
- 가이드가 틀려도 모두 같이 일관되게 틀리면 추후 프로그래밍적인 방법으로 수정이 가능하다.
- 일관성의 확보
- 단순, 정확한 가이드 설명
- 객관적으로 measure 가 가능하여 누구나 똑같이 이해할 수 있는 지표를 줘야 한다.
- 가이드 내용이 추가 될 시 기존 다른 내용과 충돌할 가능성을 고려해야 한다.
- 이 내용이 추가됨으로써 영향을 받게 되는 다른 지점이 있는지도 고려해야 한다.
- 띄어쓰기
- 글자영역은 띄어쓰기 기준으로 구분하여 태깅한다.
- 이 때 의미상 띄어쓰기를 기준으로 해야할까?
- 아래의 예시처럼 실제 의미상 띄어쓰기를 해야 하는 경우에 대해서도 하나의 단어로 잡는 방식으로 학습될 가능성이 있다.
- 또한 의미상 띄어쓰기 기준이 애매할 경우, 어법이 헷갈리는 경우 등에서 labeling 일관성이 떨어질 수 있다.
- 따라서 의미 보다는 보다 명확한 기준으로 라벨링 하는 것이 일관성 측면에서 나을 수 있다.
- 바로 정량적, 객관적 표현을 사용하는 것이다. 예를 들어 아래의 예시처럼 글자 사이의 자간이 글자 폭의 절반 보다 크면 구분한다는 가이드가 있을 수 있다.
- 손글씨
- 어떤 이미지를 손글씨 이미지라고 태그할 것인가?
- 동일한 글자인데 서로 다르게 생긴 경우 손글씨로 할 수 있다.
- 우선순위
- 현실적으로 원하는 모든 정보를 다 라벨링하기 어렵고, 모든 항목에서 완벽한 일관성을 갖도록 라벨링 하는 것은 더 어렵다. 따라서 포기할 것은 포기하는 것이 좋다.
- 이 때 우선순위를 알면 데이터셋 구축 작업에 큰 도움이 된다.
- 우선순위는 아래와 같다.
1) 읽을 수 있는 글자 영역 전부 Points 표시하기
2) Points 표시의 일관성 유지 및 transcription 정확히 하기
3) 글자는 존재하지만 육안 상 알아보기 어려운 illegibility = True 영역 annotation
4) 각종 태그 - 언어, 글자 진행 방향, 이미지 태그 및 단어 태그 - 이러한 우선순위를 알면 데이터셋 구축 작업에 큰 도움이 된다.
- 이 우선순위는 전적으로 모델 학습 시 영향을 주는 정도에 따라 달라진다.
- 글자가 명확히 존재하는 영역의 annotation 누락은 검출기 성능에 치명적이기 때문에 우선순위가 높다.
- 반대로 글자영역 검출 관점에서 언어에 관한 태그는 우선순위가 낮다. 검출기는 글자 영역만 검출하면 되고, 그 영역 내에 언어가 무엇인지는 관심이 없기 때문이다. 언어 태그는 검출기가 아니라 오히려 인식기에 필요한 정보다.
- 일관성
데이터 구축 과정 시 검수의 역할
- 개발팀에서 검수하는 것을 제외한다면 두 관점의 검수가 있다.
- 정해진 가이드 대로 라벨링 잘 되고 있는지 검수하는 라벨링 작업자의 검수
- 감독자 전수 검사
- Peer check
- 다수결
- 가이드 자체가 잘 동작하고 있는지를 검수하는 데이터 구축 관점에서의 검수
- 초기에 소량씩 완성본을 받아서 품질을 확인한다. 온전한 가이드라인이 나오기 까지는 실험 후 수정의 과정이 많이 필요하여 처음에는 최대한 빠르게 이 iteration 을 가져가는 것이 좋다.
- 작업자 QnA 활용
- 추가 수정을 위한 비용과 시간이 크다면 어느정도 포기하는 것도 좋다. 어느 정도 안고 갈 라벨링 노이즈가 무엇일지 개발팀과 얘기 나눠서 정하면, 가이드라인 별 우선순위가 정해지기 때문에 진행이 훨씬 수월하다.
- 정해진 가이드 대로 라벨링 잘 되고 있는지 검수하는 라벨링 작업자의 검수
정리
- 가이드라인 만들기는 끝없는 의사소통과 수정의 연속! 5가지 주의사항을 염두하자
- 충분한 pilot tagging을 바탕으로 가이드 제작
- 가이드라인 수정 시 versioning 필요, 기존 내용과 충돌 없도록 최소한의 변경만
- 최대한 명확하고 객관적인 표현을 사용
- 일관성 있는 데이터가 가장 잘 만들어진 데이터
- 우선순위를 알고, 필요하다면 포기하는 것도 중요
- 데이터셋 제작 파이프라인은,
- 우선 서비스 요구사항 및 제작 목적을 설정한다. 그 후, 어떤 이미지를 수집하고 어떻게 라벨링을 할지 데이터셋 제작 목적에 맞는 가이드라인을 제작한다. 가이드라인이 작성되면 그에 따라 Raw image를 수집하고 어노테이션(라벨링)을 수행한다. 준비된 데이터를 활용하여 모델링을 하고 성능 평가/분석을 통해 개선 포인트를 찾고, 데이터셋 제작 목적을 재수립한다.
- 데이터 수집에는,
- Raw image 를 수집하는 방법에는 크롤링과 크라우드 소싱이 있다.
- 크롤링을 통한 데이터를 수집할 시, 이미지 크기는 되도록 큰 것으로 검색 조건을 설정하여 모으는 것이 유리하다. 원본 이미지가 작을 경우, 이미지 Augmentation 단계에서 노이즈가 생길 우려가 크기 때문이다.
- 즉, Augmentation이 효과적으로 동작하기 위한 Raw image를 모으는 것이 데이터셋 제작 과정에 유리하다.
- 크롤링을 통해 데이터를 수집할 시, 사용권(라이선스) 조건에 유의해야 한다.
- 크라우드 소싱은 특이 케이스를 수집하고 활용하는 데에 유리하다.
- 크라우드 소싱은 크롤링에 비해 시간과 비용이 많이 들지만, 개인정보나 저작권 이슈에서 자유롭다.
- 라벨링 작업 초기에는 소수의 데이터로 라벨링을 진행하면서 커뮤니케이션을 늘려 가이드라인을 보완 및 수정한다. 가이드라인의 수정 정도를 보며 점점 데이터량을 늘리는 것이 효과적이다.
댓글 남기기