티스토리 뷰
** 정리 중
기존에도 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
링크
TAG
- numpy
- gPRC
- implementation
- tensorflow serving
- SvD
- Residual Block
- dct
- flask serving
- DW
- 캡처방지
- Digital watermarking
- DWT-DCT
- 네이버웹툰
- keras
- backpropagation
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함