라벨이 CNN인 게시물 표시

CNN 이미지 분류 모델을 이용한 논문 리뷰.2

이미지
이전 포스트와 이어지는 포스트입니다.  기존 논문에서 3X3 필터 2개를 사용한 경우 5X5 필터와 비슷한 효과를 가지며 3X3 필터 3개를 사용하였을 경우 7X7 필터를 적용한 효과를 가진다. 라고 언급했다. 또한 비선형적인 측면에서 층이 깊어져서 더욱 풍부한 효과를 누릴 수 있다. 라고 언급하였다.  따라서 이전 포스팅에서 언급한 모듈을 이용하여 실험을 하였다. 각 결과는 다음과 같다.  1. 3X3 필터 2개의 경우 약 92%의 정확도를 보였다. 2. 5X5 필터 1개의 경우  약 88%의 정확도를 보였다. 3. 3X3 필터 3개의 경우 약 94%의 정확도를 보였다. 4. 7X7 필터의 경우  약 92%의 정확도를 보였다. 결론 기존의 논문에서 언급한 것처럼  3X3 필터가 층을 쌓으면 충분히 또는 그 이상의 효과를 내는 것을 확인하였다. 또한 더 적은 파라메터의 개수와 더 풍부하게 비선형성을 가진다는 장점 또한 있다고 할 수 있다. 하지만 파라메터 개수를 줄이는데만 급해 레이어를 대폭 늘리면 연산 속도가 느려질 수도 있다는 단점도 분명히 존재한다. 추가 실험 결과  5X5와 7X7 필터의 경우 패팅의 옵션에서 'SAME'(기존 크기 강제 유지)과 'VAILD'(유효한 부분만 정리) 중 VAILD가 더 나은것으로 반대로 3X3필터는 'SAME'이 더 정확도가 높게 나왔다. 이는 개인적인 추론이지만  1. 사진의 크기가 작아 고급 필터 적용시 남는 부분이 너무 많다. 2. 반대로 3X3 필터의 경우 패딩에 큰 상관이 없다. 3. 따라서 INPUT 크기에 따라 다르겠지만 고급 필터의 경우 'VAILD'가 작은 필터의 경우 'SAME'이 더욱 효과적일 것이라 생각한다.

CNN 이미지 분류 모델을 이용한 논문 리뷰.1

이미지
 이번 포스트는 저번에 리뷰한 ' Very Deep Convolutional Networks For Large-Scale Image Recognition' 논문을 직접 코드를 짜서 실험해 본것이다.   들어가기 전에 정리하면  1. 합성곱 신경망으로 3*3 필터 3개 VS 7*7 필터 1개와 3*3필터 2개 VS 5*5 필터를 비교한다. 2. 기존 논문과 다르게 매우 깊게 구현하지는 않았다. 그냥 필터의 성능 시험이다. 3. 기존 논문과 다른 점은 Building과 Glacier 이미지 두개를 분류하는 사실상 이진 분류 문제이다. 따라서 Softmax가 아닌 sigmoid 함수를 출력 함수로 사용했으며 loss function 역시 binary-crossentropy이다. 데이터 셋은 여기서 가져왔다. https://www.kaggle.com/puneet6060/intel-image-classification 그럼 먼저 코드를 리뷰해 보도록 하겠다. 일단 사용한 라이브러리들은 다음과 같다. import os import numpy as np from tqdm import tqdm from PIL import Image from keras.preprocessing import image from keras.models import Sequential from keras.layers import Conv2D , MaxPooling2D , Dense , Flatten , Dropout 기본적인 numpy, os, keras등을 임포트 한다. 그 외에 tqdm의 경우 작업 진행량을 표시하기 위해 임포트 하였다. 데이터의 경우를 보면  학습 데이터가 각 파일별로 다음과 같이 정리가 되어있다. 이제 가장 먼저 데이터를 불러오고 각각의 전처리를 하겠다. traindir = "data/seg_test/buildings" dir = os.listdir(traindir) 위와 같이 ...

[논문리뷰] 4. 심층 CNN에 대하여

