Failed to import 'pydot'. Please install 'pydot'. For example with 'pip install pydot'.

 

상황설명-

이 에러는 keras 혹은 의사결정나무(decision tree)에서 그래프를 그릴 때 사용하는 graphviz에 문제가 있을 때 발생합니다. 맥과 같은 linux os에서는 패키지가 깔리지 않았을 때, windows에서는 거의 무조건 발생하는 에러라고 보시면 됩니다. 사실 에러는 pydot자체적인 문제가 '아닙니다.' pip install pydot해도 오류는 해결이 되지 않아요.

 

해결법-

1) Mac과 같은 linux기반 OS + Anaconda

  (prompt)

  $ conda install graphviz

  [if needed]

  (coding tools)

  import os
  os.environ["PATH"] += os.pathsep + '~/opt/anaconda3/lib/site-packages/graphviz'

프롬프트에서 먼저 graphviz를 인스톨 해주시면 문제없이 돌아가는 경우가 많습니다. 그러나 설치한 뒤에도 계속해서 에러가 발생한다면 명시적으로 코드내에서 시스템 환경변수를 등록해주시면 됩니다.

 

2) Windows + Anaconda

  맥에 비해서 조금 복잡합니다.

  먼저 프롬프트에서

  $ pip install pydotplus

  를 입력하여 pydotplus를 설치해주십시오.

  이후
  https://graphviz.gitlab.io/_pages/Download/Download_windows.html
  홈페이지에 접속하여 OS에 맞는 graphviz설치 프로그램을 받아주신 뒤 설치하여 주십시오.(msi 확장자를 가진 파일로 다운로드 받아주시기 바랍니다.)

  만약 어떤 설정도 건드리지 않고 설치하였을 시 C드라이브 아래 Program Files (x86)경로에 깔릴 것입니다.

  이후
  import os
  os.environ["PATH"] += os.pathsep + 'C:/Program Files (x86)/Graphviz2.38/bin/'

  맥에서와 마찬가지로 코드 내에서 명시적으로 시스템 패스를 설정해주시면 됩니다.

  (실제 시스템 자체에서 패스 설정하는 방법이 있지만 복잡하여 코드 내 설정방법으로 설명드렸습니다.)

동물 얼굴 판독 머신 만들기! (tensor flow running pets for Windows)

 

저번 포스팅에서 Object-detection을 위한 준비를 모두 마쳤습니다.

이번에는 그 환경에서 구글 텐서플로에서도 튜토리얼처럼 보여주는 동물 얼굴을 판독하는 것을 해보겠습니다.

영문으로 제공되는 >>링크<<입니다. 물론 기본적으로 윈도우즈 용은 아닙니다.

 

단계별로 따라오시면 어려움 없이 직접 내 컴퓨터에서 동물사진의 얼굴을 인식하는 것을 보실 수 있습니다.

1. Oxford-IIIT Pets Dataset을 다운로드 받아줍니다. images와 annotations 둘 다 필요합니다.

>>images.tar.gz<<

>>annotations.tar.gz<<

불러오는 중입니다...

2. 저번에 git clone했던 models폴더 내의 research 안에서 data라는 폴더를 새로 만들어줍시다.

3. 다운로드 받은 images.tar.gz과 annotations.tar.gz파일을 압축을 풀어주고, 각각 생성된 images폴더와 annotations폴더를 그대로 data라는 폴더 안에 넣어 줍시다.

4. 구글 측에서는 항상 데이터의 인풋을 tfrecord의 형태로 입력하기를 권장합니다. 구글에서 배포한 이 예시에서도 tfrecord를 사용하게 되는데요. 물론 튜토리얼 과정이기 때문에 구글측에서 이미 Oxford-IIIT Pets Dataset을 TFrecord로 만드는 파일 역시 object-dection폴더 안에 들어있습니다. 참고로 [username]은 각 컴퓨터에 맞는 사용자 이름으로 바꾸어 주셔야 합니다!

python "C:\Users\[username]\models\research\object_detection\dataset_tools\create_pet_tf_record.py" --label_map_path="C:\Users\[username]\models\research\object_detection\data\pet_label_map.pbtxt" --data_dir="C:\Users\[username]\models\research\data" --output_dir="C:\Users\[username]\models\research\data"

