티스토리 뷰

** 정리 중



기존에도 TF Slim 을 통해서 4개 그룹 (병아리, 매, 비둘기, 참새) 에 대해서 잠깐 포스팅을 한 적이 있는데, 

따라하시기에 내용이 부족하여 진행한 내용에 대해서 세부적으로 코드 및 진행 내용에 대해서 다시 포스팅 올립니다.



code - https://github.com/elentail/tensortuto.git


  • Web scraping 을 통해 dataset 구성

  • 최신 tf-slim 설치

  • Dataset 을 tf record format 으로 변환

  • Train set 을 통해 model 학습

  • Validation set을 통해 model validation

  • Test set을 통해 학습된 model 평가


1.Preparing dataset

  • 크롤링 (web scraping) 을 통해 4개의 그룹에 대해서 dataset 을 구성
    (제가 사용한 데이터를 제공하고 싶지만, 아쉽게도 이부분은 얼마 걸리지 않으니 모아보셔야 됩니다.)

  • 이미지는 Train 252, Validation 64 개 사용
    (birds_photos 폴더 밑에 4개의 폴더를 생성하고 해당 이미지를 저장)


  • Test 이미지는 평가를 위해 다른 폴더에 저장
    (최종 평가시, 파일 이름을 통해 결과 내용을 보여주기 위해 파일 이름을 test_{class_num} 형식으로 저장)






    2. Installing latest TF Slim

    • git clone  https://github.com/tensorflow/models/



    
    
    ## 참조 tfrecord 저장 및 로딩
    ## http://www.machinelearninguru.com/deep_learning/tensortuto/basics/tfrecord/tfrecord.html 
    
    ## git clone
    roadking@rhinoceros:~/workspace$ git clone https://github.com/tensorflow/models/
    Cloning into 'models'...
    remote: Counting objects: 7608, done.
    remote: Compressing objects: 100% (6/6), done.
    remote: Total 7608 (delta 0), reused 2 (delta 0), pack-reused 7602
    Receiving objects: 100% (7608/7608), 157.89 MiB | 264.00 KiB/s, done.
    Resolving deltas: 100% (4111/4111), done.
    Checking connectivity... done.
    
    
    # slim folder 로 이동
    roadking@rhinoceros:~/workspace$ cd models/research/slim/
    
    roadking@rhinoceros:~/workspace/models/research/slim$ ll
    total 160
    drwxrwxr-x  7 roadking roadking  4096 10월  9 00:03 ./
    drwxrwxr-x 37 roadking roadking  4096 10월  9 00:03 ../
    -rw-rw-r--  1 roadking roadking  9842 10월  9 00:03 BUILD
    drwxrwxr-x  2 roadking roadking  4096 10월  9 00:03 datasets/
    drwxrwxr-x  2 roadking roadking  4096 10월  9 00:03 deployment/
    -rw-rw-r--  1 roadking roadking  2306 10월  9 00:03 download_and_convert_data.py
    -rw-rw-r--  1 roadking roadking  6666 10월  9 00:03 eval_image_classifier.py
    -rw-rw-r--  1 roadking roadking  4658 10월  9 00:03 export_inference_graph.py
    -rw-rw-r--  1 roadking roadking  1397 10월  9 00:03 export_inference_graph_test.py
    -rw-rw-r--  1 roadking roadking     0 10월  9 00:03 __init__.py
    drwxrwxr-x  2 roadking roadking  4096 10월  9 00:03 nets/
    drwxrwxr-x  2 roadking roadking  4096 10월  9 00:03 preprocessing/
    -rw-rw-r--  1 roadking roadking 24026 10월  9 00:03 README.md
    drwxrwxr-x  2 roadking roadking  4096 10월  9 00:03 scripts/
    -rw-rw-r--  1 roadking roadking   231 10월  9 00:03 setup.py
    -rw-rw-r--  1 roadking roadking 46294 10월  9 00:03 slim_walkthrough.ipynb
    -rw-rw-r--  1 roadking roadking 20014 10월  9 00:03 train_image_classifier.py
    -rw-rw-r--  1 roadking roadking     0 10월  9 00:03 WORKSPACE
    
    
    # download_and_convert_data.py [./]
    # -- download flowers.tgz
    # -- extract flowers.tgz
    # -- split validation and train set
    # -- convert jpeg  to tf.record format
    # -- make labels
    
    


    3. Converting dataset to string format

    • tf.gfile.FastGFile
      - File I/O wrappers without thread locking.

    소스에서는 download_and_convert_data.py 를 통해 url 을 통해 dataset 을 다운로드 후, 
    FastGFile 을 통해 이미지를 string 으로 바로 읽은 후, serialized 객체로 저장하고 있습니다.

    download_and_convert_data.py 에 들어있는 FastGFile 을  그래프로 구성하여 실행하고 있습니다. 
    위와 같이 구성하면 thread 로 동작하여 속도가 빠르지만, 저는 단일 thread 로 opencv 를 통해  읽도록 조금 변경했습니다.



    git clone https://github.com/elentail/tensortuto.git 를 통해 아래 코드를 내려 받으실 수 있습니다.


    [ 신규 코드 ]
    converter.py - 단순히 해당 폴더와 이미지를 파싱하여 string 객체로 저장, label 파싱
    label_image.py - test 이미지 평가시에 사용하기 위해 작성한 코드


    [ 기존 코드 활용 ] 
    birds.py - datasets/flowers.py 파일과 동일 , class 수와 train, validation 수만 변경  datasets 로 복사 
    dataset_factory.py - datasets/dataset_factory.py 파일과 동일, birds 한줄 추가 datasets 로 복사 or 수정




    
    
    # git clone custom my source,,
    # download_andconvert_data 의 역할을 convert.py 로 구성해 봤습니다.
    # 아래 github 내 converter.py 참조
    
    roadking@rhinoceros:~/workspace$ git clone https://github.com/elentail/tensortuto.git
    
    roadking@rhinoceros:~/workspace/tensortuto/slim_example$ ll
    
    total 28
    drwxrwxr-x 2 roadking roadking 4096 10월 15 21:55 ./
    drwxrwxr-x 7 roadking roadking 4096 10월 14 12:58 ../
    -rw-rw-r-- 1 roadking roadking 3237 10월 15 21:20 birds.py  #copy to research/slim/datasets /
    -rw-rw-r-- 1 roadking roadking 5287 10월 15 21:55 converter.py
    -rw-rw-r-- 1 roadking roadking 1966 10월 15 21:22 dataset_factory.py #copy to research/slim/datasets /
    -rw-rw-r-- 1 roadking roadking 2969 10월 15 21:22 label_image.py #copy to research/slim/
    
    roadking@rhinoceros:~/workspace/tensortuto/slim_example$ python converter.py \
        --dataset_name=birds \
        --dataset_dir=/home/roadking/Downloads/birds_photos \
    



    converter.py  수행 후 아래와 같이 train, validation, labels 3개의 파일이 신규로 생성됩니다.


    [ birds.py ]


    [ dataset_factory.py ]


      4. Training pre-trained model



      checkpoint_exclude_scopes
      trainable_scopes

      
      
      ## XX dataset or checkpoint prefix path,,
      roadking@rhinoceros:~/workspace/models/research/slim$ TRAIN_DIR=XX/inception_train_1015
      roadking@rhinoceros:~/workspace/models/research/slim$ DATASET_DIR=XX/bird_photos
      roadking@rhinoceros:~/workspace/models/research/slim$ CHECKPOINT_PATH=XX/inception_v3_model/inception_v3.ckpt
      roadking@rhinoceros:~/workspace/models/research/slim$ python train_image_classifier.py \
          --train_dir=${TRAIN_DIR} \
          --dataset_dir=${DATASET_DIR} \
          --dataset_name=birds \
          --dataset_split_name=train \
          --model_name=inception_v3 \
          --checkpoint_path=${CHECKPOINT_PATH} \
          --checkpoint_exclude_scopes=InceptionV3/Logits,InceptionV3/AuxLogits \
          --trainable_scopes=InceptionV3/Logits,InceptionV3/AuxLogits \
          --max_number_of_steps=1000 \
          --save_summaries_secs=600 \
          --save_interval_secs=300 \
      
      ...
      INFO:tensortuto:Recording summary at step 1.
      INFO:tensortuto:global step 10: loss = 1.8428 (0.774 sec/step)
      INFO:tensortuto:global step 20: loss = 1.0923 (0.758 sec/step)
      INFO:tensortuto:global step 30: loss = 1.1633 (0.777 sec/step)
      INFO:tensortuto:global step 40: loss = 0.9142 (0.770 sec/step)
      ...
      INFO:tensorflow:global step 990: loss = 0.3254 (0.767 sec/step)
      INFO:tensorflow:global step 1000: loss = 0.3830 (0.769 sec/step)
      INFO:tensorflow:Stopping Training.
      INFO:tensorflow:Finished training! Saving model to disk.
      
      
      
      roadking@rhinoceros:~/workspace/tf-slim/research/slim$ python eval_image_classifier.py \
          --alsologtostderr \
          --checkpoint_path=${TRAIN_DIR} \
          --dataset_dir=${DATASET_DIR} \
          --dataset_name=birds \
          --dataset_split_name=validation \
          --model_name=inception_v3 \
          --batch_size=16
      ...
      ance gains if more memory is available.
      INFO:tensorflow:Evaluation [1/4]
      INFO:tensorflow:Evaluation [2/4]
      INFO:tensorflow:Evaluation [3/4]
      INFO:tensorflow:Evaluation [4/4]
      2017-10-15 22:22:40.743307: I tensorflow/core/kernels/logging_ops.cc:79] eval/Recall_5[1]
      2017-10-15 22:22:40.743451: I tensorflow/core/kernels/logging_ops.cc:79] eval/Accuracy[0.984375]
      INFO:tensorflow:Finished evaluation at 2017-10-15-13:22:40
      
      
      
      roadking@rhinoceros:~/workspace/tf-slim/research/slim$ python label_image.py \
      > --model_name=inception_v3 \
      > --model_path=${TRAIN_DIR}/model.ckpt-1000 \
      > --data_path=/home/roadking/Downloads/test_images \
      > --label_path=${DATASET_DIR}/labels.txt \
      
      > 
      =============================================
      ==== DATA RESULT (confusion matrix)  ========
      name			pigeon	chick	sparrow	hawk
      test_hawk4.jpg		0	0	0	1
      test_chick1.jpg		0	1	0	0
      test_hawk2.jpg		0	0	0	1
      test_chick4.jpg		0	0.99	0	0.01
      test_pigeon2.jpg 	0.9	0	0.09	0
      test_hawk1.jpg		0.91	0	0.04	0.05
      test_chick2.jpg		0.03	0.96	0	0.01
      test_sparrow2.jpg	0	0	1	0
      test_sparrow1.jpg	0	0	1	0
      test_pigeon4.jpg	0.94	0	0.05	0
      test_chick3.jpg		0	1	0	0
      test_sparrow3.jpg	0	0	1	0
      test_sparrow4.jpg	0	0	1	0
      test_pigeon3.jpg	0.99	0	0.01	0
      test_pigeon1.jpg	0.12	0	0.88	0
      test_hawk3.jpg		0	0	0	1
      
      roadking@rhinoceros:~/workspace/tf-slim/research/slim$ 



      Model




      TEST_CHICK

      _TEST_HAWK

      TEST_PIGEON

      TEST_SPARROW

      RECALL

      Human

      CHICK

      4

      0

      0

      0

      1

      HAWK

      1

      3

      0

      0

      0.75

      PIGEON

      0

      0

      3

      1

      0.75

      SPARROW

      0

      0

      0

      4

      1


      PRECISION

      0.8

      1

      1

      0.8










      ACCURACY

      0.875






      '프로그래밍 > tensorflow' 카테고리의 다른 글

      Tensorflow Serving vs Flask REST API  (0) 2021.12.28
      [ intro ] google cloud platform  (0) 2017.09.25
      [ CNN ] inception-v3 (tf slim )  (0) 2017.09.13
      [ MLP ] neural network regression  (3) 2017.09.04
      댓글
      공지사항
      최근에 올라온 글
      최근에 달린 댓글
      Total
      Today
      Yesterday
      링크
      «   2024/05   »
      1 2 3 4
      5 6 7 8 9 10 11
      12 13 14 15 16 17 18
      19 20 21 22 23 24 25
      26 27 28 29 30 31
      글 보관함