DongyoungKwon

Update README.md

Showing 1 changed file with 125 additions and 41 deletions
...@@ -2,23 +2,62 @@ ...@@ -2,23 +2,62 @@
2 2
3 ## Table of Contents 3 ## Table of Contents
4 - [프로젝트 소개](#프로젝트-소개) 4 - [프로젝트 소개](#프로젝트-소개)
5 + - [주요 기능](#주요-기능)
6 + - [시스템 구조](#시스템-구조)
5 - [디렉토리 구조](#디렉토리-구조) 7 - [디렉토리 구조](#디렉토리-구조)
6 - [실행 방법](#실행-방법) 8 - [실행 방법](#실행-방법)
7 - [참조](#참조) 9 - [참조](#참조)
8 - [팀원](#팀원) 10 - [팀원](#팀원)
9 -<br><br> 11 +
12 +<br>
10 13
11 ## 프로젝트 소개 14 ## 프로젝트 소개
12 15
13 <img src="/uploads/2f442cc7eea9bd0f4eada9af25a1661c/1.gif" width="300" height="150" /> 16 <img src="/uploads/2f442cc7eea9bd0f4eada9af25a1661c/1.gif" width="300" height="150" />
17 +
14 <br> 18 <br>
15 -<img src="/uploads/fe4fb3dafda1db03d437de45260a15af/2.gif" width="300" height="150" /> 19 +
20 +**YOLO-v5 기반으로 단안 카메라의 영상을 활용해 차간 거리를 일정하게 유지하며 주행하는 Adaptive Cruise Control 기능을 제공한다.**
16 21
17 <br> 22 <br>
18 23
19 -**딥러닝을 이용하여 저렴하고 데이터 처리가 용이한 카메라를 통한 영상인식 기술을 활용해** 24 +## 주요 기능
20 -**차간 거리를 일정하게 유지하며 주행하는 Adaptive Cruise Control 기능을 제공한다.** 25 +
21 -<br><br> 26 +1. 객체 인식
27 + * 복도에서의 차량 카트 이미지를 촬영하여 커스텀 데이터셋을 제작
28 + * YOLO-v5 모델 중 가장 초당 프레임 수 가 높은 YOLO-v5s에 커스텀 데이터셋을 학습
29 + * 라즈베리파이에 부착된 웹캠을 통해 실시간으로 전방 차량 인식
30 +
31 +2. 거리 측정
32 + * 객체 인식 시 나타나는 Bounding box의 좌표값을 추출하여 대상과의 거리가 1m 일 때 Bounding box의 높이와 너비값을 측정
33 + * 이후 인식된 객체의 Bounding box 높이와 너비값과 1m 일 때의 Bounding box 높이와 너비값의 비례식을 통해 거리를 측정
34 +
35 +3. 거리 유지
36 + * 측정된 거리를 기반으로 동작을 나누어 시리얼 통신을 통해 동작 신호를 cart를 조작하는 STM보드에 전달
37 + * STM보드에서 전달받은 신호를 기반으로 PWM 제어를 통해 차간 거리가 유지되도록 속도 조절
38 +
39 +<br>
40 +
41 +## 시스템 구조
42 +
43 +### 거리유지 시스템 구조
44 +
45 +![image](/uploads/10564939ae66017569ad7e7e70d9c815/image.png)
46 +
47 +<br>
48 +
49 +### 겍체 인식 및 거리측정 시스템 구조
50 +
51 +![image](/uploads/6e70810da0113cb50664938bc93f09ce/image.png)
52 +
53 +<br>
54 +
55 +### 거리측정 알고리즘
56 +![image](/uploads/1ea9036613c135a7edfd81eb1afece70/image.png)<br>
57 +
58 +- 카메라의 해상도에 따라 1m에서 기준이 되는 Bounding box의 width와 height의 크기가 달라진다
59 +
60 +<br>
22 61
23 ## 디렉토리 구조 62 ## 디렉토리 구조
24 ```shell 63 ```shell
...@@ -48,65 +87,110 @@ HEN_Project2 ...@@ -48,65 +87,110 @@ HEN_Project2
48 87
49 └── detect.py 88 └── detect.py
50 ``` 89 ```
51 -<br><br> 90 +
91 +<br>
92 +
93 +## 결과
94 +
95 +### 실시간 객체 인식 및 거리측정
96 +
97 +<img src="/uploads/fe4fb3dafda1db03d437de45260a15af/2.gif" width="300" height="150" />
98 +
99 +* 학습된 가중치 모델을 바탕으로 단안 카메라를 이용하여 전방 차량 키트를 인식하였다.
100 +
101 +* 인식된 차량 키트에 대한 Bounding box에서 왼쪽부터 클래스명, 예측 정확도, 단안 카메라 기준 예측 거리(cm) 를 나타낸다.
102 +
103 +* 인식 결과, 이미지 크기 128*128 기준 평균적으로 `초당 약 3 프레임의 속도`로 동작하였으며, `최대 5m`까지 높은 정확도로 인식됨을 확인할 수 있었다.
104 +
105 +* **거리 예측 오차율 측정 결과**
106 +
107 +| 실제 거리 | 측정 최소 거리 | 측정 최대 거리 | 최대 오차율 |
108 +| :---: | :---: | :---: | :---: |
109 +| 0.5m | 0.47m | 0.53m | 6% |
110 +| 1m | 0.96m | 1.02m | 3% |
111 +| 2m | 1.98m | 2.02m | 1% |
112 +| 3m | 2.85m | 2.94m | 5% |
113 +| 5m | 4.65m | 5.05m | 7% |
114 +
115 +### 거리유지
116 +
117 +#### 동작 설정
118 +
119 +1. 전방 차량과의 거리가 70cm보다 가까워진 경우 **차량 정지**
120 +2. 전방 차량과의 거리가 70cm ~ 120cm인 경우 **큰 폭으로 속도 감소**
121 +3. 전방 차량과의 거리가 120cm ~ 150cm 인 경우 **작은 폭으로 속도 감소**
122 +4. 전방 차량이 없거나 거리가 150cm 보다 먼 경우 **원래 주행 속도로 복구**
123 +
124 +#### 거리유지 기능 실험 결과
125 + * 기준 주행 속도는 차량 키트가 스스로 움직일 수 있는 최저 속도로 설정하였다.
126 + * 테스트 결과 거리가 1m에 가까워 지면 상당히 속도가 줄어들었고 70cm에 이르면 차량 키트가 완전히 정지하였으며, 전방에 가까운 차량이 없으면 원래의 주행 속도로 돌아오는 기능 또한 정상적으로 동작함을 확인 할 수 있었다
127 +
128 +<br>
52 129
53 ## 실행 방법 130 ## 실행 방법
54 131
55 ### YOLO 설치 132 ### YOLO 설치
56 133
57 -라즈베리파이에서 `git clone https://github.com/ultralytics/yolov5` 134 +라즈베리파이에서 `git clone https://github.com/ultralytics/yolov5` 후 안내에 따라 필요한 모듈 설치
58 -안내에 따라 필요한 모듈 설치
59 135
60 <br> 136 <br>
61 137
62 ### YOLO 구성 및 구동 방법 138 ### YOLO 구성 및 구동 방법
63 -1. car_data 폴더 : yolov5 모델 학습에 사용된 커스텀 이미지파일 포함 139 +**1.** custom_dataset 폴더 : yolov5 모델 학습에 사용된 커스텀 이미지파일 포함
64 -(label파일도 포함되어 있음) 140 +(label파일도 포함되어 있음)<br>
141 +-> 직접 제작 해야 함
142 +<br><br>
65 143
66 -2. yolov5 : yolov5 모델의 전체 구성파일이 포함 144 +**2.** yolov5 : yolov5 모델의 전체 구성파일이 포함<br>
67 -- 주요파일 145 + - 주요파일<br>
68 - 1) best.pt : 커스텀 이미지로 학습된 yolov5모델 146 + **1)** best.pt : 커스텀 이미지로 학습된 yolov5모델<br>
69 - 2) detect.py : 객체인식을 구동시키기 위한 파이썬 파일 147 + **2)** detect.py : 객체인식을 구동시키기 위한 파이썬 파일<br>
70 - 3) /data/car_data.yaml : 학습할 이미지파일들의 정보가 포함된 파일 148 + **3)** /data/car_data.yaml : 학습할 이미지파일들의 정보가 포함된 파일<br>
71 - 4) /models/yolov5s.yaml : 학습할 데이터셋의 뼈대 149 + **4)** /models/yolov5s.yaml : 학습할 데이터셋의 뼈대<br>
150 + **5)** yolov5s.pt : Pre-Trained 모델<br><br>
72 151
73 -- train을 위한 명령어 152 +**3.** train을 위한 명령어<br>
74 -(yolov5 폴더에서) 다음 명령어 실행
75 -`python3 train.py --img 128 --batch 3 --epochs 50 --data car_data.yaml --cfg ./models/yolov5s.yaml --weights yolov5s.pt --name custom3_car_yolov5s`
76 -- 파라미터 설명
77 - 1) img : 학습할 img size
78 - 2) batch : 한번에 처리되는 이미지 개수
79 - 3) epochs : 학습 반복 횟수
80 - 4) data : custom yaml 파일
81 - 5) cfg : 뼈대 yaml 파일
82 - 6) weights : 기초 가중치 파일
83 - 7) name : 학습한 가중치 파일과 관련 내용들이 들어갈 폴더명 (runs/train/에 생성된다)
84 -
85 -- 객체인식을 위한 명령어
86 (yolov5 폴더에서) 다음 명령어 실행 153 (yolov5 폴더에서) 다음 명령어 실행
87 -`python3 detect.py --weights best.pt --img 128 --conf 0.4 --source 0` 154 +`python3 train.py --img 128 --batch 3 --epochs 50 --data car_data.yaml --cfg ./models/yolov5s.yaml --weights yolov5s.pt --name custom3_car_yolov5s`<br>
88 -- 파라미터 설명 155 + - 파라미터 설명<br>
89 - 1) weights : 학습된 가중치 파일 156 + **1)** img : 학습할 img size<br>
90 - 2) img : 인식할 이미지 크기 157 + **2)** batch : 한번에 처리되는 이미지 개수<br>
91 - 3) conf : 인식할 객체의 최저 인식률 158 + **3)** epochs : 학습 반복 횟수<br>
92 - 4) source : 인식할 이미지 및 영상 파일 *(라즈베리파이에서 웹캠을 source로 하고 싶다면 '0'을 넣으면 된다)* 159 + **4)** data : custom yaml 파일<br>
160 + **5)** cfg : 뼈대 yaml 파일<br>
161 + **6)** weights : Pre-Trained 모델 파일 경로 (pt 형식 파일)<br>
162 + 아무런 값을 적지 않으면 ('') 랜덤한 weight 값으로 초기화 및 학습 진행 (깃헙 공식 오피셜, pre-train을 추천)<br>
163 + pre-trained 파일이란? : 학습 파라미터(weight와 bias)가 잘 초기화된 파일<br>
164 + **7)** name : 학습한 가중치 파일과 관련 내용들이 들어갈 폴더명 (runs/train/에 생성된다)<br><br>
165 +
166 +**4.** 객체인식을 위한 명령어<br>
167 +(yolov5 폴더에서) 다음 명령어 실행<br>
168 +`python3 detect.py --weights best.pt --img 128 --conf 0.4 --source 0`<br>
169 + - 파라미터 설명<br>
170 + **1)** weights : 학습된 가중치 파일<br>
171 + **2)** img : 인식할 이미지 크기<br>
172 + **3)** conf : 인식할 객체의 최저 인식률<br>
173 + **4)** source : 인식할 이미지 및 영상 파일 *(라즈베리파이에서 웹캠을 source로 하고 싶다면 '0'을 넣으면 된다)*
93 <br><br> 174 <br><br>
94 175
95 ## 참조 176 ## 참조
96 - Ultralytics, YOLO v5(2020), Retrieved June, 10, 2020, from https://github.com/ultralytics/yolov5 177 - Ultralytics, YOLO v5(2020), Retrieved June, 10, 2020, from https://github.com/ultralytics/yolov5
97 178
98 -- https://global.honda/newsroom/news/2020/4201111eng.html
99 -
100 - 이동석 외 4 저, 스테레오 카메라를 이용한 이동객체의 실시간 추적과 거리 측정시스템(2009) 179 - 이동석 외 4 저, 스테레오 카메라를 이용한 이동객체의 실시간 추적과 거리 측정시스템(2009)
101 180
102 - 이강원 외 1 저, 지형 공간정보체계 용어사전(2016) 181 - 이강원 외 1 저, 지형 공간정보체계 용어사전(2016)
103 182
104 -- https://github.com/yeongin1230/Self-driving-project/tree/main/Cart 183 +- https://github.com/seoh02h/ICNS-Self-Driving-Test
105 184
106 -- https://github.com/yeongin1230/Robot-arm 185 +- https://ropiens.tistory.com/44
107 -<br><br> 186 +
187 +- https://github.com/sungjuGit/Pytorch-and-Vision-for-Raspberry-Pi-4B
188 +
189 +<br>
108 190
109 ## 팀원 191 ## 팀원
192 +
110 - 권동영 (2016110307) 193 - 권동영 (2016110307)
111 - 신동해 (2018110651) 194 - 신동해 (2018110651)
112 -<br><br>
...\ No newline at end of file ...\ No newline at end of file
195 +
196 +<br>
...\ No newline at end of file ...\ No newline at end of file
......