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

 

이제 학습이 시작됩니다.

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

+ Recent posts