목록공부/캡스톤 디자인 (22)
Broccoli's House
7회차 - (3) 학습 결과 훈련 데이터 - 데이터 1만개로 학습한 모델을 훈련 이미지와 시험 이미지에 대하여 각각 조향 데이터를 출력해보았다. 먼저 훈련 데이터의 경우, 1에폭만 학습하여도 라벨 값과 꽤나 유사하게 나오는 것을 맨 위의 그래프를 통해 확인할 수 있다. 70에폭의 학습이 완료되고 나면, 실제 조향 데이터와 거의 완벽하게 일치하는 것을 볼 수 있다. 시험 데이터 - 70에폭의 학습을 완료한 모델에 시험 이미지 1,000개를 통과시켜 조향 데이터를 출력하였다. 실제 라벨 값과의 차이는 위와 같았다. 모델의 출력값이 실제 라벨 값의 경향성 자체는 따라가지만, 세세한 부분에서 두루뭉술하게 나온다는 것과 그 값 또한 큰 차이를 보인다. 가장 문제는, 라벨과 모델 출력 값의 부호가 서로 반대인 지점..
7회차 - (2) 학습 모델 구성 : 배치 처리 모델 배치 처리 - 3천개 가량의 컬러 이미지로 모델 성능을 확인하기 위하여 단일 이미지 - 단일 라벨 방식으로 학습을 진행하였다. 컬러 이미지를 1만개 정도로 더 모아서 학습을 진행하려 하는데, 단일 데이터 학습 방식은 효과적이지 못하여 배치 단위로 학습을 하고자 한다. 단일 모델과 전체적인 구조에서 큰 차이는 없으나, 배치 처리 모델은 입력 데이터를 받을 텐서와 단일 이미지 정규화, 배치 정규화같은 부분에서 단일 모델과 차이가 있다. 입력 데이터 배치 처리 - 라벨인 조향 각도의 경우 텍스트 파일에 저장되어 있어서, 전체 조향 데이터를 파이썬에서 리스트의 형태로 불러다 배치 크기만큼 자르면 되서 그리 어렵지 않게 구현할 수 있다. 이미지의 경우에는 전체..
7회차 - (1) 학습 모델 구성 : 단순 모델 컬러 이미지 - 앞서 흑백 이미지로 데이터를 모아서, 학습 모델을 구성하여 학습을 시켰다. 그러나 코스트(Cost) 즉, 오차 값이 굉장히 큰 값에서 수렴하여 줄어들지 않았다. 실제로는 모델 구성에 오류가 있었으나, 데이터가 워낙 많고 모델도 복잡하게 구성하다보니 오류를 찾기가 쉽지 않았다. 따라서 적은 데이터와 비교적 간단한 모델로 학습을 하여 어느 정도의 성능을 확인한 다음, 데이터를 많이 모으고 모델을 더 복잡하게 하기로 하였다. - 이미지의 수를 적게 하기로 했기 때문에, 흑백 보다는 컬러 이미지로 다시 데이터를 모았다. 컬러 이미지와 흑백 이미지의 가장 큰 차이는 이미지의 개수가 같다하여도 컬러 이미지는 RGB, 3채널이기 때문에 흑백 이미지보다 ..
6회차 - (2) 이미지 크기 조절 및 자르기 이미지 크기 조절 - 현재 모아놓은 훈련 데이터 이미지는 (960X540), 1채널의 흑백 이미지이다. 픽셀 수는 약 51만개로, 이 정도 데이터의 크기로 딥러닝 학습을 할 경우 시간이 매우 오래 걸린다고 판단하였다. 또한 현재 프로젝트의 모태가 되는 NVIDIA DAVE 2에서는 실제 도로 이미지를 사용하는 데에도 (200X66), 3채널의 컬러 이미지를 사용하였다. 컬러 이미지라 하더라도 픽셀 수가 4만개가 되지 않는다. 즉, 프로젝트 수준에 비해 너무 과한 시스템을 다루고 있는 것이다. - 따라서 현재의 이미지 크기를 줄이고, 도로를 제외한 차량이나 배경 화면 등은 자르기로 결정하였다. 크기는 NVIDIA DAVE 2와 유사한 수준의 이미지 크기로 줄이..
6회차 - (1) 훈련 데이터 수집 완료 텍스트 파일 불러오기 - 훈련 데이터를 수집할 때 로지텍 G27로부터 파이썬 라이브러리 Pygame을 이용하여 조향 데이터와 브레이크 데이터, 스로틀 데이터를 받아와 텍스트 파일로 저장하였다. 이 데이터들은 각 이미지에 대한 레이블(label)이 된다. 학습을 위해 텍스트 파일로부터 각 데이터들을 리스트의 형태로 받아온다. path = '~/Training Data/' # 훈련 데이터가 저장된 경로 선언 Text_steering = open("%sSteering_Data.txt" % path, 'r') # 조향 데이터 텍스트 파일 오픈 Text_throttle = open("%sThrottle_Data.txt" % path, 'r') # 스로틀 데이터 텍스트 파일..
5회차 - (5) 훈련 데이터 수집 완료 훈련 데이터 수집 완료 - TORCS의 훈련 트랙 하나를 2번씩 돌면서 이미지와 조향 데이터 등의 훈련 데이터를 모은다. 트랙의 길이마다 조금씩 다르지만 레이스 한 번을 완료하면 대략 3,000개의 훈련 데이터가 모인다. 전체 훈련 트랙 8개를 하나의 트랙당 2바퀴씩 도는 레이스를 8번씩, 총 64번의 레이스, 128바퀴의 훈련 데이트를 모으는 것을 완수하였다. - 훈련 이미지, 조향 데이터, 브레이크 및 스로틀 데이터를 각각 180,900개 모았다. 당초 예상했던 20만개에 살짝 못미치지만 동일한 트랙을 다시 돌면서 데이터를 2만개 더 채워넣는 것은 무의미해 보였기에 18만개 가량에서 데이터 수집을 멈추었다. 학습 시에 배치의 크기를 100개로 할 계획이기 때문..
5회차 - (4) 훈련 데이터 수집 및 저장 훈련 데이터 수집 - 딥러닝 모델을 만들어 학습시키기 위하여 앞서 작성했던 파이썬 코드들을 사용하여 훈련 데이터를 수집한다. 하나의 파이썬 파일 안에 스크린 이미지를 추출하는 코드와 로지텍 G27에서 조향, 엑셀, 브레이크 데이터를 추출하는 코드를 동시에 작성하는 경우, 전체 코드가 복잡해지고 깔끔하지 못하다. 따라서 두 개를 분리하여 다른 파이썬 파일 안에서 작성하고 훈련 데이터를 모으는 파이썬 파일을 새로 만들어, 모듈로써 각 기능을 하는 함수를 불러오도록 한다. 이미지 추출 모듈 및 함수 작성 - 컴퓨터 스크린을 촬영하고 이미지의 크기 조절 및 흑백 처리를 해주는 함수를 작성하고, 이미지를 저장해주는 함수를 따로 작성한다. 그 이유는 훈련 데이터를 다 모..
5회차 - (3) 로지텍 G27에서 조향 데이터 추출 로지텍 G27 자체 API를 통한 데이터 추출 - 로지텍 G27은 차량 시뮬레이터나 레이싱 게임에서 사용할 수 있는 드라이빙 시뮬레이션 기어이다. 로지텍 G27과 관련된 정보는 로지텍 웹사이트(http://support.logitech.com/ko_kr/product/g27-racing-wheel)에서 찾을 수 있다. 로지텍 G27을 컴퓨터에 연결하여 사용하려면 로지텍 게임 소프트웨어를 설치해야 한다.(http://support.logitech.com/ko_kr/product/g27-racing-wheel/downloads)에서 다운로드 받을 수 있다. 로지텍 G27을 컴퓨터에 연결해 놓은 상태에서 설치를 시작하면 인스톨러가 알아서 하드웨어를 인식하여..
5회차 - (2) 파이썬을 이용한 이미지 크기 조절 및 흑백 처리 이미지 크기 조절 - 파이썬의 라이브러리 PIL의 ImageGrab.grab() 함수를 사용해서 스크린 이미지를 추출하면, 모니터의 해상도를 그대로 따르는 이미지가 추출된다. 현재 모니터의 해상도가 (1920X1080) 이므로, 이미지를 가공하기 위해 픽셀마다 어떠한 연산을 가하려면 너무 많은 계산량과 그에 따른 많은 시간이 소요된다. 따라서 이미지의 크기를 줄일 필요가 있다. - 이미지 크기 조절에는 이미지 관련 라이브러리인 OpenCV의 resize 함수를 사용한다. resize 함수를 사용하기 위해서는 스크린 이미지를 추출한 다음 배열로 변경해주어야 한다. 또한 줄이고자 하는 이미지의 크기와 크기를 변경할 때의 보간 방식(interp..
5회차 - (1) 파이썬을 이용한 시뮬레이터(BeamNG Drive) 영상 이미지 추출 직접적 방법 - 앞서 설치 및 환경을 구성한 Microsoft AirSim이나 TORCS에서는 프로그램 소스 코드를 이용하여 게임 이미지를 직접적으로 받아올 수 있다. AirSim의 경우 C언어 기반으로 작성된 시뮬레이터이지만, 서버-클라이언트 방식으로 파이썬에서 시뮬레이터의 이미지를 추출하는 API를 자체적으로 제공한다. 따라서 별 다른 어려움 없이, 예제 코드를 따라하면 그대로 영상을 추출할 수 있다. (https://github.com/Microsoft/AirSim/blob/master/docs/image_apis.md)를 참고하면 된다. - AirSim과는 다르게, TORCS에서 파이썬으로 이미지를 추출하는 것..