이미지
논문명:  Very Deep Convolutional Networks for Large-Scale Image Recognition 논문저자: Karen Simonyan & Andrew Zisseman 1. 개요: 이논문은 제목 그대로이다. '깊은' 합성곱 신경망이 얕고 '고급진' 신경망과의 비교를 주로 삼았다고 생각하면 된다.  2. 실험 개요: 전체적인 실험의 조건은 다음과 같았다. 1. 활성화 함수로는 ReLU를 사용 2. 출력 함수로는 Softmax를 사용 3. 224*224 크기의 컬러 이미지를 사용 4. 완전 연결 계층 3개를 사용  본 실험은 위의 표에서 보다 싶이 A~E까지의 경우로 나누어서 실험을 진행했다.  A부터 E는 각 11개~19개의 층을 가지며 완전연결 계층을 제외할 경우 각 8~16개의 합성곱 층을 가지게 된다.  그럼 각각의 경우를 확인해보겠다. A: 가장 얕은 신경망으로 3*3필터가 적용된 층이 총 8개가 존재하며 특이사항은 없다. A-LRN: 전체적인 구성은 동일하지만 LRN, 즉 정규화를 적용하였다. B: A와 비슷하지만 3*3층이 2개 더 추가되었다. C: B에 3개의 층이 추가되었는데 이때 추가된 층의 필터는 3*3이 아닌 1*1필터이다. D: C와 비슷하지만 추가된 층의 필터가 3*3이다. E: D에 3*3필터를 3개를 추가하였다. 그리고 각 경우의 변수는 다음과 같다.   특징으로는 B,C,D를 확인할 수 있는데 B,C는 층이 3개나 차이나지만 변수의 숫자는 크게 차이가 없고 반대로 C,D는 층의 갯수는 동일하지만 변수의 숫자가 차이나는 것을 볼 수 있다. 3. 실험 진행: 실험은 다음과 같이 진행되었다.  1. 확률적 경사하강법을 이용 2. 무작위로 Shift 진행 3. 등방적으로 리스케일링 되기도 함(Q라는 변수)  3.1 Scale Jittering이라는 이름으로 사용됨 4. 다중 GPU를 통한 병렬적 처리  4. 실험 결과...

[논문리뷰] 3. CNN에 대하여

