티스토리 뷰
Object Dection API는 이미지에서 객체를 탐지해주는 딥러닝 모델을 사용하기 위한 API입니다. Tensorflow는 머신러닝 알고리즘을 사용하기 위한 프레임워크이며, 텐서 플로우의 Object Detection API를 사용하면, 인공지능 모델을 학습할 수 있을 뿐만 아니라, 이미지 내 객체를 탐지하는 추론기능까지 사용 가능합니다. 이번 포스팅에서는 Tensorflow를 설치하여 Object Detection API를 사용하는 방법에 대해 알아보겠습니다.
Ubuntu16.04에서 Tensorflow 설치
우분투에서 아래 명령어를 순차적으로 실행하면 텐서 플로우를 설치할 수 있습니다.
sudo apt-get install python-pip python-dev python-virtualenv
virtualenv --system-site-packages tensorflow
source ~/tensorflow/bin/activate
easy_install -U pip
sudo pip install --upgrade tensorflow
sudo pip install --upgrade tensorflow-gpu # for python 2.7 and GPU
pip install --upgrade https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-1.5.0-cp27-none-linux_x86_64.whl # for python 2.7 and GPU
명령어 별 세부 설명은 텐서 플로우 공식 홈페이지에서 확인할 수 있습니다.
CUDA-8.0 환경변수 설정
CUDA GPU 사용을 위해서는 bashrc 파일에서 환경변수를 아래와 같이 설정합니다.
export CUDA_HOME=/usr/local/cuda-8.0 # for nVidia GPU
export PATH=/usr/local/cuda-8.0/bin${PATH:+:${PATH}} # for nVidia GPU
export LD_LIBRARY_PATH=/usr/local/cuda-8.0/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}} # for nVidia GPU
Object Dection API 사용
Tensorflow Object Detection API를 사용하기 위해서는 protobuf를 설치해야 합니다. 아래 명령어를 통해 protobuf를 설치합니다.
mkdir protoc_3.3
cd protoc_3.3
wget wget https://github.com/google/protobuf/releases/download/v3.3.0/protoc-3.3.0-linux-x86_64.zip
chmod 775 protoc-3.3.0-linux-x86_64.zip
unzip protoc-3.3.0-linux-x86_64.zip
cd ../models/research/
/home/csh/tensorflow/protoc_3.3/bin/protoc object_detection/protos/*.proto --python_out=.
Tensorflow Object Detection API 사용법
이미지 내에서 Bounding Box 영역과 Labeling을 지정하여 딥러닝 모델에게 학습정보를 제공할 수 있습니다. Bounding Box는 이미지 내에서 딥러닝 모델이 학습할 데이터 영역입니다. Labeling은 Bounding Box로 지정된 영역을 텍스트로 정의한 것입니다. 딥러닝 모델이 학습할 데이터 모음을 DataSet이라고 부릅니다. DataSet은 이미지 파일, Bounding Box, Labeling 정보로 구성되고 Tensorflow Object Detection API는 3가지 정보를 바탕으로 추론 모델을 생성합니다. Dataset을 생성하는 과정은 아래 이미지를 참고하시면 됩니다.
위 과정은 아래 명령어를 순차적으로 실행하면 학습용 데이터셋인 TFRecord를 생성할 수 있고,모델 트레이닝, 모델 추론까지 사용가능합니다.
xml_to_csv.py 소스 다운로드
- https://github.com/datitran/raccoon_dataset/blob/master/xml_to_csv.py
아래의 파이선 패키지 설치
- pip install wheel
- pip install pandas
labelimg로 image annotation 정보 추출
- *.xml 생성
- image annotation 정보 + image
- 학습을 위해 train set과 test set 두 개를 만들어야 함
- annotation정보를 입력한 이미지도 별도로 보관
xml_to_csv.py 를 실행하여 *.xml -> *.csv 확장자 변형함
- python xml_to_csv.py 실행 (약간의 코드 수정 필요)
- class_text_to_int 에서 dataset 만들 때 분류한 class 명을 추가해 줄 것
generate_tfrecord.py를 이용해 TF Record를 생성함.
- 학습을 위해 train set과 test set 두 개를 만들어야 함
학습 모델 파라미터 설정
- sample 폴더에 있는 model config 파일에서 아래 내용 필드에서 훈련용 TF Recrod, 평가용 TF Record 경로를 지정해줄 것
- model : num_classes 개수 조정 (학습할 클래스 개수 입력, 데이터 셋과 일치해야 함)
- train_config : fine_tune_checkpoint path 수정 (학습을 이어서 할 수 있게 해주는 파일)
- train_input_reader : input_path에 train.record 경로 입력, label_map_path에 label_map.pbtxt 경로 입력
- eval_input_reader : input_path에 test.record 경로 입력, label_map_path에 label_map.pbtxt 경로 입력
트레이닝 실행
- cd ~/models/research
- export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
- cd object_detection
- python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/ssd_mobilenet_v1_pets.config --clone_on_cpu=true
- clone_on_cpu는 CPU로 트레이닝하겠다는 플래그
ckpt를 pb 확장자 파일로 변환 (Object Dection API에서 사용하기 위한 방법)
- cd ~/models/research
- export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim
- python object_detection/export_inference_graph.py \
--input_type image_tensor \
--pipeline_config_path PIPELINE_CONFIG_PATH \
--trained_checkpoint_prefix TRAIN_PATH \
--output_directory DIRECTORY_PATH
- https://github.com/tensorflow/models/blob/master/research/object_detection/g3doc/exporting_models.md
- 샘플 예제
- python object_detection/export_inference_graph.py \
--input_type image_tensor \
--pipeline_config_path object_detection_training/ssd_mobilenet_v1_pets.config \
--trained_checkpoint_prefix object_dection/training/model.ckpt-155 \
--output_directory output_inference_graph
object_detection_tutorial.ipynb 코드 실행
pbtxt, pb 파일 경로를 코드 상에서 수정해 줄 것.
'IT 기술' 카테고리의 다른 글
CNN, R-CNN, Faster R-CNN의 특징 (0) | 2022.09.07 |
---|---|
Deep Learning CNN 설계방법 (0) | 2022.09.07 |
AWS Log Insights 쿼리 작성법(람다 로그 빠르게 조회하기) (0) | 2022.09.07 |
Springboot 캐시(@Cacheable) 사용하는 방법 (0) | 2022.09.07 |
Springboot CORS(교차 출처 리소스 공유) 정책 적용하기 (0) | 2022.09.07 |
- Total
- Today
- Yesterday
- API Gateway 캐싱
- MPA
- AWS
- 스프링부트 restapi
- 클린코드작성법
- oracle 메모리
- 테스팅 자동화
- 디자인패턴
- 디자인패턴 구조패턴
- token
- python
- C++
- springboot build
- OSI 7계층
- springboot restapi
- SPA
- 스프링부트실행
- oracle pga sga
- notion
- springboot rest api 서버
- 클린코드작성원칙
- springboot 실행
- 스프링부트빌드
- notion 업무일정관리
- TCP/UDP
- selenium
- codesmell 유형
- 코드스멜 유형
- 멀티코어 멀티프로세서
- iframe 태그 찾기
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |