동적객체인지 온라인 해커톤2(과학기술정보통신부.nia 주관, aimmo 주최)
전반적인 해커톤 과정
글 읽는 순서
- github repository의 readme 파일- 파일 구성과 핵심 개요 https://github.com/BaekJongSeong/contest/blob/master/README.md
- github.io의 해커톤- yolov4 알고리즘에 대한 설명 https://baekjongseong.github.io/
- github.io의 해커톤2- 해커톤 전반적인 과정,특징 세부 설명 https://baekjongseong.github.io/
- github.io의 해커톤3- 아이디어 + 기술 부분의 라즈베리파이 위주 https://baekjongseong.github.io/
앞에서 말씀드렸듯이 해커톤을 3부분(아이디어 파트와 기술파트, 사업화파트)으로 나누어본다면
이번엔 전반적인 내용을 다룹니다.
1. idea Section
주제가 “자율주행차량”과 관련된 아이디어를 제출해야했으므로
아이디어 파트에서는 “ 자율주행차량 “에 기능적으로 도움이 될 만한 부분들을 조사해보았습니다.
다음은 조사한 결과입니다.
- 자율주행 관련 ADAS 보조 시스템 기반 시장 동반 성장
- 자율주행에 있어서 노면 품질관리는 매우 중요
- 도로 관리 현황 미흡
- 도로 보수 담당 부서: 도로 운영과
- 도로 조사 기간: 1월 ~ 3월, 통계 주기: 매년,
- 공표시점: 매년 5월(조사 기간이 매우 짧다는 단점)
- 거리 제한에 국한되어있는 상황
- VMS 가변전광표지판과 웨비게이션(weather + navigation)은 특정 지점,구간단위로 한정
그래서 해외 성공사례를 바탕으로 +차량 탑재용 소형 장비 개발 부분으로 초점을 맞췄습니다.
그 결과 SOS(Sense Object with Self-driving car)라는 이름으로
주행 중 보수가 필요한 도로/시설물(객체) 감지 시 도로관리청과 실시간으로 통신하는 자율주행차량 부품 및 통계 플랫폼
이라는 아이디어를 제안했고 해당 아이디어를 구현하기 위한 기술들을 조사했습니다.
라즈베리파이로 통신한 내용은 3편에서 다룰 예정이고
현재 1편에서는 yolov4와 CNN관련 알고리즘을 다루었으며
지금 게시중인 2편의 뒷부분은 전반적인 실습 과정을 다루려고 합니다.
2. tech section
앞에서 설명했다시피 제 아이디어의 핵심은
동적객체인지구현으로 파손된 도로를 인지
하는 것입니다. 이것을 실행하기 위해서 여러 알고리즘을 조사해봤는데
딥러닝에서부터 이야기를 시작해보면 가장 먼저 예측이냐? 분류냐?를 구분해야하고, 무수히 많은 gradient descent를 기준으로
함수 자체를 복잡하게 안하면서(gradient descent), 파라메터 갯수를 늘려서 성능을 올리자는 것이 주요 핵심이였고,!
DNN과 CNN으로 이야기를 이어가보면
데이터 전처리는 Data labeling(이미지에 대한 분류값 지정)과정을 거쳐서, CNN을 위한 filter 처리를 진행. Filter를 input data에 적용하여 feature map 생성. Filter 값은 input data의 특징을 학습하는 가중치 행렬이다. 그래서 동일한 filter로 input data 전체에 합성 곱 연산(convolutional)을 적용.
CNN을 거친 후 DNN을 거친다. 이미지는 현재 2차원 형태인데, 연산을 줄이기 위해서 가중치 수를 줄이며 filter로 feature map을 형성을 여러 번 거친다. DNN은 입력층과 출력층 사이에 여러 개의 은닉층이 존재함으로써 파라메터 개수를 늘리고 가중치를 부여하여 연산을 여러 번 거치며 최적의 딥러닝 모델을 찾아가게끔 설계되어 있다. 이때 image data를 가지고 DNN을 실행하기 위해서는 2차원의 데이터 형식을 1차원의 배열 형태로 길게 바꿔준 후에 작업을 들어가야 한다. (flatten 작업).
그 다음에 R-CNN SPPnet fast R-CNN 등이 나왔지만 성능 비교조사 결과 Yolo가 가장 훌륭한 성능을 보여준다고 하여 선택하게 되었습니다.
이때 yolov4의 장점은 2. github.io의 해커톤- yolov4 알고리즘에 대한 설명 https://baekjongseong.github.io/ 를 참고해주시면 될 것 같습니다.
이때 중요한 것은, “자율주행에서의 동적객체인지” 라는 점입니다.
주행. 1초에 몇십m를 왔다갔다하는 순간에 객체를 인지해야하기 때문에
적어도 초당 30FPS는 나와야 써먹을 수 있습니다.
여기서 프레임이란 영상을 나누었을때 시간상 연속된 정지 사진들의 모음으로 볼 수 있는데, 이 각각의 정지 사진 하나가 ‘프레임’입니다.
그렇기 때문에
- 어느정도 객체인지 성능이 나와주면서도
- 빠르면서(객체 처리 속도가)
- 30FPS이상은 나와주고(끊김 현상 방지)
- 인지 후 제어까지 몇 밀리초 단위로 끊을 수 있어야한다는 생각을 했습니다
이런 이유때문에 더더욱 Yolov4를 선택했습니다.(추후, 현재 업데이트된 yolov5도 다뤄볼 예정입니다.)
그래서 전체 데이터중에서 empty annotation인 json파일과 png 파일들을 제거하고 학습을 시켰더니
위 사진처럼 정상적인 곡선을 보였습니다.