"FINT조"의 두 판 사이의 차이

cdc wiki
이동: 둘러보기, 검색
(관련 기술의 현황 및 분석(State of art))
(관련 기술의 현황 및 분석(State of art))
194번째 줄: 194번째 줄:
 
forward pass와 back propagation에 아무런 영향을 미치지 않는다. dropout은 학습할때만 적용되며,  
 
forward pass와 back propagation에 아무런 영향을 미치지 않는다. dropout은 학습할때만 적용되며,  
 
테스트에는 모든 뉴런을 사용한다.
 
테스트에는 모든 뉴런을 사용한다.
 +
 +
[[파일:fint016.png]]
 +
 +
3) overlapping pooling : CNN에서 pooling은 Convolution 과정을 통해 얻은 Feature-map의 크기를
 +
줄이기 위해 사용한다. Max pooling을 사용하며, LeNet-5의 경우 풀링 커널이 움직이는 보폭인 stride를
 +
커널 사이즈보다 작게 하는 overlapping pooling을 적용한다. LeNet-5는 non-overlapping Average
 +
pooling을 사용한 것이고, AlexNet은 overlapping 최대 풀링을 사용한 것이다. overlapping 풀링과
 +
non-overlapping 풀링을 비교하면 아래와 같다.
 +
 +
[[파일:fint017.png]]
 +
 +
overlapping 풀링을 하면 풀링 커널이 중첩되면서 지나가는 반면, non-overlapping 풀링을 하면
 +
중첩없이 진행된다. overlapping 풀링이, top-1, 5 에러율을 줄이는데 좀 더 효과가 있다.
 +
4) local response normalization: Lateral inhibition은 활성화된 뉴런이 주변 이웃 뉴런들을 억누르는
 +
현상을 의미한다. lateral inhibition 현상을 모델링한 것이 바로 local response normalization이다.
 +
강하게 활성화된 뉴런의 주변 이웃에 대해서 normalization을 실행한다. 주변에 비해 어떤 뉴런이
 +
비교적 강하게 활성화되어 있다면, 그 뉴런의 반응은 더욱더 돋보이게 된다. 반면 강하게 활성화된
 +
뉴런 주변도 모두 강하게 활성화되어 있다면, local response normalization 이후에는 모두 값이
 +
작아진다.
 +
 +
5) data augmentation: 과적합을 막기 위해 dropout 말고도 또다른 방법을 사용한다. 과적합을 막는
 +
가장 좋은 방법 중 하나는 데이터의 양을 늘리는 것이다. 훈련시킬 때 적은 양의 데이터를 가지고
 +
훈련시킬 경우 과적합이 진행될 가능성이 크기 때문이다. 따라서 AlexNet은 Data Augmentation 방법을
 +
통해 데이터의 양을 늘렸다. 쉽게 말해서 하나의 이미지를 이용해서 여러 장의 비슷한 이미지를
 +
생성하는 것이다. 이미지를 좌우 반전시키거나, AlexNet이 허용하는 입력 이미지 크기인
 +
224 x 224 x 3보다 좀 더 큰 이미지를 조금씩 다르게 잘라서 224 x 224 x 3으로 만들어 여러 장의
 +
이미지를 만들어낸다. 같은 내용을 담고 있지만 위치가 살짝 다른 이미지들이 생산된다.
 +
 +
[[파일:fint018.png]]
 +
 +
다) GoogLeNet
 +
 +
- GoogLeNet의 정의
 +
구글의 연구팀들이 영화 “Inception” 에서 영감을 받아 CNN모듈을 만들었다. 이 모듈을 GoogLeNet으로
 +
부르며, 2014년에 개최된 ILSVRC(ImageNet Large Scale Visual Recognition Challenge)대회 에서 우승을
 +
차지했다. CNN이 깊어진다고 해서 무조건 성능이 좋아진다고 할 수 없다. 우리가 가진 데이터셋은 한정
 +
적이고, 지나치게 깊은 네트워크는 오버피팅과 Vanishing gradient의 위험을 가진다. 뿐만 아니라, 깊어질
 +
수록 필요한 연산의 양 또한 따라서 증가한다. 이러한 문제를 해결하는 것은 Dropout을 사용하는 네트
 +
워크처럼 sparse하게 연결되는 구조를 만드는 것이다. 하지만 컴퓨터의 연산은 Dense할수록 빠르다.
 +
이 둘 사이의 타협을 위해 Inception 모듈이 등장하게 된다.
 +
 +
- 구 조
 +
 +
[[파일:fint019.png]]
 +
 +
이전의 입력을 1x1 Conv에 넣어 channel을 줄였다가, 3x3나 5x5 Conv를 거치게해 다시 확장하는 방식이다. 이렇게 되면 필요한 연산의 양이 확 줄어들게 된다. 또 Pooling의 경우 1x1 Conv를 뒤에 붙였는데, 이는 Pooling연산의 결과 채널의 수가 이전의 입력과 동일하므로 이를 줄여주기 위함이다. 이렇게 sparse하게 각 연산을 거친 다음, dense한 output을 만들어내는데, H와 W는 모두 동일하다는 것에 주의해야 한다. 즉 Concat연산을 channel에 적용한다고 할 수 있다.
 +
