< 딥러닝과 머신러닝의 차이 >
딥 러닝은 동영상이나 음성, 이미지 데이터를 처리하는 데에 있어 특히 강력한 모습을 보인다.
머신 러닝은 복잡한 이미지를 잘 분간하지 못하는데, 딥 러닝은 고양이와 개를 꽤나 간단하고 쉽게 구분해낸다.
실제 영상 및 이미지 분석 툴들에 딥 러닝이 많이 활용되는 이유다.기업들로서는 인스타그램에 올라와있는 이미지와 영상들을 쉽고 빠르게 분석해 소비자들의 정서와 동향을 파악할 수 있게 된다.
이로부터 영상 분석 기능을 추가시켜 쇼핑을 하는 사용자들이 사고자 하는 아이템을 카메라 앱으로 화면캡처만 해도 되도록 한다거나 하는 서비스를 제공할 수 있다.
여기에서는 이미지 데이터를 표현하는 방식과 이미지 데이터를 처리하기 위한 파이썬 패키지인 Pillow, Scikit-Image, OpenCV 패키지에 대해 설명한다.
1) 색상을 맞춰준다.
2) 픽셀 크기를 맞춰준다.
이미지 데이터는 픽셀
(pixel)이라고 하는 작은 이미지를 직사각형 형태로 모은 것이다.
각 픽셀은 단색의 직사각형이다.
전체 이미지의 크기를 표현할 때는 (세로픽셀수 x 가로픽셀수)
형식으로 표현한다.
이미지 데이터를 저장할 때는 픽셀의 색을 표현하는 스칼라 값이나 벡터를 2차원 배열로 표현한다.
파이썬에서는 NumPy의 ndarray
클래스 배열로 표현한다.
픽셀의 색을 숫자로 표현하는 방식을 색공간(color space)라고 한다.
대표적인 색공간으로는
< 그레이스케일. Gray-scale >
그레이스케일에서는 모든 색이 흑백이다.
각 픽셀은명도
를 나타내는 숫자로 표현된다.
0은 검은색
을 나타내고 숫자가 커질수록 명도가 증가하여 하얀색이 된다.
숫자는 보통0~255의 8비트 부호없는
정수로 저장된다.SciPy 패키지의 misc 서브 패지의 face 명령은 이미지 처리용 샘플 이미지를 제공한다.
인수로 gray=True를 입력하면 그레이스케일 이미지를 반환한다.
이미지의 크기는 배열의 shape 속성으로 볼 수 있다.
import scipy as sp
img_gray = sp.misc.face(gray=True)
img_gray.shape
->
(768, 1024) ## 데이터는 768x1024 크기의 uint8 자료형 2차원 배열이다.
import matplotlib.pylab as plt
import seaborn as sns
sns.heatmap(img_gray[:15, :15], annot=True, fmt="d", cmap=plt.cm.bone)
plt.axis("off")
plt.show()
< RGB >
RGB 색공간에서 색은 적(Red), 녹(Green), 청(Blue)의 3가지 색의 명도를 뜻하는 숫자 3개가 합쳐진 벡터로 표현된다.
8비트 부호없는 정수를 사용하는 경우
- (255, 0, 0)은 빨간색,
- (0, 255, 0)은 녹색,
- (0, 0, 255)는 파란색이다.
픽셀 데이터가 스칼라가 아닌 벡터이므로 이미지 데이터는 (세로픽셀수 x 가로픽셀수) 형태의 2차원 배열로 표현하지 못하고
(세로픽셀수 x 가로픽셀수 x 색채널)
형태의3차원 배열
로 저장한다.
세번째 축을 색채널(channel)이라고 부른다.
from sklearn.datasets import load_sample_images
dataset = load_sample_images()
img_rgb = dataset.images[1]
img_rgb.shape
->
(427, 640, 3) ## 3차원 배열로 저장한다
< HSV >
HSV(Hue, Saturation, Value) 색공간에서는 색이 다음 세가지 값으로 표현된다.
색상(Hue): 색상값 H는 가시광선 스펙트럼을 주파수 별로 고리모양으로 배치했을 때의
각도
이다. 0°~360°의 범위를 갖고 360°와 0°는 빨강을 가리킨다.채도(Saturation): 채도값 S는 특정한 색상의
진함
의 정도를 나타낸다.
가장 진한 상태를 100%이고 0%는 같은 명도의 무채색이다.명도(Value): 명도값 V는
밝은
정도를 나타낸다.
순수한 흰색, 빨간색은 100%이고 검은색은 0%이다.
matplotlib 패키지의 rgb_to_hsv, hsv_to_rgb 명령을 사용하면 RGB 색공간 표현과 HSV 색공간 표현을 상호변환할 수 있다.
HSV 색공간으로 표현된 파일은 imshow 명령으로 바로 볼 수 없다.
이외에도 RGB, HSV 색공간에 투명도(transparency)를 표현하는 A(Alpha) 채널이 추가된 RGBA, HSVA 등의 색공간도 있다.
.bmp 확장자를 가지는 비트맵(bitmap) 파일은 지금까지 설명한 다차원 배열정보를 그대로 담고있다.
하지만 비트맵 파일은 파일 용량이 크기 때문에 압축을 통해 용량을 줄인 JPG, GIF, PNG 등의 압축 파일 형식도 많이 사용한다.
JPEG : JPEG는 Joint Picture Experts Group의 약자로 이미지 압축 기술자 모임인 JPEG 위원회에서 개발한 이미지 파일 형식이다.
JPEG 파일은 웹상 및 멀티미디어 환경에서 가장 널리 사용
되고 있는 포맷이다.
JPG라는 확장자도 같이 사용된다.
장점
모든 컬러 정보
를 유지한다.단점
압축율
을 높일 수록 이미지의 질이 손상된다.GIF : GIF는 Graphics Interchange Format의 약자로 1987년 미국의 통신업체인 컴퓨서브(Compuserve)에서 개발한 포맷이다.
다중 프레임 애니메이션
을 구현 할 수 있다.투명 이미지
를 지원한다.png : PNG는 Potable Network Graphics의 약자이다. GIF 포맷을 대체
하기 위해 개발된 파일 포맷이다.
비손실 압축방식
으로 원본에 손상 없이 파일의 크기를 줄여준다.포토샵
에서 활용하기 용이하다.날카로운 경계
가 있는 이미지인 경우 JPG보다 PNG가 효과적이다.용량이 크다.
가장 먼저 소개할 파이썬 이미지 처리 패키지는 Pillow이다.
Pillow는 이전에 사용되던 PIL(Python Imaging Library)패키지를 대체하기 위한 것이다.
JPEG, BPM, GIF, PNG, PPM, TIFF 등의 다양한 포맷을 지원하고 초보자가 다루기 쉽다는 장점이 있다.
여기에서는 Pillow 버전 5.2를 기준으로 설명한다.
PIL 패키지의 대체이므로 임포트 이름이 PIL 패키지와 같다.
이미지 데이터 처리를 위해 Image 클래스 객체를 NumPy 배열로 변환할 때는 np.array 함수를 사용한다.
NumPy 배열이 되면 matplotlib의 imshow 명령으로 볼 수 있다.
반대로 NumPy 배열을 Image 객체로 바꿀 때는 fromarray 클래스 메서드를 사용한다.
-썸네일(thumbnail) 이미지를 만들고 싶다면 Image객체의 thumbnail
메서드를 사용한다.
resize 메서드는 원래 객체는 그대로 유지한 채 변환된 이미지를 반환하지만 thumbnail 메서드는 원래 객체 자체를 바꾸는
인플레이스(in-place) 메소드이므로 주의하여 사용한다.
😁1. 이미지에 있는 어떤 동물인지 분류하고자 할 때, 컴퓨터에게 이미지는 각 픽셀 값을 가진 숫자 배열로 인식하게 합니다.
😁2. 이미지 전 처리
모두 같은 크기를 갖는 이미지로 통일
1) 가로 세로 픽셀 사이즈를 표현하는 해상도 통일
2) 색을 표현하는 방식 통일(RGB, HSV, Gray-scale, Binary, ...)
극도로 많은 수의 파라미터가 필요하다.
😁2) 합성곱 신경망(Convolution Neural Network)
작은 필터를 순환시키는 방식
이미지의 패턴이 아닌 특징을 중점으로 인식
CNN은 크게 이미지의 특징을 추출하는 부분과 클래스를 분류하는 부분으로 나뉩니다.
특징 추출 영역은 합성곱층(Convolution layer)과 풀링층(Pooling layer)을 여러 겹 쌓는 형태(Conv+Maxpool)로 구성되어 있습니다.
그리고 이미지의 클래스를 분류하는 부분은 Fully connected(FC) 학습 방식으로 이미지 분류를 합니다.
출처: