Tensorflow2 Object Detection API 설치 및 환경 구성

반갑습니다! 이번 글에서는 Tensorflow 2.x 버전을 기반으로 하는 Object Detection API를 Anaconda 가상 환경에 설치하고 확인하는 방법에 대해서 진행해보려고 합니다.

 

지금부터 설치하는 환경은 Windows10에서 각자의 Local 환경에서도 진행할 수 있도록 Anaconda를 이용하여 진행하도록 하겠습니다. Anaconda에 대해서 처음이시거나 가상환경을 만드는 방법에 대해서 잘 모르시는 분이시라면 아래 포스팅에서 Keras를 제외한 부분을 참조하시고 이번 글을 진행하시는 것을 권장드립니다.

 

 

Anaconda(아나콘다) 에서 Keras(케라스) 설치하기

반갑습니다. 이번 글에서는 아나콘다를 사용하여 케라스까지 설치해보는 작업을 진행하도록 하겠습니다. 아나콘다는 일반적으로 정말 다양한 라이브러리 패키지들을 모아놓은 소프트웨어인데

like-edp.tistory.com

 


 

해당 글에서 참조한 링크입니다.

 

tensorflow/models

Models and examples built with TensorFlow. Contribute to tensorflow/models development by creating an account on GitHub.

github.com

 

TensorFlow 2 Object Detection API tutorial — TensorFlow 2 Object Detection API tutorial documentation

Important This tutorial is intended for TensorFlow 2.2, which (at the time of writing this tutorial) is the latest stable version of TensorFlow 2.x. A version for TensorFlow 1.14 can be found here. This is a step-by-step tutorial/guide to setting up and us

tensorflow-object-detection-api-tutorial.readthedocs.io

 

Tensorflow Object Detection API?

텐서플로우에서 제공하는 객체 인식 API는 오픈 소스 프레임워크로서 텐서플로우에서 해당 API를 사용하는 사용자들이 보다 쉽게 모델을 구성하고 훈련 및 평가를 해볼 수 있도록 구축해놓은 API입니다. 현재 Object Detection API는 텐서플로우 1, 2 버전을 모두 지원하며 현재 이 글을 작성하는 시점(2020.11.24)에서도 개발중입니다. TF1 버전을 계속 지원할 예정이라고는 하나 향후에는 TF2 버전에서만 새로운 아키텍쳐, 학습 및 디버깅을 개발할 것이라고 하기 때문에 TF2 버전이 현재도 버그가 많지만 익숙해진다면 자신만의 Object Detection 모델을 쉽게 구성하시는 데에 큰 도움이 되실거라고 생각합니다.

 


 

1. Object Detection API를 사용할 환경 설치

 

먼저 Anaconda에서 가상환경부터 생성해주도록 하겠습니다. 저는 아래와 같이 가상환경의 이름을 tensorflow2.3으로 지정하겠습니다. 가상환경을 생성하는 김에 Python 3.8 버전도 함께 구성하겠습니다.

conda create -n tensorflow2.3 python=3.8

 

현재 글을 쓰는 시점에서는 Python 3.8.5 버전이 설치되며, pip도 함께 설치되는것을 확인할 수 있습니다. y를 입력하여 가상 환경을 생성해 주도록 하겠습니다.

 

생성 완료시 다음과 같이 출력된다.

 

이제는 가상 환경 내에서 나머지 설치를 진행할 것이므로 다음의 명령어로 가상 환경으로 진입하겠습니다.

conda activate tensorflow2.3

 

앞으로 진행되는 pip 설치 및 명령어들은 가상 환경 내에서 설치가 되는 것이므로 이 점을 유의하시기 바랍니다. 먼저 Tensorflow2를 설치해보도록 하겠습니다. 제가 구성할 때는 conda install로는 2.2.0까지만 나온 상태이며 pip는 2.3.1이 설치가 됩니다. 이 Tensorflow의 경우에는 CPU 세션에서 동작하는 tensorflow와 GPU 세션에서 동작이 가능한 tensorflow-gpu 두 종류가 존재합니다. GPU를 사용하기 위해서는 tensorflow-gpu를 설치하는 것으로 진행하시면 됩니다. 유의하실 점은 한 가상환경 내에서 두 종류의 패키지를 동시에 설치하는 것은 피하셔야만 합니다. 또한, tensorflow-gpu를 설치하였다고 해도, NVIDIA의 CUDA, CuDNN을 설치하여 환경 변수 설정을 하셔야만 실제로 gpu를 사용할 수 있습니다. CUDA, CuDNN을 설치하지 않고 tensorflow-gpu만 설치한다면 CPU를 사용하게 됩니다.