이렇게 Inception 모듈을 활용한 최종 모델의 구조는 다음과 같다.
 +
 +
[[파일:fint020.png]]
 +
 +
빨간색 동그라미가 쳐져있는 부분은 Inception 모듈을 사용한 곳이다. 이외에도 중간에 Pooling layer를 추가로 삽입해 크기가 줄어들 수 있게 했다. 이때 주목해야할 부분이 2가지가 있다.
 +
첫번째로 네트워크의 얕은 부분, 입력과 가까운 부분에는 Inception 모듈을 사용하지 않았다는 것이다. 이 부분에는 Inception의 효과가 없다. 따라서 우리가 일반적으로 CNN하면 떠올리는, Conv와 Pooling 연산을 수행한다.
 +
두번째는 softmax를 통해 결과를 뽑아내는 부분이 맨 끝에만 있는 것이 아니라, 중간 중간에 있다는 점이다. 이를 auxiliary classifier라고 부른다. 위와 같이 깊은 네트워크에서 Vanishing Gradient 문제를 걱정해야 한다. 그래서 auxiliary classifier를 이용해 이를 해결한다. Loss를 맨 끝뿐만 아니라 중간 중간에서 구하기 때문에 gradient가 적절하게 역전파된다고 설명하고 있다. 대신 지나치게 영향을 주는 것을 막기 위해 auxiliary classifier의 loss는 0.3을 곱했다. 물론 실제로 테스트하는 과정에서는 auxiliary classifier를 제거하고 맨 끝, 제일 마지막의 softmax만을 사용한다.
 +
라) ResNet
 +
 +
- ResNet이란?
 +
deep learning은 기본적으로 망이 깊어지면 성능이 더 좋아진다고 생각을 한다. 하지만 deep learning network에서는 레이어 깊이가 어느 수준 이상보다 깊어지면 레이어를 늘려도 성능의 차이가 없고, 심지어는 성능이 떨어지는 경우도 있다. 간단히 요약하면 망이 깊어지면 gradient vanishing/exploding 또는 degradation이 발생하게 된다.
 +
 +
- 구 조
 +
아래 그림은 평범한 CNN 망 구조이다. 이 평범한 망은 입력 x를 받아 2개의 weighted layer를 거쳐 출력 H(x)를 내며, 다음 layer의 입력으로 적용된다.
 +
  
  

2019년 6월 18일 (화) 10:31 판

프로젝트 개요

기술개발 과제

국문 : CNN을 이용하여 한글 폰트를 식별하고 GAN을 이용하여 폰트를 생성

영문 : Discriminate Hangeul(Korean) font in image using CNN and create New Hangeul(Korean) Font using GAN

과제 팀명

FINT (Find Font)

지도교수

김민호 교수님

개발기간

2019년 3월 ~ 2019년 6월 (총 4개월)

구성원 소개

서울시립대학교 컴퓨터과학부 2013920012 김범수(팀장)

서울시립대학교 컴퓨터과학부 2013920041 윤재상

서울시립대학교 컴퓨터과학부 2013920059 정희탁

서울시립대학교 컴퓨터과학부 2013920068 황두욱

서론

개발 과제의 개요

개발 과제 요약

◇ OCR(광학 문자 인식)을 이용하여 글자를 인식하고, CNN(Convolutional Neural Networks) 모델을 사용하여 해당 글자의 폰트를 식별한다.

Fint001.png


◇ 사용자가 찾고 싶은 폰트의 이미지를 페이지에 업로드 한다.
◇ 서버에서 OCR을 이용하여 글자를 인식하고, 전처리 작업을 통하여 적절하게 이미지를 자른다.
◇ 학습한 CNN 모델을 기반으로 이미지에서 폰트를 식별한다.
◇ Accuracy가 높은 상위 5개 폰트에 대해 화면에 출력한다.

개발 과제의 배경

◇ 과거에는 데이터간의 관계를 분석하고 모델식을 만드는 데이터 마이닝 기법 중 하나인 회귀분석(Regression Analysis)을 주로 사용했다. 이는 정확성이 상대적으로 떨어지고 모델 정교화를 위해 분석가의 노력이 많이 필요했고, 그래서 등장한 것이 인공신경망(Artificial Nerual Network)이다. 인공신경망은 사람의 뇌를 모방한 방법으로 데이터를 입력하면 자동으로 복잡한 수학식을 기반으로 모델링을 하는 방법이다. 인공신경망을 가지고 이미지를 분석하는 경우 방법은 Single Linear Classifiers, K-Nearest Neighbors, SVMs, Multi Layer Classifiers, Convolutional Neural Network(CNN) 등이 있다. 숫자 필기 데이터셋인 Mnist를 이용한 Performance를 측정해보면 아래와 같이 CNN은 우수한 성능을 보여준다.

