Deep Learning 21

BCEWithLogitsLoss 와 MultiLabelSoftMarginLoss 차이

(Binary / Multi-label / Multi-class) Classification 우리가 보통 Binary Classification(이진 분류) 문제를 풀 때 loss 계산을 위해 torch.nn.BCEWithLogitsLoss를 사용한다. torch.nn.BCELoss도 있는데 BCELoss에 sigmoid 함수를 함께 결합한 것이 BCEWithLogitsLoss다. 보통 이진 분류 모델의 output으로 logit 값이 나오기 때문에 loss 계산 전에 sigmoid를 거쳐야 하므로 해당 과정이 포함된 BCEWithLogitsLoss를 쓰면 편리하다. torch.nn.BCEWithLogitsLoss = torch.nn.BCEWithLoss + torch.sigmoid Binary Clas..

[개발팁] 'MultilabelStrarifiedKFold' : Multi-label classification 에 적용 가능한 strarification cross validator

StratifiedKFold in scikit-learn 우리가 보통 이진분류 같은 문제를 풀기 위해서 제공된 데이터셋을 학습/검증 셋으로 나눌 때 데이터셋의 class별 비율을 동일하게 가져가서 학습한다. 이 때, 주로 사용하는 것이 scikit-learn의 'StratifiedKFold' 함수인데 이것을 사용하면 K-fold 교차검증을 수행하면서 동시에 매 fold마다 데이터셋의 class 비율을 일정하게 나누어서 학습/검증 셋으로 나눠준다. 예를들어, '자동차, 자전거, 오토바이' class가 각각 1000개, 500개, 100개로 총 1600개로 이루어진 데이터셋을 StratifiedKFold 함수를 이용해서 5-fold로 나눈다면 매 fold마다 학습 데이터셋은 1280개 (자동차 800개, 자..

num_workers & pin_memory in DataLoader

pytorch를 이용해 딥러닝 모델을 학습시킬 때 custom dataset을 이용할 경우 torch.utils.data.Dataset으로 데이터셋을 정의하고(input data type, augmentation 등) torch.utils.data.DataLoader로 어떻게 데이터셋을 불러올 지(batch size, sampling 등) 정의한다. 학습을 시키다 보면 병목이 생기는 부분이 있는데 특히 데이터를 읽어서 가져올 때 시간이 오래 걸린다. 모델 학습을 하는데 시간을 써도 모자랄 판에 학습하기도 전에 불러오는 데이터에서 시간이 걸린다니... 즉, CPU를 이용해 데이터를 저장된 SSD나 HDD에서 읽어와 호스트의 메모리에 올리고 학습을 위해 GPU 메모리로 전달하는 과정에서 병목이 발생한다. 이..

[개발팁] Multi-label Classification에 쓸만한 전처리 모듈 'MultiLabelBinarizer'

Multi-label Classification problem 캐글에서 진행하고 있는 'Plant Pathology 2021 - FGVC8' competition을 진행하다가 찾게 된 유용한 모듈. Plant Pathology 2021 - FGVC8 Identify the category of foliar diseases in apple trees www.kaggle.com 해당 대회는 Multi-label Image Classification 문제로 사과나무 잎에 어떤 병에 걸렸는지 판별해야 한다. 제공되는 데이터셋의 label을 보면 문자열로 병명을 제공하고 있으며 건강할 경우 'healthy', 병에 걸려있는 경우 병 이름들을 공백으로 구분하여 보여주고 있다. 즉, 두 개 이상의 병에 걸려있는 경우..

[#05] Text Recognition Model 학습하기(deep-text-recognition-benchmark)

OCR 모델을 이용하여 약국이나 편의점에서 살 수 있는 일반의약품의 상품명을 인식해보는 과정을 담아보는 글. 지난 글에서는 AI Hub에서 제공하는 Text in the Wild 데이터셋을 가공하여 학습할 수 있게 전처리 과정을 수행하였다. 전처리된 데이터를 이용하여 한글을 인식할 수 있는 Text Recognition Model을 학습해보자. github.com/clovaai/deep-text-recognition-benchmark clovaai/deep-text-recognition-benchmark Text recognition (optical character recognition) with deep learning methods. - clovaai/deep-text-recognition-benc..

Deep Learning/OCR 2021.04.12

[#04] AI Hub 한국어 글자체 AI 이미지 데이터 전처리

OCR 모델을 이용하여 약국이나 편의점에서 살 수 있는 일반의약품의 상품명을 인식해보는 과정을 담아보는 글. 지난 글에서는 정부에서 관리하는 AI Hub 사이트에서 한글 이미지 데이터셋을 구할 수 있었다. 하지만 태깅 데이터 정보가 담겨있는 json 파일은 262Mb의 크기로 대용량이기 때문에 우리가 원하는 정보만 추출해야하며 또 OCR 모델을 학습시키기 위해 전처리를 할 필요가 있다. 데이터를 가공해 학습에 사용하자 데이터 분석 AI Hub에서 제공하는 Text in the Wild 데이터셋의 태깅데이터 textinthewild_data_info.json 파일은 크게 info, images, annotations, licenses 라는 key들로 이루어져있다. import json file = json..

Deep Learning/OCR 2021.03.31

[#03] 한글 데이터셋 수집하기

OCR 모델을 이용하여 약국이나 편의점에서 살 수 있는 일반의약품의 상품명을 인식해보는 과정을 담아보는 글. OCR 데이터셋은 어떻게 생겼을까? 앞서 언급한 OCR 대회를 주최하는 ICDAR 학회에서 제공하는 데이터셋들을 둘러보자. 대회 Task별로 데이터셋의 형태는 다양하다. 내가 그중에서 찾고자 하는 것은 Text Recognition Task의 데이터셋이다. 2015년에 열린 ICDAR IC(Incidental Scene Text) 대회의 Task 4.3 Word Recognition을 한 번 보자. IC15 Dataset(Task 4.3) 보통 Text Recognition의 데이터셋은 단어가 잘린(cropped)형태로 이미지 데이터와 이미지 파일 이름과 매칭 되는 단어 정답('gt.txt') 형..

Deep Learning/OCR 2021.03.31

[#02] 내가 찾은 모델 CRAFT, deep-text-recognition-benchmark

OCR 모델을 이용하여 약국이나 편의점에서 살 수 있는 일반의약품의 상품명을 인식해보는 과정을 담아보는 글. #01 글에 언급한 주소들에서 내가 활용할만한 text detection, recognition 모델을 찾아보았다. Text Detection Model - CRAFT 글자 검출 모델은 'Scene Text Detection'이라는 이름의 Task로 컴퓨터 비전 분야에서 연구되고 있으며 paperswithcode 사이트에서 찾아볼 수 있다.(링크) 내가 만들고 싶은 것은 의약품 포장지에 출력된 글자들인데 보통 한글로 구성이 되어있으며 영어나 숫자도 존재할 수 있으므로 Multi-language Text에 대한 데이터셋으로 연구하고 있는 모델을 살펴볼 필요가 있다. 다행히 이와 관련하여 'ICDAR..

Deep Learning/OCR 2021.03.29

[#01] OCR 모델 조사

OCR 모델을 이용하여 약국이나 편의점에서 살 수 있는 일반의약품의 상품명을 인식해보는 과정을 담아보는 글. 이전 글 요약 OCR은 2단계로 이루어진다 - Text detection + Text recognition - 글자 위치를 찾고 + 어떤 글자인지 인식하자. Pipeline 약 상자를 촬영하면 'Text Detection Model'을 통해 상자에 글씨가 있는 위치들이 네모 박스로 표시된다. 그리고 네모 박스로 표시된 글씨들은 'Text Recognition Model'을 통해 어떤 내용인지 인식하여 알려준다. Text Detection Text Recognition 좋은 Model을 찾아서 최신 Text Detection & Recognition 기술들을 follow-up 하는 방법 중에 하나는..

Deep Learning/OCR 2021.03.29

[#00] OCR? 딥러닝을 이용해 문자 인식하기 - 개념 정리

OCR - Optical Character Recognition OCR은 사람이 직접 입력하지 않고 스캐너를 통해 이미지 형태로 읽어들여 데이터의 내용을 분석하고 그림 영역과 글자 영역으로 구분한 후 글자 영역의 문자들을 일반 문서 편집기에 수정, 편집이 가능한 텍스트의 형태로 변환하여 주는 자동 입력 시스템이다. 기존에 거울이나 렌즈 등의 광학 기술을 이용한 광학 문자 인식과 스캐너 및 알고리즘에 의한 디지털 문자 인식은 별개의 영역이엇으나 최근 들어서 광학 문자 인식이라는 말이 디지털 문자 인식을 포함하는 것으로 간주되었다. (위키백과) OCR 과정 (Text Detection - Text Recognition) 전처리(pre-processing) - 글자들이 잘 보여질 수 있게 밝기나 색과 같은 영..

Deep Learning/OCR 2021.03.23