MNIST로 초해상
13683 단어 Keras파이썬CNNDeepLearningMNIST
소개
깨끗하게 이미지를 확대할 수 없습니까?
아무렇지도 않은 질문에서, 구그라고 보면 waif2x라는 앱이 꽤 좋다는 평판
살펴보면 지금은 Deeplearning을 사용한 확장 앱처럼 보입니다.
Keras를 사용하기 시작했기 때문에 시도합시다! 그래서 간단한 모델을 시도했습니다.
데이터 세트
간단한 이미지 데이터 세트로 머리에 떠있는 것이 MNIST
28x28 픽셀의 회색 데이터 (1ch)로 keras 데이터 세트로 제공됩니다.
일반 숫자 인식과 다르기 때문에 사용하는 것은 필기 이미지 만
이번에는 종횡 2배, 4배로 학습해 보겠습니다.
원래 이미지를 확대 후 비교하기 위해 축소 이미지를 입력 이미지로 준비
waif2x도 입력 이미지를 확대 한 후 CNN에 적용하는 것 같습니다.
축소 후 nearest neighbor로 확대한 이미지를 입력 이미지로 합니다.
input=[]
input2=[]
for i in range(60000):
sample=x_train[i].copy()
sample=cv2.resize(sample, dsize=(14,14))
sample=cv2.resize(sample, dsize=(28,28), interpolation=cv2.INTER_NEAREST)
input.append(sample)
sample2=x_train[i].copy()
sample2=cv2.resize(sample2, dsize=(7,7))
sample2=cv2.resize(sample2, dsize=(28,28), interpolation=cv2.INTER_NEAREST)
input2.append(sample2)
input = np.array(input)
input2 = np.array(input2)
input = input.reshape(60000,28,28,1)
input2 = input2.reshape(60000,28,28,1)
입력 이미지 확인
50% 이미지는 어쩐지 인식할 수 있는 것의 25%까지 축소하면 상당히 엄격한 느낌입니다
과연 잘 작동합니까?
모델
waif2x가 참고로 했다는 SRCNN이 되어 간단한 4층의 CNN으로 모델을 작성
modelx2 = models.Sequential()
modelx2.add(layers.Conv2D(16, (3, 3), activation='relu', padding='same', input_shape=(28,28,1)))
modelx2.add(layers.Conv2D(32, (3, 3), activation='relu', padding='same'))
modelx2.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same'))
modelx2.add(layers.Conv2D(1, (3, 3), activation='relu', padding='same'))
modelx2.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_33 (Conv2D) (None, 28, 28, 16) 160
_________________________________________________________________
conv2d_34 (Conv2D) (None, 28, 28, 32) 4640
_________________________________________________________________
conv2d_35 (Conv2D) (None, 28, 28, 64) 18496
_________________________________________________________________
conv2d_36 (Conv2D) (None, 28, 28, 1) 577
=================================================================
Total params: 23,873
Trainable params: 23,873
Non-trainable params: 0
_________________________________________________________________
학습 연산
손실 함수는 제곱합 오차
최적화 함수는 rmsprop
그리고 기본적인 것을 사용
modelx2.compile(optimizer='rmsprop', loss='mse', metrics=['accuracy'])
modelx2.fit(input, x_train, epochs=5, batch_size=64)
결과
50% 이미지로 학습한 모델로 확대한 결과
저기 original 이미지에 접근합니다.
50% 이미지로 학습한 모델로 25% 이미지를 확대한 결과
이 결과는 현명합니다. 특히 9는 숫자로 인식 할 수 없습니다.
학습시와 조건이 끝나면 잘되지 않는 것 같습니다.
재학습한 결과
25% 이미지로 재학습해 봅니다.
모델로서는 50%와 같고 입력 화상만 변경한 결과
9도 어떻게든 시인할 수 있을 정도의 재현성입니다
요약
CNN의 4층만으로 여기까지의 초해상이 생겨 버리는 것에 놀랐습니다
이번에는 간단히 필기 문자로 시도했지만 사진 이미지를 찾고 시도하고 싶습니다.
Reference
이 문제에 관하여(MNIST로 초해상), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mou2000/items/2564335a8bbd328d6235
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
간단한 이미지 데이터 세트로 머리에 떠있는 것이 MNIST
28x28 픽셀의 회색 데이터 (1ch)로 keras 데이터 세트로 제공됩니다.
일반 숫자 인식과 다르기 때문에 사용하는 것은 필기 이미지 만
이번에는 종횡 2배, 4배로 학습해 보겠습니다.
원래 이미지를 확대 후 비교하기 위해 축소 이미지를 입력 이미지로 준비
waif2x도 입력 이미지를 확대 한 후 CNN에 적용하는 것 같습니다.
축소 후 nearest neighbor로 확대한 이미지를 입력 이미지로 합니다.
input=[]
input2=[]
for i in range(60000):
sample=x_train[i].copy()
sample=cv2.resize(sample, dsize=(14,14))
sample=cv2.resize(sample, dsize=(28,28), interpolation=cv2.INTER_NEAREST)
input.append(sample)
sample2=x_train[i].copy()
sample2=cv2.resize(sample2, dsize=(7,7))
sample2=cv2.resize(sample2, dsize=(28,28), interpolation=cv2.INTER_NEAREST)
input2.append(sample2)
input = np.array(input)
input2 = np.array(input2)
input = input.reshape(60000,28,28,1)
input2 = input2.reshape(60000,28,28,1)
입력 이미지 확인
50% 이미지는 어쩐지 인식할 수 있는 것의 25%까지 축소하면 상당히 엄격한 느낌입니다
과연 잘 작동합니까?
모델
waif2x가 참고로 했다는 SRCNN이 되어 간단한 4층의 CNN으로 모델을 작성
modelx2 = models.Sequential()
modelx2.add(layers.Conv2D(16, (3, 3), activation='relu', padding='same', input_shape=(28,28,1)))
modelx2.add(layers.Conv2D(32, (3, 3), activation='relu', padding='same'))
modelx2.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same'))
modelx2.add(layers.Conv2D(1, (3, 3), activation='relu', padding='same'))
modelx2.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_33 (Conv2D) (None, 28, 28, 16) 160
_________________________________________________________________
conv2d_34 (Conv2D) (None, 28, 28, 32) 4640
_________________________________________________________________
conv2d_35 (Conv2D) (None, 28, 28, 64) 18496
_________________________________________________________________
conv2d_36 (Conv2D) (None, 28, 28, 1) 577
=================================================================
Total params: 23,873
Trainable params: 23,873
Non-trainable params: 0
_________________________________________________________________
학습 연산
손실 함수는 제곱합 오차
최적화 함수는 rmsprop
그리고 기본적인 것을 사용
modelx2.compile(optimizer='rmsprop', loss='mse', metrics=['accuracy'])
modelx2.fit(input, x_train, epochs=5, batch_size=64)
결과
50% 이미지로 학습한 모델로 확대한 결과
저기 original 이미지에 접근합니다.
50% 이미지로 학습한 모델로 25% 이미지를 확대한 결과
이 결과는 현명합니다. 특히 9는 숫자로 인식 할 수 없습니다.
학습시와 조건이 끝나면 잘되지 않는 것 같습니다.
재학습한 결과
25% 이미지로 재학습해 봅니다.
모델로서는 50%와 같고 입력 화상만 변경한 결과
9도 어떻게든 시인할 수 있을 정도의 재현성입니다
요약
CNN의 4층만으로 여기까지의 초해상이 생겨 버리는 것에 놀랐습니다
이번에는 간단히 필기 문자로 시도했지만 사진 이미지를 찾고 시도하고 싶습니다.
Reference
이 문제에 관하여(MNIST로 초해상), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mou2000/items/2564335a8bbd328d6235
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
modelx2 = models.Sequential()
modelx2.add(layers.Conv2D(16, (3, 3), activation='relu', padding='same', input_shape=(28,28,1)))
modelx2.add(layers.Conv2D(32, (3, 3), activation='relu', padding='same'))
modelx2.add(layers.Conv2D(64, (3, 3), activation='relu', padding='same'))
modelx2.add(layers.Conv2D(1, (3, 3), activation='relu', padding='same'))
modelx2.summary()
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_33 (Conv2D) (None, 28, 28, 16) 160
_________________________________________________________________
conv2d_34 (Conv2D) (None, 28, 28, 32) 4640
_________________________________________________________________
conv2d_35 (Conv2D) (None, 28, 28, 64) 18496
_________________________________________________________________
conv2d_36 (Conv2D) (None, 28, 28, 1) 577
=================================================================
Total params: 23,873
Trainable params: 23,873
Non-trainable params: 0
_________________________________________________________________
손실 함수는 제곱합 오차
최적화 함수는 rmsprop
그리고 기본적인 것을 사용
modelx2.compile(optimizer='rmsprop', loss='mse', metrics=['accuracy'])
modelx2.fit(input, x_train, epochs=5, batch_size=64)
결과
50% 이미지로 학습한 모델로 확대한 결과
저기 original 이미지에 접근합니다.
50% 이미지로 학습한 모델로 25% 이미지를 확대한 결과
이 결과는 현명합니다. 특히 9는 숫자로 인식 할 수 없습니다.
학습시와 조건이 끝나면 잘되지 않는 것 같습니다.
재학습한 결과
25% 이미지로 재학습해 봅니다.
모델로서는 50%와 같고 입력 화상만 변경한 결과
9도 어떻게든 시인할 수 있을 정도의 재현성입니다
요약
CNN의 4층만으로 여기까지의 초해상이 생겨 버리는 것에 놀랐습니다
이번에는 간단히 필기 문자로 시도했지만 사진 이미지를 찾고 시도하고 싶습니다.
Reference
이 문제에 관하여(MNIST로 초해상), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mou2000/items/2564335a8bbd328d6235
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
25% 이미지로 재학습해 봅니다.
모델로서는 50%와 같고 입력 화상만 변경한 결과
9도 어떻게든 시인할 수 있을 정도의 재현성입니다
요약
CNN의 4층만으로 여기까지의 초해상이 생겨 버리는 것에 놀랐습니다
이번에는 간단히 필기 문자로 시도했지만 사진 이미지를 찾고 시도하고 싶습니다.
Reference
이 문제에 관하여(MNIST로 초해상), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/mou2000/items/2564335a8bbd328d6235
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(MNIST로 초해상), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/mou2000/items/2564335a8bbd328d6235텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)