1. 사전준비
1) Tensorflow 1.7 설치
: inception V3를 실행하기 위해 tensorflow 는 1.7 버전 이상을 설치해야 검증(TEST)시 오류가 나지 않는다.
앞 강좌에서 설치한 Tensorflow 1.6을 1.7로 업그레이드 후 진행한다.
아래 명령어 실행시 앞서 설치한 python 3.5에 맞는 tensorflow는 1.7 까지 가능하므로 1.7을 설치하겠다.
pip install "tensorflow==1.7.0" pip install "tensorflow-gpu==1.7.0"
D:\ML2\inception\example_code>pip install "tensorflow==1.7.0" Collecting tensorflow>=1.7.0 Downloading https://files.pythonhosted.org/packages/af/5b/695e2e66feb27742a78f938d8369cc874b5fc7082193c3352c9db599af01/tensorflow-1.11.0-cp35-cp35m-win_amd64.whl (46.9MB) 55% |################# | 26.1MB 93kB/s eta 0:03:43 D:\ML2\inception\example_code>pip install "tensorflow-gpu==1.7" Collecting tensorflow-gpu==1.7 Downloading https://files.pythonhosted.org/packages/57/9a/81144ee2cdf50c6e7e5ee3e17e2d05dc26173eced2f1696aa986c0b58f57/tensorflow_gpu-1.7.0-cp35-cp35m-win_amd64.whl (86.7MB) 17% |##### | 15.4MB 229kB/s eta 0:05:12
*참고 : tensorflow 1.6 에서 TEST를 실행하면 아래와 같은 오류가 발생한다.
python label_image.py --graph=D:/tmp/output_graph.pb --labels=D:/tmp/output_labels.txt --input_layer=Placeholder --output_layer=final_result --image=D:/ML2/inception/flower_photos/daisy/21652746_cc379e0eea_m.jpg Caused by op 'import/module_apply_default/InceptionV3/InceptionV3/Mixed_7b/Branch_1/Conv2d_0a_1x1/Conv2D/ReadVariableOp', defined at: File "label_image.py", line 118, in graph = load_graph(model_file) File "label_image.py", line 33, in load_graph tf.import_graph_def(graph_def) File "D:\ML_Program\Python35\lib\site-packages\tensorflow\python\util\deprecation.py", line 432, in new_func return func(*args, **kwargs) File "D:\ML_Program\Python35\lib\site-packages\tensorflow\python\framework\importer.py", line 553, in import_graph_def op_def=op_def) File "D:\ML_Program\Python35\lib\site-packages\tensorflow\python\framework\ops.py", line 3271, in create_op op_def=op_def) File "D:\ML_Program\Python35\lib\site-packages\tensorflow\python\framework\ops.py", line 1650, in __init__ self._traceback = self._graph._extract_stack() # pylint: disable=protected-access
2) 소스 내부적으로 tensorflow_hub 모듈을 사용하므로 pip install tensorflow_hub 명령어로 모듈을 설치하자.
D:\ML2\inception\example_code>pip install tensorflow_hub Collecting tensorflow_hub Downloading https://files.pythonhosted.org/packages/5f/22/64f246ef80e64b1a13b2f463cefa44f397a51c49a303294f5f3d04ac39ac/tensorflow_hub-0.1.1-py2.py3-none-any.whl (52kB) 100% |################################| 61kB 833kB/s Requirement already satisfied: protobuf>=3.4.0 in d:\ml_program\python35\lib\site-packages (from tensorflow_hub) (3.5.2.post1) Requirement already satisfied: six>=1.10.0 in d:\ml_program\python35\lib\site-packages (from tensorflow_hub) (1.11.0) Requirement already satisfied: numpy>=1.12.0 in d:\ml_program\python35\lib\site-packages (from tensorflow_hub) (1.14.3) Requirement already satisfied: setuptools in d:\ml_program\python35\lib\site-packages (from protobuf>=3.4.0->tensorflow_hub) (28.8.0) Installing collected packages: tensorflow-hub Successfully installed tensorflow-hub-0.1.1
3) 학습용 이미지 다운로드
- 폴더를 구분하여 폴더명 아래에 관련이미지들을 넣으면 본인이 원하는 이미지로 학습이 가능하다
- 아래 경로에서 샘플사진들을 받아 압축을 푼다.
- 다운로드 링크 : http://download.tensorflow.org/example_images/flower_photos.tgz
- 저자의 경우 D:\ML2\inception\ 하위경로에 압축을 풀기로 한다.
- 저자의 폴더구조는 다음과 같다.\
4) 학습과 테스트를 위한 소스코드 다운로드
: 저자의 경우 위 폴더 중 example_code 폴더 內에 다운로드 하였음.
- 학습용 소스코드 다운로드
: https://github.com/tensorflow/hub/raw/master/examples/image_retraining/retrain.py
- 테스트용 소스코드 다운로드
: https://github.com/tensorflow/tensorflow/raw/master/tensorflow/examples/label_image/label_image.py
2. 이미지 학습 및 tensorboard 실행
1) 이제 모든 재료가 준비가 되어있으니 아래 명령어를 입력하여 학습을 돌려주기만 하면 된다.
python retrain.py --image_dir D:/ML2/inception/flower_photos |
- 컴퓨터가 공부할 수 있는 시간을 기다려주자.
- 소스상에 학습되는 데이터는 소스코드가 있는 드라이버(D:) 의 tmp 폴더 하위에 만들어진다.
2) 학습 중간에 학습이 진행되는 과정을 보고자 하면 Tensorboard 를 실행하여 event 분석그래프를 보면 된다.
- 또다른 cmd창을 띄우고 아래 명령어를 실행하면 된다.
(event파일은 retrain_log 폴더 안에 있다 - 소스상에 그렇게 지정되어 있음)
tensorboard --logdir D:/tmp/retrain_logs |
- 위에 tensorboard 서버가 실행되면 그 아래에 http로 시작하는 주소가 나온다.
브라우저를 실행하여 http://WN31093:6006 으로 접속해보자.
그러면 아래와 같이 가시적으로 분석가능한 화면이 나온다.
3) 학습결과
- 학습이 다 완료되면 D:/temp 하위에 output_graph.pb , output_labels.txt 파일이 생긴다.
- .pb 파일은 inception 내부에서 이미지를 판단하는 로직에 의해 flower_photos 하위에 있는 개별 이미지들을
학습한 결과 파일이며, output_labels.txt 는 분류를 적어놓은 text파일이다..
- 실제 하나의 테스트 이미지에서 여러가지 원하는 이미지를 동시에 인식시키기 위해서는
수기로 labeling을 하는 수고를 거쳐야 할 것이다. (직접 labeling 을 해보려면 라쿤예제가 있다..github 참고)
3. TEST실행
1) 기존에 학습하기위해 사용했던 이미지 중 임의의 이미지를 골라 TEST를 해본다.
아래는 기존에 사용했던 이미지 중 daisy 폴더안에 있는 이미지로 테스트를 하는 내용이다.
python label_image.py --graph=D:/tmp/output_graph.pb --labels=D:/tmp/output_labels.txt --input_layer=Placeholder --output_layer=final_result --image=D:/ML2/inception/flower_photos/daisy/21652746_cc379e0eea_m.jpg
- 그러면 아래와 같은 학습결과가 나온다.
D:\ML2\inception\example_code>python label_image.py --graph=D:/tmp/output_graph.pb --labels=D:/tmp/output_labels.txt --input_layer=Placeholder --output_layer=final_result --image=D:/ML2/inception/flower_photos/daisy/21652746_cc379e0eea_m.jpg 날짜.시간.892098: I T:\src\github\tensorflow\tensorflow\core\platform\cpu_feature_guard.cc:140] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 날짜.시간.842399: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1344] Found device 0 with properties: name: GeForce MX150 major: 6 minor: 1 memoryClockRate(GHz): 1.5315 pciBusID: 0000:01:00.0 totalMemory: 2.00GiB freeMemory: 1.62GiB 날짜.시간.859336: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1423] Adding visible gpu devices: 0 날짜.시간..973613: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:911] Device interconnect StreamExecutor with strength 1 edge matrix: 날짜.시간..983104: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:917] 0 날짜.시간..988281: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:930] 0: N 날짜.시간..994075: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1041] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1391 MB memory) -> physical GPU (device: 0, name: GeForce MX150, pci bus id: 0000:01:00.0, compute capability: 6.1) 날짜.시간..111074: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1423] Adding visible gpu devices: 0 날짜.시간..118736: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:911] Device interconnect StreamExecutor with strength 1 edge matrix: 날짜.시간..127297: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:917] 0 날짜.시간..133590: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:930] 0: N 날짜.시간..139888: I T:\src\github\tensorflow\tensorflow\core\common_runtime\gpu\gpu_device.cc:1041] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1391 MB memory) -> physical GPU (device: 0, name: GeForce MX150, pci bus id: 0000:01:00.0, compute capability: 6.1) 날짜.시간.078684: W T:\src\github\tensorflow\tensorflow\core\common_runtime\bfc_allocator.cc:219] Allocator (GPU_0_bfc) ran out of memory trying to allocate 1.91GiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory were available. 날짜.시간.887221: W T:\src\github\tensorflow\tensorflow\core\common_runtime\bfc_allocator.cc:219] Allocator (GPU_0_bfc) ran out of memory trying to allocate 1.41GiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory were available. 날짜.시간.904741: W T:\src\github\tensorflow\tensorflow\core\common_runtime\bfc_allocator.cc:219] Allocator (GPU_0_bfc) ran out of memory trying to allocate 1.69GiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory were available. 날짜.시간.923649: W T:\src\github\tensorflow\tensorflow\core\common_runtime\bfc_allocator.cc:219] Allocator (GPU_0_bfc) ran out of memory trying to allocate 1.98GiB. The caller indicates that this is not a failure, but may mean that there could be performance gains if more memory were available. daisy 0.9976986 sunflowers 0.001372812 dandelion 0.0005049626 tulips 0.0003564248 roses 6.7078516e-05
- 위의 결과를 보면 daisy 가 0.9976986로 100%에 가까운 신뢰도를 가지므로
컴퓨터는 테스트 이미지가 daisy로 판단한다.
뭔가 지식을 얻어가셨나요?
'Programming Languages > Tensorflow' 카테고리의 다른 글
Tensorflow 기본개념 - 단순회귀(Linear Regression) (0) | 2018.06.20 |
---|---|
Windows 10 에 tensorflow-gpu 설치 (0) | 2018.06.01 |
jupyter notebook 초기경로 셋팅 (0) | 2018.05.04 |