2015년 8월 2일 일요일

Color data augmentation in Alexnet

clc; clear all;
im=imread('painter.jpg'); % 이미지 입력
imd=double(im)/255.0; % 픽셀 값을 0~1사이의 실수 값으로 만듬

m = size(imd,1); % 이미지 폭
n = size(imd,2); % 높이. 한번에 [m,n] =size(imd);로 해도 됨
im1=reshape(imd(:,:,1),[1,m*n]); % r 행렬을 벡터로 변환
im2=reshape(imd(:,:,2),[1,m*n]); % g
im3=reshape(imd(:,:,3),[1,m*n]); % b

m1=mean(im1); m2=mean(im2); m3=mean(im3); % r, g, b 각 채널 픽셀 값의 평균
d1=im1-repmat(m1,[1,m*n]); % r 픽셀 값에서 r 평균을 뺌
d2=im2-repmat(m2,[1,m*n]);
d3=im3-repmat(m3,[1,m*n]);

data=[d1' d2' d3']; % 크기가 [m*n, 3] 임. 분포의 중심을 원점으로 분포 행렬 만듬
[v,d]=eig(data'*data); % 데이터의 분산이 큰 방향(v)과 크기(d) 얻음

dv=sqrt(diag(d)); % 퍼짐의 크기
val=v*(0.1*randn(3,1).*dv); % 정규분포(0.1의 분산)에서 하나의 랜덤 샘플링 값을 얻고 dv에 곱합. v 방향으로 이 크기 만큼 변형된 r, g, b 값 추출. val 값을 원 r,g,b 데이터에 더해서 color aug 이미지를 만들어 냄.



References
[1] Alex Krizhevsky et. al., ImageNet Classification with Deep Convolutional Neural Networks, 2012.



댓글 없음:

댓글 쓰기