반응형
Data Augmentation
- 성능을 쉽게 올릴 수 있는 방법 중 하나
- 우리가 얻은 train 데이터는 사람이 카메라로 찍은 데이터고 실제 real data(task data)를 포함하지 못하는 다른 데이터다
- 밝게만 찍은 데이터를 가지고 학습한다면 어두운 사진을 보여줬을 때 제대로 인식하지 못하는 문제가 발생한다.
- 데이터셋이 진짜 데이터를 충분하게 표현하지 못했다
그래서 Data를 조금씩 변형해서 빈 공간들을 채워준다
- Brightness
def brightness_augmentation(img):
# numpy array img has RGB value(0~244) for each pixel
img[:.:,0] = img[:,:,0] + 100 # add 100 to R value
img[:.:,1] = img[:,:,1] + 100 # add 100 to G value
img[:.:,2] = img[:,:,2] + 100 # add 100 to B value
img[:.:,0][img[:,:,0]>255] = 255 # clip R values over 255
img[:.:,1][img[:,:,1]>255] = 255 # clip G values over 255
img[:.:,2][img[:,:,2]>255] = 255 # clip B values over 255
return img
- Rotate, Flip
img_rotated = cv2.rotate(image, cv2.ROTATE_90_CLOCKWISE)
img_flipped = cv2.rotate(image, cv2.ROTATE_180)
- Crop
y_start = 500 # y pixel to start cropping
crop_y_size = 400 # cropped image's height
x_start = 300 # x pixel to start cropping
crop_x_size = 800 # cropped image's width
img_cropped = image[y_start:y_start + crop_y_size, x_start : x_start + crop_x_size, :]
- Affine(shear) transform
- 선은 선대로 유지되고, 비율도 일정하게 유지되고, 평행관계가 유지된다
rows, cols, ch = image.shape
pts1 = np.float32([50,50],[200,50],[50,200]])
pts2 = np.float32([10,100],[200,50],[100,250]])
M = c2.getAffineTransform(pts1,pts2)
shear_img = cv2.warpAffine(image,M,(cols,rows))
- Cutmix
어떤 조합으로 해야할까?
RandAug를 활용해보자
- 자동으로 최적의 조합과 비율을 찾아간다
Leveraging pre-trained information
- Transfer Learning
- 미리 사전에 학습시켜놓은 사전지식을 활용해서 연관된 테스크에 적은노력으로도 높은 성능에 도달이 가능하다.
- 한 데이터셋에서 배운 지식을 다른 데이터셋에서 활용하는기술이다
- 기존의 모델에서 FC layer만 떼어네고 내가 원하는 FC를 추가한다.
- 앞단의 Conv Layer는 Freeze로 고정시킨다
- 데이터가 적을 때 유용함
- FineTuning
- 앞단의 Conv Layer는 낮은 lr로 학습하고 뒤의 FC Layer는 높은 lr로 학습한다
- Transfer Learning보다는 더 많은 데이터가 필요하지만 성능은 더 좋다고 기대한다
- Knowledge distillation
- 큰 모델인 Teacher Model에서부터 지식을 모델 크기가 더 작은 Student Model에게 주입해준다
- 이 효과는 모델 압축의 효과가 있다.
- Teacher에서 생성된 출력을 unlabeled된 데이터에 pseudo-labels(가짜 라벨)로 자동생성하는 매커니즘으로도 사용
- 이렇게 생성한 데이터를 더 큰 Student network의 regularization 역할로도사용
- Teacher와 Student에게 전부 데이터를 주고 두개의 output을 KL Divergence Loss를 통해 student만 backpropagation 하게 한다
- 이러한 효과는 학생이 선생을 따라하게되는 효과를 기대할 수 있다
- Unsupervised Learning이라고 할 수 있다
3-1 만약 Label이 있는 데이터를 학습하는 경우
- 위의 방식으로 구한 loss와 student loss의 weighted sum을 해서 학습한다
- Distillation Loss(KL Divergence Loss)와 Crossentropy(Student Loss)를 각각 backpropagation 해서 student Model만 학습한다
Leverage dataset for training
- 한정된 supervised dataset이 주어졌을때 unlabeld 데이터를 활용하는 방법
- 추가적인 labeling없이 성능을 높이는 방법
- semi supervised learning
- labeling에는 한계가 있기 때문에 어느정도의 labeld된 데이터와 인터넷상에 존재하는 많은 labeling 되지 않은 데이터를 활용
순서
- labeld된 데이터로 모델을 먼저 학습
- 학습된 모델로 labeling되지 않은 데이터셋에 대하여 pseudo-labeling 진행
- 그렇게 pseudo-labeling된 데이터셋과 labeld 데이터셋으로 하나의 큰 모델을 생성 혹은 위에서 사용된 모델을 재학습
- Self Training
- semi supervised learning과 유사하나 위의 과정을 계속 반복해서 새롭게 더 정확한 labeling을 하고 더 큰 모델로 바뀌어 가는게 특징이다
구조
반응형
'부스트캠프 AI Tech 2기 > 2기 CV U-Stage' 카테고리의 다른 글
CNN Visualization (0) | 2021.09.13 |
---|---|
Object Detection (0) | 2021.09.10 |
Semantic Segmentation (0) | 2021.09.09 |
CV의 DL 발전(2) (0) | 2021.09.07 |
CV의 DL 발전(1) (0) | 2021.09.06 |