ReadMe.md 3.88 KB

반려동물 행동 인식 기술 개발

강아지의 위치와 크기를 인식할 수 있는 딥러닝 모델

팀 소개


  • 지도 교수

    • 조진성 교수님
  • 팀원

    • 2015104157 김민석
    • 2017103967 김성주
    • 2015104213 장수창

준비 사항

tensorflow-android 라이브러리의 최신 버전이 (2020.06.01 기준) 1.13.1입니다. 따라서 android implementation까지 구현하는 경우에는 상위 버전과 호환이 되도록 라이브러리를 빌드하거나, 학습 혹은 pb 파일 생성 또한 tensorflow v1.13.1 이하로 진행하셔야 합니다.

annotation에는 labelImg 툴을 이용하여 xml을 생성하였습니다.

학습에는 TFrecord 형태로 저장된 파일을 사용합니다. 데이터 하나의 형식은 {data index, image binary, image width, image height, boxes}이며 boxes의 형식은 {label1, xmin, ymin, xmax, ymax, label2, xmin, ...}입니다. TFRecord 파일 작성은 code/tfrecord_writer.py를 참고하시기 바랍니다.

tfrecord_writer.py에서 입력으로 받는 txt 파일은 각 라인마다 {data index, image path, image width, image height, boxes} 형태로 저장되어 있습니다. txt 파일 생성은 code/annotation_xml_parser.py를 참고하시기 바랍니다.

이 학습에서는 train/eval/test 데이터셋을 구분하여 사용합니다. txt 파일에 대한 데이터셋 분리는 code/dataset_splitter.py를 참고하기시 바랍니다.

annotation_xml_parser.py에서 입력으로 받는 xml 파일은 labelImg 툴로 생성된 Pascal VOC format XML 파일을 기준으로 합니다.

학습을 위해서 anchor 파일이 필요합니다. anchor 파일 생성에는 code/yolov3/get_kmeans.py를 참고하시기 바랍니다. 출력된 anchor를 code/yolov3/args.py의 anchor_path에 맞는 위치에 저장하시면 됩니다.

이 학습에서는 pretrained model을 불러와 fine tuning을 이용합니다. 따라서 pretrained model 파일을 준비해야 합니다. pretrained model은 링크에서 다운로드할 수 있습니다. 이 파일은 darknet weights 파일이므로, tensorflow model로 변환하려면 code/yolov3/convert_weights.py를 참고하시기 바랍니다. (git에는 이미 변환된 yolov3.ckpt만이 업로드되어 있습니다. 다른 데이터셋 혹은 다른 용도로 학습을 진행하려면 새로 생성하셔야 합니다.)

학습에는 train.py (train/eval dataset)를, 평가에는 eval.py (test dataset)를 사용하시면 됩니다. 학습에 사용하는 파일의 경로 및 hyper parameter 설정은 args.py를 참고하시기 바랍니다. 평가에 대한 경로 설정은 eval.py에서 할 수 있습니다.

data/trained에 임시 테스트용 trained model 파일이 업로드되어 있습니다.

android implementation을 하는 경우에는 학습된 모델에 대한 pb 파일을 생성해야 합니다. code/pb/pbCreator.py를 참고하시기 바랍니다. (code/yolov3/test_single_image.py를 약간 수정한 파일입니다)

android에서는 freeze된 model만 사용할 수 있습니다. code/pb/freeze_pb.py를 참고하시기 바랍니다.

android_App/assets에 pb file을 저장한 후, DetectorActivity.java에서 YOLO_MODEL_FILE의 값을 알맞게 수정하시면 됩니다.

이 학습 코드로 생성된 모델의 input, output node name은 각각 input_data, {yolov3/yolov3_head/feature_map_1,yolov3/yolov3_head/feature_map_2,yolov3/yolov3_head/feature_map_3} 입니다. 모델의 node name 참고에는 Netron 프로그램을 사용하였습니다.

Reference

학습 코드는 링크를 기반으로 작셩하였습니다. 변경점은 code/yolov3/changes.txt를 참고하시기 바랍니다.

android 코드는 링크를 기반으로 작성하였습니다.