실제로 사용자들이 GPU를 사용하기 위해서 CUDA, CuDNN을 많이 설치하는데, 버전마다 지원하는 환경도 각자 다르며, 원치 않는 버전을 설치하여 제거하거나 새로운 버전을 설치하시는 경우 실패하여 컴퓨터를 포맷하시는 경우도 많습니다. 따라서 큰 문제없이 GPU를 사용하기 위해서는 CUDA, CuDNN의 버전을 잘 맞추어서 사용하셔야 합니다. CUDA 및 CuDNN을 설치하거나 삭제하는 방법에 대해서는 추가적으로 포스팅을 작성하고 해당 글에 링크를 추가할 예정입니다.

 

다음은 해당 글에서 사용되는 각 라이브러리들의 버전입니다.

Python : 3.8.5

numpy : 1.18.5 *(1.19.4 버전이 설치될 경우에만 타 버전으로 재설치 하시면 됩니다. 현재 1.19.4는 버그가 많습니다.)

tensorflow-gpu : 2.3.1

CUDA Toolkit : 10.1

CuDNN : 7.6.5

 

다음의 명령어로 tensorflow를 설치합니다.

#CPU
pip install --ignore-installed --upgrade tensorflow

#GPU
pip install --ignore-installed --upgrade tensorflow-gpu

 

설치가 완료되었으면 문제가 없는지 간단한 명령어를 통해 확인하겠습니다.

python -c "import tensorflow as tf;print(tf.reduce_sum(tf.random.normal([1000, 1000])))"

CUDA, CuDNN이 잘 적용되어 GPU를 사용할 수 있게 되면 첫 번째에서 Successfully opened dynamic library가 표현됩니다. tensorflow가 잘 설치 되었는지 확인하려면 마지막 줄을 확인하시면 됩니다.

2020-11-24 17:19:01.067413: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cudart64_101.dll
2020-11-24 17:19:03.910236: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library nvcuda.dll
2020-11-24 17:19:04.071536: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1716] Found device 0 with properties:
pciBusID: 0000:01:00.0 name: GeForce GTX 1050 computeCapability: 6.1
coreClock: 1.455GHz coreCount: 5 deviceMemorySize: 2.00GiB deviceMemoryBandwidth: 104.43GiB/s
2020-11-24 17:19:04.143315: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cudart64_101.dll
2020-11-24 17:19:04.611799: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cublas64_10.dll
2020-11-24 17:19:04.711100: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cufft64_10.dll
2020-11-24 17:19:04.779193: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library curand64_10.dll
2020-11-24 17:19:05.075355: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cusolver64_10.dll
2020-11-24 17:19:05.333230: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cusparse64_10.dll
2020-11-24 17:19:05.635045: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cudnn64_7.dll
2020-11-24 17:19:05.691302: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1858] Adding visible gpu devices: 0
2020-11-24 17:19:05.745511: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN)to use the following CPU instructions in performance-critical operations:  AVX2
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
2020-11-24 17:19:06.000421: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x1eac7a5d380 initialized for platform Host (this does not guarantee that XLA will be used). Devices:
2020-11-24 17:19:06.069345: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): Host, Default Version
2020-11-24 17:19:06.143034: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1716] Found device 0 with properties:
pciBusID: 0000:01:00.0 name: GeForce GTX 1050 computeCapability: 6.1
coreClock: 1.455GHz coreCount: 5 deviceMemorySize: 2.00GiB deviceMemoryBandwidth: 104.43GiB/s
2020-11-24 17:19:06.276779: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cudart64_101.dll
2020-11-24 17:19:06.346691: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cublas64_10.dll
2020-11-24 17:19:06.433829: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cufft64_10.dll
2020-11-24 17:19:06.503286: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library curand64_10.dll
2020-11-24 17:19:06.597964: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cusolver64_10.dll
2020-11-24 17:19:06.683455: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cusparse64_10.dll
2020-11-24 17:19:06.755767: I tensorflow/stream_executor/platform/default/dso_loader.cc:48] Successfully opened dynamic library cudnn64_7.dll
2020-11-24 17:19:06.828711: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1858] Adding visible gpu devices: 0
2020-11-24 17:19:08.353566: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1257] Device interconnect StreamExecutor with strength 1 edge matrix:
2020-11-24 17:19:08.407519: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1263]      0
2020-11-24 17:19:08.445279: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1276] 0:   N
2020-11-24 17:19:08.484792: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1402] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 1326 MB memory) -> physical GPU (device: 0, name: GeForce GTX 1050, pci bus id: 0000:01:00.0, compute capability: 6.1)
2020-11-24 17:19:08.641968: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x1eaf84c0b80 initialized for platform CUDA (this does not guarantee that XLA will be used). Devices:
2020-11-24 17:19:08.712057: I tensorflow/compiler/xla/service/service.cc:176]   StreamExecutor device (0): GeForce GTX 1050, Compute Capability 6.1
tf.Tensor(-1001.1969, shape=(), dtype=float32)

 


 

