김영곤

올리지 못했던 9주차 보고서

Showing 44 changed files with 138 additions and 3 deletions
No preview for this file type
No preview for this file type
cutout - 입력 이미지의 랜덤한 사각 영역에 0의 pixel값을 집어넣는 기법이다.
gaussian blur- 입력 이미지의 각 pixel에 독립적인 가우시안 노이즈를 더하는 기법이다. -> robustness 증가
cutmix - 서로 다른 범주의 이미지 패치를 섞어 image를 augment 한 후, image label을 해당 augmented image의 pixel 비율로 지정하는 방법론입니다. 이를 통해 더욱 일반화 성능이 높은 classifier를 획득
color jittering - 이미지의 RGB 색상을 변화시키는 기법
flip - 뒤집는 기법
rotation - 각도로 트는 기법
crop - 이미지 일부를 잘라내어 원래 이미지 크기만큼 키우는 기법
\ No newline at end of file
1. 저는 새로운 데이터 증강 기법을 연구했구요. 발표 시작하겠습니다.
3. 소개-1
현재 대부분의 모델들은 큰 모델을 사용하는데, 많은 학습 데이터량을 요구합니다. 만약 데이터량이 충분하지 않을 경우, 적은 데이터들의 특징을 잘 학습하여 학습 데이터에 대한 정확도가 높지만, 새로운 데이터에 대한 특징은 다르게 판단하여 정확도가 오히려 낮은 '과대 적합'이 일어납니다. 이를 해결하기 위해서 기존의 학습 데이터에 인위적인 작업을 통해 새로운 학습 데이터를 확보하는 다양한 데이터 증강 기법이 사용되고 있습니다. 예로 color jittering, crop, flip 등이 있습니다.
4. 소개-2
이미지 분류 모델에 자주 사용되는 CNN모델은 이미지의 주요 특징을 추출하는 단계와 분류 단계를 가집니다. 그 중에서 특징 추출 단계에서는 위와 같이 convolutional filter를 통해 feature map을 얻습니다. 저는 이 feature map에 주목하여 형태 구분에 필요한 edge 성분의 이미지를 가공하는 방법을 생각해보았습니다. 이를 통해 주요 특징 추출시! 훈련데이터의 잡음의 학습을 줄이는 방향으로 도움이 될거라 예상했습니다.
5. 소개-3
이를 위해서 저는 먼저 영상처리에서 주로 이용되고 있는 2 dimentional DFT인 FFT를 활용하기로 했습니다. 위쪽에 여성의 사진이 있는데 이를 High Pass Filter에 통과시켜 원래 이미지 영역으로 변환하면 edge 성분이 남은 이미지가 만들어 집니다. 이를 데이터 증강에 이용합니다. 또한, 일반화 성능을 조금 더 높이기 위해 PIL 라이브러리에서 제공되는 edge enhancement 기법을 추가로 사용했습니다. 예시 사진은 아래에 있습니다.
7. 기존연구-1
기존에 진행되었던 데이터 증강 기법으로는 소개에서 언급했듯이 다양합니다. 오른쪽 아래 보시면, 입력 이미지의 랜덤한 사각 영역에 0의 pixel값을 집어넣는 기법인 cut-out 기법이 있고, 비교적 최근인 2019년에 소개된 cutmix 기법이 유명합니다. 이는 서로 다른 범주의 이미지 패치를 섞어 image를 augment 한 후, image label을 해당 augmented image의 pixel 비율로 지정하는 방법론입니다. 이를 통해 더욱 일반화 성능이 높은 classifier를 획득하고 있습니다.
8.기존연구-2
FFT를 활용하여 edge 성분을 추출하는 데이터 증강 기법에 대한 선행 연구는 찾지를 못했지만, edge enhancement와 관련된 선행 연구는 찾을 수 있었습니다. 관련 내용을 인용하겠습니다. "CNN모델의 kernel이 형태를 인식하고 구분하기에, 윤곽을 강조한 훈련 데이터를 추가제공하는 것은 CNN 성능 향상에 도움이 된다"고 나타나있습니다. 하지만, 해당 논문에서 제시한 알고리즘은 결과적으로 윤곽을 제대로 강조시키지 못 했으며 오히려 전반적인 이미지를 밝게만 만들었다고 합니다. 따라서, 본 연구에서는 다른 edge enhancement 방식을 토대로 테스트 데이터의 정확도를 높이는 것을 목표로 잡았습니다.
10.제안 방법-1
소개에서 언급했듯이 edge 성분, 즉 윤곽의 성분을 추출한 데이터를 추가제공함으로써 CNN 성능 향상에 도움을 줄거라고 가설을 세운 뒤, FFT 방식을 통해 데이터를 가공했습니다. 구체적인 방법은 다음과 같습니다. 이미지의 x축, y축 방향으로의 픽셀 밝기 변화를 파형의 신호로 간주합니다. 만약 밝기 변화가 sin파로 일정하다면 이미지를 그림2와 같은 2차원 정현파 신호로 볼 수 있습니다. 이를 푸리에 변환,즉 FFT를 해주면 정현파의 주기의 역수인 주파수 성분에 대한 계수가 하나만 있는 주파수 스펙트럼이 만들어집니다. 주파수 스펙트럼은 x축 y축이 주파수이고 해당 픽셀이 주파수성분에 대한 강도값을 나타냅니다.
11.제안 방법-2
말로 설명하면, 이해가 힘드니 gif로 보여주겠습니다. 빨간색의 이미지의 밝기 신호가 있구요. 서로 다른 주파수의 정현파로 나눕니다. 각 주파수 성분에 따른 강도가 파란색 주파수 스펙트럼에 나타납니다. 이게 퓨리에 변환, FFT입니다.
12.제안 방법-3
그냥 FFT를 한 주파수 스펙트럼상에선(b)그림입니다, 이 상태선 가공하기 힘들기 때문에, log를 취하고 shift하는 작업을 토대로 (c)의 스펙트럼을 만듭니다. 그럼, 가운데는 저주파 성분, 바깥으로갈수록 고주파 성분의 강도값을 가집니다.
13.제안 방법-4
이제 필터를 만듭니다. 검증에 사용되는 이미지가 CIFAR-10이기에 이미지 크기가 32 by 32임을 감안하여 필터 크기는 2 by 2 픽셀로 만듭니다. 2 by 2 픽셀 값은 모두 1로 하여 저주파 성분의 강도를 없앱니다. 1을 사용하는 이유는 log 때문입니다. 그러면 저주파 성분값을 없앴기 때문에 고주파만 남아 edge가 강조되는 날카로운 이미지를 만들어집니다. 반대로 만약 고주파성분을 없애면 저주파만 남아 부드럽고 블러링된 이미지를 만듭니다.
14.제안 방법-5
또한 2 by 2 pixel에 값은 255인 필터를 만들었으며, 4 by 4 pixel에 값은 255인 필터도 만들었습니다. 또한, 30 by 30 pixel의 바깥쪽 값이 1인 필터를 만들었습니다. 마지막 필터는 LPF라 edge를 강조하지 않는데, 혹시 이 기법도 일반화 성능 향상에 기여하는지 확인해보기 위해 고안했습니다.
15.제안 방법-6
그리고 edge enhancement 기법으로 Pillow 라이브러리에서 제공하는 두가지 필터 방식을 사용합니다. sharpen filter는 해당 값을 가지는 3 by 3 filter를 만들고 이미지 픽셀들과 convolution곱을 하는 필터링 방식입니다. sharpness imageEnhance 방법은 먼저 smooth 필터를 만듭니다. 마찬가지로 이미지 픽셀들과 convolution곱을 한 후에 수식을 통해 아웃풋 이미지를 만들어냅니다. 알파값은 만약 0이면 smooth필터링된 이미지가 나오겠고, 1이면 원래 이미지가 나옵니다. 알파가 커질수록 smooth필터 영향이 반대로 작용하여 오히려 edge를 강조하는 효과를 냅니다. 그래서 본 실험에서는 알파를 5로 하여 적절하게 edge를 강조했습니다.
17.검증-1
앞서 윤곽을 강조한 훈련 데이터를 추가제공하는 것은 CNN 성능 향상에 도움이 될거라고 가설을 세웠으니, 실험을 통해 일반화 성능이 높아지는지 확인했습니다.
먼저, 모델은 Resnet을 기반을 둔 Pyramidnet-110(α=48)로 선정했으며, 학습 파라미터는 60 epoch, 0.9 momentum, 0.1 learning rate, 그리고 학습율의 decay epoch을 30, 45로 주어 각 epoch에 도달할 때, 학습율이 0.1배가 되도록 하였습니다. 또한 baseline에 일반적으로 적용되는 데이터 증강 기법인 RandomCrop과 RandomHorizontalFlip을 포함하였습니다.
18.검증-2
FFT를 활용한 필터 기법의 결과입니다. value가 1인 2*2 filter를 적용한 결과 와 value가 255인 2*2 filter를 적용한 결과의 테스트 셋 오차율은 거의 일치합니다. 이는 2*2 픽셀 크기에 해당하는 저주파 성분의 강도가 모두 일정하다면 특징 분류단계에서 비슷한 영향을 미친다고 해석할 수 있습니다. 즉, 저주파 성분 강도를 1로 주나 255로 주나 똑같이 변화없으니 학습측면에서는 차이가 별로 없다는 겁니다.
두 번째로, 4*4 filter의 일반화 성능은 원본 이미지를 학습할 때의 일반화 성능보다는 높았지만, 2*2 filter의 일반화 성능보다는 낮았습니다. 따라서, 32 by 32 이미지에서는(CIFAR-10이니까) 2*2 filter로 저주파를 제거하는 것이 4*4 filter나 혹은 그 이상의 필터로 저주파 제거하는 것보다 성능이 좋다고 볼 수 있습니다. 왜냐면, 그 이상의 필터에선 이미지 자체가 32by 32로 작아 이미지정보가 많이 훼손되기 때문입니다.
마지막으로 30 by 30 outer 필터인 경우, 30 by 30 바깥의 픽셀 값을 1로 주어 고주파를 제거하는 것인데, 성능이 매우 안 좋게 나왔습니다. 저주파를 활용한 필터는 CIFAR에서 좋지 않음을 확인할 수 있었습니다.
19.검증-3
Edge Enhance의 두 가지 방식을 적용한 결과입니다. 보시는 바와 같이 그냥 Sharpen Filter보다 Sharpness ImageEnhance를 적용한 결과가 더 일반화 성능이 좋았습니다. 후자에서 Edge의 강조 효과가 강하고 선명했기 때문으로 추측됩니다.
20.검증-4
FFT 기법에서 가장 좋은 성능을 내었던 2 by 2 filter와/ Sharpness ImageEnhance를 혼합하여 데이터 증강 기법 2개를 적용한 결과입니다. 최종적으로 원본 이미지의 일반화 성능보다 1.60% 더 좋은 성능을 이끌어 낼 수 있었습니다.
아래 사진은 각 데이터 증강 기법의 테스테 셋 오차율을 epoch에 따라 나타낸 것입니다.
22.결론
결론은 3가지로 요약하며 마무리하겠습니다.
CNN모델의 kernel이 형태, 윤곽를 인식하고 구별하기 때문에, 윤곽을 강조한 훈련 데이터를 추가제공하는 것은 CNN 성능 향상에 도움이 된다는 선행 연구에 뒷받침되는 연구 결과가 나왔습니다.
기존에 사용되지 않은 FFT를 활용한 HPF를 통해 일반화 성능의 향상에 기여하였습니다.
주파수 스펙트럼 상에서 이미지를 가공하는 data augmentation 기법이 기존에 많이 연구되지 않았습니다. 해당 접근 방법이나 다른 응용 방식을 통해 앞으로 다양한 data augmentation을 통한 성능 향상을 기대합니다.
3. 소개-1
분류, 회귀 모델의 크기와 학습되는 데이터량에 따라 왼쪽과 같이 과소 적합과 과대 적합이 일어납니다. 모델의 크기가 작은 경우, 파라미터수가 애초에 작아서 원하는 결과 값에 근접하는 모델을 구현하기 힘듭니다. 그래서 대부분의 경우 모델의 크기를 키워 데이터에 맞는 결과 값을 출력하는 모델로 학습을 합니다. 그런데, 큰 모델은 많은 파라미터를 가지고 있기 때문에 많은 학습 데이터량을 요구합니다. 만약 데이터량이 충분하지 않을 경우, 적은 데이터들의 특징을 잘 학습하여 학습 데이터에 대한 정확도가 높지만, 새로운 데이터에 대한 특징은 다르게 판단하여 정확도가 오히려 낮은 '과대 적합'이 일어납니다. 이를 해결하기 위해서 기존의 학습 데이터에 인위적인 작업을 통해 새로운 학습 데이터를 확보하는 과정이 연구되어 왔는데, 이를 데이터 증강기법이라고 하고 보시는 것과 같이 RGB 색을 바꾸는 color jittering부터 filp, rotation, crop, gaussian noise 등 다양한 기법이 있습니다.
4. 소개-2
이미지 분류 모델에 자주 사용되는 CNN모델은 이미지의 주요 특징을 추출하는 단계와 분류 단계를 가집니다. 그 중에서 특징 추출 단계에서는 위와 같이 convolutional filter를 통해 feature map을 얻습니다. 저는 이 feature map에 주목하여 형태 구분에 필요한 edge 성분의 이미지를 가공하는 방법을 생각해보았습니다. 이를 통해 주요 특징 추출시! 훈련데이터의 잡음의 학습을 줄이는 방향으로 도움이 될거라 예상했습니다.
5. 소개-3
이를 위해서 저는 먼저 영상처리에서 주로 이용되고 있는 2 dimentional DFT인 FFT를 활용하기로 했습니다. 위쪽에 여성의 사진이 있는데 이를 High Pass Filter에 통과시켜 원래 이미지 영역으로 변환하면 edge 성분이 남은 이미지가 만들어 집니다. 이를 데이터 증강에 이용합니다. 또한, 실험을 진행하면서 일반화 성능을 조금 더 높이기 위해 PIL 라이브러리에서 제공되는 edge enhancement 기법을 추가로 사용했습니다. 예시 사진은 아래에 있습니다. CIFAR-10 의 비행기 사진을 적용하기 전 후 모습입니다. 이것 또한 데이터 증강에 이용합니다.
7. 기존연구-1
기존에 진행되었던 데이터 증강 기법으로는 소개에서 언급했듯이 다양합니다. 이미지의 RGB 색상을 변화시키는 기법인 color jittering부터 전통적으로 많이 사용되는 flip, rotation, crop 기법, 그리고 입력 이미지의 각 pixel에 독립적인 가우시안 blurr를 더하는 기법, 입력 이미지의 랜덤한 사각 영역에 0의 pixel값을 집어넣는 기법인 cut-out 기법이 있습니다. 또한 비교적 최근인 2019년에 소개된 cutmix 기법이 유명합니다. 서로 다른 범주의 이미지 패치를 섞어 image를 augment 한 후, image label을 해당 augmented image의 pixel 비율로 지정하는 방법론입니다. 이를 통해 더욱 일반화 성능이 높은 classifier를 획득하고 있습니다.
8.기존연구-2
FFT를 활용하여 edge 성분을 추출하는 데이터 증강 기법에 대한 선행 연구는 찾지를 못했지만, edge enhancement와 관련된 선행 연구는 찾을 수 있었습니다. 관련 내용에 따르면, CNN모델의 kernel이 형태를 인식하고 구분하기에, 윤곽을 강조한 훈련 데이터를 추가제공하는 것은 CNN 성능 향상에 도움이 될거라고 나타나있습니다. 하지만, 해당 논문에서 제시한 알고리즘은 결과적으로 윤곽을 제대로 강조시키지 못 했으며 오히려 전반적인 이미지를 밝게만 만들었다고 합니다. 따라서, 본 연구에서는 다른 edge enhancement 방식을 토대로 테스트 데이터의 정확도를 높이는 것을 목표로 잡았습니다.
10.제안 방법-1
소개에서 언급했듯이 edge 성분, 즉 윤곽의 성분을 추출한 데이터를 추가제공함으로써 CNN 성능 향상에 도움을 줄거라고 가설을 세운 뒤, FFT 방식을 통해 데이터를 가공했습니다. 구체적인 방법은 다음과 같습니다. 이미지의 x축, y축 방향으로의 픽셀 밝기 변화를 파형의 신호로 간주합니다. 만약 밝기 변화가 sin파로 일정하다면 이미지를 그림2와 같은 2차원 정현파 신호로 볼 수 있습니다. 이를 푸리에 변환,즉 FFT를 해주면 정현파의 주기의 역수인 주파수 성분에 대한 계수가 하나만 있는 주파수 스펙트럼이 만들어집니다. 주파수 스펙트럼은 x축 y축이 주파수이고 해당 픽셀이 주파수성분에 대한 강도값을 나타냅니다. 만약 오른쪽 그림처럼 잡음 영상에 대한 스펙트럼은 어떠할까요? 왼쪽의 잡음 이미지는 하나의 정현파가 아닙니다. 서로 다른 3개의 주파수 정현파가 일차결합하여(어떤 계수가 곱해지고 더해져서) 흑 백 흑 백의 계단형태의 파형신호를 만듭니다. 이를 푸리에 변환해주면 오른쪽의 주파수 스펙트럼처럼 3개의 주파수 성분이 각각 강도가 255,즉 흰색으로 나타납니다.
11.제안 방법-2
말로 설명하면, 이해가 힘드니 gif로 보여주겠습니다. 빨간색의 이미지의 밝기 신호가 있구요. 서로 다른 주파수의 정현파로 나눕니다. 각 주파수 성분에 따른 강도가 파란색 주파수 스펙트럼에 나타납니다.
12.제안 방법-3
그냥 FFT를 한 주파수 스펙트럼으로는 HPF나 LPF 등으로 가공하기 힘들기 때문에, log를 취하고 shift하는 작업을 토대로 (c)그림과 같은 스펙트럼을 만듭니다. 가운데는 저주파 바깥으로갈수록 고주파 성분의 강도값을 가집니다.
13.제안 방법-4
이제 필터를 만듭니다. 검증에 사용되는 이미지가 CIFAR-10이기에 이미지 크기가 32 by 32임을 감안하여 필터 크기는 2 by 2 픽셀로 만듭니다. 2 by 2 픽셀 값은 모두 1로 하여 저주파 성분의 강도를 없앱니다. 1을 사용하는 이유는 log 때문입니다. 그러면 저주파 성분값을 없앴기 때문에 고주파만 남아 edge가 강조되는 날카로운 이미지를 만들어집니다. 반대로 만약 고주파성분을 없애면 저주파만 남아 부드럽고 블러링된 이미지를 만듭니다.
14.제안 방법-5
또한 2 by 2 pixel에 값은 255인 필터를 만들었으며, 4 by 4 pixel에 값은 255인 필터도 만들었습니다. 또한, 30 by 30 pixel의 바깥쪽 값이 1인 필터를 만들었습니다. 마지막 필터는 고주파 성분을 일부 제거하는 필터로서 저주파 성분을 남도록 하는 데이터 증강 기법도 혹시 일반화 성능 향상에 기여하는지 확인해보기 위해 고안했습니다.
15.제안 방법-6
그리고 edge enhancement 기법으로 Pillow 라이브러리에서 제공하는 두가지 필터 방식을 사용합니다. sharpen filter는 해당 값을 가지는 3 by 3 filter를 만들고 이미지 픽셀들과 convolution곱을 하는 필터링 방식입니다. sharpness imageEnhance 방법은 먼저 smooth 필터를 만듭니다. 마찬가지로 이미지 픽셀들과 convolution곱을 한 후에 수식을 통해 아웃풋 이미지를 만들어냅니다. 알파값은 만약 0이면 smooth필터링된 이미지가 나오겠고, 1이면 원래 이미지가 나옵니다. 알파가 커질수록 smooth필터 영향이 역으로 작용하여 오히려 edge를 강조하는 효과를 냅니다. 그래서 본 실험에서는 5로 하여 적절하게 edge를 강조했습니다.
17.검증-1
앞서 윤곽을 강조한 훈련 데이터를 추가제공하는 것은 CNN 성능 향상에 도움이 될거라고 가설을 세웠으니, 실험을 통해 일반화 성능이 높아지는지 확인했습니다. 먼저, 모델은 Resnet을 기반을 둔 Pyramidnet-110(α=48)로 선정했으며, 학습 파라미터는 60 epoch, 0.9 momentum, 0.1 learning rate, 그리고 학습율의 decay epoch을 30, 45로 주어 각 epoch에 도달할 때, 학습율이 0.1배가 되도록 하였습니다. 또한 baseline에 일반적으로 적용되는 데이터 증강 기법인 RandomCrop과 RandomHorizontalFlip을 포함하였습니다.
18.검증-2
FFT를 활용한 필터 기법의 결과입니다. value가 1인 2*2 filter를 적용한 결과 테스트 셋의 오차율가 18.34%이고 value가 255인 2*2 filter를 적용한 테스트 셋의 오차율은 18.33%로 모두 원본 이미지 결과보다 정확도가 높았습니다.이 둘의 정확도가 거의 일치하는데, 이는 2*2 픽셀 크기에 해당하는 저주파 성분의 계수(강도)가 모두 일정하다면 특징 분류단계에서 비슷한 영향을 미친다고 해석할 수 있습니다. 즉, 1로 주나 255로 주나 똑같이 변화없으니 학습측면에서는 차이가 별로 없다는 겁니다.
두 번째로, 4*4 filter의 일반화 성능은 81.38%로 원본 이미지를 학습할 때의 일반화 성능보다는 높았지만, 2*2 filter의 일반화 성능보다는 낮았습니다. 따라서, 32 by 32 이미지에서는(CIFAR-10이니까) 2*2 filter로 저주파를 제거하는 것이 4*4 filter나 혹은 그 이상의 필터로 저주파 제거하는 것보다 성능이 좋다고 볼 수 있습니다. 그 이상의 필터는 이미지 자체가 작아 이미지정보가 많이 훼손되기 때문입니다.
마지막으로 30 by 30 outer 필터인 경우, 30 by 30 바깥의 픽셀 값을 1로 주어 고주파를 제거하는 것인데, 성능이 매우 안 좋게 나왔습니다. 저주파를 활용한 필터는 CIFAR에서 좋지 않음을 확인할 수 있었습니다.
19.검증-3
Edge Enhance의 두 가지 방식을 적용한 결과입니다. 보시는 바와 같이 그냥 Sharpen Filter보다 Sharpness ImageEnhance를 적용한 결과가 더 일반화 성능이 좋았습니다. 후자가 Edge의 강조 효과가 강하고 선명했기 때문으로 추측됩니다.
20.검증-4
FFT 기법에서 가장 좋은 성능을 내었던 2 by 2 filter와 Sharpness ImageEnhance를 혼합하여 데이터 증강 기법 2개를 적용한 결과입니다. 최종적으로 원본 이미지의 일반화 성능보다 1.60% 더 좋은 성능을 이끌어 낼 수 있었습니다.
아래 사진은 각 데이터 증강 기법의 테스테 셋 오차율을 epoch에 따라 나타낸 것입니다.
22.결론
결론은 3가지로 요약하며 마무리하겠습니다.
CNN모델의 kernel이 형태, 윤곽를 인식하고 구별하기 때문에, 윤곽을 강조한 훈련 데이터를 추가제공하는 것은 CNN 성능 향상에 도움이 된다는 선행 연구에 뒷받침되는 연구 결과가 나왔습니다.
기존에 사용되지 않은 FFT를 활용한 HPF를 통해 일반화 성능의 향상에 기여하였습니다.
FFT를 활용하여 주파수 스펙트럼 상에서 이미지를 가공하는 data augmentation 기법이 기존에 많이 연구되지 않았습니다. 해당 접근 방법이나 다른 응용 방식을 통해 앞으로 다양한 data augmentation을 통한 성능 향상을 기대합니다.
[orig]
81.19
18.81
[2 by 2 + orig]
81.66
18.34
[orig]
81.19
18.81
[2 by 2(white) + orig]
81.671
18.33
[4 by 4(white) + orig]
81.38
18.62
[30 by 30(outer black) + orig]
76.18
33.82
[PILimageFilter-sharpen+orig]
82.14
17.85
[PILimageEnhance-sharpness(5)+orig]
82.28
17.72
[PILimageEnhance-sharpness(5)+2by2+orig]
82.79
......