동물 얼굴 판독 머신 만들기! (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에서 크기를 줄이고 진행하시면 진행이 됩니다. 혹은 컴퓨터를 재부팅하여 리소스를 다시 확보하는 것도 괜찮은 방법입니다.

 

이제 학습이 시작됩니다.

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

윈도우즈에서 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