Nontrivial Everyday 자명한 날은 단 하루도 없다

291월/17Off

윈도 10에서 PaintsChainer 돌리기

CNN을 이용해 선화를 자동으로 채색해주는 PaintsChainer가 화제입니다. 모자란 그림 실력으로도 어쨌든 이미지를 제작해 게임 제작 과정의 커뮤니케이션을 시도하는 사람으로서 '그럴듯한 무언가'를 만들어주는 도구에는 관심이 많기 때문에 써 봤는데, 데모 사이트가 집중적인 요청을 받아서 그런지 속도가 꽤 느렸습니다. 그래서 한 번 돌려보기로 했고 8시간 정도의 삽질 끝에 성공을 거두었기 때문에, 제가 이걸 성공하는데 도움을 준 다른 분들께 보답하고 더 많은 사용 케이스를 공유하기 위해서 이 workthrough를 작성합니다.

  1. 준비물
    일단 자연스러운 dependency 순서대로 설명하겠습니다. 설치에 필요한 순서는 따로 설명하겠습니다.

    1. PaintsChainer 프로젝트
      https://github.com/taizan/PaintsChainer 에서 저장소를 다운받든 Clone하든 합시다. README.md에 있는 http://paintschainer.preferred.tech/downloads/ 의 두 파일도 다운로드받아 cgi-bin/paint_x2_unet/models/ 폴더 안에 둡시다.
    2. Chainer
      프로젝트 자체 이름에서 볼 수 있듯 Chainer라는 플랫폼을 활용한 프로젝트이므로, Chainer를 설치해야겠지요. pip install chainer로 설치하면 된다니, 일단 잊어버립시다.
    3. CUDA
      Nvidia 개발자 사이트의 CUDA 다운로드 페이지에서 다운로드 받을 수 있습니다. 버전은 8.0을 사용했습니다.
    4. cudnn
      Nvidia 개발자 사이트의 cudnn 다운로드 페이지에서 등록한 뒤 다운로드받을 수 있습니다. 이메일 인증절차를 거칩니다.
    5. OpenCV
      프로젝트 설명에는 딱히 적혀있지 않지만, OpenCV가 없으면 동작하지 않습니다. (코드 중 import cv2에서 당연히 실패합니다.) 어디서 얻을 수 있는지는 설치 순서 때 설명하겠습니다.
    6. Python 개발 환경
      Chainer를 설치하는 데 필요한 각종 배경 세팅입니다. 참고로 저는 정확히는 모르지만 PaintsChainer는 http.server를 쓰는 걸로 봐서 Python 3 기반인 것 같습니다. 저는 3.5.3을 사용했습니다. 또, Chainer와 PaintsChainer의 의존성을 해결할 필요가 있습니다.
    7. C++ 컴파일 환경
      Python의 버전에 맞는 C++ 컴파일 환경이 필요하고, 3.5는 Visual C++ 14.0이 필요합니다. 여기서 확인하도록 합시다. 스탠드얼론을 받아도 됩니다만, 자신 없으면 그냥 Visual Studio 2015 Community를 설치합시다. 왜냐면...
    8. VS2015용 개발자 명령 프롬프트
      PATH와 관련된 이런저런 설정이 제일 마지막에서 이거 하나면 간편하게 해결되었기 때문입니다. Visual Studio 2015 Community를 설치할 때 같이 설치할 수 있는 것 같습니다. (저는 이미 설치되어 있던 걸 써서 확인을 못 하겠네요.) 이건 필수는 아닌 것 같습니다. PATH를 잘 설정할 수 있다면......
  2. 설치 순서
    1. Python 3을 설치합시다. 저는 3.5.3으로 진행했습니다. 다른 버전의 Python이 설치되어 있다면 PATH 설정등을 잘 해서 Python 3.5가 실행될 수 있게 해 주세요.

      Python의 버전에 대해서
      Python의 버전이 3.4인 경우에는, Visual Studio 2015가 아닌 2013에 해당하는 C++ 컴파일 환경이 필요합니다. C++ 컴파일 환경 항목의 링크를 참고해 주세요.

    2. Visual Studio 2015 Community를 설치해서 Visual C++ 14.0을 설치합니다. PATH에 VC 14.0 설치 폴더의 바이너리 폴더를 추가할 필요가 있습니다.
      제 경우에는 C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin\ 이었습니다.
      VS2015용 개발자 명령 프롬프트가 같이 설치되었는지 확인합시다.
    3. Cuda 8.0을 설치합시다. PATH에 CUDA 설치 폴더와 CUDA bin 설치 폴더를 추가할 필요가 있습니다.
      제 경우에는 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\bin, C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\ 두 개였습니다.
      또, CUDA_PATH에 CUDA 설치 폴더를 추가합시다. (제 경우에는 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\)
    4. Cudnn v5를 다운로드받아 압축을 풉시다.
      압축을 풀어 나온 cuda 폴더를 통째로 CUDA 설치 폴더(제 경우 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v8.0\)에 복사합시다. bin, include, lib\x64\ 폴더 아래에 있는 세 파일이 잘 복사되면 됩니다.
    5. Python에서 각종 패키지를 설치합시다.
      모두 pip로 설치했는데, Chainer 설치 페이지에는 현재 자동으로 설치되는 NumPy 1.12, Six 1.10은 지원 버전에 적혀있지 않아서 저는 NumPy 1.11, Six 1.9로 설치했습니다.
      pip install numpy==1.11, pip install six==1.9를 해 주고, PaintChainer가 Pillow를 쓰기 때문에 pip install pillow도 해 줍시다.
    6. Python에서 OpenCV 패키지를 설치합시다.
      OpenCV 공식 릴리즈에는 Python 3용 바이너리가 없기 때문에, 이 글을 참고해 여기서 pip용 wheel을 받읍시다. 저는 64비트 윈도우이기 때문에
      opencv_python‑3.2.0‑cp35‑cp35m‑win_amd64.whl을 다운받았습니다. cp35가 파이썬 3.5용입니다.
      이 파일이 있는 곳에서 pip install (파일명)을 실행해 OpenCV 패키지를 설치합시다.
    7. Chainer를 설치해야 하는데, 이 절차는 2, 3, 4 이후에 진행해야 합니다. 2가 없으면 애초에 컴파일이 안 되고, 4가 되어있지 않은 상태에서 Chainer를 설치하면 Cudnn을 사용하지 않는다고 합니다. 만약 그런 경우 Cudnn 설치 절차를 진행한 후 Chainer를 재설치해야 합니다.
    8. 이제 PaintsChainer가 설치된 폴더에서 python server.py를 실행합시다. 이 때, cmd가 아닌 VS2015용 개발자에서 실행합시다.
    9. http://localhost:8000/static/ 에서 접속합시다!
  3. 트러블슈팅(일부 경우만)
    1. python server.py를 실행하니 importError가 뜬다
      1. http.server
        실행되고 있는 python.exe가 2.x입니다. python 3.5가 실행될 수 있게 노력합시다.
      2. cv2
        OpenCV가 없습니다. (Python 설치 폴더)\Lib\site-packages에 cv2.cp35-win_amd64.pyd가 있는지 확인합시다.
      3. PIL
        Pillow가 설치되어 있지 않습니다. pip install pillow를 실행시켜 봅시다.
    2. python server.py를 실행하니 GPU:0, ...이 뜨다가 cupy.core를 불러올 수 없다는 등의 메세지가 나온다
      Chainer가 정상적으로 설치되어 있지 않거나, CUDA등과 정상적으로 연동되지 않은 상태입니다. 아래 절차를 순서대로 진행해 봅시다.

      1. Chainer의 재설치
        Chainer 자체가 Windows를 공식적으로 지원하지 않기 때문에 좀 불안합니다. pip uninstall chainer를 '지울 게 없다'는 에러 메세지가 나올 때까지 텅텅 비게 만든 다음, pip install chainer --no-cache-dir -vvvv 를 이용해 설치해 봅시다.
      2. CUDA의 작동 확인
        쿠다 샘플이 설치된 폴더(시작 메뉴의 Nvidia Corporation 폴더 아래 링크가 있음)에서 샘플을 실행시켜 봅시다.
        저는 \5_Simulations\nbody를 실행시켜봤는데, 이게 잘 실행이 안 되면 CUDA, 그래픽 카드에 문제가 있는 거겠죠.

        윈도 가상 bash 환경인 Ubuntu on Windows 10에서는 GPU가 인식되지 않아 여기서 실패합니다! OpenCV 빌드하는 데 들어간 내 두 시간 돌려줘......

      3. Chainer의 작동 확인
        Chainer의 Example인 mnist를 실행시켜 Chainer가 제대로 설치되고 CUDA와 연동되는지 확인합시다.
        python train_mnist.py를 실행하면 CPU 모드로 실행됩니다. 이게 제대로 되면 일단 Chainer는 설치가 된 겁니다.
        python train_mnist.py -g 0을 실행하면 연결된 첫 번째 GPU 모드로 실행됩니다. 이게 제대로 되면 Chainer가 CUDA를 통해 GPU를 제대로 인식하고 있습니다.
      4. 재부팅하고 Chainer를 재설치해 봅시다(...)
    3. serving at localhost : 8000 이 떴습니다! 그런데 http://localhost:8000/static/ 에 접속해서 이미지를 올리면 매우 장황한 에러 메세지가 뜨고, 404 에러가 나고 결과창에 깨진 파일 이미지가 나옵니다.
      server.py error message페이지에 올렸는데 이미지를 처리하지 못하는 상황PATH 설정을 잘 하면 고쳐지는 문제라고 하는데, 이 글의 試したこと2에 있는 대로 VS2015용 개발자 프롬프트에서 python server.py를 실행하니 정상 작동했습니다!

 

제가 삽질한 것은 이 정도입니다. GTX 750을 사용했는데, colorize 버튼을 누르면 거의 1초 안에 결과물이 뜹니다.

결과물을 몇 개 올리고 이쯤에서 마무리하겠습니다. 감사합니다.

카테고리: 개발 덧글 잠금
덧글 (0) 엮인글 (0)

죄송합니다, 현재 덧글쓰기가 잠긴상태 입니다.

아직 엮인글이 없습니다.