Tensorflow Object_detect

➢ Object Detecting을 실행하기전 자신이 원하는 사진들을 찍어둔다. 사진은 많으면 많을 수록 좋으며 200장 이상 그리고 다른 배경에서 찍은 사진일수록 좋다.
(찍어둔 사진들은 임의의 폴더를 만들고 그 안에 train폴더와 test폴더를 만들어 준다.)
(.csv 파일은 아래 xml_to_csv.py 실행 시 생성된다.)


➢ 사진을 찍었으면 각 이미지에서 원하는 이미지를 박싱하여 라벨을 붙여 주어야 한다.
프로그램은 labelImg를 사용하였다.



➢ 각 이미지 마다 라벨링을 완료하였으면 맞지 않는 사이즈가 있을 수 있기에 사이즈 체크를 하여준다.
$ cd tensorflow1/models/research/object_detection
$ python3 sizeChecker.py  --move
(뒤에 붙은 --move는 옵션이기에 빼주어도 상관없으며, --move 입력시 worng 폴더가 만들어지며 이 폴더 안에 맞지 않는 사진들이 들어간다.)

(sizeChecker.py의 소스코드 중 디렉토리를 이미지가 저장되어 있는 폴더로 변경하여 주어야한다.)



➢ 사이즈 확인후 .xml 파일을 만들어 준다.
$ python3 xml_to_csv.py

(xml_to_csv.py 안에는 실행시 어디에 파일은 만들지에 대한 디렉토리가 있기에 사용자에 따라서 바꾸거나 그대로 둔다. 나는 내 임의의 경로로 새로 설정하여 주었다.)



➢ generate_tfrecord.py를 실행하여 준다.
(실행전 파일에서 라벨 수와 이름을 변경하여 주어야 한다.)
python3 generate_tfrecord.py --csv_input=images\train_labels.csv --image_dir=images\train --output_path=train.record
python3 generate_tfrecord.py --csv_input=images\test_labels.csv --image_dir=images\test --output_path=test.record
(csv_input과 image_dir는 자신이 저장해둔 사진들이 있는 경로를 설정하고, output_path는 그대로 두어도 되며, 자신이 원하는 디렉토를 설정하여 주어도 된다.)

나는 training폴더를 따로 만들어 안에다 넣어 주었다.
$ python3 generate_tfrecord.py --csv_input=images/train_labels.csv --image_dir=images/train --output_path=training/train.record



➢ 생성된 training폴더에서 labelmap도 알맞게 수정하여 주어야한다.
자신이 학습 시킬때 넣었던 라벨의 수 만큼 조정하고 바꿔주면 된다.



➢ ssd_mobil 대신 faster_rcnn을 사용하였다.
faster_rcnn_inception_v2_pets.config
의 파일도 수정이 필요하다.
fine_tune_checkpoint는 처음 학습시에는 문제 없지만 나중에 정지후 다시 이어서 학습시 마지막 체크포인트 숫자를 넣어주어야 한다.
fine_tune_checkpoint: "training/model.ckpt" → fine_tune_checkpoint: "training/model.ckpt-11460"



➢ 학습 시작
python3 train.py --logtostderr --train_dir=training/ --pipeline_config_path=training/faster_rcnn_inception_v2_pets.config



➢ frozen파일 생성
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



➢ 이후 Object_detection_image.py 를 실행하면 결과값을 얻을 수 있다.





⟺ https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10
참고

댓글

이 블로그의 인기 게시물

python 에서 resize 이벤트 만들기

PLC와 아두이노 그리고 온도 센서를 이용하여 램프 점등

C언어로 로또 프로그램 만들기