목록딥러닝 (42)
Broccoli's House
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개로 할 계획이기 때문..
※ 이 글의 내용은 O'REILLY의 책을 기반으로 한다. 합성곱 신경망(CNN) : 풀링 계층 풀링 계층 - 풀링(Pooling) : 풀링은 2차원 데이터의 세로 및 가로 방향의 공간을 줄이는 연산이다. 풀링에는 최대 풀링(Max Pooling), 평균 풀링(Average Pooling) 등이 있다. 최대 풀링은 대상 영역에서 최댓값을 취하는 연산이고, 평균 풀링은 대상 영역의 평균을 계산한다. 이미지 인식 분야에서는 주로 최대 풀링을 사용한다. - 위의 그림은 2X2 최대 풀링을 스트라이드 2로 처리하는 순서이다. 풀링의 윈도우 크기와 스트라이드는 같은 값으로 설정하는 것이 보통이다. 풀링 계층의 특징 - 풀링 계층은 합성곱 계층과 달리 학습해야 할 매개변수가 없다. 풀링은 대상 영역에서 최댓값이나 ..
※ 이 글의 내용은 O'REILLY의 책을 기반으로 한다. 합성곱 신경망(CNN) : 합성곱 계층 완전 연결 계층 - 완전 연결 신경망이란, 인접하는 계층의 모든 뉴런과 결합되어 있는 신경망을 말한다. 입력 데이터와 가중치가 1대 1로 대응하는 것을 완전 연결(Fully-Connected)이라고 하며, 행렬의 내적(Affine)으로 표현된다. 이 완전 계층의 문제점은 바로 데이터의 형상이 무시된다는 것이다. 입력 데이터가 다차원의 형상일 때, 완전 연결 계층에 입력해주기 위해서는 이 다차원 데이터를 1차원으로 평탄화해준 후에 입력하여야만 한다. - 가장 흔한 다차원 데이터인 이미지를 생각해보면, 이미지 하나는 2차원의 픽셀 배열에 RGB의 채널이 합쳐져 3차원을 이루고 있다. 이 RGB의 각 채널은 서로..
※ 이 글의 내용은 O'REILLY의 책을 기반으로 한다. 합성곱 신경망(CNN) : 소개 및 구조 합성곱 신경망 - 합성곱 신경망 : 합성곱 신경망(CNN : Convolutional Neural Network)은 음성 인식이나 이미지 인식 에서 주로 사용되는 신경망의 한 종류이다. 다차원 배열 데이터를 처리하도록 구성되어 있어, 컬러 이미지와 같은 다차원 배열 처리에 특화되어 있다. 따라서 이미지 인식 분야에서 딥러닝을 활용한 기법은 대부분 CNN을 기초로 한다. - 일반 신경망의 경우, 이미지 데이터를 그대로 처리한다. 즉, 이미지 전체를 하나의 데이터로 생각해서 입력으로 받아들이기 때문에, 이미지의 특성을 찾지 못하고 위와 같이 이미지의 위치가 조금만 달라지거나 왜곡된 경우에 올바른 성능을 내지 ..
※ 이 글의 내용은 O'REILLY의 책을 기반으로 한다. 학습 관련 기술 : 초매개변수 설정 초매개변수 - 초매개변수(하이퍼파라미터, hyper-parameters) : 초매개변수, 하이퍼 파라미터란 가중치(weight)같이 모델이 스스로 설정 및 갱신하는 매개변수가 아닌, 사람이 직접 설정해주어야 하는 매개변수를 말한다. 신경망에서는 뉴런의 수, 배치(batch)의 크기, 학습률(learning rate), 가중치 감소시의 규제 강도(regularization strength) 등이 있다. 이러한 초매개변수 값에 따라 모델의 성능이 크게 좌우되기도 한다. - 초매개변수 값은 매우 중요하지만, 사람이 결정해야하는 것이기에 값을 결정하기까지 많은 시행착오를 필요로 한다. 이러한 시행착오를 그나마 줄이기 ..
※ 이 글의 내용은 O'REILLY의 책을 기반으로 한다. 학습 관련 기술 : 배치 정규화 배치 정규화 - 배치 정규화(Batch Normalization) : 신경망의 골치 아픈 점은 바로 기울기 소실 문제(Gradient Vanishing Problem)이 발생한다는 것이다. 이 문제를 해결하기 위하여 시그모이드(sigmoid)나 하이퍼탄젠트(tanh) 함수에서 렐루(ReLU)로의 활성화 함수 변화, 가중치의 초기값 설정 등의 방식을 채용하였다. 가중치의 초기값을 적절히 설정하면 각 층의 활성화 값 분포가 적당히 퍼지면서 학습이 원활하게 수행된다. 이러한 점에 착안하여 각 층의 활성화 값을 강제로 퍼뜨리는 것이 바로 배치 정규화이다. - 보통의 경우 신경망 모델에 데이터를 입력하기 전에 전체 데이터 ..