Toggle navigation
Toggle navigation
This project
Loading...
Sign in
2020-1-capstone-design1
/
PET_Project1
Go to a project
Toggle navigation
Toggle navigation pinning
Projects
Groups
Snippets
Help
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Snippets
Network
Create a new issue
Builds
Commits
Issue Boards
Authored by
김성주
2020-06-21 19:13:18 +0900
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
38548e6a43820f99a29db531c1f3c11041d52333
38548e6a
1 parent
728c0178
fixed markdown and added result image
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
77 additions
and
39 deletions
ReadMe.md
ReadMe.md
View file @
38548e6
...
...
@@ -3,7 +3,6 @@
강아지의 위치와 크기를 인식할 수 있는 딥러닝 모델
## **팀 소개**
---
-
**지도 교수**
-
조진성 교수님
...
...
@@ -15,90 +14,129 @@
### 준비 사항
tensorflow-android 라이브러리의 최신 버전이 (2020.06.01 기준) 1.13.1입니다.
---
-
**학습**
따라서 android implementation까지 구현하는 경우에는
상위 버전과 호환이 되도록 라이브러리를 빌드하거나, 학습 혹은 pb 파일 생성 또한 tensorflow v1.13.1 이하로 진행하셔야 합니다.
- tensorflow-android 라이브러리의 최신 버전이 (2020.06.01 기준) 1.13.1입니다.
따라서 android implementation까지 구현하는 경우에는
상위 버전과 호환이 되도록 라이브러리를 빌드하거나, 학습 혹은 pb 파일 생성 또한 tensorflow v1.13.1 이하로 진행하셔야 합니다.
- annotation에는 labelImg 툴을 이용하여 xml을 생성하였습니다.
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 형태로 저장된 파일을 사용합니다.
데이터 하나의 형식은 {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} 형태로 저장되어 있습니다.
tfrecord_writer.py에서 입력으로 받는 txt 파일은
각 라인마다 {data index, image path, image width, image height, boxes} 형태로 저장되어 있습니다.
txt 파일 생성은 code/annotation_xml_parser.py를 참고하시기 바랍니다.
txt 파일 생성은 code/annotation_xml_parser.py를 참고하시기 바랍니다.
- 이 학습에서는 train/eval/test 데이터셋을 구분하여 사용합니다.
txt 파일에 대한 데이터셋 분리는 code/dataset_splitter.py를 참고하기시 바랍니다.
이 학습에서는 train/eval/test 데이터셋을 구분하여 사용합니다.
txt 파일에 대한 데이터셋 분리는 code/dataset_splitter.py를 참고하기시 바랍니다.
- annotation_xml_parser.py에서 입력으로 받는 xml 파일은
labelImg 툴로 생성된 Pascal VOC format XML 파일을 기준으로 합니다.
- 학습을 위해서 anchor 파일이 필요합니다.
annotation_xml_parser.py에서 입력으로 받는 xml 파일은
labelImg 툴로 생성된 Pascal VOC format XML 파일을 기준으로 합니다.
anchor 파일 생성에는 code/yolov3/get_kmeans.py를 참고하시기 바랍니다.
출력된 anchor를 code/yolov3/args.py의 anchor_path에 맞는 위치에 저장하시면 됩니다.
- 이 학습에서는 pretrained model을 불러와 fine tuning을 이용합니다.
학습을 위해서 anchor 파일이 필요합니다.
anchor 파일 생성에는 code/yolov3/get_kmeans.py를 참고하시기 바랍니다.
출력된 anchor를 code/yolov3/args.py의 anchor_path에 맞는 위치에 저장하시면 됩니다.
따라서 pretrained model 파일을 준비해야 합니다.
pretrained model은 [링크](https://pjreddie.com/media/files/yolov3.weights)에서 다운로드할 수 있습니다.
이 파일은 darknet weights 파일이므로, tensorflow model로 변환하려면 code/yolov3/convert_weights.py를 참고하시기 바랍니다.
(git에는 이미 변환된 yolov3.ckpt만이 업로드되어 있습니다. 다른 데이터셋 혹은 다른 용도로 학습을 진행하려면 새로 생성하셔야 합니다.)
이 학습에서는 pretrained model을 불러와 fine tuning을 이용합니다.
따라서 pretrained model 파일을 준비해야 합니다.
- 학습에는 train.py (train/eval dataset)를, 평가에는 eval.py (test dataset)를 사용하시면 됩니다.
학습에 사용하는 파일의 경로 및 hyper parameter 설정은 args.py를 참고하시기 바랍니다.
평가에 대한 경로 설정은 eval.py에서 할 수 있습니다.
pretrained model은
[
링크
](
https://pjreddie.com/media/files/yolov3.weights
)
에서 다운로드할 수 있습니다.
이 파일은 darknet weights 파일이므로, tensorflow model로 변환하려면 code/yolov3/convert_weights.py를 참고하시기 바랍니다.
(git에는 이미 변환된 yolov3.ckpt만이 업로드되어 있습니다. 다른 데이터셋 혹은 다른 용도로 학습을 진행하려면 새로 생성하셔야 합니다.)
- data/trained에 임시 테스트용 trained model 파일이 업로드되어 있습니다.
-
**안드로이드 적용**
학습에는 train.py (train/eval dataset)를, 평가에는 eval.py (test dataset)를 사용하시면 됩니다.
학습에 사용하는 파일의 경로 및 hyper parameter 설정은 args.py를 참고하시기 바랍니다.
평가에 대한 경로 설정은 eval.py에서 할 수 있습니다.
- android implementation을 하는 경우에는 학습된 모델에 대한 pb 파일을 생성해야 합니다.
code/pb/pbCreator.py를 참고하시기 바랍니다. (code/yolov3/test_single_image.py를 약간 수정한 파일입니다)
data/trained에 임시 테스트용 trained model 파일이 업로드되어
있습니다.
- android에서는 freeze된 model만 사용할 수
있습니다.
code/pb/freeze_pb.py를 참고하시기 바랍니다.
android implementation을 하는 경우에는 학습된 모델에 대한 pb 파일을 생성해야 합니다.
code/pb/pbCreator.py를 참고하시기 바랍니다. (code/yolov3/test_single_image.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 프로그램을 사용하였습니다.
android에서는 freeze된 model만 사용할 수 있습니다.
code/pb/freeze_pb.py를 참고하시기 바랍니다.
### 결과 예시
---
android_App/assets에 pb file을 저장한 후, DetectorActivity.java에서 YOLO_MODEL_FILE의 값을 알맞게 수정하시면 됩니다.
![
dog1
](
/uploads/86f16320572b43a68055e48fc897e114/dog1.png
)
예시 1
![
dog2
](
/uploads/2b42af6c6aba2b4c66af062bb5fe564e/dog2.png
)
이 학습 코드로 생성된 모델의 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 프로그램을 사용하였습니다.
예시 2
#### Reference
---
학습 코드는
[
링크
](
https://github.com/wizyoung/YOLOv3_TensorFlow
)
를 기반으로 작성하였습니다.
#### Reference
학습 코드는
[
링크
](
https://github.com/wizyoung/YOLOv3_TensorFlow
)
를 기반으로 작셩하였습니다.
변경점은 code/yolov3/changes.txt를 참고하시기 바랍니다.
android 코드는
[
링크
](
https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android
)
를 기반으로 작성하였습니다.
...
...
Please
register
or
login
to post a comment