기상 상황에 따른 도로 노면 분류 프로젝트(2)

임정민·2023년 7월 16일
3

프로젝트

목록 보기
22/33
post-thumbnail

중고 수입차 가격 예측 프로젝트 입니다.

기상 상황에 따른 도로 노면 분류 프로젝트(1)에 이은 발표 PPT 및 설명입니다.

발표 및 PPT

안녕하십니까. 기상 상황에 따른 도로 노면 분류라는 주제로 AI반 딥러닝 미니 프로젝트를 진행한 임정민입니다. 반갑습니다.

발표 목차입니다. 보이시는 순서와 같습니다.

프로젝트 주제는 차량 운행 중에 빗길이나 눈길 등 안전을 위협하는 노면을 분류하는 프로젝트입니다.

주제 선정 배경은 정보통신산업진흥원의 2023년 ICT 기술 동향 보고서에 기재된 두가지 기술 키워드 참고하면서 주제를 선정하게 되었습니다. 첫번째로 통합모빌리티 서비스의 확대, 두번째로 차량대인프라통신 기술의 확대입니다. 이를 자세히 설명드리면,

해당 보고서에서 통합 모빌리티 서비스라고 하는, 자율주행차를 기반으로 이제는 상업적인 서비스가 확대될 것이다 라고 언급했습니다. 예를 들어, 무인택시나 자율주행셔틀,무인 트럭 등이 예시입니다.

이 중 자율주행셔틀의 경우 현재에도 청계천,청와대 일대를 운영중입니다. 이 자율주행셔틀의 특징 중 한가지가 Level3 자율주행시스템으로 평시에는 시스템이 운전하다가 유사시에 운전자의 개입이 필요할 때에만 시스템이 요청할 때만 대기하고 있던 운전자가 조작하는 구조인데 이럴때, 운전자가 비운전 상황에서 안전에 관련한 요소들을 모니터링할 수 있는 시스템이 필요하지 않을까라는 생각에서 도로 노면 분류 모듈 개발에 아이디어를 얻었고

두번째로 보고서에 차량대인프라통신 기술의 확대라고 언급된 점인데 먼저 차량대인프라통신이라는 것은 인근 도로를 주행하는 차량들끼리 수집한 정보들을 공유하면서 서로 안전하게 운행할 수 있게끔 도와주는 기술을 말하는데 제 프로젝트 주제에 대입하자면

만약에 광역버스, 고속버스처럼 주기적으로 왕복하는 차량에 카메라를 달아서 도로 구간별로 실시간 노면 상태 정보를 수집할 수 있다면 우측에 보이시는 것처럼 카카오맵과 같은 지도상에 어느 구간이 빙결되어 있는지 표시하는 서비스로 확장될 수 있겠다라고 생각하였습니다.

이 프로젝트를 수행하기 위한 첫 단계로 데이터 수집과 전처리 부분입니다.

데이터는 보이시는 사진들처럼 도로 노면이 보이는 이미지 데이터들이 필요한데 유튜브에 도로 주행 영상들이 있습니다.(비오는날/눈오는날 주행영상이 있습니다.)

이 영상들을 프레임단위로 잘라서 2만개 정도 데이터를 수집했고 추가적으로 AI HUB에 있는 '다양한 기상 상황 주행 데이터' 1만개까지 합하여 총 3만개 데이터 3개 클래스 맑음,빗길,눈길 데이터를 구축하였습니다.

영상 데이터를 이미지 데이터로 변환할 때 주의해야 했던 점이,

좌측에 보시면 동영상의 스펙입니다. 한 동영상의 총 프레임수나 fps 초당 프레임수 알 수 있는데

이때, 일단 데이터를 많이 확보하기 위해 5프레임당 1장씩으로 전처리하였습니다. 하지만 데이터를 직접 살펴보았을 때 짧은 간격 단위로 처리하다보니 연속적인 , 모델이 학습하는 관점에서 비슷한 사진들만 나열되는 것 같아 프레임 간격을 더 늘려서 비교적 불연속적인 이미지들로 구성하였습니다.

더 크게 보자면 이런식입니다. 맨 처음 사진들은 거의 같은 시점의 사진이고 프레임 간격을 늘렸을 때 이전 사진과 명확히 구분되는 데이터들로 재구축하였습니다.

그 다음 전처리 과정인데

좌측에 원본 데이터를 보시면 현재 프로젝트에서 필요한 도로 노면 부분 이외에 절반정도는 하늘이나 구조물이 차지하고 있어서 transform에서 수평선 기준으로 절반 자르고 하단의 사진으로 crop하였습니다.

이 과정에서 사다리꼴 형태로 도로 노면 자체만 잘라보려고도 했는데 이게 세심하게 잘랐을 때는 수집한 데이터 마다 카메라 각도가 다르거나 차종이 다르다 보니 차체 높이가 달라서 저에게 노면 이미지가 훼손되는 경우도 있었습니다. 그리하여 일괄적으로 절반정도만 잘라서 진행했습니다.

이렇게 자르면 원본 이미지에서 도로 노면이 주가 되게끔 데이터를 구성할 수 있고 이 데이터들을 가지고 CNN 기반 모델들, Alexnet, VGG16,Resnet34 모델들로 학습시켰습니다.

결과는 3가지 모델 전부 전반적으로 다 매우 높은 수치, 0.98이상의 정확도를 보였습니다. 특히, Resnet34 같은 경우는 테스트 데이터 6000개 기준으로
18개만 틀린 지표입니다.

그리고 Loss 값 기준으로 Early Stop을 걸어두었었는데 대부분 1 epoch ~2 epoch에 끝났었고 정확도만큼이나 이상적인 형태로 떨어지는 모습을 볼 수 있었습니다.

