-
Tensorflow Object Tracking Windows 10 APITensorflow API 2020. 10. 27. 18:36
내가 보기 위해 만듦
개발 환경
- Windows Pro 10.2004 64bit
- Python 3.6
- conda 4.8.3
- Tensorflow-gpu 1.5.0
- CUDA 9
- cuDNN 7
- Windows Ubuntu 18.04 LTS
Anaconda Install Tutorial
- gracefulprograming.tistory.com/124
CUDA and cuDNN Install Tutorial
Windows Ubuntu 18.04 LTS Install
- blog.naver.com/6116949/221244246623
저 위 링크에서 Ubuntu 대신 Ubuntu 18.04 LTS 검색 후 설치 Tensorflow Models Download
1. Ubuntu Terminal 실행
2. C 드라이브에 파일 생성
cd /mnt/c mkdir tensorflow cd tensorflow
3. ubuntu에 git 설치
sudo apt-get install git | sudo apt-get upgrade git # 후 Y 를 눌러 업그레이드
4. models 가져오기
git clone https://github.com/tensorflow/models cd models
5. models 다운그레이드 ( 중요 )
git checkout 772964e --
6. Tensorflow Object Tracking Windows 10 API 설치
Download ZIP 클릭 TensorFlow-ObjectTensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10-master.zip
압축 풀고
이것들을 C:\tensorflow\models\research\object_detection\ 안에 복붙
7. API 세팅
ininference_graph -> placeholder.txt 삭제
training -> * 삭제
image -> * 삭제
download.tensorflow.org/models/object_detection/faster_rcnn_inception_v2_coco_2018_01_28.tar.gz
설치 후 압축 풀고 object_detection 안에 복붙
8. 시작
실행 - 아나콘다 Python 3.6 설정
conda create -n tensorflow python=3.6 pip conda activate tensorflow
activate가 완료되면 현재 경로 옆에 (base)->(tensorflow)로 바뀐다 requirements.txt0.00MB- 각종 모듈 설치
cd C:\tensorflow\models\research\ python -m pip install --upgrade pip conda install -c anaconda protobuf pip install tensorflow-gpu==1.5.0 pip install pillow pip install lxml pip install Cython pip install contextlib2 pip install jupyter pip install matplotlib pip install pandas pip install opencv-python # or pip install -r requirements.txt
- 환경 변수 설정
# Anaconda Terminal 에서 set PYTHONPATH=C:\tensorflow\models;C:\tensorflow\models\research;C:\tensorflow\models\research\slim
또는
내 PC 우클릭 후 속성( Win + pause break ) 누르면 시스템이 나오는데 거기서 고급 시스템 설정
고급 탭에 환경 변수 클릭 후
새로 만들기 누르고
아래와 같이 작성 후 확인
C:\tensorflow\models;C:\tensorflow\models\research;C:\tensorflow\models\research\slim
# 현재 경로가 C\:tensorflow\models\research 인지 확인하고 protoc object_detection/protos/*.proto --python_out=.
아무런 텍스트가 없으면 성공 # C:\tensorflow\models\research python setup.py build python setup.py install
8 . 테스트
cd object_detection jupyter notebook object_detection_tutorial.ipynb
주피터 접속 후
Cell 탭에서 Run All 후
제일 아래 강아지 사진이 나오면 성공
9. 데이터 셋 제작
object_detection\images\ 안에 test와 train 폴더를 만들고 학습시킬 이미지들을 분할해서 넣는다. ( 무조건 jpeg 만!! )
나는 test 30%, train 70%으로 나눠 넣었다.
test folder train folder 그 후 자신이 쓰는 파이썬 버전이나 현재 사용하고 있는 아나콘다에 LabelImg를 설치해 라벨링을 진행하면 된다.
(현재 사용하고 있는 아나콘다에서 진행)
pip install labelimg labelimg
labelimg가 켜지면 Open Dir을 눌러 C:\tensorflow\models\research\object_detection\images\test와 train에 들어가서 라벨링을 한다.
라벨링은 먼저 Create\nRectBox ( 단축키 : w )를 누른 뒤 영역을 드래그해주고 원하는 라벨명을 입력한 뒤에 Ctrl + s 로 세이브해주면 된다.
현재 사진에 라벨링이 끝났으면 Next Image를 눌러 다음 사진도 반복해준다.
라벨링이 끝났다면 labelimg를 종료 후
cd C:\tensorflow\models\research\object_detection python xml_to_csv.py # Successfully converted xml to csv. # Successfully converted xml to csv.
Successfully converted xml to csv. 라는 문구가 두 번 뜨면 성공이다. ( Images 폴더에 들어가면 csv파일이 있을 것이다. )
object_detection 폴더에 있는 generate_tfrecord.py labelimg에서 설정해준 라벨들로 수정해준다.
( 나는 총 2개의 라벨로 bus와 num을 생성했었다. )
36 ~ 50 번 줄에 있는
def class_text_to_int(row_label): if row_label == 'nine': return 1 elif row_label == 'ten': return 2 elif row_label == 'jack': return 3 elif row_label == 'queen': return 4 elif row_label == 'king': return 5 elif row_label == 'ace': return 6 else: None
이것들을 내 라벨들로
def class_text_to_int(row_label): if row_label == 'bus': return 1 elif row_label == 'num': return 2 else: None
바꿔준다.
그 후 Record를 생성해준다.
python generate_tfrecord.py --csv_input=images\train_labels.csv --image_dir=images\train --output_path=train.record python generate_tfrecord.py --csv_input=images\test_labels.csv --image_dir=images\test --output_path=test.record
Successfully created the TFRecords: C:\tensorflow\models\research\object_detection\train.record
Successfully created the TFRecords: C:\tensorflow\models\research\object_detection\test.record
생성 완료 메시지
그 후 object_detection\training 폴더 안에 labelmap.pbtxt를 생성해준다.
그냥 txt파일 생성하고 이름이랑 확장자만 바꾸면 된다. 그리고 편집에서
아까 generate_tfrecord.py 설정할 때와 같이 라벨을 입력해줘야 된다.
item { id: 1 name: 'bus' } item { id: 2 name: 'num' }
이제 마무리 세팅으로 C:\tensorflow1\models\research\object_detection\samples\configs 에 가서
faster_rcnn_inception_v2_pets.config 를 object_detection\training에 복붙 해준다.
그 후 faster_rcnn_inception_v2_pets.config 를 텍스트 편집기로
9번 줄에 num_classes: 37을 자신이 생성한 라벨 개수에 맞게 설정해준다.
106번 줄에 fine_true_checkpoint: 아래와 같게 바꿔준다.
# 혹시 models의 경로가 다르다면 C:/tensorflow/ 를 바꿔줘야 한다. fine_tune_checkpoint: "C:/tensorflow/models/research/object_detection/faster_rcnn_inception_v2_coco_2018_01_28/model.ckpt"
122와 124번 줄에 input_path: 와 label_map_path: 아래와 같게 바꿔준다.
# models의 경로가 다르다면 C:/tensorflow 를 바꿔줘야한다. input_path: "C:/tensorflow/models/research/object_detection/train.record" label_map_path: "C:/tensorflow/models/research/object_detection/training/labelmap.pbtxt"
128번 줄에 num_examples: 를 object_detection\images\test 폴더 안에 있는 총 이미지 수로 적어준다.
136번 줄과 138번 줄에 input_path: 와 label_map_path: 를 아래와 같게 바꿔준다.
# C:/tensorflow input_path: "C:/tensorflow/models/research/object_detection/test.record" label_map_path: "C:/tensorflow/models/research/object_detection/training/labelmap.pbtxt"
이제 학습만 시키면 된다.
10. 학습
object_detection 폴더에서
python train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config
동시에 또 다른 아나콘다를 실행시켜 TensorBoard로 그래프를 볼 수 있다.
object_detection 폴더 쪽에서
tensorboard --logdir=training
을 실행시켜준다.
그러면 웹브라우저에서 YourPCName:6006를 쳐서 그래프를 볼 수 있다.
11. 모델화
python export_inference_graph.py --input_type image_tensor --pipeline_config_path training/faster_rcnn_inception_v2_pets.config --trained_checkpoint_prefix training/model.ckpt-XXXX --output_directory inference_graph
model.ckpt-XXXX 이 부분에 XXXX는 제일 마지막에 저장된 체크포인트 숫자를 적어준다.
예를 들어 model.ckpt-98460
2020-10-31 오전 8.53 수정
10-1. 학습 오류
만약 학습을 하던 도중
tensorflow.python.framework.errors_impl.InvalidArgumentError: assertion failed: [Unable to decode bytes as JPEG, PNG, GIF, or BMP]
이러한 에러가 발생할 경우 jpeg 사진이 아닌 다른 종류의 사진도 있다는 것이다. 만약 눈에 보이는 png나 bmp 등 다른 사진이 있다면 삭제 후 다시 xml_to_csv.py와 generate_tfrecord.py를 돌려주면 된다. 하지만 아무리 파일을 봐도 jpg밖에 없다면 jpg 파일 중에 표기만 jpg이지 실제론 다른 사진인 것들이 있다. 그런 사진들이 있는 것 같다면 object_detection에 파이썬 파일을 하나 만들고
import imghdr import cv2 import os import glob for folder in ['train', 'test']: image_path = os.path.join('C:/tensorflow/models/research/object_detection', ('images/' + folder)) print(image_path) for file in glob.glob(image_path + '/*.jpg'): image = cv2.imread(file) file_type = imghdr.what(file) if file_type != 'jpeg': print(file + " - invalid - " + str(file_type)) #cv2.imwrite(file, image) # https://github.com/tensorflow/tensorflow/issues/13044 # 코드 출처
이 코드를 돌려보면 어떤 파일이 잘못됐는지 나온다. 그 후 그 파일을 지우든 cv2.imwrite(file, image)의 주석을 풀어서 다시 덮어 씌우고 다시 xml_to_csv.py와 generate_tfrecord.py를 해준 후 학습을 시키면 된다. ( test 폴더에 있는 파일을 삭제하게 된다면 faster_rcnn_inception_v2_pets.config에 128번 줄도 수정해줘야 한다. )
관련 사이트
github.com/tensorflow/models/blob/master/research/object_detection/g3doc/tf1_detection_zoo.md
ukayzm.github.io/pet-training/#%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0
developer.nvidia.com/rdp/cudnn-archive
'Tensorflow API' 카테고리의 다른 글
CUDA 9 and cuDNN 7 Install (0) 2020.10.27 Anaconda Install (0) 2020.10.27