를 실행해주시면 자동으로 output_dir에 tfrecord를 만들것입니다.

구글 문서에서 tfrecord를 만들 때 WARNING이라고 몇개 뜨는 게 있는데, 별로 신경쓰지 않아도 된다고 나와있습니다.

5. 저대로 실행시키면 우리가 만든 data폴더에 train.pet_faces_train.record-00000-of-00010로 시작하는 파일이 10개 생성되고, pet_faces_val.record-00000-of-00010로 시작하는 파일이 10개 생성됩니다.

6. 인풋데이터는 이제 완성되었습니다. 이제 학습을 시키면 되는데, 완전히 처음부터 학습시키기에는 우리가 기본적으로 가지고 있는 컴퓨터의 컴퓨팅 파워가 너무너무너무 작습니다. 그러니 누군가가 먼저 엄청난 컴퓨팅 파워로 학습시켜놓은 것을 가져다가 마지막에 끝단만 살짝 바꾸어서 사용해보도록 하겠습니다. 이것을 transfer learning 혹은 fine tunning이라고 합니다. 먼저 이미지넷에서 상받은 Resnet으로 MS-COCO데이터셋에 대해서 Faster-RCNN 기술로 학습시켜놓은 훈련된(pretrained) 데이터를 받아오겠습니다. >>링크<<

불러오는 중입니다...

7. 다운받은 faster_rcnn_resnet101_coco_11_06_2017.tar.gz를 압축을 풀면 model.ckpt로 시작하는 파일이 3종류가 있습니다.(~.data-00000-of-00001, ~.index, ~.meta) 전부 복사한 뒤 우리의 data폴더 내에서 다시 model이라는 폴더를 만들어 준 뒤에 거기에 붙여넣어 줍니다.

8. 이제 pipeline이라는 config파일만 만들어주면 바로 tfrecord의 데이터를 pretrain된 모델을 가지고 새로 학습을 시작합니다.

    8-1) 먼저 jupyter와 같이 문서를 수정할 수 있는 에디터를 켜주세요. 메모장도 괜찮습니다.

    8-2) object_detection폴더 안의 samples폴더 안의 configs 폴더로 들어갑니다.

    8-3) .config라 쓰여있는 파일이 많은데, 여기에서 faster_rcnn_resnet101_pets.config 파일을 열어주세요.

    8-4) fine_tune_checkpoint를 검색하셔서 그 오른쪽에 다운받은 model.ckpt위치를 적어줍니다. 저희가 진행한 상에서는 아래와 같이 적어주시면 됩니다.

    fine_tune_checkpoint: "C:/Users/[username]/models/research/data/model/model.ckpt"

    8-5) 그 아래 train_input_reader의 input_path에는 tfrecord의 경로를 입력해주면 됩니다. 저희는 data폴더 안에 전부 있으므로, 아래와 같이 입력해주시면 됩니다.

    input_path: "C:/Users/[username]/models/research/data/pet_faces_train.record-?????-of-00010"

    8-6) 그 아래 label_map_path에는 label_map이 적혀있는 pbtxt파일 위치를 적어주면 됩니다.

    label_map_path: "C:/Users/[username]/models/research/object_detection/data/pet_label_map.pbtxt"

    8-7) eval_input_reader에는 train_input_reader에서 적어주었던 주소값을 그대로 다시 써주면 됩니다. 다만 input_path에서 pet_faces_train.record-?????-of-00010을 pet_faces_val.record-?????-of-00010으로만 바꿔주시면 됩니다.

    (사실 PATH_TO_BE_CONFIGURED 부분만 바꿔주면 되지만, 헛갈림 방지를 위해 전부 작성하였습니다.)

9. 자 이제 학습을 시작합시다. 학습은 object_detection폴더 안에 있는 moel_main.py가 합니다. 그리고 결과 ckpt가 저장될 위치는 data폴더 안에 output폴더로 지정하겠습니다. 먼저 data폴더 안에 output폴더를 만들어주세요. 아래 구문을 실행하면 자동으로 학습이 시작됩니다. Warning 같은 글자가 계속 뜨지만 신경 안쓰셔도 됩니다.

