지난 2022년도 2학기동안 짧은 시간이었지만 CV 공부를 조금 했었다.
사실 전혀 관심이 없었던 분야였는데 (아예 모르기도 했고) 드론팀에 속해있던 나는 제어쪽은 다른 학부연구생의 몫이 되었으니 비전쪽을 한번 공부해보는게 어떻겠냐고 교수님께서 제안하셨고, 뭐라도 해보자 싶어 공부를 시작했다.
처음엔 Yolo 논문을 주시고 일주일간의 논문 리뷰 시간을 가졌는데 처음 보는 개념이다보니 엄청 생소했던 기억이 난다.
mAP, CNN, Darknet, IOU 등등 모르는 개념이 천지였고 특히 CNN(Convolutional neural network)의 원리에 대해 이해하는데 매우 골치를 썩혔다. 그래서 그냥 암기를 하고 매일같이 읽다보니까 어느순간 불꽃 튀듯이 조금 이해가 가기 시작했다.
논문 리뷰후에 YOLO 이전의 Detection에 관한 논문들을 쭉 읽어보았고, 대충 어떤 흐름으로 컴퓨터 비전의 연구가 흘러왔는지 익혔다. 후에 occlusion(폐색) 관련 논문까지 읽었는데, 너무너무 어려워서 골치썩히던 찰나 다른 할 일이 생겨서 다행히 리뷰까지 할 필요는 없었다.
아무튼 이렇게 익히고 YOLOv5 버전을 이용하여 Custom Dataset을 이용해 직접찍은 사진 & 여러가지 변형을 거쳐 데이터셋을 늘려(위치를 바꾼다던가, RGB 값을 조절하여 필터를 씌운다던가 하는 등) 직접 학습을 시켰는데 생각보다 잘 인식돼서 매우 놀랐던 기억이 있다.
그리고 개인 사정으로 학부연구생을 그만두었다.
서론이 길었다. 캡스톤 디자인(1) 과목 주제를 방학동안 고민하던 중 휴대폰에 저장되어 있는 아이디어 메모들을 펼쳤다.
평소에 잡생각이 많아서 괜찮다 싶은 아이디어면 실현가능성을 고려하지 않고 쭉 적어내리는 습관이 있었는데, 이럴때
도움이 될까 하고 읽던 와중 눈에 띄는게 들어왔다.
"시각장애인용 보조 드론"
내용은 드론이 옆에 날아다니면서 주변의 지형 & 장애물을 파악하여 보행중인 시각장애인께 실시간 위험탐지 및 길안내를 한다는게 주요 골자였다. 물론 앞서 말했듯 현실성은 고려하지 않고 적었기에 실제로 만든다면 해결해야 할 부분이 많다.
하지만 '그냥 스마트폰을 쓰면 되잖아?' 하는 생각이 들었다. 마치 윙슈트 비행을 하는 사람들이 가슴팍에 고프로 마운트를 차듯이 스마트폰 마운트를 정면으로 하게 되면 나름 광각인 카메라에 많은 정보가 안정적으로 담길 수 있다고 생각했다.
물론 보행중 흔들림에 의한 요소 및 스마트폰 기종에 따른 화각 차이등... 여러가지 고려할게 많았지만, 돈받고 파는 서비스 수준이 아닌 어느정도 보조용으로서 활용도가 있을 것 이라고 생각하여 결정했다.
또 찾아보니 YOLOv5에서 학습된 .pt 모델을 iOS의 CoreML로 전환하는 방법이 있었다. 이미 학습된 .pt로 테스트 해본 결과 아이폰에서 잘 작동하는걸 확인한 후 커스텀 모델을 학습시키고 이를 활용하여 어플을 만들겠다는 계획을 세웠다.
주제 : 시각장애인용 보행 보조 어플리케이션
이 어플리케이션은 iOS 로 제작을 목표로 한다.
주요 기능(1차 목표) : YOLOv5를 이용하여 학습된 Custom model을 이용하여 주변 장애물 식별 후 음성 안내
추가적으로 구현하고 싶은 기능(Future work) :
- 라이다(Lidar)와 Object Detection을 동시 활용하여 특정 순간의 화상에서 위험 객체가 담긴 위치(Bounding Box)의 좌표를 받아와 Lidar에서 그 좌표에 대응하는 거리 값을 읽어 위험 물체가 임의로 설정한 위험 반경 안에 들어오면 안내
- 신호등 초록불 & 빨간불 인식(생각보다 한국 신호등에 대한 Dataset이 많이 없었다)
- 도보 네비게이션과 위험 물체 탐지를 동시에 구현(시간이 매우x10 오래 걸릴 것 같다)
- 버스 정류장에 서 있을때 도착하는 버스의 번호를 인식(버스정류장에서 '~번 버스가 잠시후 도착' 이라는 안내 멘트는 나오지만 시각장애인 분들은 몇번째로 도착하는 버스가 내가 타야할 버스인지 알기 어렵다. 실제로 버스를 기다리시던 중 나한테 이렇게 여쭤보신분이 있어서 안내해드린 경험이 있어 인상깊게 남았다. 하지만 어플리케이션이 너무 무거워 지고 기능이 많아지는 것은 지양하고 싶기에 보류)
이렇게 목표를 세우고 우선 인도보행과 관련해 한국에서 제작된 데이터 셋이 있을지 찾아보았는데....
AI-Hub
자세히보기 AI 허브가 추천하는 검색어입니다. 태그를 클릭하여 검색결과를 확인하세요.
aihub.or.kr
미친 사이트를 발견했다.
대충 설명을 읽어보니 정부의 지원을 받아서 데이터를 수집하고 가공 후 라벨링까지 끝난 양질의 데이터셋을 무료로 받을 수 있었다. 생각보다 너무너무 괜찮아서 혹시 내가 원하는 종류의 데이터셋도 있을까 찾아보았는데...
내 생각보다 훨씬 많은 라벨링을 구분해놓았다. 설명서를 다운받아 라벨링한 xml 파일을 조금 읽어보니, Bounding Box 정보는 당연하고 occlusion(폐색) 여부와 z-order 까지 라벨링이 다 되어있었다. 총 이미지는 352,810장, 300GB가량이다.
이 뿐 아니라 Surface Masking에 Depth Prediction(!!)까지 있었는데 Depth Prediction은 대충 읽어보니 스테레오 카메라로 찍은 화각차이를 GA-net을 통해 추출했다고 한다. 결론은 Bounding-box만 활용하기로 했다.
데이터를 모두 다운받으니 총 30개의 zip 파일이 받아졌고, 구글드라이브로 올리는데 각각 8시간정도 걸렸다.
이후 Colab을 이용하여 Google Drive 마운트 후 압축을 해제했다(따로 압축 풀고 올리면 시간이 너무 오래걸리고 내 하드 용량도 부족해서 ㅠㅠ)
!unzip 명령어 이후에 압축파일 이름은 숫자만 달라서 for문으로 돌릴까 했는데, 중간에 컴퓨터 절전모드 되면서 런타임 나가지는 것도 무섭고, 찾아보니 무지성으로 돌리다가 중간에 파일 한두개씩 빼먹는 경우도 있다는 글을 봐서 수동으로 하나하나 풀었다. 30개라서 그렇게 오래 걸리진 않았다.
근데 코랩에서 구글드라이브로 업로드 하는데 시간이 더 걸린다고 해서, 일단 런타임은 켜둔채로 지켜보고 있다.
지금 현재도 파일이 새로고침 할때마다 계속 업로드 된다. (중간에 누락된 폴더가 200개 정도 있다 ㅠㅠ 이따 다시 할듯)
암튼 업로드가 다 끝나면 xml 뜯어서 YOLO 라벨링 규격에 맞게 .txt로 뜯어 고치고 저장하는 코드를 코랩에서 돌리려고 한다. 확실히 예전에 연구실에서 커스텀 모델을 혼자 구글링해가며 노가다로 학습시켜본 경험이 도움이 됐다.
끗!
'프로젝트 : CV를 활용한 시각장애인용 어플리케이션' 카테고리의 다른 글
Part3 : 모델 학습 & Google Cloud Platform 환경 이전 (0) | 2023.05.10 |
---|---|
Part 2 : YoloV5 Custom Dataset 을 Train 하기 위해 XML->Yolo Format으로 변경 및 테스트 (0) | 2023.03.24 |