기본 개념
딥러닝에서 이미지를 처리할 때 CNN (Convolution Neural Network)을 많이 사용하고 있습니다.
ImageNet
홈 페이지: http://www.image-net.org/
WordNet의 명사들과 관련된 이미지를 모아 두는 프로젝트입니다. WordNet은 단어 간의 관계를 트리 형태로 나타낸 프로젝트이므로, ImageNet 또한 트리 형태로 이미지가 분류되어 있습니다.
100만 장이 넘는 이미지로 되어 있어서 데이터 크기가 매우 큽니다. 따라서 ImageNet 데이터는 Transfer Learning에 사용되기도 합니다.
ImageNet 데이터를 이용한 ImageNet Large Scale Visual Recognition Challenge(ILSVRC)라는 Image Classification Model 간의 대회가 2010년부터 2017년까지 개최되었습니다. 딥러닝 도입 이전 우승 모델의 Top-5 Error rate가 25%(2014년, Xerox)이었습니다. 하지만 딥러닝 기술이 발전하면서 Top-5 Error rate가 6.7%(2014년, GoogleNet)로 감소하였습니다. 2017년 SeNet이 우승한 뒤로 대회는 종료되었습니다.
전처리
- R, G, B 값의 평균값을 내어 픽셀 하나 당 하나의 값만 가지도록 한다.
- RGB를 명도/채도/색상으로 변환하여 명도값만 이용할 수도 있다.
Image Classification 모델
Keras에서 ImageNet으로 학습된 Classification Model을 공개하고 있씁니다.
모델 간 비교에 사용 가능한 지표
- Top-5 Accuracy: 결과값의 상위 5개 후보군 중에 실제 class가 있는 비율
- class 수가 많고, 사람이 봐도 헷갈리는 경우가 많기 때문에 정답이 1등이 아니라 2등, 3등 등에 있을 수 있음.
- Top-1 Accuracy: 결과값의 상위 1개 후보군 중에 실제 class가 있는 비율
주로 사용하는 모델
- VGGNet
- 가장 무난한 선택.
- VGG16 기준 Top-5 Accuracy 90%, Top-1 Accuracy 71.5% 정도.
- 구조가 직관적이고 이해하기 쉬우나 old한 모델이라는 단점이 있음. 성능에 비해 파라미터수가 많음.
- MobileNet
- 모델이 가볍다. Top-5 Accuracy가 87%밖에 되지 않지만 모델 용량이 17MB밖에 되지 않음.
- MobileNet V2, V3 등등 계속 발전하여, VGG와 비슷한 성능을 보이기도 한다.
- ResNet
- Inception
VGG
구조
- 224*224 이미지를 받아 4096개의 feature를 출력하는 부분, 4096개의 feature를 기반으로 1000개의 class로 사진을 분류하는 부분으로 구성되어 있다.
- Convolution을 하고 이미지 크기를 줄이는 과정을 여러 번 반복하면서 이미지의 추상적인 특징을 뽑아낸다.
- 단점: 용량이 매우 크다. (500~600MB)
참고 자료
- Very Deep Convolutional Networks for Large-Scale Image Recognition: VGG 모델 논문
- 자습해도 모르겠던 딥러닝, 머릿속에 인스톨 시켜드립니다: VGG 모델을 중심으로 딥러닝을 설명하는 PPT
- How to Use The Pre-Trained VGG Model to Classify Objects in Photographs: VGG16 모델로 간단히 이미지를 분류하는 튜토리얼
- Building powerful image classification models using very little data: VGG16 모델을 변형해서 새로운 종류의 사진을 분류할 수 있는 모델을 만드는 방법
- 대선주자 얼굴 위치 추적기: Class Activation Mapping을 통해 물체의 위치를 추적하는 방법 제안
ResNet
논문: https://arxiv.org/abs/1512.03385
-
residual block을 한 단위로 하는 것이 특징이다.
-
Residual block이라는 개념을 활용해서 Layer 개수가 많아지면 생기는 문제를 해결한 모델
- 계층이 깊으면 역전파가 제대로 되지 않는 gradient vanishing 현상
-
Top-5 Accuracy 96.4%를 기록하여 ILSVRC 2015에서 우승
-
계층이 깊기 때문에 비선형성이 크므로, 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이 많이 공개되어 있다