Link : https://www.youtube.com/watch?v=so9aCNwSJqw
- 참여 인원 : 박윤수, 윤병호, 차준영, 최현우
- 프로젝트 기간 : 2024/11/6 ~ 2024/11/12
- 자율 주행 기술에서 가장 중요한 것은 도로 주행의 안정성을 높이는 것입니다. 자율 주행 차량은 다양한 환경에서 수많은 객체들(차량, 보행자 등)을 정확히 인식하고, 이들과의 거리를 정확히 측정할 수 있어야 안전한 주행이 가능합니다. 따라서 본 프로젝트는 자율 주행 차량의 주행 안정성 강화를 목표로, 주행 중 객체 인식 및 거리 측정을 정확히 수행할 수 있는 모델을 개발하고자 합니다.
[Car 0.00 0 1.55 614.24 181.78 727.31 284.77 1.57 1.73 4.15 1.00 1.75 13.22 1.62]
[Car | 0.00 | 0 | 1.55 | 614.24, 181.78, 727.31, 284.77 | 1.57 1.73 4.15 | 1.00 1.75 13.22 | 1.62]
| 클래스 이름 | 트렁케이션 | 오클루전 | 관찰 각도(alpha) | 2D 상자 좌표 | 3D 크기 | 3D 위치 | 회전 각도 |
|---|---|---|---|---|---|---|---|
| Car | 0.00 | 0 | 1.55 | 614.24, 181.78, 727.31, 284.77 | 1.57, 1.73, 4.15 | 1.00, 1.75, 13.22 | 1.62 |
- 클래스 이름 (
Car): 객체 클래스 - 트렁케이션(truncation) (
0.00): 객체가 이미지의 경계에 의해 잘려진 부분(%).0.0은 잘려 있지 않음1.0은 완전히 잘려 있음 - 오클루전(occlusion) (
0): 객체가 얼마나 가려져 있는지 나타냄.0은 가려지지 않음,1은 부분적으로 가려짐,2는 상당히 가려짐,3은 완전히 가려짐 - 관찰 각도(alpha) (
1.55): 객체가 카메라에 대해 회전된 각도를 라디안 값 - 2D 경계 상자 좌표 (
614.24 181.78 727.31 284.77): 객체 좌표. 순서대로xmin,ymin,xmax,ymax로, 좌측 상단과 우측 하단 모서리의 x, y 좌표 - 3D 크기 (
1.57 1.73 4.15): 객체의 실제 크기 (단위: 미터)로, 순서대로높이,너비,길이 - 3D 위치 (
1.00 1.75 13.22): 객체가 카메라로부터 떨어진 거리.x,y,z위치 좌표입니다. - 회전 각도 (
1.62): 객체의 회전 정도의 값
| 클래스 이름 | 개수 | 비율 (%) | 설명 |
|---|---|---|---|
| Car | 28,742 | 55.42% | 일반 승용차 |
| Van | 2,914 | 5.62% | 화물 밴 |
| Truck | 1,094 | 2.11% | 일반 트럭 |
| Pedestrian | 4,487 | 8.65% | 보행자 |
| Cyclist | 1,627 | 3.14% | 자전거 타고 있는 사람 |
| Misc | 973 | 1.88% | 기타 클래스 (특정 객체로 분류되지 않는 객체) |
| Tram | 511 | 0.99% | 도로 위 경전철 |
| DontCare | 11,295 | 21.78% | 모델 학습 시 무시해야 할 영역 및 객체 (출력되지 않음) |
| Person_sitting | 222 | 0.43% | 앉아 있는 사람 (보행자와 다른 클래스) |
| 총합 | 53,865 | 100% |
- Pedestrian, Person_sitting → Person
- Tram → Misc
- DontCare 삭제
| 클래스 이름 | 개수 | 비율 (%) | 설명 |
|---|---|---|---|
| Car | 28,742 | 70.85% | 일반 승용차 |
| Van | 2,914 | 7.18% | 화물 밴 |
| Truck | 1,094 | 2.7% | 일반 트럭 |
| Person | 4,709 | 11.61% | 사람 |
| Cyclist | 1,627 | 4.01% | 자전거 타고 있는 사람 |
| Misc | 1,484 | 3.66% | 기타 클래스 (특정 객체로 분류되지 않는 객체) |
| 총합 | 40,570 | 100% |
| Class | Objects | Percentage |
|---|---|---|
| Car | 55,983 | 71.01% |
| Person | 8,779 | 11.14% |
| Van | 5,831 | 7.40% |
| Misc | 2,836 | 3.59% |
| Truck | 2,386 | 3.03% |
| Cyclist | 3,020 | 3.83% |
| Total | 78,835 | 100.00% |
Stereo Vision은 두 개의 카메라(왼쪽, 오른쪽)를 사용하여 깊이 정보를 추정하는 기술입니다. 왼쪽 이미지와 오른쪽 이미지를 통한 동일한 객체의 위치 차이를 → “시차” 라고하며, 객체의 깊이를 계산합니다.
즉, 스테레오(두 개의 카메라) 비전에서 두 삼각형이 유사하면 대응하는 변의 길이 비율이 같다 라는 특성을 이용한 방법입니다
# num_disparities=5*16 80픽셀까지의 시차
def compute_sgbm_disparity(left_image, right_image, num_disparities=5*16,
block_size=11, window_size=5, display=False):
""" SGBM 알고리즘을 사용하여 완쪽 오른쪽 이미지의 시차를 계산합니다.
"""
# P1, P2 페널티
P1 = 8 * 3 * window_size**2
P2 = 32 * 3 * window_size**2
sgbm_obj = cv2.StereoSGBM_create(0, num_disparities, block_size,
P1, P2, mode=cv2.STEREO_SGBM_MODE_SGBM_3WAY)
# 시차 계산
# 16배 확대하여정수로 저장된 것을 16으로 나눠서 복원
disparity = sgbm_obj.compute(left_image, right_image).astype(np.float32)/16.0
# 시각화
if display:
plt.figure(figsize = (40,20))
plt.imshow(disparity, cmap='cividis')
plt.title('Disparity Map', size=25)
plt.show();
return disparityP1 : 시차 1픽셀 차이시 패널티
P2 : 시차가 크게날시 패널티
P2는 P1 보다 큰 값으로 설정하여 시차가 크게날 상황을 억제
cv2.STEREO_SGBM_MODE_SGBM_3WAY : 왼쪽-오른쪽 이미지 매칭을 세방향(왼쪽-오른쪽, 상단-하단, 대각선)으로 수행
- 640 X 640 Depth 결과
- 1245 X 375 (원본비율) Depth 결과
- Resizing이 Stereo Vision Disparity 안정성에 미치는 영향
- 640 X 640
- 1245 X 375
원본 이미지의 Bbox 비율이 Aspect Ratio와 맞지 않을 것을 고려해, 640x640 이미지로 Resizing하여 테스트하였지만, 오히려 원본 이미지에서의 disparity가 더 안정적인 것을 확인할 수 있었다.
원본 이미지의 Bbox도 Aspect Ratio에 맞는 비율로 확인
All classes에 대해 90%이상의 높은 성능을 확인할 수 있었습니다.
TP값 기준 모든 클래스 80% 이상으로 높은 성능을 확인 했습니다.
results(loss, mAP, precision, reacall)
각 클래스에 대한 AP, mAP 값
200epochs동안 Overfitting 없이 학습 회수에 따라 성능이 개선 됨을 확인 했습니다.







