4. WHAT IS AVERAGE HASH?
Average hash는 유사 이미지를 찾는 알고리즘.
매우 비슷한 이미지를 찾을 때는 아주 탁월한 성능을 보이지만,
워터마크나 테두리가 있는 이미지를 찾을 때는 좀 어려운 점이 있음.
간단하게 개발해서 쓸 수 있다는 점과 빠른 처리성능이 장점.
Average hash 3단계 :
1. 이미지 사이즈/컬러 단순화 하기 (resize & grayscale)
2. 이미지내 평균픽셀값 구하기 (the percent gray)
3. 평균픽셀값을 기준으로 비교하여 해시생성
5. AVERAGE HASH, HOW TO WORK?
00010E3CE08FFFFE
원본이미지
resize grayscale Bits(B&W) hash value
해밍거리(Hamming Distance)를
계산해서, 값이 0에 가까울 수록
비슷한 이미지라 할수 있다.
def hamming_distance(s1, s2):
“””해시값의 길이가 같을 때만 해밍거리를 계산할 수 있습니다”””
if len(s1) != len(s2):
raise ValueError(“해시값의 길이가 달라서 해밍거리를 계산 못합니다.”)
return sum(el1 != el2 for el1, el2 in zip(s1, s2))
zip은 파이썬의 내장함수
11. WHAT IS CNN?
CNN(Convolutional Neural Network)는 번역하면 합성곱신경망이라고 함.
입력층과 출력층 사이에 합성곱층과 풀링층을 넣어서, Affine Layer NN의 단점을 보완.
데이터 형상 무시
fully-connected Layer라고도 불림.
전처리 함수에서 데이터를 이 Affine Layer에 넘길 때, Affine Layer
에서는 1차원 데이터만 입력 받을 수 있기 때문에, 이미지와 같은 3차원
데이터(x, y, RBG channel)를 1차원으로 평탄화 한 후 입력해야 함.
이렇게 데이터를 평탄화 하는 과정에서 공간정보를 잃게됨.
12. WHAT IS CNN?
Conv ReLU Pooling ReLUAffine SoftmaxAffine
ReLUAffine SoftmaxAffineReLUAffine
단순 Affine Layer NN 모델구성
단순 CNN 모델구성
14. WHAT IS CNN?
Pooling Layer
max pooling의 예 (stride : 2)
※max pooling과 average pooling 이 있는데,
이미지 프로세싱쪽에서는 주로 max pooling을 사용하기에,
보통 pooling 이라고 하면 max pooling으로 통용됨.
16. TENSORFLOW, HOW TO BE IMPLEMENTED?
Create
or
Import
Data Set
Convert
and
Normalize
Data
Split Data
to
training set,
test set,
validation set
set Hyper
Parameters
for
Algorithm
set
Parameters
and
Placeholders
Define
Model
Declare
loss function
Initialize
Model
and
train
Validate
Model
Adjust
Hyper
Parameters
Apply
and
Predict
data=tf.nn.batch_norm_with_global_normalization(…)
learning_rate = 0.03
batch_size = 200
iterations = 1000
var_1 = tf.constant(10)
x_input = tf.placeholder(tf.float32, [None, input_size])
model = tf.add(tf.mul(), a_matrix)
loss = tf.reduce_mean(tf.square(…))
with tf.Session(graph=graph) as session
…
session.run(…)
…
model.fit(…)
score = model.evaluate(…)
pre = model.predict(…)
1 2 3 4 5 6
7 8 9 10 11
17. 연습 1단계 : IMAGE를 파이썬데이터(npy)로 변환하기
소스 결과출력
.
5개의 카테고리 폴더에 있는 이미지들만을 대상으로 합니다.
라벨을 만듭니다.
[1,0,0,0,0][0,1,0,0,0][0,0,1,0,0][0,0,0,1,0][0,0,0,0,1]
각 이미지를 RGB에 64x64 크기로 리사이즈 합니다.
RGB값은 3개의 데이터를 갖고 있기에,
이렇게하여 1개의 이미지는 총 3x64x64 개의 데이터 배열이 됩니다.
X에 이미지 데이터를 넣고,
Y에 라벨을 넣어 둡시다.
18. 연습 2단계 : CNN으로 IMAGE 분류하기소스 결과출력
자! 이제 만들어둔 이미지 데이터(npy 파일)를 불러와서
학습을 시켜보겠습니다.
데이터를 불러와 tensorflow에서 사용할수 있는 형태로 정규화한 후,
모델을 만듭니다.
모델을 만드는 방식은 앞에 CNN에 대한 설명을 기억하시면,
쉽게 이해하실 수 있습니다.
이 예제 소스에서는 아래와 같은 구조입니다.
Conv ReLU Pooling ReLUDense SoftmaxDenseConv ReLU Pooling Conv
19. 연습 3단계 : CNN학습된 모델 저장하기소스
결과출력
model.load_weights(hdf5_file)
hdf5파일로 저장된 모델이 있으면, 불러오는 부분입니다.
model.save_weights(hdf5_file)
학습시킨 모델을 hdf5파일로 저장하는 부분입니다.