Fint002.png


◇ 최근에는 두 개의 인공신경망을 사용하여 보다 정교한 결과물을 생성하는 GAN 모델링에 대한 연구가 활발하게 진행되고 있다. GAN의 A는 Adversarial의 약자로 ‘적대적인’ 이라는 뜻을 가지고 있는데, 하나의 인공신경망에는 Fake data를 생성하고, 다른 하나의 인공신경망에는 Real data를 가지고 가짜 데이터와 진짜 데이터를 구별할 수 있는 파라미터를 찾고, 이를 기반으로 Fake data가 fake인지 real인지를 식별한다. 최종적으로 Fake data가 Real data로 식별이 될 때 까지 적대적 학습(Adversarial Training)을 진행하여 그럴듯한 가짜를 만들어 낼 수 있다. 
◇ 알파벳은 소문자와 대문자를 합쳐 52개로 학습이 용이하지만 한글의 경우 유니코드 2.0에 등록된 개수만 11,172개가 되기 때문에 학습에 어려움이 있으며 이러한 이유로 인해 한글폰트를 찾아주는 서비스는 제공되지 않고 있다.
◇ 이미 존재하는 폰트와 대조하는 방식의 OCR(Optical character recognition)은 알파벳의 경우 높은 인식률을 보이지만 한글의 경우에는 높은 해상도로 스캔하지 않으면 인식률이 떨어지며, 필기체의 경우 매우 낮은 인식률을 보여준다. OCR을 기반으로 사용하되 전처리에 대한 부분은 따로 알고리즘을 구현하여 Performance를 향상시켜 차별화를 둔다.
◇ 현재 한글폰트를 찾는 경우에는 ‘한글마을’을 이용하여 원하는 문구의 가장 비슷한 폰트를 직접 찾는 번거로움이 있다. 이 문제는 딥러닝을 이용하여 이를 해결하여 가장 비슷한 폰트를 찾아 해결하며 Youtube, 개인방송, 지상파 방송의 영상편집에 이용할 수 있다. 
◇ CNN을 사용하여 폰트를 식별하는 것에 그치지 않고 식별하지 못한 데이터셋을 기반으로 GAN 모델을 이용하여 학습시켜 새로운 폰트를 만들어 새로운 가치를 창출한다.

개발 과제의 목표 및 내용

◇ OCR을 이용하여 글자를 인식하고, 전처리 작업을 통하여 적절하게 이미지를 잘라준다.
◇ 가공된 이미지 세트에 여러 노이즈를 발생시켜 학습의 효율을 높여준다.
◇ CNN 모델을 기반으로 학습하여 폰트를 식별하여 최적의 파라미터를 찾는다.
◇ 최적화된 파라미터를 이용하여 사용자가 요청한 폰트와 가장 근접한 상위 5개의 폰트를 출력한다.
◇ 유료 폰트와 제휴하여 구매 대행을 하는 등 찾을 수 있는 폰트의 개수를 늘려간다.

관련 기술의 현황

관련 기술의 현황 및 분석(State of art)

  • 전 세계적인 기술현황
◇ OCR(Optical Character Recognition) – 광학 문자 인식

인공지능 모델을 만들기 위해서 데이터 전처리는 필수적이고 모델의 성능과 밀접한 관련이 있다. 한 설문조사에서는 인공지능 개발자의 80% 시간을 데이터를 수집 및 전처리에 사용한다고 한다. 지루하고 반복 작업의 연속이기 때문에 시간이 많이 들어가지만 가장 중요한 작업이기 때문에 초반에 시간을 들여서 개발하는 것이 중요하다.

전처리 과정에서 사용할 기술인 OCR은 이미지에서 한 글자 별로 나눠주고 그 글자가 무엇인지 분류하는 역할을 한다 . 예를 들어 사용자가 나눔 고딕의 ‘가’라는 이미지를 입력한 경우 OCR은 ‘가’라는 글자를 찾아서 경계를 나눠주고 해당 이미지가 어떤 글자인지 판별하는 작업을 담당하다. 하지만 한 가지 문제점은 OCR의 성능이 생각보다 완벽하지 않다는 점이다. OCR 오픈 소스인 tesseract를 사용하는 경우 영어는 대략 95%의 정확도를 자랑한다. 하지만 한글의 경우 인식률이 매우 낮다. 그 이유는 영어는 한 글자가 대부분 하나의 덩어리로 이루어져 있어, 알파벳 단위로 이미지를 잘라서 인식 하기 때문에 정확도가 상대적으로 높은 반면 한글의 경우 자음, 모음, 받침 글자로 구분되어 한 글자 별로 정확하게 이미지를 자르기 쉽지 않다.

