Skip to content

Image Processing

warmwall edited this page Nov 16, 2019 · 5 revisions

기본 개념

익혀야 할 딥러닝 기술

이미지는 한 픽셀과 그 근처의 픽셀만 보고 이미지 특징을 추출할 수 있다. 이미지에 뾰족한 부분이 있는지 확인할 때 이미지 전체를 보는 것이 아니라, 이미지의 일부만 보고 확인하는 것과 비슷하다. 이런 것들은 Convolution을 통해 수행할 수 있기 때문에 CNN(Convolution Neural Network) 등을 익힐 필요가 있다.

ImageNet

홈 페이지: http://www.image-net.org/

ImageNet은 단어 간의 관계를 트리 형태로 나타낸 WordNet의 명사들과 관련된 이미지를 모아 두는 프로젝트이다. 총 100만 장이 넘는 이미지로 구성되어 있다. 데이터 양이 상당히 많기 때문에 우선 ImageNet 데이터로 학습을 한 뒤, 비교적 적은 양의 데이터로 다시 학습하는 Transfer Learning(전이학습)에도 많이 사용된다.

ImageNet Large Scale Visual Recognition Challenge(ILSVRC)라고 해서 이미지 분류를 하는 모델끼리 경쟁하는 대회가 있다. 2014년 Xerox 모델이 Top-5 Error rate가 25%였는데 2015년에 CNN이 적용된 AlexNet이 16.4%, 2014년 VGG가 7.3%로 감소했다.

전처리

이미지는 이미 한 픽셀이 빨강, 초록, 파랑 세 채널이 숫자로 표현되고 있다. 텍스트보다 전처리는 매우 간단하다.

다만 Model에 따라 아래와 같은 전처리를 할 수 있다.

  • R, G, B 값의 평균값을 내어 픽셀 하나 당 하나의 값만 가지도록 한다.
  • RGB를 명도/채도/색상으로 변환하여 명도값만 이용할 수도 있다.
  • 이미지에서 우리가 사용하고 싶은 정보만 담긴 부분만 뽑아 낸 뒤 모델에 넣을 수 있다. 예를 들어 '자동차'가 있는지 없는지 확인하려면 사물이 어디 있는지 먼저 파악하고 그 부분만을 추출하여 VGG 모델에 넣을 수 있다.

그러나 이 전처리는 사용할 모델에 따라 다르기도 하고, 모델 자체적으로 이런 전처리를 수행하기도 한다.

이미지 분석의 주요 모델

이미지의 데이터 양이 매우매우 많아서 미리 만들어진 모델을 사용하는 것을 추천한다. 아래에서 소개하는 모델은 그대로 쓸 수도 있지만 다른 모델을 만들 때 기반이 될 수도 있는 모델들이다.

keras에서 제공하는 이미지 분석 모델은 여러 가지가 있다.

이미지 분석 모델을 비교할 때 사용할 수 있는 지표는 Top-5 Accuracy, Top-1 Accuracy가 있다. Top-5 Accuracy는 모델을 통해 얻은 상위 5개 class 후보군에 실제 그 사진의 class가 있을 확률을 의미한다. Top-1 Accuracy는 모델을 통해 얻은 가장 확률이 높은 class가 실제 class와 일치할 확률이다. 한 이미지 내에 여러 물체가 있기도 하고, 다른 두 class의 이미지가 비슷한 경우도 많기 때문에 주로 Top-5 Accuracy를 이용해서 모델을 비교한다. ImageNet 데이터셋 기준으로 사람의 Top-5 Accuracy는 95% 정도이다.

