KERAS_함수형 API
- 재훈 정
- 1월 26일
- 2분 분량
KERAS: 딥러닝을 쉽게 하기 위한 파이썬 라이브러리 KERAS 함수형 API는 비선형 토폴로지, 공유레이어, 입출력 모델 처리가 가능 (비선형 토폴로지: 데이터의 입력-출력 흐름이 정형되지 않고 흐름이 여러갈래로 나뉘거나, 합쳐지거나, 건너뛰
등 변수가 작용하여 일정하지 않은 진행방향으로 흘러감)
=> KERAS의 함수형 API:
인공신경망 차원에서의 한층(=1프레임)에 대해 입력을 받아 출력을 내뱉으며,
그 출력값은 전에 계산한 값들과 섞여서 차이로 계산된다.(=잔차계산)
절차를 밟았던 앞의 층들에 의해 형성했던 가중치는 현재의 층에 의해서 계속 변화한다.
학습 전: 무작위 값(또는 프레임을 일부 학습한 가중치)
학습 중: 들어온 프레임(=데이터)에 대한 결과값을 낸 후에 정답과의 오차를 비교하여 손실함수 계산
학습 후: 계산된 손실함수와 오차를 줄이기 위한 레이어의 가중치 변화
<학습전, 전처리에서 필요한 작업>
리사이징: 이미지 크기 조절. 딥러닝모델(KERAS)은 '고정된 크기'의 행렬만 연산할 수 있다. 224x224 사이즈의 해상도만 받다가 300x300의 해상도인 이미지가 들어오면, 300x300 이미지 입력값이 224x224의 입력값을 받을때 보다 많아 ValueError로 학습에 실패한다.
정규화: 이미지 픽셀 하나가 가진 rgb수치들이 가중치와 섞여 계산되었을 때, 자릿수(단위)가 천문학적으로 뛰어서 계산에 부담이 가해지는것을 막기 위해 수치를 0~1사이의 값들로 변환 +흑백인 경우: rgb같은 3채널이 아닌 1채널들로 받도록 미리 설정이 필요
수치화: 이미 rgb값들을 가진 픽셀들이기에 토큰화는 필요없지만, 그걸 숫자배열로 읽는 파일과(보통 x_data.npy로 함), 이것이 이벤트 발생한 것인지를 true(1)/false(0)로 알려주는 파일(보통 y_data.npy로 함)이 필요 (파일형식: .npy(numpy)파일을 사용). 이를통해 더 빠른 속도로 데이터관리를 잘 처리하는것이 가능하다.
<순차적vs함수형>
순차적(sequential)API: 순차적으로 모델의 층을 쌓아서 구성하는 모델로, 입력이 하나면 출력 또한 하나이다.

=> 레이어층을 순서대로 하나씩 쌓아올리고, 그 층에 대한 처리에 갈리거나 건너뛰는부분 없이 절차대로 진행
그래서 다양한 상황에 대응할 수 있는 유연성이 떨어진다.
함수형(functional)API: 순차적 모델로는 못하는 다중 입출력 모델, 그래프 형태의 모델 등을 위해 쓸 수 있는 유연성이 더 뛰어난 모델. 직접 텐서들의 입출력을 다루는데, 함수처럼 층을 써서 텐서를 입출력하기 때문에 함수형 api라고 한다.
<!>관련되지 않은 입력과 출력으로 모델을 만들려고 하면 RuntimeError가 발생한다.
<함수형 api의 영상처리 성능 극대화>
다중입력모델: 영상데이터 하나만으로는 순차적 모델과 성능적인 차이를 크게 보이지 못하기에
여러 종류의 데이터를 입구에 같이 넣어주는 방식 => 픽셀을 보고 판단하는 모델이 가진 판단근거를 더 다양해지도록 만들어 주는 것
+ 메타데이터(json 등의 형식으로)를 추가로 넣어서 환경정보를 같이 학습시키고, 비슷한 환경일 때 민감도 등을 어떻게 조절할지를 같이 학습시키는 것이 가능 하지만 다중입력이라는 것은 그만큼 여러환경인 데이터를 넣는다는 것이기에, 데이터의 규격을 맞추는 전처리가 더 복잡해진다. - 동기화: 영상 A와 B가 같은 사건을 찍은 서로다른 각도의 영상이라면, 이 영상들은 시간대와 해상도, fps등이 완벽히 일치해야 제대로 학습할 수 있다. - 데이터타입 통일:
서로다른 인풋경로에서 시작하였고, 형태도 다른 이 데이터들을 어떻게 하나의 레이어에서 하나의 통일된 정보로 받아들여 쓸 것인가- 영상은 픽셀덩어리이고, 메타데이터는 짧은 줄의 숫자이기에 규격을 맞추지 않고 붙이려고 하면 연결(concatenate)층이 같은 차원의 데이터를 요구하면서 ValueError가 발생. 이때, 영상이 conv2d-MaxPooling-Flatten라는 절차를, 메타데이터가 dense라는 절차를 거치면서 연결될 수 있는 데이터로 변환된다. 연결(concatenate)층이 해당데이터들을 연결하면서 그 데이터로 true/false를 판단하게 된다.
인셉션 모듈: 들어온 입력데이터에 대해서 여러갈래의 필터를 씌워 분석하고, 그후에 다시 한갈래로 합침.
여러갈래: 구글의 오리지널 인셉션의 경우 4갈래를 표준으로 사용하며, 이경우 갈래(=수용장)는 - 1x1: 픽셀 하나하나의 변화와 밝기를 분석 - 3x3: 디테일을 잡아서 분석하는 데이터 압축단위로, 선과 좁은 면이 되는 9픽셀을 묶어서 분석 - 5x5: 전체적인 실루엣 등 큰 형태를 파악하는 단위로, 넓은 면이 되는 주변 25개의 픽셀을 묶어서 분석 - pooling: 다른 갈래(=수용장)의 핵심이되는(=탐지하려는 상황과 유사한 픽셀인) 패턴들을 찾아서 요약정리

pooling을 제외하면 해상도 크기 등에 따라 다른 크기로 나타날 수 있음. pooling은 - 인셉션 모듈에서도 다중분석모델보다는 약하더라도 어느정도 각도에 대응하며, - 다른갈래들의 핵심만을 요약하는 것으로 처리할 데이터 크기를 줄이는 것이 목적 이기에 필수적으로 들어간다.
![[PAIR Guidebook] #2 데이터 + 모델 구축 (Data + Model Evolution)](https://static.wixstatic.com/media/08b148_a3892884a5da41f6abff1b25987e5bdd~mv2.png/v1/fill/w_980,h_551,al_c,q_90,usm_0.66_1.00_0.01,enc_avif,quality_auto/08b148_a3892884a5da41f6abff1b25987e5bdd~mv2.png)
댓글