2. Tensorflow Object Detection API 다운로드 및 컴파일

다음으로는 API 를 설치하고 가상 환경에 적용시키는 작업을 진행해보도록 하겠습니다. Tensorflow Object Detection API 모델은 tensorflow git에서 다운받으실 수 있습니다.     Object Detection API 다운로드 

파일로 다운로드 하면 models-master.zip으로 다운 받아집니다. 해당 파일을 압축을 풀면 사용할 수 있는 대부분의 파일들은 안에 존재합니다. 앞으로 가장 상위 폴더를 models로 이름을 변경하여 사용하도록 하겠습니다. object detection은 research 폴더 내에 있습니다.

 models/
   ├─ community/
   ├─ official/
   ├─ orbit/
   ├─ research/
   └── ...

 

다음으로는 Protobuf를 설치하고 컴파일을 진행합니다. Protobuf는 자세하게는 Protocol Buffer라고 하는 직렬화 데이터 구조를 띄는 것을 의미합니다. 데이터 저장 방식을 변경함으로써 용량에서 이득을 볼 수 있습니다. Tensorflow Object Detection API는 모델과 학습 파라미터들을 이러한 방식으로 구성하였으므로 컴파일을 Protobuf 라이브러리로 진행하여야 합니다.

 

Protobuf 설치는 git에서 다운로드 받을 수 있습니다.      Protobuf 다운로드

저는 현 시점에서 가장 최신 버전인 3.14.0 버전으로 다운받도록 하겠습니다.  (protoc-3.14.0-win64.zip)

다운받고 압축을 해제해서 안에 있는 파일을 보면, bin 폴더에 exe 실행파일이 존재합니다. (proto.exe) 파일이 존재하는 경로를 시스템 환경 변수에 추가를 해야하는데, Window10의 경우 검색을 통해서 쉽게 진입이 가능합니다. 먼저 시스템 환경 변수 편집에 진입합니다. 그 이후 PATH 항목에서 편집을 눌러 ~\bin 까지의 경로로 추가를 해주시면 됩니다.

 

여기까지 진행하면 명령 프롬프트 창에서 protoc를 사용할 수 있게 됩니다. 따라서 Object Detection API를 컴파일 하기 위해서 API 폴더(models)에서 reserch 경로로 이동해서 다음과 같은 명령어로 컴파일을 해줍니다.

