코딩일지/TIL: Today I Learned

20221116 TIL

야언 2022. 11. 16. 23:52

오늘의 한 일

  • 딥러닝을 통한 이미지처리 구현 - 1~5주차

 

딥러닝을 통한 이미지 처리 구현

 

 

 

** 참조 - 텐서플로우에 gpu 사용하기 (CUDA 설치)

 

https://doitgrow.com/28

 

[환경 설정] 텐서플로우(Tensorflow) 2.x GPU 설정 및 사용하는 법 (윈도우10 기준)

게임할 때에는 컴퓨터가 자동으로 그래픽 카드를 인식하여 작동시키지만, 우리가 데이터 분석을 할 때에는 여러가지 설정을 해주어야 합니다. 오늘은 딥러닝의 가장 유명한 프레임워크인 텐서

doitgrow.com

 

 

저번에 의문의 이유로 설치에 실패했던 CUDA 설치인데 이번에 다시 시도해 보았다.

 

CUDA 설치해야할 버전 확인

CUDA 11.6 버전을 다운받아 다시 설치시도를 해보았는데 또 실패.. 도대체 뭐가 문제지

 

비슷한 사례를 구글링 해보다가 맞는 사례가 없는것같아서

 

뭐가 문젠가 싶어서 이것저것 해볼겸 설치경로를 F드라이브로 바꿔보았는데 성공헀다

 

??

 

아직도 뭐가 문제인지는 모르겠음.. 아마 용량문제가 아닐까 싶음

 

 

 

 

GPU 확인 완료

 

 

 

딥러닝을 통한 이미지 처리 구현 강의는 1~5주차까지 전부 상호튜터님이 진행하셨던 yolov5 모델 강의와 같이 

특정 모델에 대한 기본 사용법 + 딥러닝 모델 돌리기였다

 

모델 불러오기 -> 이미지 불러오기 -> 이미지 전처리 -> 결과 추론 -> 결과값 정제(후처리)

어디서 굉장히 많이 본 기억이 난다~

 

 

 

앞으로 진행할 프로젝트인 유화 제작 서비스에 들어갈 것 같은 이미지 처리 모델도 있었는데 특히 집중해서 공부했다

 

이미지 

import cv2
import numpy as np
# 이미지 불러오기
net = cv2.dnn.readNetFromTorch('models/eccv16/starry_night.t7')  # 모델 불러오기

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

# 전처리 코드
h, w, c = img.shape

img = cv2.resize(img, dsize=(500, int(h / w * 500)))

# print(img.shape) # (325, 500, 3) (높이, 너비, 채널)


MEAN_VALUE = [103.939, 116.779, 123.680]
blob = cv2.dnn.blobFromImage(img, mean=MEAN_VALUE)

# print(blob.shape) # (1, 3, 325, 500) 차원 변형 (1, 채널, 높이, 너비)

# 결과 추론하기
net.setInput(blob)
output = net.forward()
# 전처리한 이미지(blob)를 모델에 넣고 추론, output 변수에 추론한 결과 저장(forward)

# 결과 후처리
output = output.squeeze().transpose((1, 2, 0))  # 차원 다시 줄이기(sqeeze), 차원변형 되돌리기(transpose)
output += MEAN_VALUE  # MEAN_VALUE 뺀대로 다시 더하기

output = np.clip(output, 0, 255)  # 범위 넘어가는 값 자르기(이미지 픽셀 값은 0-255)
output = output.astype('uint8')  # 이미지 자료형 정수형으로 바꾸기

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

원본과 모델별 결과물

 

 

 

이외에도 얼굴 영역을 탐지해 마스크 착용 여부 판단, 성별/나이 예측, 얼굴 크기에 맞춰서 스티커 붙이기,

얼굴을 랜드마크 탐지 모델로 뼈대를 생성해 눈부분에 맞춰 안경 붙이기,

그레이스케일 사진에 색 입히기, 해상도 향상 등 다양한 모델을 가지고 실습해보았다

 

* 그레이스케일 사진에 색 입히기

Gratscale -> Lab -> 명도(L) 추출 -> 딥러닝 모델 -> 명도를 제외한 a,b 추론 -> BGR

 

 

여러 딥러닝 강의를 볼때마다 느끼는 점은

 

아무래도 이론적인 부분은 너무 전문적인 분야라서 강의에서 잘 다루지도 않기도 하고 이런쪽을 공부하는것보다  

 

각 모델에 맞춰서 xy의 순서라던가 이미지 포맷이 BGR순인지 혹은 RGB인지 등등 전처리 방식을 실제로 써보고, 추론 모델을 돌려보고 결과값을 후처리해 정제하는 경험을 해보면서

 

나중에 내가 원하는 모델을 직접 찾아서 그에 맞춰서 전처리 -> 추론 -> 후처리 할 수 있게 된다면 성공적일것