python "C:\Users\[username]\models\research\object_detection\model_main.py" --model_dir="C:\Users\[username]\models\research\data\output" --pipeline_config_path="C:\Users\[username]\models\research\object_detection\samples\configs\faster_rcnn_resnet101_pets.config"

10. 만약 OOM에러(OOM when allocating tensor with shape[1,1024,38,57] and type float on /job:localhost/replica:0/task:0/device:GPU:0 by allocator GPU_0_bfc)가 나신다면 그래픽카드 메모리 부족이 원인이므로 .config파일에서 제일 상단에 보이는 keep_aspect_ratio_resizer에서 크기를 줄이고 진행하시면 진행이 됩니다. 혹은 컴퓨터를 재부팅하여 리소스를 다시 확보하는 것도 괜찮은 방법입니다.

 

이제 학습이 시작됩니다.

이 학습이 잘 되었는지는 다음 포스팅에서 확인해보도록 하겠습니다.

제작년에 keras로 CUDA환경을 구축하려다가 정말 정보의 심각한 부족으로 실패한 적이 있었는데, 이번에는 별 문제 없이 한번에 성공하여서 그 과정을 기록하려고 합니다.


저에게도 의미있는 기록이지만, 다른 분들도 많은 도움이 되셨으면 좋겠네요.



이번에는 keras같은 상위 wrapper 없이 텐서플로 그대로 진행하였습니다.


도움을 많이 받은 문서는

https://www.tensorflow.org/install/gpu

로, 텐서플로 페이지 자체에서 제공해주고 있습니다.


아래는 제 컴이 윈도우즈인 관계로 윈도우즈를 기본으로 합니다.

만약 linux와 같은 운영체제이신 경우 위의 텐서플로 홈페이지에서 리눅스는 어떻게 설치하는지 잘 알려줍니다!


1) 본인의 GPU가 CUDA GPU 환경을 제공하는지를 확인해 봅니다.

기본적으로 CUDA가 엔비디아nVidia사에서 만든 플랫폼이므로 엔비디아의 지포스 제품이면 일단 가능성은 있지 않을까 생각해 볼 수 있을 것 같습니다.

그리고 GTX 붙으면 일단 된다고 보시면 될 것 같습니다.

요기로 가시면 CUDA가 가능한 GPU인지 확인해 보실 수 있습니다. https://developer.nvidia.com/cuda-gpus

저는 GTX 1060이라 묻지도 따지지도 않고  그냥 설치했습니다.


2) 차례대로 NVIDIA® GPU drivers, CUDA® Toolkit, CUPTI, cuDNN을 깔아줍니다.

텐서플로-gpu는 먼저 깔아도 되고 위의 4가지 프로그램을 다 깔고 깔아도 되는 것 같습니다.

CUPTI는 굳이 안깔아도 될 것 같기는 한데, 저번에 한번 CUDA하려다 안되서 작은 가슴에 그냥 깔고 진행했습니다.


2*) gpu환경을 사용하기 위해서는 tensorflow-gpu를 깔아야 합니다. 아나콘다를 사용하시면 아나콘다 프롬프트에서 conda install tensorflow-gpu를, 아니시라면 pip install tensorflow-gpu를 입력하시면 tensorflow-gpu가 깔립니다. tensorflow-gpu가 깔리면, 이전과 같이 import tensorflow하시면 됩니다.


3) 다 깐 뒤에 시스템 PATH를 설정해 주어야 합니다.

여기서는 시스템 PATH를 설정해 주는데, 깔린 위치가 정확해야 합니다.

드라이버와 툴킷을 깔면 설치파일처럼 설치가 되고, CUPTI와 cuDNN은 압축파일로 풀리게 될 것 입니다.

여기서 설치파일은 상관이 없는데, CUPTI과 cuDNN은 압축을 푼 뒤 폴더 이름을 각자 'CUPTI'와 'tools'로 바꾸어 줍니다.

그리고 CUPTI 폴더는 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras'아래에 폴더를 통채로 복사 붙여넣기 해주시고, tools 폴더는 C드라이브 아래 바로 붙여넣어 주세요.


이후 아무 명령 프롬프트나 여시고(예를 들어 실행->cmd)

SET PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin;%PATH%