어떻게 입력된 이미지에서 글자별로 자르고, 해당 글자가 무엇인지 판단하는 작업이 CNN모델의 정확도에 가장 큰 영향을 준다. ▶ Tools & Library

가) Tesseract-OCR

- C++로 만들어진 오픈소스 OCR Engine

- 2005년에 HP에 의해 오픈소스화 되었으며, 2006년 이후로 Google에 의해 개발

- 사용자가 요청한 이미지에서 글자를 뽑아낼 때 사용한다. Fint008.png

나) openCV

- Image를 분석할 목적으로 만들어진 프로그래밍 라이브러리

- 입력받은 Image에서 글자부분을 Compact하게 추출할 때 사용한다.

- Bounding Box(Contour Algorithm 사용) Fint009.png

◇ CNN(Convolution Neural Networks) - 합성곱 신경망

Convolutional Neural Networks의 약자로 Convolution(합성곱)과 Neural(신경망)을 결합해 만들어진 알고리즘으로, 우수한 성능을 내는 인공신경망 기법 중 하나이다. 일반적으로 분류작업은 ‘특징추출 + 분류 = 결과’ 의 매커니즘으로 작동하는데 CNN은 특징추출을 Convolution을 이용해서, 분류는 Neural Networks를 이용해서 결과를 나타낸다.

Convolution을 이용하여 특징을 추출하는 방법은 다음과 같은 방식으로 진행한다.

Fint010.png

왼쪽의 사진으로부터 빛의 삼원색(RGB : Red, Green, Blue)을 추출하여 오른쪽과 같이 정형화를 진행한다.

검은색을 1로 나타내고, 흰색을 0으로 나타내면 왼쪽과 같은 Matrix가 완성된다. 이것이 Input이 된다. 여기에 가중치를 가지는 필터와 함께 Convolution(합성곱)을 통하여 특징을 추출한다.

Fint011.png

위와 같이 필터를 계속 이동하면서 Input의 해당영역에 Filter값을 곱하여 합한 결과를 나타내면 Feature Output이 된다. 필터는 학습마다 다른 필터를 사용할 수 있기 때문에 여러 가지 경우의 특징이 추출된다. 추출한 특징값을 Pooling Layer를 통하여 Subsampling을 진행한다. Subsampling을 진행하면 Overfitting을 방지하고 모델의 파라미터의 수를 감소시켜준다. Pooling의 방법은 대푯값 선정에 따라 구분하는데, Max pooling(최대값)과 Average pooling(평균값) 등이 있다. 아래는 Max pooling을 이용하여 Subsampling을 하는 예시이다.

Fint012.png

Convolution을 통해 특징을 추출하고 Subsampling을 통해 최소화하여 1차원의 행렬로 만들어Fully-Connected layer를 통하여 최종적으로 분류하는 것이 CNN이다. CNN을 간단하게 도식화하여 나타내면 아래와 같다.

Fint013.png

▶ Tools & Library

가) tensorflow

- 기계학습과 딥러닝을 위해 구글에서 만든 오픈소스 라이브러리

- 2015년에 오픈소스로 공개된 머신러닝 시스템이며 Python과 C++로 사용 가능

- tensorflow 라이브러리를 기반으로 한 CNN 신경망을 구축한다. 나) AlexNet

- AlexNet의 정의 AlexNet은 2012년에 개최된 ILSVRC(ImageNet Large Scale Visual Recognition Challenge) 대회의 우승을 차지한 컨볼루션 신경망(CNN) 구조이다. AlexNet의 논문명은 "ImageNet Classification with Deep Convolutional Neural Networks"이다. 이 논문의 첫번째 저자가 Alex Khrizevsky이기 때문에 그의 이름을 따서 AlexNet이라고 부른다.

- 구 조

Fint014.png

- Layer별 구성 AlexNet은 8개의 Layer로 구성되어 있다. 5개의 Convolution Layer와 3개의 full-connected Layer로 구성되어 있다. AlexNet에 입력되는 것은 224 x 224 x 3 이미지다.(224 x 224 Size Color Image)

1) 첫번째 Layer(Convolution): 96개의 11 x 11 x 3 사이즈 필터커널로 입력 영상을 Convolution 한다. stride를 4로, zero-padding은 사용하지 않는다. zero-padding은 특성맵의 사이즈가 축소되는 것을 방지하기 위해, 또는 축소되는 정도를 줄이기 위해 영상의 가장자리 부분에 0을 추가한다. 결과적으로 55 x 55 x 96의 Feature-map이 산출된다. 그 다음 3 x 3 overlapping max pooling이 stride 2로 시행된다. 그 결과 27 x 27 x 96 Feature-map을 갖게 된다. 그 다음에는 수렴속도를 높이기 위해 local response normalization이 시행된다. local response normalization은 Feature-map의 차원을 변화시키지 않으므로, 특성맵의 크기는 27 x 27 x 96으로 유지된다.

