🤔스트라이드를 통해 여러 칸을 이동하면 결과가 어떻게 될까?
💡이미지 증강을 할 때 주의해야 할 사항
1) 크롭이나 확대 => 노이즈를 확대하거나 크롭하면 더 문제가 될 수 있음
2) 회전, 반전 => 회전해도 레이블이 바뀌지 않는 데이터만 회전해야 함
3) 색상 변경 => 색상이 중요한 역할을 하는 이미지일 경우에 색상 반전 혹은 변경을 하면 안됨
4) 데이터셋 => 증강할 때 train 에만 해줌. test에는 하지 않음. 현실세계 문제를 푼다고 가정했을 때 현실세계 이미지가 들어왔을 때 증강해 주지는 않고 들어온 이미지로 판단하기 때문에 train에만 사용함
5) 증강을 할 때는 현실세계 문제와 연관해서 고민해서 할 것
🤔CNN 모델을 학습시킬 때 메모리 오류가 난다면? (일단 성능과 상관없이 모델을 돌리고 싶을 때)
원래 정의 : 한 분야의 문제를 해결하기 위해서 얻은 지식과 정보를 다른 문제를 푸는데 사용하는 방식
딥러닝에서의 정의 : '이미지 분류' 문제를 해결하는데 사용했던 네트워크를 다른 데이터셋 혹은 다른 문제(task)에 적용시켜 푸는 것을 의미
💡사용 방법
전이학습을 위해서는 ImageNet과 같은 대량의 데이터셋으로 이미 학습이 되어있는 모델을 사용함.
몇가지 경우에 대해서 pretrained 모델 외에 학습시키는 레이어의 양이 달라질 수 있음
만약 ImageNet과 비슷하지만 소량의 데이터셋을 가지고 있다면 ImageNet으로 학습시킨 CNN을 구조를 그대로 두고 뒷단에 분류를 위해 새로운 완전연결레이어(FC;Fully Connected Layer)를 붙여서 학습시키면 됨
또는, ImageNet과 비슷하지만 더 많은 데이터셋을 가지고 있다면 뒷단에 여러 FC레이어를 묶어서 학습시켜도 좋음
가진 데이터셋이 ImageNet과 다른 경우 => 데이터가 많은 경우에 뒷단의 여러 FC 레이어를 묶어서 학습시켜도 됨
💡Tensorflow api
tf.keras.applications
에 있는 모듈들
pre-trained model
https://www.tensorflow.org/api_docs/python/tf/keras/applications
💡VGG16
예제 코드
tf.keras.applications.vgg16.VGG16(
include_top=True,
weights='imagenet',
input_tensor=None,
input_shape=None,
pooling=None,
classes=1000,
classifier_activation='softmax'
)
include_top : 네트워크 상단에 FC를 포함할지 여부
input_shape는 각 image 의 shape 를 출력했을 때의 값과 동일하게 만들어 주어야 함
🤔append
, expend
의 차이?
append()
는 리스트 전체를 또 다른 요소로 처리해서 넣고extend()
는 대상의 리스트를 풀어서 각각의 요소로 삽입🤔정규화할 때 왜 255로 나눌까?
RGB는 0~255 의 값으로 3개의 R, G, B 값을 표현함
RGB 형태의 컬러 디스플레이 방법은 가산혼합 => 다 합치면 흰색이 됨
CMYK 방법은 감산혼합 => 다 합치면 검은색이 됨
현대의 대부분 모니터의 최대 지원 색 심도는 24비트임. (물론 더 많이 지원하는 모니터 들도 많이 나왔음)
즉 각 픽셀은 2^24(~16.7M)의 색상을 표시할 수 있게 되어있고, 24비트 값을 각각 R G B 세개의 색상으로 나누자면 24비트 / 3이므로 각 채널의 폭은 8비트를 가지게 됨.
채널당 8비트라는것을 고려할때 2^8 => 0 ~ 255 (256개)의 숫자 값만 인코딩 할 수 있게 되는 것이 이치에 맞음.
💡Quiz
CNN의 풀링층을 합성곱층과 비교한 특징은?