VGG16이 가장 무난한 선택이다. Top-5 Accuracy가 90% 정도, Top-1 Accuracy는 71.5%이다. 구조도 직관적이고 이해하기 쉬우나 모델의 크기가 너무 큰 것이 단점이다. InceptionV3 같은 경우 100MB 정도 되는 모델에 Top-5 Accuracy가 94%, Top-1 Accuracy는 78.8% 정도 되는 등 좋은 모델이다. InceptionResV2 모델은 Inception 모델과 ResNet 모델의 장점을 섞은 모델로, Top-5 Accuracy가 95% 정도이며 Top-1 Accuracy는 80%나 된다. 이 두 모델 모두 VGG보다는 좋지만 구조를 이해하기 조금 까다롭다. 임베디드 장치와 같은 곳에서 사용할 수 있는 모델은 MobileNet이 있는데 Top-5 Accuracy가 87%밖에 되지 않지만 모델 용량이 17MB밖에 되지 않는다.

이러한 이미지 분석 모델은 ImageNet 데이터셋을 통해 학습이 된다. 데이터셋 크기가 정말 크기 때문에 학습 시간도 매우 오래 걸린다. 직접 이런 모델을 학습시키기보다는 다른 사람이 먼저 학습을 시켜 둔 모델을 사용하는 것을 권장한다.

VGG

이미지를 분석하고 분류하는 Model이다. 224*224 이미지를 받아 4096개의 feature를 출력하는 부분, 4096개의 feature를 기반으로 1000개의 class로 사진을 분류하는 부분으로 구성되어 있다. Convolution을 하고 이미지 크기를 줄이는 과정을 여러 번 반복하면서 이미지의 추상적인 특징을 뽑아낸다. VGG는 VGG16, VGG19 모델이 있는데 잘 모르겠으면 VGG16 모델 사용을 추천한다.

학습된 Model과 weight가 공개되어 있어서 직접 모델을 학습시킬 필요 없이 학습된 모델을 그대로 갖다 쓰면 된다. Keras와 같은 딥러닝 라이브러리에서도 쉽게 사용할 수 있다. 기존 모델을 그대로 사용하면 이미지를 1000개의 class로 분류할 수 있다. 사진을 분류하는 Layer를 다시 학습한다면 우리가 원하는 사진 class로 분류할 수 있는 Model을 만들 수 있다.

그러나 VGG 모델은 용량이 매우 크다는 단점이 있다. Keras를 이용해 VGG16 모델을 쓰면 모델 용량(h5 파일)이 500~600MB 정도로 큰 편이다. 이미지의 feature를 추출하는 부분의 Layer들을 변형하는 것도 추천하지 않는다. 데이터 양이 아주 많지 않다면 오히려 accuracy를 낮추는 효과를 가져온다. 모델을 변형하려면 VGG에서 나온 4096가지 feature가 나온 이후의 Layer만 수정하는 등 아래의 링크를 참고하여 변형하는 것을 추천한다.

ResNet

논문: https://arxiv.org/abs/1512.03385

ResNet은 VGG와 마찬가지로 CNN을 통해 이미지의 feature를 추출하는데, residual block을 한 단위로 하는 것이 특징이다. Residual block이라는 개념을 활용해서 Layer 개수가 많아지면 생기는 문제를 해결한 모델이다. Top-5 Accuracy 96.4%를 기록하여 ILSVRC 2015에서 우승한 모델이다.

Residual block은 이미지를 입력을 받아 CNN layer를 두 번 통과시킨 뒤 나온 출력값에다가 원래 입력값을 더해서 출력하는 block이다. 여기서 원래 입력값을 더하는 것을 shortcut을 만든다고 말한다. 그래서 입력값의 정보가 사라지지 않고 출력값에도 남아 있게 된다. 이 Residual block을 상당히 깊게 쌓으면 ResNet이 된다. 계층이 깊으면 역전파가 제대로 되지 않는 gradient vanishing 현상이 일어나지만, 이 shortcut 덕분에 아무리 계층이 깊어도 정보가 소실되지 않는다.

계층이 깊기 때문에 비선형성이 크므로, VGG와 달리 Fully-connected layer가 없다. 그래서 파라미터 개수가 적기 때문에 VGG에 비해 모델 크기도 작고 실행 속도도 조금 빠르다.