2) 두번째 Layer(Convolution): 256개의 5 x 5 x 48 커널을 사용하여 Convolution 한다. stride는 1, zero-padding은 2로 설정한다. 따라서 27 x 27 x 256 Feature-map을 얻게 된다. 그 다음에 3 x 3 overlapping max pooling을 stride 2로 시행한다. 그 결과 13 x 13 x 256 Feature-map을 얻게 된다. 그 후 local response normalization이 시행되고, Feature-map의 크기는 13 x 13 x 256으로 그대로 유지된다.

3) 세번째 Layer(Convolution): 384개의 3 x 3 x 256 커널을 사용하여 Convolution 한다. stride와 zero-padding 모두 1로 설정한다. 따라서 13 x 13 x 384 Feature-map을 얻게 된다.

4) 네번째 Layer(Convolution): 384개의 3 x 3 x 192 커널을 사용해서 Convolution 한다. stride와 zero-padding 모두 1로 설정한다. 따라서 13 x 13 x 384 Feature-map을 얻게 된다.

5) 다섯번째 Layer(Convolution): 256개의 3 x 3 x 192 커널을 사용해서 Convolution 한다. stride와 zero-padding 모두 1로 설정한다. 따라서 13 x 13 x 256 Feature-map을 얻게 된다. 그 다음에 3 x 3 overlapping max pooling을 stride 2로 시행한다. 그 결과 6 x 6 x 256 Feature-map을 얻게 된다.

6) 여섯번째 Layer(Fully-connected): 4096개의 뉴런으로 구성된다.

7) 일곱번째 Layer(Fully-connected): 4096개의 뉴런으로 구성된다.

8) 여덟번째 Layer(Fully-connected): 1000개의 뉴런으로 구성된다. 1000개의 클래스에 속할 확률을 나타내기 위해 softmax 함수가 적용된다.

- AlexNet의 상세 1) ReLU 함수: Activation Function으로 ReLU(rectified linear unit) 함수를 사용한다. 같은 정확도를 유지하면서 Tanh을 사용하는 것보다 6배나 빠른 효율을 보여주기 때문에 AlexNet 이후에 사용하는 Activation Function으로 ReLu를 사용하는 것이 선호된다.

Fint015.png

2) dropout: 과적합(over-fitting)을 막기 위해 dropout을 사용한다. dropout은 fully-connected layer의 뉴런 중 일부를 생략하면서 학습을 진행하는 것이다. 몇몇 뉴런의 값을 0으로 바꾼다. 이 뉴런들은 forward pass와 back propagation에 아무런 영향을 미치지 않는다. dropout은 학습할때만 적용되며, 테스트에는 모든 뉴런을 사용한다.

Fint016.png

3) overlapping pooling : CNN에서 pooling은 Convolution 과정을 통해 얻은 Feature-map의 크기를 줄이기 위해 사용한다. Max pooling을 사용하며, LeNet-5의 경우 풀링 커널이 움직이는 보폭인 stride를 커널 사이즈보다 작게 하는 overlapping pooling을 적용한다. LeNet-5는 non-overlapping Average pooling을 사용한 것이고, AlexNet은 overlapping 최대 풀링을 사용한 것이다. overlapping 풀링과 non-overlapping 풀링을 비교하면 아래와 같다.

Fint017.png

overlapping 풀링을 하면 풀링 커널이 중첩되면서 지나가는 반면, non-overlapping 풀링을 하면 중첩없이 진행된다. overlapping 풀링이, top-1, 5 에러율을 줄이는데 좀 더 효과가 있다. 4) local response normalization: Lateral inhibition은 활성화된 뉴런이 주변 이웃 뉴런들을 억누르는 현상을 의미한다. lateral inhibition 현상을 모델링한 것이 바로 local response normalization이다. 강하게 활성화된 뉴런의 주변 이웃에 대해서 normalization을 실행한다. 주변에 비해 어떤 뉴런이 비교적 강하게 활성화되어 있다면, 그 뉴런의 반응은 더욱더 돋보이게 된다. 반면 강하게 활성화된 뉴런 주변도 모두 강하게 활성화되어 있다면, local response normalization 이후에는 모두 값이 작아진다.

5) data augmentation: 과적합을 막기 위해 dropout 말고도 또다른 방법을 사용한다. 과적합을 막는 가장 좋은 방법 중 하나는 데이터의 양을 늘리는 것이다. 훈련시킬 때 적은 양의 데이터를 가지고 훈련시킬 경우 과적합이 진행될 가능성이 크기 때문이다. 따라서 AlexNet은 Data Augmentation 방법을 통해 데이터의 양을 늘렸다. 쉽게 말해서 하나의 이미지를 이용해서 여러 장의 비슷한 이미지를 생성하는 것이다. 이미지를 좌우 반전시키거나, AlexNet이 허용하는 입력 이미지 크기인 224 x 224 x 3보다 좀 더 큰 이미지를 조금씩 다르게 잘라서 224 x 224 x 3으로 만들어 여러 장의 이미지를 만들어낸다. 같은 내용을 담고 있지만 위치가 살짝 다른 이미지들이 생산된다.

