Showing
1 changed file
with
77 additions
and
39 deletions
| ... | @@ -3,7 +3,6 @@ | ... | @@ -3,7 +3,6 @@ |
| 3 | 강아지의 위치와 크기를 인식할 수 있는 딥러닝 모델 | 3 | 강아지의 위치와 크기를 인식할 수 있는 딥러닝 모델 |
| 4 | 4 | ||
| 5 | ## **팀 소개** | 5 | ## **팀 소개** |
| 6 | ---- | ||
| 7 | - **지도 교수** | 6 | - **지도 교수** |
| 8 | - 조진성 교수님 | 7 | - 조진성 교수님 |
| 9 | 8 | ||
| ... | @@ -15,90 +14,129 @@ | ... | @@ -15,90 +14,129 @@ |
| 15 | 14 | ||
| 16 | | 15 | |
| 17 | ### 준비 사항 | 16 | ### 준비 사항 |
| 18 | -tensorflow-android 라이브러리의 최신 버전이 (2020.06.01 기준) 1.13.1입니다. | 17 | +--- |
| 18 | +- **학습** | ||
| 19 | 19 | ||
| 20 | -따라서 android implementation까지 구현하는 경우에는 | 20 | + - tensorflow-android 라이브러리의 최신 버전이 (2020.06.01 기준) 1.13.1입니다. |
| 21 | -상위 버전과 호환이 되도록 라이브러리를 빌드하거나, 학습 혹은 pb 파일 생성 또한 tensorflow v1.13.1 이하로 진행하셔야 합니다. | 21 | + |
| 22 | + 따라서 android implementation까지 구현하는 경우에는 | ||
| 23 | + | ||
| 24 | + 상위 버전과 호환이 되도록 라이브러리를 빌드하거나, 학습 혹은 pb 파일 생성 또한 tensorflow v1.13.1 이하로 진행하셔야 합니다. | ||
| 22 | 25 | ||
| 26 | + | ||
| 23 | 27 | ||
| 28 | + - annotation에는 labelImg 툴을 이용하여 xml을 생성하였습니다. | ||
| 24 | 29 | ||
| 25 | -annotation에는 labelImg 툴을 이용하여 xml을 생성하였습니다. | 30 | + 학습에는 TFrecord 형태로 저장된 파일을 사용합니다. |
| 31 | + | ||
| 32 | + 데이터 하나의 형식은 {data index, image binary, image width, image height, boxes}이며 | ||
| 26 | 33 | ||
| 34 | + boxes의 형식은 {label1, xmin, ymin, xmax, ymax, label2, xmin, ...}입니다. | ||
| 27 | 35 | ||
| 36 | + TFRecord 파일 작성은 code/tfrecord_writer.py를 참고하시기 바랍니다. | ||
| 28 | 37 | ||
| 29 | -학습에는 TFrecord 형태로 저장된 파일을 사용합니다. | 38 | + |
| 30 | -데이터 하나의 형식은 {data index, image binary, image width, image height, boxes}이며 | 39 | + |
| 31 | -boxes의 형식은 {label1, xmin, ymin, xmax, ymax, label2, xmin, ...}입니다. | ||
| 32 | -TFRecord 파일 작성은 code/tfrecord_writer.py를 참고하시기 바랍니다. | ||
| 33 | 40 | ||
| 41 | + - tfrecord_writer.py에서 입력으로 받는 txt 파일은 | ||
| 34 | 42 | ||
| 43 | + 각 라인마다 {data index, image path, image width, image height, boxes} 형태로 저장되어 있습니다. | ||
| 35 | 44 | ||
| 36 | -tfrecord_writer.py에서 입력으로 받는 txt 파일은 | 45 | + txt 파일 생성은 code/annotation_xml_parser.py를 참고하시기 바랍니다. |
| 37 | -각 라인마다 {data index, image path, image width, image height, boxes} 형태로 저장되어 있습니다. | ||
| 38 | -txt 파일 생성은 code/annotation_xml_parser.py를 참고하시기 바랍니다. | ||
| 39 | 46 | ||
| 47 | + | ||
| 48 | + | ||
| 49 | + - 이 학습에서는 train/eval/test 데이터셋을 구분하여 사용합니다. | ||
| 40 | 50 | ||
| 51 | + txt 파일에 대한 데이터셋 분리는 code/dataset_splitter.py를 참고하기시 바랍니다. | ||
| 41 | 52 | ||
| 42 | -이 학습에서는 train/eval/test 데이터셋을 구분하여 사용합니다. | 53 | + |
| 43 | -txt 파일에 대한 데이터셋 분리는 code/dataset_splitter.py를 참고하기시 바랍니다. | 54 | + |
| 55 | + - annotation_xml_parser.py에서 입력으로 받는 xml 파일은 | ||
| 44 | 56 | ||
| 57 | + labelImg 툴로 생성된 Pascal VOC format XML 파일을 기준으로 합니다. | ||
| 45 | 58 | ||
| 59 | + | ||
| 60 | + | ||
| 61 | + - 학습을 위해서 anchor 파일이 필요합니다. | ||
| 46 | 62 | ||
| 47 | -annotation_xml_parser.py에서 입력으로 받는 xml 파일은 | 63 | + anchor 파일 생성에는 code/yolov3/get_kmeans.py를 참고하시기 바랍니다. |
| 48 | -labelImg 툴로 생성된 Pascal VOC format XML 파일을 기준으로 합니다. | ||
| 49 | 64 | ||
| 65 | + 출력된 anchor를 code/yolov3/args.py의 anchor_path에 맞는 위치에 저장하시면 됩니다. | ||
| 50 | 66 | ||
| 67 | + | ||
| 68 | + | ||
| 69 | + - 이 학습에서는 pretrained model을 불러와 fine tuning을 이용합니다. | ||
| 51 | 70 | ||
| 52 | -학습을 위해서 anchor 파일이 필요합니다. | 71 | + 따라서 pretrained model 파일을 준비해야 합니다. |
| 53 | -anchor 파일 생성에는 code/yolov3/get_kmeans.py를 참고하시기 바랍니다. | ||
| 54 | -출력된 anchor를 code/yolov3/args.py의 anchor_path에 맞는 위치에 저장하시면 됩니다. | ||
| 55 | 72 | ||
| 73 | + pretrained model은 [링크](https://pjreddie.com/media/files/yolov3.weights)에서 다운로드할 수 있습니다. | ||
| 56 | 74 | ||
| 75 | + | ||
| 76 | + 이 파일은 darknet weights 파일이므로, tensorflow model로 변환하려면 code/yolov3/convert_weights.py를 참고하시기 바랍니다. | ||
| 77 | + | ||
| 78 | + (git에는 이미 변환된 yolov3.ckpt만이 업로드되어 있습니다. 다른 데이터셋 혹은 다른 용도로 학습을 진행하려면 새로 생성하셔야 합니다.) | ||
| 57 | 79 | ||
| 58 | -이 학습에서는 pretrained model을 불러와 fine tuning을 이용합니다. | 80 | + |
| 59 | -따라서 pretrained model 파일을 준비해야 합니다. | 81 | + |
| 82 | + - 학습에는 train.py (train/eval dataset)를, 평가에는 eval.py (test dataset)를 사용하시면 됩니다. | ||
| 83 | + | ||
| 84 | + 학습에 사용하는 파일의 경로 및 hyper parameter 설정은 args.py를 참고하시기 바랍니다. | ||
| 85 | + | ||
| 86 | + 평가에 대한 경로 설정은 eval.py에서 할 수 있습니다. | ||
| 60 | 87 | ||
| 61 | -pretrained model은 [링크](https://pjreddie.com/media/files/yolov3.weights)에서 다운로드할 수 있습니다. | 88 | + |
| 62 | 89 | ||
| 63 | -이 파일은 darknet weights 파일이므로, tensorflow model로 변환하려면 code/yolov3/convert_weights.py를 참고하시기 바랍니다. | 90 | + - data/trained에 임시 테스트용 trained model 파일이 업로드되어 있습니다. |
| 64 | -(git에는 이미 변환된 yolov3.ckpt만이 업로드되어 있습니다. 다른 데이터셋 혹은 다른 용도로 학습을 진행하려면 새로 생성하셔야 합니다.) | ||
| 65 | 91 | ||
| 92 | + | ||
| 93 | + | ||
| 66 | 94 | ||
| 95 | +- **안드로이드 적용** | ||
| 67 | 96 | ||
| 68 | -학습에는 train.py (train/eval dataset)를, 평가에는 eval.py (test dataset)를 사용하시면 됩니다. | 97 | + - android implementation을 하는 경우에는 학습된 모델에 대한 pb 파일을 생성해야 합니다. |
| 69 | -학습에 사용하는 파일의 경로 및 hyper parameter 설정은 args.py를 참고하시기 바랍니다. | ||
| 70 | -평가에 대한 경로 설정은 eval.py에서 할 수 있습니다. | ||
| 71 | 98 | ||
| 99 | + code/pb/pbCreator.py를 참고하시기 바랍니다. (code/yolov3/test_single_image.py를 약간 수정한 파일입니다) | ||
| 72 | 100 | ||
| 101 | + | ||
| 73 | 102 | ||
| 74 | -data/trained에 임시 테스트용 trained model 파일이 업로드되어 있습니다. | 103 | + - android에서는 freeze된 model만 사용할 수 있습니다. |
| 75 | 104 | ||
| 105 | + code/pb/freeze_pb.py를 참고하시기 바랍니다. | ||
| 76 | 106 | ||
| 107 | + | ||
| 77 | 108 | ||
| 78 | -android implementation을 하는 경우에는 학습된 모델에 대한 pb 파일을 생성해야 합니다. | 109 | + - android_App/assets에 pb file을 저장한 후, DetectorActivity.java에서 YOLO_MODEL_FILE의 값을 알맞게 수정하시면 됩니다. |
| 79 | -code/pb/pbCreator.py를 참고하시기 바랍니다. (code/yolov3/test_single_image.py를 약간 수정한 파일입니다) | ||
| 80 | 110 | ||
| 111 | + | ||
| 112 | + | ||
| 113 | + - 이 학습 코드로 생성된 모델의 input, output node name은 | ||
| 114 | + | ||
| 115 | + 각각 input_data, {yolov3/yolov3_head/feature_map_1,yolov3/yolov3_head/feature_map_2,yolov3/yolov3_head/feature_map_3} 입니다. | ||
| 81 | 116 | ||
| 117 | + 모델의 node name 참고에는 Netron 프로그램을 사용하였습니다. | ||
| 82 | 118 | ||
| 83 | -android에서는 freeze된 model만 사용할 수 있습니다. | ||
| 84 | -code/pb/freeze_pb.py를 참고하시기 바랍니다. | ||
| 85 | 119 | ||
| 120 | + | ||
| 86 | 121 | ||
| 122 | +### 결과 예시 | ||
| 123 | +--- | ||
| 87 | 124 | ||
| 88 | -android_App/assets에 pb file을 저장한 후, DetectorActivity.java에서 YOLO_MODEL_FILE의 값을 알맞게 수정하시면 됩니다. | 125 | + |
| 89 | 126 | ||
| 127 | +예시 1 | ||
| 90 | 128 | ||
| 129 | + | ||
| 91 | 130 | ||
| 92 | -이 학습 코드로 생성된 모델의 input, output node name은 | 131 | +예시 2 |
| 93 | -각각 input_data, {yolov3/yolov3_head/feature_map_1,yolov3/yolov3_head/feature_map_2,yolov3/yolov3_head/feature_map_3} 입니다. | ||
| 94 | -모델의 node name 참고에는 Netron 프로그램을 사용하였습니다. | ||
| 95 | 132 | ||
| 133 | + | ||
| 96 | 134 | ||
| 135 | +#### Reference | ||
| 136 | +--- | ||
| 97 | 137 | ||
| 138 | +학습 코드는 [링크](https://github.com/wizyoung/YOLOv3_TensorFlow)를 기반으로 작성하였습니다. | ||
| 98 | 139 | ||
| 99 | -#### Reference | ||
| 100 | -학습 코드는 [링크](https://github.com/wizyoung/YOLOv3_TensorFlow)를 기반으로 작셩하였습니다. | ||
| 101 | 변경점은 code/yolov3/changes.txt를 참고하시기 바랍니다. | 140 | 변경점은 code/yolov3/changes.txt를 참고하시기 바랍니다. |
| 102 | 141 | ||
| 103 | android 코드는 [링크](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android)를 기반으로 작성하였습니다. | 142 | android 코드는 [링크](https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android)를 기반으로 작성하였습니다. |
| 104 | - | ... | ... |
-
Please register or login to post a comment