김성주

fixed markdown and added result image

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