2022 한이음 프로젝트 수행 및 공모전 수상 후기
수행기간 2022-04-12 ~ 2022-11-30


🔍 목차

  • 지원동기
  • 프로젝트 개요
  • 프로젝트 진행과정
  • 문제점과 느낀 점

1. 지원동기

☑️ 1.1. 참여계기

무엇보다 같은 분야에 관심이 있는 친구들과 팀으로 참여할 수 있고, 한이음 프로젝트가 몇 달에 걸쳐 이루어지는 프로젝트이기 때문에 체계적으로 진행할 수 있을 것 같았다. 다른 공모전은 상대적으로 준비할 시간이 짧은데, 한이음 프로젝트는 회의록도 매번 작성하고 일정관리나 피드백으로 도움을 주시는 멘토님도 계시기 때문에 지속적으로 프로젝트를 이어나갈 수 있는 점이 좋았다.

☑️ 1.2. 주제 선정 이유

2021년에도 한이음 프로젝트에 참여하면서 스마트팜을 주제로 하였는데, 학과 수업에서 배우지 않은 하드웨어를 직접 해보려니 어려운 점이 많았고 우리가 하고 싶은 데이터 분석, 머신러닝 모델을 이용한 예측까지 하기 위한 그 전의 작업이 오래걸렸다.
환경데이터와 버섯의 생장길이를 분석하여 성장률과 진행속도를 예측하는 모델을 생성하고 싶었는데, 하드웨어 및 연동 작업에 시간을 이미 많이 쏟았을 뿐더러 재배가 거듭되어야 필요한 데이터셋을 축적할 수 있었기 때문에 시간적인 아쉬움이 있었다.
그래서 새롭게 도전하는 프로젝트에서는 우리가 관심이 있고 공부해본 것을 응용해볼 수 있는 주제를 해보자 하여 교통사고 영상을 분류, 분석하는 주제를 선택했다.

2. 프로젝트 개요

☑️ 2.1. 프로젝트 소개

학습된 인공지능을 판단 시스템에 활용하여 교통사고를 분류 분석하는 서비스 제안

  • 딥러닝을 이용해 영상의 차량, 노면 표식, 보행자 등의 객체를 인식하고 학습된 AI 모델을 적용해 영상정보를 기반으로 과실 여부를 판단한다.
  • 웹 플랫폼을 통해 과실 비율 및 가장 영향을 미친 Critical Factor를 도출하고 리포트 결과를 제공한다.
  • 사고 상황 인식 알고리즘을 개발해 클라우드 플랫폼으로 사용자에게 서비스 제공 및 활용할 수 있게 한다.

현재 제공되는 과실 비율 판정 서비스는 만들어진 영상과 기준례를 보고 과실 비율을 짐작하여야 하는데, 본 프로젝트에서는 딥러닝 기반의 예측 모델을 활용하여 현장에서 교통사고 유형 및 과실 비율 짐작할 수 있다.

☑️ 2.2. 서비스 흐름도

전체적인 서비스 구성은 다음과 같다.

☑️ 2.3. 기능 흐름도(Flow Chart)

① 프로그램 실행
② 사용자가 사고 영상 업로드(MP4)
③ 동영상 파일 존재 여부 판단 (불가능하다고 판단 시, ①의 작업으로 돌아감)
④ 사용자의 CHECKBOX 입력을 인코딩 후 스키마 파일에 전달 - (1)
⑤ Custom Data Set으로 학습시킨 Yolov5 모델 ‘best.pt’를 이용한 객체 인식 진행
⑥ 인식된 요소들을 리스트(list) 형태로 인코딩 후 스키마 파일에 전달 - (2)
⑦ 인코딩된 요소들을 종합하여 CSV 파일의 형태로 결과파일(스키마) 완성
⑧ AI 모델에 전달된 결과로 사고 분류 가능한지 판단 (불가능이라고 판단 시, ③의 작업으로 돌아감)
⑨ AI 모델이 전달된 결과로 과실 판단 진행 (존재하지 않는다면, 기본 과실 비율 및 Critical Factor 출력)
⑩ 최종 과실 비율, 사고분류번호 및 Critical Factor 출력

☑️ 2.3. 완성된 웹페이지 예시 (4 페이지 중 두 페이지)