Fint018.png

다) GoogLeNet

- GoogLeNet의 정의 구글의 연구팀들이 영화 “Inception” 에서 영감을 받아 CNN모듈을 만들었다. 이 모듈을 GoogLeNet으로 부르며, 2014년에 개최된 ILSVRC(ImageNet Large Scale Visual Recognition Challenge)대회 에서 우승을 차지했다. CNN이 깊어진다고 해서 무조건 성능이 좋아진다고 할 수 없다. 우리가 가진 데이터셋은 한정 적이고, 지나치게 깊은 네트워크는 오버피팅과 Vanishing gradient의 위험을 가진다. 뿐만 아니라, 깊어질 수록 필요한 연산의 양 또한 따라서 증가한다. 이러한 문제를 해결하는 것은 Dropout을 사용하는 네트 워크처럼 sparse하게 연결되는 구조를 만드는 것이다. 하지만 컴퓨터의 연산은 Dense할수록 빠르다. 이 둘 사이의 타협을 위해 Inception 모듈이 등장하게 된다.

- 구 조

Fint019.png

이전의 입력을 1x1 Conv에 넣어 channel을 줄였다가, 3x3나 5x5 Conv를 거치게해 다시 확장하는 방식이다. 이렇게 되면 필요한 연산의 양이 확 줄어들게 된다. 또 Pooling의 경우 1x1 Conv를 뒤에 붙였는데, 이는 Pooling연산의 결과 채널의 수가 이전의 입력과 동일하므로 이를 줄여주기 위함이다. 이렇게 sparse하게 각 연산을 거친 다음, dense한 output을 만들어내는데, H와 W는 모두 동일하다는 것에 주의해야 한다. 즉 Concat연산을 channel에 적용한다고 할 수 있다. 이렇게 Inception 모듈을 활용한 최종 모델의 구조는 다음과 같다.

Fint020.png

빨간색 동그라미가 쳐져있는 부분은 Inception 모듈을 사용한 곳이다. 이외에도 중간에 Pooling layer를 추가로 삽입해 크기가 줄어들 수 있게 했다. 이때 주목해야할 부분이 2가지가 있다. 첫번째로 네트워크의 얕은 부분, 입력과 가까운 부분에는 Inception 모듈을 사용하지 않았다는 것이다. 이 부분에는 Inception의 효과가 없다. 따라서 우리가 일반적으로 CNN하면 떠올리는, Conv와 Pooling 연산을 수행한다. 두번째는 softmax를 통해 결과를 뽑아내는 부분이 맨 끝에만 있는 것이 아니라, 중간 중간에 있다는 점이다. 이를 auxiliary classifier라고 부른다. 위와 같이 깊은 네트워크에서 Vanishing Gradient 문제를 걱정해야 한다. 그래서 auxiliary classifier를 이용해 이를 해결한다. Loss를 맨 끝뿐만 아니라 중간 중간에서 구하기 때문에 gradient가 적절하게 역전파된다고 설명하고 있다. 대신 지나치게 영향을 주는 것을 막기 위해 auxiliary classifier의 loss는 0.3을 곱했다. 물론 실제로 테스트하는 과정에서는 auxiliary classifier를 제거하고 맨 끝, 제일 마지막의 softmax만을 사용한다. 라) ResNet

- ResNet이란? deep learning은 기본적으로 망이 깊어지면 성능이 더 좋아진다고 생각을 한다. 하지만 deep learning network에서는 레이어 깊이가 어느 수준 이상보다 깊어지면 레이어를 늘려도 성능의 차이가 없고, 심지어는 성능이 떨어지는 경우도 있다. 간단히 요약하면 망이 깊어지면 gradient vanishing/exploding 또는 degradation이 발생하게 된다.

- 구 조 아래 그림은 평범한 CNN 망 구조이다. 이 평범한 망은 입력 x를 받아 2개의 weighted layer를 거쳐 출력 H(x)를 내며, 다음 layer의 입력으로 적용된다.


  • 특허조사
◇ 한글 문서에 포함된 문자를 인식하기 위한 방법, 장치 및 컴퓨터 판독 가능한 기록 매체 (1010152330000)