재미있는 논문/프로젝트 소개

논문을 더 찾아보려면 Github에다가 <원하는 키워드> + Papers로 치면 재밌는 논문을 많이 찾을 수 있다. 하지만 이미지의 데이터 크기가 크기 때문에 실제로 논문을 보고 모델을 새로 만드는 것은 어렵다. 개발자나 다른 사람이 미리 만들어둔 Model이 있는 논문들을 보는 것을 추천한다. 논문을 읽어서 이해한 뒤 바로 써 보거나, 먼저 써 보고 논문을 읽으면 이해가 더 잘 된다.

이런 논문이나 프로젝트는 VGG 모델을 그대로 가져와 사용하거나, VGG 모델을 변형해서 사용하는 경우가 많다. 왜냐면 VGG 모델이 직관적으로 이해하기 쉽기 때문이다.

Image Segmentation

Image Segmentation은 어떤 object가 있는지, 그리고 그 object의 범위가 무엇인지 알아내는 것이다.

*[번역글] Image Segmentation에 대한 짧은 이야기: R-CNN 에서 부터 Mask R-CNN 까지

Colorization

Colorization은 흑백 이미지를 컬러 이미지로 변환하는 것이다.

사용자의 정보 제공 없이 자동으로 흑백 사진을 컬러로 바꿔주는 모델도 있고, 사용자가 hint를 주면 이를 기반으로 채색하는 모델도 있다. 사진 뿐만 아니라 만화 등 다양한 분야에 적용하고자 하는 연구가 진행 중에 있다.

Colorful Image Colorization

논문 링크: https://arxiv.org/abs/1603.08511 Source: https://github.com/richzhang/colorization

사용자 hint 없이 흑백 사진을 채색하는 모델을 제안하였다. 간단한 원리는 Convolution으로 feature를 추출해서 확률 분포로 색상을 추정한 뒤 기존 흑백 사진에 색을 입히는 것이다.

Deep Colorization

논문 링크: https://arxiv.org/abs/1605.00075

Real-Time User-Guided Image Colorization with Learned Deep Priors

논문 링크: https://arxiv.org/abs/1705.02999 Github 링크: https://github.com/junyanz/interactive-deep-colorization

사용자의 입력값에 따라 변환된 컬러 이미지의 색을 변경할 수 있는 것이 특징.

Style Transfer for Anime Sketches with Enhanced Residual U-net and Auxiliary Classifier GAN

논문 링크: https://arxiv.org/abs/1706.03319

만화 스케치(선만 있는 것)와 채색이 된 그림을 입력으로 넣으면 스케치를 채색된 그림의 스타일대로 색칠해주는 모델을 제안하였다.

GAN인 만큼 생성자와 감별자가 있다. 생성자의 구조를 간단히 설명하면 다음과 같다. 스케치 그림에 대해 U-net을 이용하여 feature를 추출한다. 채색된 그림을 VGG16 모델에 넣어 feature를 추출한다. 두 feature를 활용하여 다시 U-net을 이용하여 채색된 이미지를 추출한다.

이 논문에서 인용한 그림의 출처는 Github의 lllyasviel/style2paints repo이다. 참고로 이 repo에서는 사람의 hint를 기반으로 스케치를 채색하는 모델 및 온라인 데모를 제공한다.

Consistent Comic Colorization with Pixel-wise Background Classification

논문 링크: https://nips2017creativity.github.io/doc/Consistent_Comic_Colorization.pdf

네이버웹툰 주식회사의 인턴 강성민씨가 웹툰을 자동 채색하는 Model을 제안한 논문이다. 이 논문의 구현체는 공개되어 있지 않지만 github 등을 뒤지면 이와 비슷한 역할을 한 여러 Model이 많이 공개되어 있다

Clone this wiki locally