# From within models/research/
protoc object_detection/protos/*.proto --python_out=.

해당 경로에서 문제없이 컴파일 되었을 때 다음과 같이 진행된다.

 


 

3. COCO API 설치 (Optional)

Tensorflow 2.x 버전 Object Detection API를 설치할 때에는 pycocotools가 함께 설치되지만 아직은 다양한 이유로 버그가 생길 수 있다고 합니다. 따라서 문제가 없으면 해당 글에서 사용하는 버전은 Tensorflow 2.3.1 이므로 이 부분은 건너 뛰어도 되지만 미리 설치하실 분은 따라하시면 될 것 같습니다.

바로 위의 경로와 동일한 위치에서 다음과 같은 명령어를 입력하여 진행합니다.

# From within models/research
pip install cython
conda install git -y
pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
# pycocotools 설치시에 문제가 없다면 다음과 같이 출력된다.
Collecting git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI
  Cloning https://github.com/philferriere/cocoapi.git to c:\users\user\appdata\local\temp\pip-req-build-hyas3j7x
Building wheels for collected packages: pycocotools
  Building wheel for pycocotools (setup.py) ... done
  Created wheel for pycocotools: filename=pycocotools-2.0-cp38-cp38-win_amd64.whl size=81543 sha256=814082ea6d8797df4b5cdfec1e2d9546971d3daefff345b36190cca5494c4d6d
  Stored in directory: C:\Users\user\AppData\Local\Temp\pip-ephem-wheel-cache-9l7j4794\wheels\bd\1c\0d\8c82e1b9bc855b82e1eb53eadea4459efe171d2daf5a222701
Successfully built pycocotools
Installing collected packages: pycocotools
Successfully installed pycocotools-2.0

 

만약 Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools" 와 같은 에러가 발생하면 아래 링크로 접속하셔서 설치하시고 다시 진행하시면 됩니다. visualstudio.microsoft.com/visual-cpp-build-tools/


 

4. Tensorflow Object Detection API 설치

마지막으로 zip 파일로 저장하여 압축을 해제했던 패키지(Object Detection)들을 사용하고 있는 가상 환경에 설치해줘야만 해당 파일들이 적용되어 환경 구성이 완료됩니다. 이미 다운로드 받았던 경로에서 다음의 명령어를 실행하여 설치를 마무리해줍니다.

# From within models/research/
cp object_detection/packages/tf2/setup.py .
python -m pip install .

 

 

윈도우 환경에서 Anaconda prompt에서는 cp 명령어가 실행되지 않을 수 있습니다. 따라서 다운로드한 폴더의models/research/object_detection/packages/tf2/ 경로로 직접 들어가서 setup.py를 복사하여 옮겨 주시면 됩니다.

복사 한 후에 python -m pip install . 명령어로 설치해준다.

 

저는 install을 진행하면 아래와 같은 패키지들이 설치가 됩니다. tensorflow-gpu로 진행하셨던 분들이라면 기존 tensorflow 패키지가 같이 설치될 수 있기 때문에 setup.py를 유의하셔서 설치하셔야 될 것 같습니다. 최근에 학습까지 진행하였을 때 큰 충돌현상은 없었으나 tensorflow-gpu or tensorflow 둘 중 하나만 선택하셔서 가상 환경에 설치하는 것을 권장드립니다.

Successfully installed apache-beam-2.25.0 attrs-20.3.0 avro-python3-1.10.0 contextlib2-0.6.0.post1 crcmod-1.7 cycler-0.10.0 dataclasses-0.6 dill-0.3.1.1 dm-tree-0.1.5 docopt-0.6.2 fastavro-1.2.0 future-0.18.2 gin-config-0.4.0 google-api-core-1.23.0 google-api-python-client-1.12.8 google-auth-httplib2-0.0.4 google-cloud-bigquery-2.4.0 google-cloud-core-1.4.3 google-crc32c-1.0.0 google-resumable-media-1.1.0 googleapis-common-protos-1.52.0 hdfs-2.5.8 httplib2-0.17.4 importlib-resources-3.3.0 kaggle-1.5.9 kiwisolver-1.3.1 lvis-0.5.3 lxml-4.6.1 matplotlib-3.3.3 mock-2.0.0 oauth2client-4.1.3 object-detection-0.1 opencv-python-4.4.0.46 opencv-python-headless-4.4.0.46 pandas-1.1.4 pbr-5.5.1 pillow-8.0.1 promise-2.3 proto-plus-1.11.0 psutil-5.7.3 py-cpuinfo-7.0.0 pyarrow-0.17.1 pydot-1.4.1 pymongo-3.11.1 pyparsing-2.4.7 python-dateutil-2.8.1 python-slugify-4.0.1 pytz-2020.4 pyyaml-5.3.1 scipy-1.5.4 sentencepiece-0.1.94 slugify-0.0.1 tensorflow-2.3.1 tensorflow-addons-0.11.2 tensorflow-datasets-4.1.0 tensorflow-estimator-2.3.0 tensorflow-hub-0.10.0 tensorflow-metadata-0.25.0 tensorflow-model-optimization-0.5.0 text-unidecode-1.3 tf-models-official-2.3.0 tf-slim-1.1.0 tqdm-4.53.0 typeguard-2.10.0 typing-extensions-3.7.4.3 uritemplate-3.0.1

 

설치가 잘되었는지 확인하기 위해서 다음과 같은 명령어로 확인해 볼 수 있습니다.

# From within models/research/
python object_detection/builders/model_builder_tf2_test.py

저는 명령어를 다 실행하면 다음과 같이 명령창에서 출력이 됩니다.

[       OK ] ModelBuilderTF2Test.test_create_ssd_models_from_config
[ RUN      ] ModelBuilderTF2Test.test_invalid_faster_rcnn_batchnorm_update
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_invalid_faster_rcnn_batchnorm_update): 0.0s
I1124 21:46:18.785650 92184 test_util.py:1972] time(__main__.ModelBuilderTF2Test.test_invalid_faster_rcnn_batchnorm_update): 0.0s
[       OK ] ModelBuilderTF2Test.test_invalid_faster_rcnn_batchnorm_update
[ RUN      ] ModelBuilderTF2Test.test_invalid_first_stage_nms_iou_threshold
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_invalid_first_stage_nms_iou_threshold): 0.0s
I1124 21:46:18.794627 92184 test_util.py:1972] time(__main__.ModelBuilderTF2Test.test_invalid_first_stage_nms_iou_threshold): 0.0s
[       OK ] ModelBuilderTF2Test.test_invalid_first_stage_nms_iou_threshold
[ RUN      ] ModelBuilderTF2Test.test_invalid_model_config_proto
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_invalid_model_config_proto): 0.0s
I1124 21:46:18.807593 92184 test_util.py:1972] time(__main__.ModelBuilderTF2Test.test_invalid_model_config_proto): 0.0s
[       OK ] ModelBuilderTF2Test.test_invalid_model_config_proto
[ RUN      ] ModelBuilderTF2Test.test_invalid_second_stage_batch_size
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_invalid_second_stage_batch_size): 0.0s
I1124 21:46:18.814575 92184 test_util.py:1972] time(__main__.ModelBuilderTF2Test.test_invalid_second_stage_batch_size): 0.0s
[       OK ] ModelBuilderTF2Test.test_invalid_second_stage_batch_size
[ RUN      ] ModelBuilderTF2Test.test_session
[  SKIPPED ] ModelBuilderTF2Test.test_session
[ RUN      ] ModelBuilderTF2Test.test_unknown_faster_rcnn_feature_extractor
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_unknown_faster_rcnn_feature_extractor): 0.0s
I1124 21:46:18.828537 92184 test_util.py:1972] time(__main__.ModelBuilderTF2Test.test_unknown_faster_rcnn_feature_extractor): 0.0s
[       OK ] ModelBuilderTF2Test.test_unknown_faster_rcnn_feature_extractor
[ RUN      ] ModelBuilderTF2Test.test_unknown_meta_architecture
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_unknown_meta_architecture): 0.0s
I1124 21:46:18.839508 92184 test_util.py:1972] time(__main__.ModelBuilderTF2Test.test_unknown_meta_architecture): 0.0s
[       OK ] ModelBuilderTF2Test.test_unknown_meta_architecture
[ RUN      ] ModelBuilderTF2Test.test_unknown_ssd_feature_extractor
INFO:tensorflow:time(__main__.ModelBuilderTF2Test.test_unknown_ssd_feature_extractor): 0.0s
I1124 21:46:18.846489 92184 test_util.py:1972] time(__main__.ModelBuilderTF2Test.test_unknown_ssd_feature_extractor): 0.0s
[       OK ] ModelBuilderTF2Test.test_unknown_ssd_feature_extractor
----------------------------------------------------------------------
Ran 20 tests in 53.473s

OK (skipped=1)

 


 

지금까지 Tensorflow에서 내놓은 Object Detection API를 설치하고 잘 적용이 되었는지에 대해 테스트하는 작업을 진행해봤습니다. 다음 글에서는 이렇게 설치한 환경으로 모델을 학습하고, Tensorflow 모델 확장자인 Pb파일로 변환하여 검증하는 방법까지 진행해 보도록 하겠습니다.

문의 사항이나 개선할 점이 있으시다면 댓글 남겨주시면 감사하겠습니다.

TAGS.

Comments