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