본문 바로가기
공부/코딩

스파르타코딩클럽 이미지로 시작하는 딥러닝 5주차 개발일지

by ▤▣▩▒□ 2021. 7. 21.
728x90
반응형

드디어 5주차 수업까지 마무리!

 

이번 주차에서는 흑백이미지를 컬러이미지로 변환하는 딥러닝 모델에 대하여 공부했다.

그리고 작은 해상도 이미지를 크게 만들어주는 딥러닝 모델도 공부했다.

사실 우리가 아는 흑백이미지는 '회색이미지'라고 불러야 맞다.

코딩에서 진짜 흑백이미지는 검은색과 흰색만 있는 이미지를 말하기 때문.

 

아래 코드는 회색 사진의 크기를 줄이고, 이를 그냥 늘리는 방법과 딥러닝 모델을 이용해서 늘리는 방법을 써서 비교해보고, 딥러닝 모델을 쓴 이미지를 컬러화시키는 작업이다.

 

import cv2
import numpy as np

proto = 'models/colorization_deploy_v2.prototxt'
weights = 'models/colorization_release_v2.caffemodel'

net = cv2.dnn.readNetFromCaffe(proto, weights)

pts_in_hull = np.load('models/pts_in_hull.npy')
pts_in_hull = pts_in_hull.transpose().reshape(2, 313, 1, 1).astype(np.float32)
net.getLayer(net.getLayerId('class8_ab')).blobs = [pts_in_hull]

net.getLayer(net.getLayerId('conv8_313_rh')).blobs = [np.full((1, 313), 2.606, np.float32)]

sr = cv2.dnn_superres.DnnSuperResImpl_create()
sr.readModel('models/EDSR_x4.pb')
sr.setModel('edsr', 3)

img = cv2.imread('imgs/07.jpg')

img_reduce = cv2.resize(img, dsize=None, fx=0.25, fy=0.25)

result = sr.upsample(img_reduce)

resized_img = cv2.resize(img_reduce, dsize=None, fx=4, fy=4)

# colorize
h, w, c = result.shape
img_input = result.copy()

img_input = img_input.astype('float32') / 255.
img_lab = cv2.cvtColor(img_input, cv2.COLOR_BGR2Lab)
img_l = img_lab[:, :, 0:1]

blob = cv2.dnn.blobFromImage(img_l, size=(224, 224), mean=[50, 50, 50])

net.setInput(blob)
output = net.forward()

output = output.squeeze().transpose((1,2,0))

output_resized = cv2.resize(output, (w, h))

output_lab = np.concatenate([img_l, output_resized], axis = 2)

output_bgr = cv2.cvtColor(output_lab, cv2.COLOR_Lab2BGR)
output_bgr = output_bgr * 255
output_bgr = np.clip(output_bgr, 0, 255)
output_bgr = output_bgr.astype('uint8')

cv2.imshow('img', img)
cv2.imshow('img_reduce', img_reduce)
cv2.imshow('result', result)
cv2.imshow('resized_img', resized_img)
cv2.imshow('output', output_bgr)
cv2.waitKey(0)

 

결과는 아래처럼 나온다.

원본 회색 이미지
축소이미지
단순히 사이즈만 늘린 이미지 / 딥러닝으로 해상도를 늘린 이미지 / 회색 이미지를 컬러화 한 결과

 

자세히 보면 그냥 단순히 사이즈를 늘리면 그림이 깨져버린다.

하지만 딥러닝 모델을 써서 해상도를 늘리면 곡선이 매끄럽게 늘어난다. 다만 색상을 완벽하게 살리지는 못하나보다.

 

가장 신기했던 것이 컬러화시키는 모델이다.

그냥 아무거나 흑백사진을 넣으면 가장 그럴듯한 색으로 뽑아준다.

이걸 이용해서 오래된 흑백사진을 컬러로 바꿔줄 수 있을 듯 하다.

 

참 알면 알수록 신기한 인공지능 세상이다.

728x90
반응형