Visualizing CNNs(Pt. 1)- 이미지 픽셀에서 CNN이 패턴을 발견해 내는 그 과정을 시각화하여 확인해보자.- 앞서 CNN이 어떻게 작동하는지 이해하기 위해선 activation map과 콘볼루션 레이어를- 시각화 하여 보는것이 매우 중요하다는 것을 언급했었다.- 스탠포드 대학의 CS231n 코스 : visualizing what CNNs learn- OpenFrameworks- 웹캠을 통해 실시간으로 CNN에 학습 될 패턴들을 보여주는 app- visualizing CNN filters - YOUTUBE- visualizing how CNNs see the world - Keras blog post - CNN을 이해하기 위해 고안된 방법으로는 콘볼루션 레이어에서 필터를 가져와- 그 필터의..
Groundbreaking CNN Architectures- ImageNet은 1000개의 각기 다른 카테고리 안에 총 천만개가 넘는 그림을 가지고 있는 데이터셋이다.- 2010년부터 ImageNet은 "ImageNet Large Scale Visual Recognition Competition" 이라는 프로젝트를 진행하는데,- object recognition과 classification에 있어 가장 최상의 CNN모델을 찾는 컴피티션이다. - 첫번째로 선정된 모델은 2012년 토론토대학의 팀에의해 개발된 AlexNet 이라는 모델이다.- AlexNet 팀은 그 당시 최고성능의 GPU를 사용하여 일주일간 네트워크를 학습시켰고,- ReLU activation function과 dropout을 overfit..
Image Augmentation in Keras - 이미지 분류를 위해 알고리즘을 설계할 때, 많은 수의 서로 상관없는 정보들을 다뤄야 함.- 우리가 설계한 알고리즘이 실제로 이미지 안에 찾고자하는 object가 있는지 없는지를 판단하도록 만들어야 한다.- 그 object의 크기나 기울어짐 정도 또는 전체 이미지 중 object가 오른편 끝인지와 같은 위치는 상관없이- 해당 object를 정확하게 있는지 없는지를 판단해줘야 함.- 이것은 다시말해 알고리즘이 이미지의 불변하는 표현(invariant representation)을 학습하는 것이다.- object의 크기가 커지거나 작아짐에 따라 리턴하는 prediction값이 달라지면 안된다.- 이를 scale invariance라 부른다.- 마찬가지로 o..
CNNs in Keras : Practical Example- CIFAR10은 6만개의 이미지를 갖고있는 유명한 데이터셋이다.- 이 데이터셋을 이용해서 이미지 분류를 해보자. 1. Load CIFAR-10 Database- 위와같이 로드 해주면 됨. 상대적으로 쉽게 불러올 수 있는편이다.- 파이썬 모듈 하나만 임포트해주면 되고, 한줄의 코드만으로 모듈을 학습시키고 테스트할 수 있다. 2. Visualize the first 24 training images- 학습시킬 이미지에 대한 subset을 시각화하여 확인할 수 있다. 3. Rescale the images by dividing every pixel in every image by 255- 이전에 모든 이미지의 픽셀을 255로 나눠줬었는데, 이번에도..
CNNs for Image Classification- 지금까지의 내용을 정리해보면, convolutional layer는 regional pattern들을 이미지로부터 뽑아내었다.- 그리고 그 이후 max pooling layer는 convolutional layer 이후에 등장하여 그 넓직함을 줄여준다.- (넓직함을 줄이지 않으면 over-fitting 될 리스크가 있음)- 이번엔 CNN 아키텍쳐를 설계하기위해 이 레이어를 나열하는 방법에 대해 알아보자.- 이미지 분류를 통해 CNN을 조금 더 구조적으로 이해할 수 있음.- 이 경우 CNN은 반드시 이미지 배열을 input으로 받아야한다. - 랜덤한 이미지의 예시.- 만약 현실 이미지(학습에 최적화 된 이미지가 아닌)를 사용한다면 매우 복잡한 문제가 ..
Pooling Layers- CNN을 구성하는데 필요한 중간, 최종 레이어에 대해 알아보자. - Pooling layer 라 부르는 이 레이어는 주로 콘볼루션 레이어를 input으로 받아들인다.- 콘볼루션 레이어는 각 필터당 하나의 feature map이 형성되고, 그 feature map을 스택처럼 쌓아둔 것이다.- 많은 object 카테고리가 존재하는 복잡한 데이터셋을 가지고 CNN을 구현해 내는경우 - 매우 많은 수의 필터를 필요로 하는데, 각각은 이미지의 패턴을 찾아내는데에 사용된다. - 필터가 많다는 얘기는 그만큼 feature map들이 쌓이게 된다는것이고 이것은- 우리가 구현할 CNN의 차원이 매우 크다는 얘기이기도 하다.- 고차원(Higher dimensionality)을 구현하려면 그에 ..
Convolutional Layers in Keras- Convolution with 3x3 window and stride 1 - Keras에서 convolutional layer를 생성하기위해 위와 같은 모듈을 임포트해야한다. - 임포트 이후 아래의 포맷으로 convolutional layer를 생성할 수 있다.- 인자로 지정해줄 수 있는 값으로는 아래와 같은 것들이 있다.- filters : 필터의 개수를 지정- kernel_size : convolution window의 너비와 높이(height and width)를 지정- strides : convolution의 stride를 지정(디폴트 = 1)- padding : 'valid' 또는 'same' 을 지정(디폴트 = 'valid')- activ..
Stride and Padding- 필터의 크기와 개수를 지정해줌으로써 convolutional layer를 제어할 수 있다는것을 앞서 다뤘다.- 예를들어, convolutional layer의 노드의 수를 증가시키기 위해선 필터의 수를 증가시켜야 한다.- 필터가 잡아낼 패턴의 크기(size)를 증가시키기 위해선 필터의 크기(size)를 증가시켜야 한다.- 하지만 컨트롤 할 수 있는 하이퍼 파라미터들이 더 다양하게 존재한다.- 이 하이퍼 파라미터들중 stride 라 불리는것이 있는데, - stride는 필터가 이미지 상에서 이동하는 크기 를 의미한다. - 이전에 설계했던 모델에서 stride는 1이었다.- convolution window를 수평으로 그리고 수직으로 이미지를 따라 1의 크기로 움직였다. ..
Convolutional Layers(Pt. 1) - locally connected 된 레이어는 공간을 따라 가중치를 공유하기 때문에, 전체 픽셀이 연결된 모델보다 - 훨씬 더 적은수의 가중치를 가지고 학습을 진행한다. - 이 개념을 공식화하여 convolutional layer를 정의해보자. - convolutional layer는 hidden layer의 한 종류이며 CNN에서 주요하게 사용된다. - convolutional layer를 만들기 위해 이미지를 분리하려면, - convolution window를 결정하는 너비와 높이를 정해야한다. - 그리고 이 window를 수평으로 그리고 수직으로 옆으로 밀며 local을 지정해준다. - window가 이동을 하며 이미지를 조각내 단일 hidden ..
Local Connectivity - MLP를 이용해서 손으로 쓴 숫자 이미지를 decode하였는데 - MLP에 그레이스케일 이미지를 돌리기 전, 먼저 행렬을 벡터로 변환해주어야 했다. - 그럼 이렇게 변환된 벡터는 hidden layer가 2개인 MLP의 input으로 들어갔고 - 이 모델은 MNIST 데이터셋을 가지고 이미지를 분류하는데에 매우 적절한 모델이었음을 확인하였다. - 앞의 모델은 Test image에 대해 2% 보다 낮은 수치의 에러를 산출해냈는데, - MNIST 데이터셋과 같이 딥러닝 학습을 위해 완벽히 준비된 데이터가 아니라 - 실제 현실세계의 데이터 즉, 더 난잡한 이미지와 더 복잡한 패턴들을 처리할 경우 다른 기술을 사용하여야 한다. - 이번엔 CNN에 한 발 더 가까워 지고자 -..