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 | ... | ... |
-
Please register or login to post a comment