개발공부 & 부트캠프/[부트캠프] 회고

[데이터 엔지니어링 부트캠프]7월 3주차 회고

포리셔 2023. 7. 23. 23:16

몸 상태가 온전히 돌아오지 못하고 고생했던 한 주였습니다... 담주부터는 몸 괜찮아질테니까 운동 나가야지... 쿨럭....

좋았던 점

GPU 가속을 본격적으로 사용하면서 코랩과 로컬을 왔다갔다 하고 있기는 하지만, 여러 모로 학습 속도가 향상된 것이 눈에 띌 정도입니다. 한 에포크 당 2분 걸리던 것이 20초에 끝나니 참 좋죠. 극락

아쉬웠던 점

원체 기능과 키워드가 많은 파트이다 보니, 머리로는 알고 있는 내용을 막상 코드로 치려고 할 때 손이 굳습니다. 여러 번 연습을 해야 할 것 같습니다.

배운 점

CNN 개요

CNN(Convolutional Neural Network, 합성곱 신경망)은 주로 이미지, 동영상을 처리하는 컴퓨터 비전 분야에서 사용되는 모델로, 합성곱 연산을 수행하는 convolutional layer를 사용해 데이터의 특징을 추출하는 역할을 담당합니다.

일반적인 Dense 레이어를 활용한 모델을 이미지 처리에 사용할 경우, 이미지 데이터를 1차원으로 나열하는 과정에서 입체성이 깨지기 때문에 정확도를 보장할 수 없는 문제가 있습니다. 반면, CNN은 입력 데이터의 차원을 그대로 유지한 채 합성곱을 진행하기 때문에, 공간적 특성을 유지하면서 특성을 추출할 수 있습니다.

CNN 레이어 개괄

CNN을 텐서플로에서 구현할 때, 실제로 합성곱 연산을 수행하는 Conv2D, 차원 축소를 담당하는 pooling 레이어(보통 MaxPooling2D 사용)을 하나로 묶어서 블록으로 취급하고는 합니다. 여러 번의 합성곱 블록을 거쳐 차원을 축소한 후, Dense 레이어를 거치면서 레이블을 분류하는 구조를 주로 사용합니다.

이미지 증식 (Image augmentation)

데이터셋을 충분히 확보할 수 없을 때, 기존에 확보해 둔 데이터를 기반으로 데이터를 변형시켜 추가 데이터를 확보하는 것을 데이터 증식이라고 합니다. 여기서는 CNN을 위한 데이터 증식 기법인 이미지 증식을 알아봤으며, 텐서플로의 케라스 프레임워크가 제공하는 ImageDataGenerator() 클래스를 사용했습니다. 사용 가능한 이미지 증식 기법은 아래와 같습니다.

  • 좌우/상하 반전
  • 회전
  • 좌우/상하 이동
  • 확대/축소
  • 전단 변환
  • 명암
  • 정규화 설정: 픽셀의 값에 대한 스케일을 조정할 수 있습니다. 지정한 값을 픽셀에 곱하는 rescale, channel의 평균을 pixel에서 빼서 표준화하는 featurewise_center, channel 별로 표준정규분포를 따르게끔 표준화하는 featurewise_std_normalization이 있습니다.
  • fill_mode: 변환 이후에 생기는 빈 공간을 어떻게 채울 것인지 설정하는 방법을 지정합니다. 가장 가까운 픽셀값으로 채우는 nearest, 빈 공간 긑처 공간의 값을 특정 축에 대칭인 픽셀의 값으로 대체하는 reflect, 사용자가 지정한 값으로 채우는 constant가 있습니다.

앞으로 바라는 점

대학원 시절 CNN을 공부하고 적용하면서 참 피를 많이 봤고, 연구 외적으로 주변 사람들로부터 많은 상처를 받고 스스로도 그걸 지나치게 무겁게 받아들인 탓에 안 좋은 기억이 많은 부분입니다. 제대로 배워서 내 것으로 만듦으로써 같은 실수를 반복하지 않게 실력을 쌓고 싶습니다.