모델이 어떤 이미지를 어떻게 예측했는지 시각화해서 보여드리면

이런식으로 나옵니다. 정확도 기준 가장 높은 Resnet34의 예측값들입니다. 사진이 주어졌을 때 상단에 있는 title이 모델이 예측한값입니다. 순서대로 맑은날씨의 데이터가 주어지면 Normal, 눈길이면 Snowy, 빗길이면 Rainy로 예측된 모습입니다.

추가적으로 맨 마지막 이미지처럼 저렇게 도로 자체가 안보이고 카메라에 습기가 찬 데이터들은 빗길 데이터이고 대부분 Rainy 맞혔습니다.

그런데 여기서 99퍼센트라는 정확도가 학습 데이터 기준이기 때문에 실전에서까지 이정도의 성능을 보장할 수는 없습니다. 그래서

학습에 사용하지 않은 임의의 도로 노면 이미지들을 랜덤으로 넣었을 때의 예측 값들을 살펴보았고 여기서 몇가지 부정적인 이슈를 알게 되었습니다.

좌측에 실제값이 Normal인 케이스를 보자면 예측이 잘 되는 것도 있지만 밑에 사진이 맑은 날씨이지만 눈길로 분류된 경우가 있었습니다. 터널을 통과하고 나가는 시점의 데이터인데 나갈때 터널 밖의 빛이 쬐는 구도라서 카메라에는 햐얀색깔로 비춰지는 모습이니다. 이 때문에 눈길로 분류한 것으로 추정됩니다. 제 데이터셋 기준 일부 터널을 지나가는 사진들이 있긴하지만 전체 갯수에서 보았을 때는 극히 일부이기 때문에 이러한 잘못된 예측이 일어난 것 같습니다.

그리고 중간에 실제값 빗길인 경우도 보시면 대부분 빗길로 맞춘 데이터가 많았지만 아래 사진, 도심에서 주행하다가 신호등에 걸려서 횡단보도 앞에서 대기하는 시점을 사진입니다. 이때 횡단보도의 하얀 블럭이 있어 눈길로 인식한 케이스인데 이번 프로젝트에서 수집한 데이터 영상이 주로 고속도로 주행 영상이다 보니 도심에서 주행한 데이터가 부족해서 발생한 일이 아닌가 생각됩니다.

제 프로젝트 특성상 눈길,빙판길을 분류하는게 가장 중요할 수 있는데 이부분이 오히려 양질의 데이터 부족으로 실전 기준으로는 어려울 수도 있겠다 라고 생각했습니다.

여기까지가 지난주에 프로젝트 때 작업한 내용들인데 주말에 딥러닝 특강 강의에서 배운내중 중에 제 프로젝트에 활용할만한 모델이 있어서 적용시켜보기도하고 기술 공유 하는 측면에서 보여드리려고 가져온 것이

Tag2Text라는 모델이 있습니다. 공개된지 한달 정도된 따끈따끈한 오픈소스 모델입니다. 이 모델이 뭘할 수 있는지 먼저 보여드리면

어떤 이미지가 들어갔을 때
첫번째로 이 이미지안에 어떤 물체가 있는지 단어로 나열해줍니다.
그 다음에 단어를 입력해주면
제가 입력한 단어를 중심으로 이미지에 대해 묘사를 해줍니다.

결론적으로 이미지가 들어가면 사용자가 원하는 방향으로 서술을 해주는데 제 프로젝트에서 수집한 이미지 데이터들, 예를 들어서 빗길 주행 사진을 넣어서 묘사해주는데로 도로 노면을 예측하면 되지 않을까? 라고 생각해서

빗길 주행 사진을 넣어봤는데 이미지 안에 rain, fog, highway 와 같은 단어들이 나왔고 weather를 입력해서, 날씨 중심으로 서술해달라고 했을 때

이렇게 '비오는 날 안개가 낀 운전 자의 모습' 이런식으로 나옵니다. 이걸 보고
앞서 CNN으로 예측한 것처럼 이 모델에 전체 3만개 데이터셋 넣어서 묘사해주는 글 바탕으로 예측해보자해서

모든 데이터에 대해 예측해보았습니다.

위의 표 형식 그림을 보시면
1) 사진이 들어가면
2) 물체나 상황에 대해 단어를 나열해주고
3) 입력한 단어중심으로
4) 묘사를 해준다음
5) 실제값과 입력값을 비교해서

정확도를 계산해보았는데 0.86정도 나왔습니다.

물론 이 안전에 관한 판단을 생성모델에게 맡기는 게 지금단계에서는 위험할 수도 있지만 저는 이 가능성 자체에 대해서 말씀드리고 싶었고

이 모델이 좋은점이 추론속도가 빠른편입니다. 3만개 기준으로 20000초 정도 걸리는데, 이미지 1개 들어갔을 때 0.7초면 아웃풋이 나오는 모델이라서
서버만 구축하면 바로 서비스에 활용될 수 있지 않을까 라고 생각합니다.

여기까지가 오늘 준비한 CNN,Tag2Text를 활용한 도로 노면 분류 내용이였습니다.

오늘 전달해드리고 싶은 내용들을 요약하자면

  1. CNN의 대표적인 Task인 이미지 분류로 도로 노면 상태를 분류할 수 있다.
  2. 단, 터널 / 도심 / 야간 주행 데이터까지 포함해야 실전에서의 성능까지 끌어올릴 수 있다.
  3. 이미지를 텍스트로 묘사하는 Tag2Text 모델로 CNN을 대체하거나 새로운 프로젝트에 응용할 수 있다.

라는 점입니다.

네. 이상을 발표를 마치고 질문받고 마무리하겠습니다. 감사합니다.

profile
https://github.com/min731

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

대박 멋지다

1개의 답글