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 | +![dog1](/uploads/86f16320572b43a68055e48fc897e114/dog1.png) |
89 | 126 | ||
127 | +예시 1 | ||
90 | 128 | ||
129 | +![dog2](/uploads/2b42af6c6aba2b4c66af062bb5fe564e/dog2.png) | ||
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