이미지로 표현되는 한글 문서에 대해 문자 인식을 수행하기 위한 방법, 장치 및 컴퓨터 판독 가능한 기록 매체가 개시된다. 본 발명에 따르면, 이미지 형식의 한글 문서에 포함된 문자를 인식하기 위한 방법으로서, (a) 이미지에 포함된 문자를 대상으로, 다른 성분과 접합되어 있지 않은 일 이상의 독립된 성분들을 추출하는 단계, (b) 상기 추출된 독립된 성분 중 자소에 해당되는 성분을 인식하는 단계, (c) 상기 인식된 자소를 기초로 하여 1차 문자 인식을 수행하는 단계, (d) 상기 1차 문자 인식 결과로부터 상기 한글 문서에 대한 문서 정보를 파악하는 단계, 및 (e) 상기 파악된 문서 정보를 기초로 상기 1차 문자 인식의 대상이 되지 못한 문자들에 대해 2차 문자 인식을 수행하는 단계를 포함하는 방법이 제공된다. 본 발명에 따르면, 문자 분할의 정확도 향상과 문자 인식의 속도 향상을 꾀할 수 있다.

◇ System for selecting, distributing, and selling fonts (U.S. 6,853,980 B1)

컴퓨터화된 전자상거래 글꼴 서버 시스템은 사용자가 하나 이상의 글꼴을 선택할 수 있도록 한다. 시스템은 사용자가 다차원 속성 값으로 정의된 글꼴을 선택할 수 있게 해준다. 시스템은 이미지 내 글자가 있는 영역을 표시하여 사용자가 영역을 선택할 수 있게 한다. 선택한 영역 내 글자의 글꼴과 유사한 글꼴들을 보여주고, 사용자는 글꼴을 선택할 수 있다. 선택한 글꼴을 클라이언트의 운영체제가 사용하기에 적합한 형태로 제공한다.

◇ CHARACTER IDENTIFICATION THROUGH GLYPH DATA MATCHING (U.S. 20110188761 A1)

영구 데이터 저장소에 문자 식별 데이터가 저장된다. 문자 식별 데이터는 하나 이상의 글꼴의 하나 이상의 문자에 대해 (a) 문자에 대한 글리프 데이터 (b) 코드 포인트 데이터와 문자를 연관시키는 데이터로서, 여기서 글리프 데이터는 문자를 출력 장치에 렌더링하는 방법을 설명하고 코드 포인트 데이터는 컴퓨터화된 엔티티에 대한 ID를 식별한다. 문자. PDF 문서와 같은 내장형 글꼴 문서가 특정 문자에 대한 코드 포인트 데이터 세트를 포함하지 않는다고 판단되면, 문자 식별 데이터를 참조하여 특정 문자의 신원을 결정한다. 이렇게 해서 기계는 내장된 글꼴 문서에 있는 문자를 인식할 수 있으며, 내장된 글꼴 문서에 색인화 또는 검색 등의 기능을 수행할 수 있다.

◇  특허 현황

2019년 5월 기준 글꼴 관련 특허는 한국 15,300여개, 미국 92,000여개, 유럽 63,000여개, 일본 23,000여개가 존재한다. 그 중 대부분은 OCR관련 특허이고 머신러닝을 활용한 특허는 소수이다. 머신러닝을 이용해 글꼴을 식별하거나 생성하는 특허는 영어 글꼴에 대해서는 존재하지만, 한글 글꼴에 대해서는 전무하다.


  • 특허 전략
◇ 우리가 개발하려는 한글 글꼴 식별 및 생성 시스템은 여러 오픈소스를 활용해 개발된다. 현재 이런 시스템에 대한 특허가 존재하지 않기 때문에, 특허 등록을 하게 되면 긍정적인 효과를 기대할 수 있다. 그러나 오픈소스를 활용해 개발하기 때문에 특허 등록이 가능한 것인지 알 수 없다. 따라서 시스템이 성공적으로 개발된다면, 특허 관련 전문가에게 자문하여 알아본 뒤 가능하다면 특허 등록을 할 계획이다.


  • 기술 로드맵

◇ 학습 · 인식

 가) 흐름도

Fint004.png

 나) CNN Model

Fint005.png

◇ 폰트 생성 
 가) 흐름도

Fint006.png

 나) GAN Model

Fint007.png

시장상황에 대한 분석

  • 경쟁제품 조사 비교
◇ WhatTheFont

WhatTheFont는 미국 디지털 폰트 유통 업체인 MyFonts에서 제공하는 폰트 인식 서비스이다. 사용자가 글자가 있는 PNG나 JPG 파일을 업로드하면, 문자인식(OCR) 기술을 이용해 글자를 인식한다. 인식된 글자가 출력되고 사용자가 식별하려는 문자를 클릭하면, WhatTheFont는 딥러닝을 이용해 133,000여 개의 폰트 중 유사도가 높은 폰트들을 찾아주는 서비스를 제공한다. 현재 다른 언어는 지원하지 않고, 영어만 지원하고 있다.

◇ 한글마을

한글마을은 우리나라 최초의 한글 글꼴 등록시스템으로, 현존하는 모든 한글 글꼴을 등록 및 검색할 수 있는 서비스이다. 2019년 3월 기준으로 1700개의 한글 폰트를 검색할 수 있고, 원하는 글자를 입력하면 입력된 글자를 1700개의 폰트로 보여주며 사용자는 그중 원하는 폰트를 선택해 구매 및 다운로드할 수 있다.

