ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • TIL 2023.05.19
    내일배움캠프 2023. 5. 19. 20:31

    유명 화가의 화풍을 따라하는 인공지능 만들기

     

    OpenCV가 설치되어 있어야 한다.

    pip install opencv-python

     

    패키지 불러오기

    import cv2
    import numpy as np

     

    모델 불러오기

    net = cv2.dnn.readNetFromTorch('models/eccv16/starry_night.t7')

    모델은 스파르타코딩클럽에서 제공해주었는데 맘대로 배포해도 되는 지는 모르겠어서 파일을 공유하진 않는다.

    관련 논문들:

    https://cs.stanford.edu/people/jcjohns/papers/eccv16/JohnsonECCV16.pdf

    https://arxiv.org/pdf/1607.08022.pdf

     

    이미지 불러오기

    img = cv2.imread('이미지파일 경로')

     

    전처리

    h, w, c = img.shape
    
    img = cv2.resize(img, dsize=(500, int(h / w * 500)))
    
    MEAN_VALUE = [103.939, 116.779, 123.680]
    blob = cv2.dnn.blobFromImage(img, mean=MEAN_VALUE)

    h, w, c 는 각각 이미지의 높이 너비 채널

    가로 500에 맞춰서 리사이즈

    cv2.dnn.blobFromImage는

    • MEAN_VALUE 빼기 연산 (MEAN_VALUE = 연구원들이 사용했던 전처리 방법)
    • 딥러닝 모델에 넣기 위한 이미지 데이터 차원 변형

    의 작업을 해준다.

     

    전처리 전, 후의 shape를 보면

    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)

    이렇게 바뀐 걸 알 수 있다.

    (높이, 너비, 채널) 의 순서를 (배치사이즈, 채널, 높이, 너비) 로 변형

     

    추론 결과 보기

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

     

    후처리

    output = output.squeeze().transpose((1, 2, 0))
    output += MEAN_VALUE
    
    output = np.clip(output, 0, 255)
    output = output.astype('uint8')

    추론한 결과는 컴퓨터만 알아볼 수 있어서 사람이 볼 수 있게 후처리를 해준다.

    전처리 했던 방식을 거꾸로 하면 된다.

    차원을 늘려주고 (배치사이즈, 채널, 높이, 너비) -squeeze()> (채널, 높이, 너비) -transpose()> (높이, 너비, 채널)

    빼줬던 MEAN_VALUE를 더해주고

    0~255를 벗어난 픽셀을 없애주고

    이미지의 자료형을 정수형(uint8)로 바꿔준다.

     

    출력하기

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

    좌: 원본 이미지, 우: 변환된 이미지

     

     

    '내일배움캠프' 카테고리의 다른 글

    TIL 2023.05.22  (0) 2023.05.22
    WIL 내일배움캠프 10주차  (0) 2023.05.19
    TIL 2023.05.18  (0) 2023.05.18
    TIL 2023.05.17  (0) 2023.05.17
    TIL 2023.05.16  (0) 2023.05.16
Designed by Tistory.