젯봇의 세번째 예제인 Road Following 를 보면서 정말 오랜만에 눈이 휘둥그래졌었는데, 이 예제가 바로 픽셀 좌표와 실제 월드와의 관계를 알기위한 딥러닝 방법을 사용하고 있길래 혼자서 몹시 흥미로워했던 것 같습니다.
(이 글은 당근 젯봇입양기3 에서 이어지는 글입니닷..!!! )
몇년 전 모 선행연구 프로젝트를 하면서 단안 카메라의 거리 산정에 대한 일을 한적이 있는데 그 때 너무 늦은 시간에 해당업무 담당이 되는 바람에 1달 정도 하루 24시간을 고민해서 나름 생각했던 원리대로 수행한 후 프로젝트를 마칠 수 있었어요. 그런데 이 Road Following 예제를 보니 당시에 결국 사용했던 방법이 생각나서 역으로 내가 무슨 방법을 썼던 것인지 이해가 되어 혼자 어이가 없어서 웃었었는데.. 그런 예제가 우리 젯봇의 3번째 예제가 되겠습니다.
Road following 예제를 위해서는 우선 다시 사진을 찍어야하는데, 이번에는 다소 특이한 라벨링을 해야합니다.
사진 이름에 원하는 x, y 좌표값을 달아준는것이죠.
사진을 원하는 장소에서 원하는 좌표값을 일일히 지정해서 찍어줍니다.
그런데 이 예제의 경우에 원하는 좌표값은 젯봇이 나아가고자 하는 목표 지점입니다.
위의 차선 예제의 경우 차선의 가운데 위치가 되겠습니다.
원래 차량 소프트웨어에서는 x 와 y 가 우리가 아는 것과 반대이지만 이번 예제는 알고 있는 좌표 체계와 같습니다.
사진을 촬영하기가 쉽지 않을수도 있으니 역시 데이터를 공유해놓았습니다. 여기
이제 딥러닝 trainig 을 하는 pytorch 감상을 해보겠습니다.
파이썬도, pytorch 도 사용하던 랭귀지나 프레임워크가 아니라서 getItem 함수가 거의 암호해독 하는 기분이긴 합니다.
사진 댓수는 간략히 테스트를 하는 수준이면 100장이면 충분해서 수업 시간에는 나노에서 트레이닝을 해도 나쁘지 않습니다. 하지만 만약 프로젝트 수준이 필요하다면 700장 이상이 좋기 때문에 그냥 왠만한 PC나 서버에서 트레이닝을 하는게 백배 좋습니다.
트레이닝이 끝나면 best_steering_model_xy.pth 라는 파일이 얻어집니다.
이것으로 우리는 inference 를 할 수 있겠습니다.
이런 딥러닝 방법은 매우 낮설 수도 있지만 사실 데이터 사이언스 측면에서 보면 매우 쉽고 흔한 방법이라고 생각이 드네요. -> 관심이 있다면 직접적인 관련은 없지만 딥러닝 측면에서 참고하고 싶다면 참고 논문 1, 참고 논문 2 을 보세요.
어쨌든 이렇게 훈련된 결과는 다음과 같이 깜찍하게 프로그램에서 활용하면 됩니다.
혹시 필요하시면 다운받아서 하세요
birdeye view 로 변경하지 않고 카메라 좌표계에서도 steering 값을 구하는 신박한 방법론이 되겠습니다.
물론 y거리가 달라지면 steering 값이 또 틀어지기때문에 y거리가 일정해야한다는 제약도 있기 때문에 데이터 수집 시에 신경을 써줘야한답니다.
의외로 젯봇 사용 시 어마무시한 장애요소가 있는데
그게 의외로 베터리이더군요.
젯봇 포스트 1에서 소개했던 베터리는 피치못한 사정으로 방치되었다가 방전되어 다시는 충전이 안되는 상황이 되었고 그 뒤에 새로 얻은 베터리도 수업 시간에 오랜시간 모터를 돌리다가 또 방전되어 운명을 달리했어요.
겨우 오늘 새로 구했으니 심플 테스트 영상이라도 올려보려고 합니다.
그런데 베터리가 끝까지 말썽이라 모터가 도는 시늉만 하다가 나노가 훅 꺼지시는 상황 -> 일단 영상 포기. ㅠㅠ
젯봇하고 베러리 상태 좋아지면 다시 영상 찍어보기로 하고 물러갑니다.
눈에 넣어도 안 아픈(?) 우리 학생들 프로젝트 영상은 나중에 따로 카테고리 만들어서 올리고.. 세상에 널리 널리 자랑하고 싶네요.
조만간에 본인들 동의 하에 제작 영상 올릴꺼구요.
글구.. 나중에 TRT 도 언급하고 싶은데.. 그건 정말 다음에요. ㅋㅋ
'JetBot' 카테고리의 다른 글
젯봇의 신체 구조가 궁금해졌다. (0) | 2019.10.29 |
---|---|
젯봇 입양기 3 (0) | 2019.09.16 |
젯봇 입양기 2. (0) | 2019.09.15 |
젯봇 입양기 1. (0) | 2019.09.15 |