☑️ 2.4. 프로그램 작동 동영상

📽시연동영상 링크
https://youtu.be/OrenrsUgLII
https://youtu.be/OrenrsUgLII
https://youtu.be/OrenrsUgLII


3. 프로젝트 진행과정

☑️ 3.1. 프로젝트 일정

프로젝트는 아래와 같은 일정으로 진행되었다.

(1) 4월 계획 및 분석

  • 프로젝트 방향 설정 및 계획 구체화
  • 필요 기자재 계획 수립
  • 영상 객체 인식 알고리즘 분석

(2) 5-6월 설계 및 적용

  • 영상 객체 탐지 알고리즘 적용
  • 서비스 기능과 플랫폼 설계
  • 영상 분류 모델 학습 과정 및 스키마 데이터셋 설계

(3) 7-8월 개발 및 학습

  • 객체 인식 알고리즘 학습
  • 딥러닝 분류 모델 학습
  • 웹서비스 GUI 구성

(4) 8-9월 테스트 및 보완

  • 서비스 동작 테스트
  • 통합 테스트
  • 피드백 및 추가 수정개발

☑️ 3.2. 딥러닝 모델 설계

나는 어떤 사고인지 분류하고 과실비율을 출력으로 내보내는 딥러닝 모델을 만드는 역할을 맡았는데, 영상을 어떻게 학습시킬지, 모델을 어떻게 이용할지에 대해 고민이 많았다.

> 영상 시퀀스 학습에 대한 문제점💥
프로젝트를 시작하며 영상 데이터는 영상을 학습시키는 것이 아니라 프레임으로 받아와 이미지데이터로 처리해야 한다는 것을 알게 되었고, 우리가 분류모델로 분류하고자 하는 내용이 행동 영상 분류 모델처럼 이미지에 대한 특성이 있는 것이 아니었다.
따라서 모델이 전체 비디오 시퀀스를 보는 것이 아니라 각 프레임을 독립적으로 생각하기 때문에, 우리가 학습시키고자 하는 블랙박스 영상은 프레임으로 자르면 컴퓨터가 받아들이기에 정말 비슷한(전부 비슷한 색과 위치에 대한 특징이 없는, 이미지에 대한 피처맵을 만들 수 없는) 이미지 였다. 그래서 이미지에 대한 시퀀스를 학습시키는 방안이 없을지 고민해보았으나, 관련 논문과 참고할 코드가 적고 시퀀스 모델을 이용하여 영상 학습 시 사고 분류별로 학습시킬 영상 하나하나마다 엄청난 양의 이미지 데이터셋이 필요한 문제점이 있었다.

> 대안 ▶️ 영상 정보 스키마 파일 생성
이러한 문제점의 해결로 객체인식을 이용하는 방식을 생각해 내었다. 객체인식을 통해 어떤 도로에서 일어난 사고인지 알 수 있도록 객체인식 결과에 대한 파일을 생성하고 그 메타정보를 학습시키는 방법이다. 객체인식으로 알 수 없는 정보는 웹에서 사용자와의 상호작용을 통해 받아올 수 있도록 하여 그 정보도 함께 이용하였다. 딥러닝 모델의 입력으로 객체인식 결과와 사용자에게 받은 체크리스트를 사용한 것이다.

(1) Input

YOLO모델의 학습데이터로 사용한 이미지 데이터셋은 위와 같은데, 사고 분류 모델의 입력데이터로 위 객체들의 존재 여부 csv파일을 사용한다.


또 웹 서비스에서 사용자에게 체크리스트로 받은 다음의 추가 정보도 입력데이터로 함께 사용한다.

(2) 모델 아키텍처

기본적인 시퀀스 모델을 이용하여 입/출력 레이어 각 1개, 히든 레이어 2개 총 4층 구조로 구성했다.
또 사고를 분류하는데 중요한 객체들의 순서를 다른 모델을 통해 따로 정해두었기 때문에 시퀀스 모델에서는 입력데이터를 원-핫 벡터로 바꾸어 학습시켰다.

(3) Output

모델 출력 결과로는 아래와 같은 사고 번호와, 사고 유형에 따른 과실 비율을 제공한다.
(사고 유형 및 번호는 과실 비율 정보 포털의 사고분류 중 7가지를 선정하였다.)

