개요
준비된 이미지들을 tfrecord로 변환 한다
자신의 이미지(jpg)를 텐서플로우가 학습할 수 있는 데이터로 변환하여(전처리 preprocess)
변환된 파일(TFRecord)로 기존 학습 모델에 가중치 조정을 시키거나(Fine-Tune a Pre-Trained Model)
자신만의 새로운 학습 모델을 만들 수 있도록 전처리된 데이터셋을 만든다.
원하는 이미지를 판독 할 때는 가능하지만 학습 할 때에는 이미지를 바로 인식하여 학습 하지 못한다.
그래서 텐서플로우가 인식 할 수 있도록 변환 하는데, 이미지와 이미지의 레이블을 구조화 하여 저장 해야 한다.
예를 들어,
고양이 사진을 학습 시키려고 서로 다른 고양이 사진(jpg)을 1000장, 평가확인 할 사진 400장을 준비했다고 하자.
(학습 시킬 이미지(train), 평가확인 할 이미지(validation) 두개의 이미지 세트를 준비해야 한다)
그 고양이 사진은 'cat' 이라는 폴더에 저장했고, 파일 이름은 001.jpg, 002.jpg, 003.jpg..... 이렇게 되어 있다고 하자.
그러면 학습할 때 001.jpg, 002, 003.jpg.... 이미지는 'cat' 이라고 학습하는데, 폴더 이름이 학습할 이미지의 레이블이 된다
평가확인 할 이미지 도 같은 방식으로 해주면 된다
예)
train/cat/~~~.jpg
train/dog/~~~.jpg
train/pig/~~~.jpg
validation/cat/~~~.jpg
validation/dog/~~~.jpg
validation/pig/~~~.jpg
여기서 ~~~.jpg 이미지 파일의 이름은 중요하지 않다. 위의 예시처럼 순차적이어도, 서로 전혀 관련 없는 이름이어도 된다.
중요한건 그 이미지들이 속해있는 폴더의 이름이다. 폴더 이름이 'cat' 이고 파일 이름이 'dog.jpg' 라도 cat 으로 학습된다
이번 테스트는 ImageNet 에서 동물 사진을 내려 받아 했다. train 이미지 900~1000개, validation 이미지 400~500 정도.
이미지(JPG) 준비하기
TRAIN_DIR 폴더 안에 학습 시킬 구조화된 폴더와 이미지
VALIDATION_DIR 폴더 안에 평가확인 할 구조화된 폴더와 이미지
원하는 폴더 이름(레이블) 그 안에 이름(레이블)에 맞는 이미지 파일을 저장한다.
변환된 파일들이 저장될 폴더 생성 TFR_DIR
학습할 이미지의 레이블 설정
구조화된 폴더 안에 이미지들을 저장 하였다면, 이제 레이블을 정리한 파일을 만들어야 한다.
원하는 곳에 LABLES.txt를 만들어서 이미지들의 레이블 적어준다. (파일 이름 자유)
위에서 만든 폴더 이름(레이블)과 똑같이 순서대로 적어주고 저장한다.
* 레이블은 abcd 순으로 정렬하여 적어준다.
inception 최상위 폴더로 이동 후 터미널 열기
$ cd $HOME/inception
환경 변수(경로) 설정
아까 만든 폴더들과 레이블 파일의 경로를 지정한다. 지정할 변수와 경로에 오타가 없고 정확히 기억 해야 한다
학습 이미지, 평가확인 이미지, 학습된 모델 데이터, 레이블 파일 의 경로 설정해준다
(레이블 설정은 맨 뒤에 슬래시 / 가 없어야함 ! LABELS 라는 파일을 지정해주기 때문)
hwang@linux:~$ TRAIN_DIR=$HOME/work/test/TRAIN_DIR/ hwang@linux:~$ VALIDATION_DIR=$HOME/work/test/VALIDATION_DIR/ hwang@linux:~$ OUTPUT_DIRECTORY=$HOME/work/test/TFR_DIR/ hwang@linux:~$ LABELS_FILE=$HOME/work/test/LABELS |
bazel을 통해 이미지 데이터 스크립트 빌드
$ bazel build inception/build_image_data
hwang@linux:~/inception$ bazel build inception/build_image_data ............................. INFO: Found 1 target... Target //inception:build_image_data up-to-date: bazel-bin/inception/build_image_data INFO: Elapsed time: 3.375s, Critical Path: 0.11s
|
아래의 터미널 내용 중 반복 출력은 편집 했다
중간에 굵은 글씨를 보면 몇개의 이미지와 레이블로 학습하는지 확인이 가능하다
(변환된 train 이미지를 128개로, validation 데이터를 24개로 출력, 스레드 8개 사용)
$ bazel-bin/inception/build_image_data --train_directory="${TRAIN_DIR}" --validation_directory="${VALIDATION_DIR}" --output_directory="${OUTPUT_DIRECTORY}" --labels_file="${LABELS_FILE}" --train_shards=128 --validation_shards=24 --num_threads=8
hwang@linux:~/inception$ bazel-bin/inception/build_image_data --train_directory="${TRAIN_DIR}" --validation_directory="${VALIDATION_DIR}" --output_directory="${OUTPUT_DIRECTORY}" --labels_file="${LABELS_FILE}" --train_shards=128 --validation_shards=24 --num_threads=8 I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally Saving results to /home/hwang/work/test/TFR_DIR/ Determining list of input files and labels from /home/hwang/work/test/VALIDATION_DIR/. Found 6769 JPEG files across 13 labels inside /home/hwang/work/test/VALIDATION_DIR/. Launching 8 threads for spacings: [[0, 846], [846, 1692], [1692, 2538], [2538, 3384], [3384, 4230], [4230, 5076], [5076, 5922], [5922, 6769]] I tensorflow/stream_executor/cuda/cuda_gpu_executor.cc:936] successful NUMA node read from SysFS had negative value (-1), but there must be at least one NUMA node, so returning NUMA node zero I tensorflow/core/common_runtime/gpu/gpu_device.cc:944] Found device 0 with properties: name: GeForce GTX 960 major: 5 minor: 2 memoryClockRate (GHz) 1.266 pciBusID 0000:01:00.0 Total memory: 1.95GiB Free memory: 1.74GiB I tensorflow/core/common_runtime/gpu/gpu_device.cc:965] DMA: 0 I tensorflow/core/common_runtime/gpu/gpu_device.cc:975] 0: Y I tensorflow/core/common_runtime/gpu/gpu_device.cc:1034] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 960, pci bus id: 0000:01:00.0) 2016-11-17 01:47:01.182276 [thread 6]: Wrote 282 images to /home/hwang/work/test/TFR_DIR/validation-00018-of-00024 2016-11-17 01:47:01.746832 [thread 5]: Wrote 282 images to /home/hwang/work/test/TFR_DIR/validation-00015-of-00024 2016-11-17 01:47:02.420616 [thread 7]: Wrote 282 images to /home/hwang/work/test/TFR_DIR/validation-00021-of-00024 2016-11-17 01:47:02.742680 [thread 0]: Wrote 282 images to /home/hwang/work/test/TFR_DIR/validation-00000-of-00024 2016-11-17 01:47:02.955107 [thread 1]: Wrote 282 images to /home/hwang/work/test/TFR_DIR/validation-00003-of-00024 2016-11-17 01:47:03.049449 [thread 2]: Wrote 282 images to /home/hwang/work/test/TFR_DIR/validation-00006-of-00024 2016-11-17 01:47:03.459112 [thread 3]: Wrote 282 images to /home/hwang/work/test/TFR_DIR/validation-00009-of-00024 2016-11-17 01:47:05.253235 [thread 4]: Wrote 282 images to /home/hwang/work/test/TFR_DIR/validation-00012-of-00024 2016-11-17 01:47:16.810923 [thread 5]: Wrote 282 images to /home/hwang/work/test/TFR_DIR/validation-00016-of-00024
~~~~~~~편집 Found 13556 JPEG files across 13 labels inside /home/hwang/work/test/TRAIN_DIR/. Launching 8 threads for spacings: [[0, 1694], [1694, 3389], [3389, 5083], [5083, 6778], [6778, 8472], [8472, 10167], [10167, 11861], [11861, 13556]] I tensorflow/core/common_runtime/gpu/gpu_device.cc:1034] Creating TensorFlow device (/gpu:0) -> (device: 0, name: GeForce GTX 960, pci bus id: 0000:01:00.0) 2016-11-17 01:47:47.655453 [thread 5]: Wrote 105 images to /home/hwang/work/test/TFR_DIR/train-00080-of-00128 2016-11-17 01:47:48.081704 [thread 2]: Wrote 105 images to /home/hwang/work/test/TFR_DIR/train-00032-of-00128 2016-11-17 01:47:48.253457 [thread 4]: Wrote 105 images to /home/hwang/work/test/TFR_DIR/train-00064-of-00128 2016-11-17 01:47:48.503088 [thread 6]: Wrote 105 images to /home/hwang/work/test/TFR_DIR/train-00096-of-00128 2016-11-17 01:47:48.599121 [thread 3]: Wrote 105 images to /home/hwang/work/test/TFR_DIR/train-00048-of-00128 2016-11-17 01:47:49.098166 [thread 0]: Wrote 105 images to /home/hwang/work/test/TFR_DIR/train-00000-of-00128 2016-11-17 01:47:51.814771 [thread 7]: Wrote 105 images to /home/hwang/work/test/TFR_DIR/train-00112-of-00128 2016-11-17 01:47:51.847744 [thread 1]: Wrote 105 images to /home/hwang/work/test/TFR_DIR/train-00016-of-00128 ~~~~~~~~~~~~~~~~편집 2016-11-17 01:49:36.744997: Finished writing all 13556 images in data set.
|
변환된 데이터 확인하기
cd $HOME/work/test/TFR_DIR
아까 변환된 파일 출력 경로에 가보면 변환된 파일들이 있다.
학습된 모델 체크포인트를 튜닝 하거나, 새롭게 학습 모델을 만들 수 있다. 끝~