이미지
논문명: Going Deeper with Convolutions 논문저자: Christian Szegedy 외 다수  개요: 전체적으로는 기존의 CNN뿐만 아니라 사실상 모든 기계학습에서 나타나는 문제점인 '층을 깊게하여 학습할 경우 생기는 문제'에 대해 해결책을 제시하면서도 성능을 향상시킨 그런 논문이다.   1. 기존 구조의 문제점 기존의 구조에서는 학습의 깊이를 더욱 깊게 하기 위해 층을 늘리는 방식으로 진행한다. 하지만 층을 늘릴수록 계산해야하는 파라미터의 개수가 기하급수적으로 늘어난다.  위의 예시 표와 같이 매우 간단한 148*148 형태의 input이 단 3개의 계층만 거쳐도 147584개의 파라미터가 필요하게 된다. 그럼 만일 더 큰 형태로 수많은 층을 구현한다고 하면 엄청난 수의 파라미터가 필요할 것이고 이는 CPU,GPU가 발달한 현재에서도 쉽지 않은 일이다.  또한 단순하게 심층 구조를 이용할 경우 위의 파라미터의 과한 갯수와 맞물려 오버피팅이 일어나기 쉽다는 특성을 가지고 있다.  그리고 본 논문에서는 이에 대한 해답으로 희소구조 + 완전 연결 계층의 사용을 언급한다. (희소구조란? 조밀한 구조의 반대로 실제로 사용되지 않는(무언가를 표현하지 않는 데이터가 대부분인)데이터가 많은 데이터 구조를 이야기 한다.  예시로 희소행렬은  0     0     1     0     5     0        0     0     0     0     0     0     0     0     0     0     0     1     0 ...

[논문리뷰] 2.NIN 신경망 구조

이미지
논문명: Network In Network 논문저자: Min Lin 외 2명 개요  본 논문의 전체적인 내용은 CNN(합성곱 신경망)의 단점과 그것의 보완점을 제시한다. 1. 논문에서 제시된 기존 CNN 구조의 문제점 본 논문에서 제시된 기존 CNN 구조의 문제점은 크게 2가지이다. 첫째  컨볼루션(convolution) 레이어에서는 기존의 입력값을 특징 맵으로 변환하는 과정을 거친다. ㄷ이때 기존의 CNN구조에서는 선형적으로 변환을 진행한다. 선형적으로만 변환을 진행하면 당연히 비선형적 연산에 비해 정확도가 떨어 질 수 밖에 없다. 따라서 본 논문에서는 이를 보완하기 위한 방법으로 다증퍼셉트론(MLP)를 도입했다. 구조는 다음과 같다. 위와 같은 구조를 통해 기존의 선형 연산이였던 것을 비선형 연산을 통해 정확도를 높인것을 본 논문에서는 MLPconvolutional Layer 라고 칭하며 이 Layer들이 쌓여있는 것이 NIN(Network in Network)구조이다.  둘째  마지막 출력 부분(또는 레이어)에서 완전연결 계층의 문제점이다. 가장 큰 문제는 CNN자체가 입체적인 데이터를 다루는데 이런식으로 연결되면 입체적인 INPUT과 거리감이 생긴다는 것이고 다음으로는 완전연결 계층 그 자체의 문제인 Overfitting 문제가 있다. 따라서 본 논문에서는 Global Average Pooling 이라는 레이어를 사용했다.  간략히 설명하면 마지막 출력부분에서 완전연결 계층을 대신해 각각의 Classification에 사용될 category를 특성맵으로 만들고 전부 평균을 내어 softmax함수에 집어 넣어 출력하는 방식으로 진행했다. 구조를 보면 다음과 같다.  위에 보다 싶이 완전연결계층이 아닌 각각의 특성 맵을 만들어 이를 softmax함수에 넣는 것을 볼 수 있다. 이를 통해 좀 더 입력값에 건장해지고 더해서 오버피팅을 방지할수 있다는 장점이 있다.  총 구조  총 구조는 다음...

[논문리뷰] 1. Deep CNN을 이용한 이미지 Classification

이미지
논문명: ImageNet Classification with Deep Convolutional Neural Networks 저자: Alex Krizhevsky 외 2명 1. 개요  위 논문은 9장 정도 되는 길지는 않은 논문이지만 딥러닝 분야에서 CNN(합성곱 신경망)을 획기적으로 발전시킨 전설적인 논문이다. 이미지 인식 딥러닝의 기초를 쌓았고 더 이상 딥러닝을 연구실이 아닌 생활까지 가져오게 한 일등 공신이라고 할 수 있다.  여기서 만들어진 Alex Net이라고도 불리는 이 구조와 GPU연동은 현재까지도 딥러닝에 광범위 하게 사용되고 있다.  2. 리뷰 일단 시작은 이렇다. 기본적으로 CNN은 연산 처리량이 어마어마하고 결점투성이였다. 실제로도 오차가 심해 일상생활에 적용하기는 어려운 수준이였다. 그래서 연구팀은 이런 점을 보완하기 위해 몇가지 시도를 한다. 2.1 실험 환경 기본적으로 실험을 진행한 환경에 대해 먼저 이야기 해 보겠다.  실험 데이터는 다음과 같다. ILSVRC(이미지 인식 대회)에서 2010년, 2012년 자료를 가져와 인식시켰다.  IMGNET라는 이미지 데이터베이스에는 총 1500만개의 이미지가 있었으며 2만2천개의 카테고리가 존재했는데 그 중 120만개의 학습용 이미지 5000개의 확인용 이미지 그리고 15만개의 테스팅용 이미지를 가져와 학습을 진행했다.  각각의 이미지는 256*256의 사이즈로 변환시켜 학습을 진행했으며 컬러(RGB)값 역시 학습했다. 학습에는  1. 기존 포스트에 리뷰되었던 ReLU함수를 사용했다. 기존까지는 tanh나 시그모이드 함수등을 사용했으며 보완을 위해 몇몇 시도를 하던 중이었다. 그리고 이 연구팀이 처음으로 ReLU함수를 실제로 사용했다. 2. GPU(그래픽카드)를 사용했다. 기본적으로 CNN의 연산량 자체가 많은데 엄청난 양의 데이터와 후술할 수천만개의 변수(가중치)를 설정하려면 엄청난 메모리와 연산 기능이 필요했다. 따라서 연구팀은 CP...