AI 전문가가 되고싶은 사람
[KT 에이블스쿨 기자단] 7주차 회고 본문
이번 주는 시각 지능에 대해 배우게 되었다. 혼자 CNN과 yolo를 사용해서 뭔가를 해보려고 했었지만 실패했던 생각이 나면서 "제대로 배워봐야겠다"고 생각하고 수업을 듣게 되었다. 아무래도 딥러닝이 되고나서 머신러닝보다 필요한 지식이 많이 생기면서 이론적인 부분을 2시간 배우면 실습 1시간을 하는 느낌으로 진행되었다.
먼저, CNN(합성곱 신경망)에 대해서 배우게 되었다. ( 내가 판단했을 때 중요도가 매우 높은 것 같다 )
CNN에 대해 정리해보자면 CNN은 이미지 및 비디오 인식, 추천 시스템, 이미지 분류, 자연어 처리 등 다양한 분야에서 광범위하게 사용되는 강력한 딥러닝 아키텍처로 특히 시각적 데이터를 처리할 때 성능이 뛰어나다.
CNN의 주요 구성 요소 ( 실습 코드에서 하나하나 봅시다 )
1. 합성곱 층 (Convolutional Layer) : 입력 이미지에서 특징을 추출하는 주요 부분으로, 합성곱 층은 여러 개의 작은 필터를 사용하여 입력 이미지를 스캔한다. 각 필터는 이미지의 작은 영역에 적용되어 해당 영역의 피처 맵을 생성한다.
2. 활성화 함수 (Activation Function) : 합성곱 층의 출력은 활성화 함수, 주로 ReLU를 통해 비선형성을 도입한다. 이는 모델이 복잡한 패턴을 학습하는 데 도움을 준다.
3. 풀링 층 (Pooling Layer) : 풀링 층은 피처 맵의 크기를 줄이는 동시에 중요한 정보를 유지한다. 가장 흔히 사용되는 풀링 방법은 맥스 풀링으로, 처리된 영역에서 최대값을 선택한다.
4. 완전 연결 층 (Fully Connected Layer) : CNN의 마지막 단계에서 모든 특징들이 결합되어 최종 분류를 수행한다. 각 연결이 가중치를 가지고 있다.
CNN의 작동 원리
- CNN은 이미지를 입력받아 여러 개의 합성곱 및 풀링 층을 거치면서 이미지의 특징을 점차 추출해 나간다.
- 초기층은 이미지의 낮은 수준 특징을 감지하고, 네트워크의 깊은 부분으로 갈수록 더 추상적이고 복잡한 특징이 학습된다.
- 이렇게 처리된 특징들은 마지막으로 완전 연결 층을 통해 분류하거나 다른 작업을 수행하는 데 사용된다.
CNN의 장점
- 공간적 계층 구조 : CNN은 이미지의 공간적 계층 구조를 이해하고 이를 통해 객체의 부분과 전체를 효과적으로 인식할 수 있다.
- 매개변수의 수 최소화 : 합성곱을 사용함으로써, 필터는 이미지 전체에 걸쳐 동일하게 적용되므로 학습할 매개변수의 수가 크게 줄어든다.
- 변형에 강함 : CNN은 이미지의 이동,회전 등의 변형에 강한 내성을 보인다. 이는 필터가 이미지의 모든 위치에 걸쳐 적용되기 때문이다.
간단한 모델 구성
import tensorflow as tf
from tensorflow.keras.model import Sequential
from tensorflow.keras.layers import Conv2D,MaxPooling2D,Flatten,Dense
# 모델 생성 함수
model = Sequential()
# 첫 번째 합성곱 층 : 32개의 3*3 필터 사용, ReLU 활성화 함수, 28,28은 이미지의 픽셀 크기 1은 채널 수
model.add(Conv2D(32,(3,3),activation='relu', input_shape = (28,28,1)))
# 첫 번째 풀링 층 : 2*2 맥스 풀링 사용
model.add(MaxPooling2D((2,2))
# 두 번째 합성곱 층 : 64개의 3*3 필터 사용, ReLU 활성화 함수
model.add(Conv2D(64, (3,3), activation='relu'))
# 두 번째 풀링 층 : 2*2 맥스 풀링 사용
model.add(MaxPooling2D((2,2))
# 피처 맵을 일렬로 펼친 후 완전 연결 층에 연결
model.add(Flatten())
model.add(Dense(64,activiation='relu'))
# 최종 출력 층 : 10개 클래스에 대한 소프트맥스 층
model.add(layers.Dense(10, activation='softmax'))
다음으로 배운 내용은 데이터 증강이다. ( 공부하는 과정에서 제일 이해가 쉬운 부분이였다. )
- 데이터 증강은 기계 학습, 특히 딥러닝에서 모델의 성능을 향상시키기 위해 사용되는 기법 중 하나이다.
- 이 방법은 주어진 원본 데이터를 약간 변형하여 데이터의 양을 인위적으로 늘리는 과정을 포함한다.
- 데이터 증강은 주로 이미지, 텍스트, 오디오 데이터에 적용된다.
- 과적합 방지, 모델의 일반화 능력을 향상시키는 데 도움을 준다.
데이터 증강의 주요 방법
1. 회전 : 이미지를 일정 각도로 회전시키는 것이다. (-45도에서 +45도 사이로 설정된다.)
2. 이동 : 이미지를 수평이나 수직으로 일정 거리만큼 이동시킨다.
3. 크기 조정 : 이미지의 크기를 확대하거나 축소한다.
4. 반전 : 이미지를 수평 또는 수직으로 뒤집습니다.
5. 잘라내기 : 이미지의 일부를 잘라내어 새로운 이미지를 생성한다.
6. 색상 변형 : 색조, 채도, 밝기 등을 조절하여 이미지의 색상을 변경한다.
뒷 부분에 언급되겠지만 회전, 크기 조정 정도를 roboflow를 통해서 해봤다
다음 내용은 사전 훈련된 모델(Pretrained Model)이다. ( 모델을 직접 작성하기보다 잘 만들어진 거 쓰자!! )
사전 훈련된 모델은 특정한 데이터셋에 대해 사전에 학습된 모델로, 이 모델을 다운로드하여 다른 작업에 직접 적용하거나 미세 조정하여 사용할 수 있다. 이러한 모델은 주로 대규모 데이터셋에서 훈련된다.
* 장점
- 시간 절약 : 대규모 데이터셋을 처음부터 학습하는 데는 많은 시간과 자원이 소요된다. 사전 훈련된 모델을 사용하면 이 과정을 건너뛸 수 있어 개발 시간이 크게 단축된다.
- 자원 절역 : 고성능 GPU와 같은 비용이 많이 드는 하드웨어 없이도 고급 모델을 사용할 수 있다.
- 성능 보장 : 대규모 데이터셋에서 학습된 모델은 일반적으로 안정적인 성능을 제공한다.
import tensorflow as tf
from tensorflow.keras.applications import VGG16
# VGG16 모델 로드, ImageNet 데이터셋으로 사전 훈련된 가중치 사용
model = VGG16(weights='imagenet')
# 모델 요약 정보 출력
model.summary()
이 부분과 이어져서 전이 학습에 대해서도 배우게 되었다.
전이학습은 한 분야 또는 작업에서 학습된 지식을 다른 분야 또는 작업에 적용하는 기법이다. 이 접근 방식은 데이터가 부족하거나 레이블이 부착된 데이터를 얻기 어려운 경우 매우 유용하다. 이미 학습된 모델의 지식을 새로운, 비슷하지만 다른 작업에 재사용함으로써 학습 과정을 과속화하고, 필요한 데이터의 양을 줄일 수 있다.
from tensorflow.keras.applications import VGG16
from tensorflow.keras.layers import Dense, GlobalAveragePooling2D
from tensorflow.keras.models import Model
# 사전 훈련된 VGG16 모델 로드
base_model = VGG16(weights='imagenet', include_top=False) # include_top=False로 상위 층 제외
base_model.trainable = False # 기본 모델의 가중치 고정
# 새로운 모델 구성
x = GlobalAveragePooling2D()(base_model.output)
x = Dense(1024, activation='relu')(x)
predictions = Dense(10, activation='softmax')(x)
model = Model(inputs=base_model.input, outputs=predictions)
가장 기대가 되었던 부분인 객체 탐지에 대해서도 요점 정리를 해보겠다. 고양이 tnr 여부를 yolo로 분류 해보려고 했지만 실패한 경험이 있어서 더 열심히 듣게되었다.
객체 탐지는 이미지나 비디오에서 하나 이상의 객체를 식별하고, 그 위치를 정확하게 표시하는 컴퓨터 비전 기술이다. 객체의 종류를 분류하고, 그 위치를 나타내는 바운딩 박스를 통해 특정한다. 이 기술은 보안 시스템, 자율 주행 자동차, 의료 이미징, 자동화된 비디오 분석 등 다양한 분야에서 중요한 역할을 한다.
5일차에 함께 데이터 수집, 증강, yolo모델로 객체 탐지를 해봤던 스터디 분 블로그에도 나와있네요 하
저희는 리그오브레전드에 있는 롤토체스라는 게임에서 객체 탐지를 해보려고 했습니다! 위 사진을 보면 알 수 있듯이 캐릭터들이 체스처럼 놓여져있기 때문에 객체 탐지가 되면 재밌는 결과가 나오겠다 생각을 하게 되어서 스터디 분과 함께 눈이 빠지도록 데이터를 100개씩 모았습니다. 200개를 모으고 나서는 아래 이미지와 같이 롤토체스에 등장하는 챔피언의 레이블 69개를 지정해준 뒤에 하나하나 수동 레이블링을 하는 과정을 거쳤습니다.
그리고 위에서 언급했었던 데이터 증강을 통해 돌려도 보고 수직 반전도 해보고 데이터를 증강시켜서 모델 결과를 확인해보았는데..... 제대로 맞춘 게 legend ( 전설이 ) 뿐이여서 이건 데이터가 너무 적고 챔피언끼리 붙어있어서 실패했나보다 하고 좌절을 했습니다.. 만약에 다시 하게 된다면 챔피언 하나하나에 대한 레이블링을 마친후에 진행하면 더 괜찮은 결과가 나올 것 같다는 개선점을 도출하였습니다.
7주차에도 마찬가지로 알고리즘 스터디를 진행하였고, 7주차 알고리즘은 DP 였어요.
발표를 또 저가 맡게 되어서 아주 힘겹게 발표자료를 준비해서 발표를 마치게 되었네요
저번에 실버 2도 자력으로 풀었다고 기뻐했었는데 이번 문제는 실버 1을 풀어서 발표하게 되었어요.
https://www.acmicpc.net/problem/11052
매우 간단하게 보이지만 저는 엄청 오래 걸렸네요. 해당 부분을 생각하면서 풀었다고 설명드렸습니다.
yolo 부분을 따로 더 공부를 해보고 싶다는 생각과 함께 글 마치겠습니다!! 다들 화이팅
'기자단 활동' 카테고리의 다른 글
[KT 에이블스쿨 기자단] 9주차 회고 (0) | 2024.04.29 |
---|---|
[KT 에이블스쿨 기자단] 8주차 회고 (0) | 2024.04.29 |
[KT 에이블스쿨 기자단] 6주차 회고 (1) | 2024.04.19 |
[KT 에이블스쿨 기자단] 5주차 회고 (1) | 2024.04.19 |
[KT 에이블스쿨 기자단] 4주차 회고 (1) | 2024.04.19 |