◇ Adobe Photoshop CC 글꼴인식

Adobe사 이미지 편집 프로그램인 Photoshop의 CC 2015.5 버전부터 추가된 기능이다. 이미지를 불러온 뒤 글꼴 인식 기능을 실행하여 인식하려는 글자가 있는 이미지의 일부분을 선택한다. 머신러닝 기술을 이용해 Photoshop에 내장된 글꼴과 Adobe Typekit에서 제공되는 글꼴 중 유사한 글꼴을 찾아 사용자에게 보여준다. 아직은 한글은 지원되지 않고 로마어/라틴어 및 일본어만 지원하고 있다.

◇ GitHub – GAN을 활용한 한글 폰트 제작 프로젝트

GitHub의 periannath라는 유저가 개발한 한글 폰트 제작 프로젝트이다. 제공된 폰트 템플릿에 맞춰 글자를 작성한 뒤 스캔하여 학습 데이터로 이용한다. 템플릿에는 399자만 있기 때문에 완성형 한글 글자 수인 11172자를 생성하기에 input 개수가 부족하다. 이를 해결하기 위해 여러 개의 Copyleft 폰트로 학습된 모델을 생성한 뒤 transfer learning을 통해 399자를 학습시키고 그 모델을 통해 폰트를 생성하는 프로젝트이다.

◇ University of California, Berkeley AI Research LAB – MC-GAN for Font Style Transfer

BAIR(Berkeley Artificial Intelligence Research) Lab의 블로그에 발표된 영어 폰트 제작 기술이다. BAIR 연구진은 multi-content GAN(MC-GAN)이라는 새로운 종류의 GAN 모델을 디자인했다. MC-GAN은 아래 이미지와 같이 7~8자의 알파벳을 input으로 이용하면, 폰트를 만들어내 한 문장을 만들 수 있다.

Fint003.png

다만, 26개의 알파벳으로 구성된 영어와 달리 11172자의 한글에 이 기술을 적용하면 사용자가 원하는 폰트 제작이 불가능할 것이라 기대된다.



  • 마케팅 전략 제시
◇ WhatTheFont와 Photoshop 글꼴 인식 서비스는 한국어를 지원하지 않으므로, 우리 제품은 시장에서 한국어를 최초로 지원하는 서비스임을 강조하며 홍보한다.
◇ 한글마을은 한글을 지원하지만, 인공신경망을 이용한 이미지 인식이 아닌 사용자가 직접 찾아봐야 하는 불편함을 갖고 있다. 사용자에게 편리한 서비스를 제공하는 점에 중점을 둔다.
◇ 유튜브를 통한 광고 및 바이럴 마케팅을 이용해 문서 및 PPT 자료 작성이 잦은 20~30대 고객층을 중심적으로 노린다.

개발과제의 기대효과

기술적 기대효과

◇ 고객이 제품을 이용하기 위해 입력한 이미지를, 필요시 추가 표본으로 사용하여 학습시킴으로써 시간이 지날수록 신경망의 정확도 상승을 기대할 수 있다.
◇ 이미지에서 원하는 폰트를 발견했을 때, 2000개에 달하는 한글 폰트를 비교하며 찾아낼 필요가 사라져 이용자의 시간을 절약할 수 있다.
◇ 폰트 검색 기능으로 일치하는 폰트를 식별하지 못하면, 폰트 제작 기능을 통해 새로운 폰트를 제작하여 이용자의 욕구를 충족시킬 수 있다.
◇ 웹 기반 서비스를 이용함으로써 이용자에게 편리한 접근성을 제공할 수 있다.

경제적, 사회적 기대 및 파급효과

◇ 문서 및 발표 자료의 목적에 따른 적절한 폰트 사용으로 이용자의 목표 달성을 도모할 수 있다.
◇ 폰트 검색에 편리함을 제공해 이용자가 많아지면, 국내 유료 폰트 제작자의 매출 상승을 기대할 수 있다.
◇ 유료 폰트 시장의 활성화에 기여하고, 폰트 제작자를 떠오르는 인기 직업군으로 만들 수 있다
◇ 식별에 실패한 폰트를 기반으로 새로운 폰트를 제작하여 이용자가 폰트 제작자가 되고, 뜻밖의 수익창출을 이끌어낼 수 있다.

기술개발 일정 및 추진체계

개발 일정

내용

구성원 및 추진체계

내용

설계

설계사양

제품의 요구사항

내용

설계 사양

내용

개념설계안

내용

이론적 계산 및 시뮬레이션

내용

상세설계 내용

내용

결과 및 평가

완료 작품의 소개

프로토타입 사진 혹은 작동 장면

내용

포스터

내용

관련사업비 내역서

내용

완료작품의 평가

내용

향후계획

내용

특허 출원 내용

내용