리셋 되지 말자

tensorflow 사용해보기 - deprecated 본문

Docker

tensorflow 사용해보기 - deprecated

kyeongjun-dev 2021. 3. 3. 15:56
https://github.com/anish9/Fashion-AI-segmentation - 이분의 소스코드와 CNN 모델을 사용했다
https://mylifemystudy.tistory.com/67 - 이분의 블로그를 통해 윗분의 Github를 알게되었다. 감사합니다.

위 블로그 및 주소에서 다운로드 가능한 모델이 더이상 다운로드가 불가능하여, 대체해서 다시 포스팅할 예정입니다.
(포스팅 링크 : https://not-to-be-reset.tistory.com/614)

 

Dockerfile 작성

- Dockerfile

FROM python:3.7
ENV PYTHONUNBUFFERED 1
RUN mkdir /home/ubuntu
WORKDIR /home/ubuntu

RUN apt-get update && apt-get install -y libgl1-mesa-dev
RUN pip install Tensorflow==2.2
RUN pip install opencv-python==4.5.1.48

GitHub 설명에 나와있는대로 Tensorflow와 opencv를 설치한다.
Tensorflow와 opencv만 설치하여 테스트를 했을 때, LibGl1이 없다고 오류가 떠서 libgl1도 설치해준다.
opencv를 docker 환경에서 설치했을 때 나타나는 문제라고 한다.(오류해결 링크)

 

이미지 빌드

docker build -t python/tensorflow:1.0.0 .

작성한 Dockerfile이 있는 디렉토리 위치에서 이미지 빌드를 시작한다. 적상한 이름과 적당한 태그를 붙여준다.

 

$ docker images
REPOSITORY          TAG         IMAGE ID       CREATED          SIZE
python/tensorflow   1.0.0       ea7f3928b6fd   13 minutes ago   3.5GB

이미지가 생성되었다. SIZE가 매우 크다. (ㅋ)

 

필요한 파일 준비

  • model
  • man.PNG
  • run.py

- model은 다운로드링크에서 다운받을 수 있다.

- man.PNG는 테스트에 이용할 사진이다. 적당히 옷을 입고 있는 사람의 사진을 준비해도 된다.

 

- run.py

import cv2
import numpy as np
from tensorflow.keras.models import load_model
import tensorflow as tf
import sys
from tensorflow.compat.v1 import ConfigProto
from tensorflow.compat.v1 import InteractiveSession
config = ConfigProto()
config.gpu_options.allow_growth = True
session = InteractiveSession(config=config)


f = sys.argv[1]

saved = load_model("./model/save_ckp_frozen.h5")

class fashion_tools(object):
    def __init__(self,imageid,model,version=1.1):
        self.imageid = imageid
        self.model   = model
        self.version = version

    def get_dress(self,stack=False):
        """limited to top wear and full body dresses (wild and studio working)"""
        """takes input rgb----> return PNG"""
        name =  self.imageid
        file = cv2.imread(name)
        file = tf.image.resize_with_pad(file,target_height=512,target_width=512)
        rgb  = file.numpy()
        file = np.expand_dims(file,axis=0)/ 255.
        seq = self.model.predict(file)
        seq = seq[3][0,:,:,0]
        seq = np.expand_dims(seq,axis=-1)
        c1x = rgb*seq
        c2x = rgb*(1-seq)
        cfx = c1x+c2x
        dummy = np.ones((rgb.shape[0],rgb.shape[1],1))
        rgbx = np.concatenate((rgb,dummy*255),axis=-1)
        rgbs = np.concatenate((cfx,seq*255.),axis=-1)
        if stack:
            stacked = np.hstack((rgbx,rgbs))
            return stacked
        else:
            return rgbs


    def get_patch(self):
        return None

# running code
api = fashion_tools(f, saved)
image_ = api.get_dress(True)
cv2.imwrite("out.png", image_)

맨 위에 있는 깃허브에서 확인할 수 있는 run.py 파일의 소스 코드이다.
모델의 위치가 현재 model 디렉토리 아래에 존재하므로 saved = load_model("./model/save_ckp_frozen.h5")
의 모델 경로만 변경하였다.

 

디렉토리에 있는 파일 목록

$ ls
Dockerfile  man.PNG  model  requirements.txt  run.py

$ ls model/
save_ckp_frozen.h5

requirements.txt 파일은 없어도 된다. 설치한 패키지가 뭔지 기록하려고 작성해 놓았다.
다운로드 받은 모델 파일은 model 디렉토리 안에 위치한다.

 

컨테이너 실행

$ docker run -it -v $(pwd):/home/ubuntu python/tensorflow:1.0.0 bash
/home/ubuntu# ls
Dockerfile  man.PNG  model  requirements.txt  run.py

파일들이 존재하는 디렉토리를 컨테이너의 /home/ubuntu 디렉토리에 마운트시켜 컨테이너를 실행한다.

run.py 실행

root@2842b94389fb:/home/ubuntu# python run.py man.PNG
2021-03-03 06:50:57.682791: I tensorflow/core/platform/cpu_feature_guard.cc:143] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA
2021-03-03 06:50:57.698430: I tensorflow/core/platform/profile_utils/cpu_utils.cc:102] CPU Frequency: 1991995000 Hz
2021-03-03 06:50:57.700975: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x7f2bc8000b20 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2021-03-03 06:50:57.701020: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2021-03-03 06:50:57.705101: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'libcuda.so.1'; dlerror: libcuda.so.1: cannot open shared object file: No such file or directory
2021-03-03 06:50:57.705173: E tensorflow/stream_executor/cuda/cuda_driver.cc:313] failed call to cuInit: UNKNOWN ERROR (303)
2021-03-03 06:50:57.705634: I tensorflow/stream_executor/cuda/cuda_diagnostics.cc:156] kernel driver does not appear to be running on this host (2842b94389fb): /proc/driver/nvidia/version does not exist

root@2842b94389fb:/home/ubuntu# ls
Dockerfile  man.PNG  model  out.png  requirements.txt  run.py

run.py를 man.PNG로 실행시킨다. 작업이 끝나면 out.png 파일이 생성된 것을 확인할 수 있다.

 

결과 확인

- out.png

현재 원본 이미지와 옷이 분리된 이미지를 붙여서 결과가 나온다.

Comments