SET PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\CUPTI\libx64;%PATH%

SET PATH=C:\tools\cuda\bin;%PATH%

요렇게 세 개를 써주시면 됩니다.


텐서플로에서 9.0만 지원한다고 그래서 찾다가 저는 9.1로 설치하였는데, v10도 텐서플로에서 잘 작동하는 것 같습니다. 만약에 오류가 나시면 v9.1로 시도해 보세요.


4) 제대로 깔려서 gpu에서 사용되는지 확인하기 위해서

파이썬을 켜시고(명령프롬프트에서 python 치셔도 되고, jupyter notebook에서 cell에 입력하셔도 됩니다.)

from tensorflow.python.client import device_lib 

print(device_lib.list_local_devices())

이렇게 입력해서 무언가 주르륵 나온다 하면 설치가 제대로 된 것입니다.

그리고 이후에 tensorflow 소스코드에서


device_name = "/gpu:0"

log_device_placement = True


with tf.device(device_name):

    x = tf.placeholder(tf.float32, shape=[None, 32, 32, 3])

    y = tf.placeholder(tf.float32, shape=[None, 10])

    .

    .

    .


with tf.Session(config=tf.ConfigProto(log_device_placement=log_device_placement)) as sess:

    sess.run(tf.global_variables_initializer())

    .

    .

    .


요런식으로 소스 코드를 수정해주시면 프로그램 실행 중 명령 프롬프트에서 실제로 GPU가 사용되는 현황을 볼 수 있습니다.

요 근래에 꾸준하게 통계에서부터 머신러닝을 거쳐 딥러닝을 배우고, 딥러닝을 배우고, 딥러닝을 또 배우다보니 뭔가 정리를 하고 싶은 욕망이 꾸물꾸물 올라오네요.


사실 인터넷에 찾아보면 정말 한 포스팅 내에 삐까뻔쩍하게 사진이랑 막 수식이랑 코드랑 막막 쓰이면서 그런 포스팅들이 넘쳐날 것을 알지만..


그래도 실제로 계속해서 배우는 사람의 입장으로 뭔가 거창한 거 빼고 담담하게 중요한 부분들만 간단하게 정리한 포스팅은 없지 않을...까? 해서 적어보는 포스팅입니다.


사실 한 포스팅안에 그 많은 딥러닝에 대한 내용을 담는 것도 어렵고 해서 제가 시간이 날 때마다 차근차근 써 볼 생각입니다.


그리고 제가 아는 한도 안에서 거창하지 않게 쓸 것이라, 이 부분에서는 이 글을 읽으시며 틀을 잡으시고 관련된 부분들을 찾아보시면 더 좋을 것 같습니다.(그리고 사실 그것이 제가 이 블로그를 만든 이유이기도 하지요.. 문턱에너지를 낮춰주는 블로그...)


그럼 시작해보겠습니다.


일단 역사보다는...


자, '딥러닝'은 왜 '딥러닝'일까요?


사실 딥러닝을 알기 전에 '머신러닝'이라는 것을 먼저 알아야 합니다.


딥러닝은 '기계가 스스로 학습한다'는 기계 학습 혹은 머신 러닝의 한 부분이기 때문이지요.


그리고 머신러닝에서는 입력과 출력 사이의, 사람으로 치자면 '추론의 단계'를 스스로 공부하는 것이죠.


이 추론의 단계를 '블랙 박스'라고 그냥 생각해 보자면


머신러닝은


'입력 -> 블랙 박스 > 출력'


이렇게 됩니다.


그리고 이 '블랙 박스'를 사람이 어느정도 수학적 알고리즘으로 만들어 주게 되면, 시행과 오차를 반복하며 스스로의 로직을 찾아갑니다.


그런데 딥러닝은 요 '블랙 박스' 부분이, "진짜로" 블랙 박스입니다.


머신 러닝은 사람이 어느정도의 수학적 알고리즘을 부여해 주고 그에 따른 답을 찾는 것이었다면(즉, 대략 찾아가는 방식을 아는 것이라면), 딥러닝에서는 아예 사람이 요 부분에 손을 대지 않습니다.


그래서 결국에 답이 나와도 '어째서 이 답이 이렇게 나오지?'하는 부분을 모르는 것입니다.