(4) Critical Factor 제공을 위한 변수(객체) 중요도 확인

사고 분류하는데 중요한 역할을 한 객체 순대로 제공하기 위해 변수중요도를 출력하였다. 시퀀스 모델은 변수중요도가 출력이 안되기 때문에 Scikit-Learn의 앙상블 패키지에서 ExtraTree 모델을 사용하여 각 독립 변수의 중요도(feature importance)를 계산하였다. 아래는 모델이 사용한 특성에 대한 중요도를 시각화한 막대그래프이다. 모델이 중요하게 평가한 요인 순대로 발견된 객체 중 critical factor들을 출력했다.

변수중요도를 보면 내차든 상대방차든 차선변경여부가 사고 분류에 중요한 역할을 미치는 것을 알 수 있다.

(5) 전체 모델 입/출력 흐름

생각해보면 모델 만드는 것보다 모델에 넣는 데이터셋을 어떤 형식으로 생성하고 만든 데이터셋에 대해 전처리하고 어떤 기준으로 분류할 것인지 고민하는 데에 시간을 많이 소요했던 것 같다.


4. 문제점과 느낀 점

> 익숙치 않은 툴 사용과 역할 간 오류 공유 불가 문제
다들 툴에 익숙하지 않고 팀원별 역할에 따라 사용하는 툴이 달라서 본인이 사용하지 않는 개발 툴의 오류 발생 시 문제점을 같이 해결하기 어려웠다. 그래서 다른 팀원들이 문제가 발생하면 직접 문제를 해결하기보다는 여러 가지 해결방안을 찾아 제안해주는 방식으로 해당 툴 담당 팀원이 빠르게 문제를 해결할 수 있도록 도와주었던 것 같다.

> 영상 분류 모델과 이미지 처리 알고리즘에 대해 공부
객체 클래스 분류 문제처럼 확실하게 클래스가 나뉘는 문제가 아니라 비슷하게 생긴 영상의 교통사고 영상을 분류하는 데 어려움이 있어서 어떤 기준과 알고리즘으로 사고 유형을 분류해야 할지 모호했다. 이를 해결하기 위해 객체 인식으로 도로 유형을 분류할 수 있는 요소가 있는지, 차선 변경으로 사고번호를 구분할 수 있는 특징이 있는지 구분할 수 있는 다양한 요소를 추가하기 위한 의논을 하면서 영상 처리 알고리즘에 대해 공부하고 고민할 수 있는 기회가 되었다.

또 기존 계획으로 차선 인식의 알고리즘을 이용해 차선 변경 여부를 확인하는 데에 정확도가 낮아 최종 프로젝트에서의 활용에 어려움이 있어 체크리스트로 사용자에게 차선 변경 여부를 받고 차선인식을 제외하게 되었는데, 차선 인식의 정확도를 높여 사용했으면 좋았을 아쉬움이 남았다.

> 프로젝트를 마치며
데이터분석에 대해 배웠지만, 메타정보가 있는 데이터를 분석하는 일 외에는 해볼 기회가 많지 않았는데, 이번 프로젝트로 직접 데이터를 생산 수집하고, 라벨링 후 전처리하여 데이터셋을 만들 수 있는 시간이 뜻깊었다. 또 하나의 분류모델을 만드는 데에 있어서 결과 클래스의 범위를 어떻게 설정할지, 어떤 특성을 학습시키는데 이용할지, 데이터셋은 어떤 것을 쓰고 어떻게 활용할지 일일히 설정해주어야 함을 알게되었고 그에 따라 다양한 분류모델을 만들 수 있고 다양한 결과가 나온다는 것을 깨달았다.

초반 알고리즘 모델을 세밀하게 구상 하지 않은 채로 데이터셋 구축과 데이터 학습을 진행했다가 이후 모델 수정과 변경을 거듭하면서 필요한 데이터셋이 달라지기도 해 그 부분에서 시간을 많이 소요한 아쉬움이 남는다. 아이디어 구체화와 기획, 초반 설계의 중요성을 절실히 느꼈다.



우리 팀원들 최고!❤️

profile
📩 qtly_u@naver.com

0개의 댓글