그리고 요 블랙 박스 부분이 머신 러닝과 다르게 긴 여러개의 과정을 가지기 때문에 '딥' 러닝이라고 부르는 것입니다. (긴것을 깊다고 볼수도 있지요)


반대로 머신러닝을 'Shallow learning'이라고 부르는 경우도 있습니다.


그리고 이 블랙박스 부분은 로젠 블라트라는 사람이 고안한 퍼셉트론에서 출발한 '인공 신경망'이 기본인데, 이 부분은 제가 이후에 다룰 수도 있고, 이 부분 부터는 인터넷에 정말 많은 정보들이 있으니 직접 찾아보셔도 좋을 것 같습니다.



사실 딥 러닝이라는 어려운 분야를 정말 짧고 단숨에 읽히는 포스팅으로 쓰기 위해 여러 지식을 한번에 묶어서 쓰려니 힘드네요...


그래도 이 글을 읽고 '와! 딥러닝! 아시는구나!' 하셨으면 좋겠습니다.


그럼 다음에 뵈어요~

윈도우즈에서 torchvision 깔기(with 파이토치(pytorch)깔기)


윈도우즈에서 파이토치(pytorch) 깔기는 굉장히 쉽다.


아나콘다 받아서 설치하고 -> 아나콘다 프롬프트를 실행시키고 ->

(엔비디아(nvidia) 계열 그래픽카드(gpu) 사용 시) conda install -c peterjc123 pytorch

(그 외 그래픽카드 혹은 cpu만으로 사용 시) conda install -c peterjc123 pytorch-cpu


끝!


확인할 수 있는 방법은 jupytor notebook을 켜거나 그냥 아나콘다 프롬프트에서 python입력해서 python 인터프리터 창으로 들어가서

import torch

실행해서 에러가 없으면 설치 성공!


근데 문제는 딥러닝을 조금 더 공부해서 cnn(convolutional neural network)으로 넘어가게 되면 torchvision이 필요하게 되는데, 이게 설치하는 방법이 구글링을 해봐도 잘 안나온다.


바로 아나콘다 클라우드에 

conda install -c anaconda torchvision

이라는 명령어가 나오기는 하는데, 윈도우즈에서 돌리면 채널이 없다고 나온다!


홈페이지 들어가 보았더니 osx와 linux만 지원한다고 한다.


그러면 윈도우즈에서는 깔 수가 없는 것인가?

아니다!


pip 명령어를 사용하면 아주 쉽게 깔 수 있다.


pip install torchvision


끝.


위와 같이 import torchvision 해서 에러가 안나면 제대로 깔렸다고 볼 수 있다.


만약 pip에서 에러가 나면 이전 포스팅인 pip에러 수정하는 방법에 대해서 확인해보자!

윈도우즈(windows)에서 아나콘다(anaconda)를 깐 뒤 아나콘다 프롬프트(anaconda prompt)에서 pip명령을 쳐서 뭘 설치하려고 하면 화면 가득 빨간 글씨가 가득 뜨며 설치가 안되는 경우가 있다.

(진짜 빨간글씨가 우루루루루루 나오는데, 조금 소름끼친다)


그리고 그 문장의 제일 마지막은

pip._vendor.pkg_resources.RequirementParseError: Invalid requirement, parse error at "'; extra '"

이걸로 끝난다.


구글에서 열심히 구글링 해 본 결과 이것은 testpath 패키지? 가 문제가 되어 pip를 망가뜨렸다는 것인데, 그럼 어디 한번 이것을 고쳐보자.


처음 하는 것이라 정말 한참 걸렸는데, 정말 쉽다.


아나콘다 프롬프트에서

conda install 'testpath>=0.4.2'

이 명령어를 쳐주자.

아마 커서가 내려가서 깜빡일 텐데 엔터 한번 더 쳐주자.

그러면 설치가 끝나고, 이렇게 설치가 끝난 상태에서 pip install다시 하면 제대로 실 행 이 됩 니 다.


문제 해결!


보니까 testpath버전이 0.4 아래에서 이런 문제가 발생하는 것 같은데, 0.4.2 버전에서 이 문제를 수정하였다고 한다.

+ Recent posts