2017-12-28 3 views
0

최근에 기계 학습에 대한 자습서를 따라 해본 결과 이제 혼자서 이미지 인식 프로그램을 만들 수 있는지 테스트하고 싶습니다. 이를 위해 CIFAR 10 데이터 세트를 사용하고 싶지만 데이터 세트 변환시 작은 문제가 있다고 생각합니다.cifar10이 잘 변환되었는지 확인하십시오.

이 집합에 익숙하지 않은 사용자 : 데이터 집합은 n 행 및 3072 열의 목록으로 제공되며 첫 번째 1024 열은 빨간색 값을 나타내며 두 ​​번째 1024 녹색 값과 마지막 값은 파란색 값입니다. 각 행은 하나의 이미지 (크기 32x32)이고 픽셀 행은 서로 쌓여 있습니다 (처음 32 개의 값은 최상위 행 픽셀의 빨간색 값입니다)

내가 원했던 것 데이터 세트는 4D 텐서 (numpy로)로 변환하여 matplotlibs .imshow()으로 이미지를 볼 수 있습니다. 내가 만든 텐서는 (n, 32, 32, 3)이므로 첫 번째 '차원'은 모든 이미지를 저장하고 두 번째는 픽셀 행을 저장하고 세 번째는 개별 픽셀을 저장하고 마지막 픽셀은 그 픽셀의 rgb 값을 나타냅니다. 단일 매개 변수 (모양 (n, 3072)의 텐서)를 취

def rawToRgb(data): 
    length = data.shape[0] 

    # convert to flat img array with rgb pixels 
    newAr = np.zeros([length, 1024, 3]) 
    for img in range(length): 
     for pixel in range(1024): 
      newAr[img, pixel, 0] = data[img, pixel] 
      newAr[img, pixel, 1] = data[img, pixel+1024] 
      newAr[img, pixel, 2] = data[img, pixel+2048] 

    # convert to 2D img array 
    newAr2D = newAr.reshape([length, 32, 32, 3]) 
    # plt.imshow(newAr2D[5998]) 
    # plt.show() 
    return newAr2D 

: 여기가이 작업을 수행해야했다 기능입니다. 필자는 pyplot 코드를 주석 처리했습니다. 테스트 용으로 만 사용 되었기 때문에 테스트 할 때 모든 것이 괜찮은 것으로 나타났습니다 (이미지의 오브젝트 모양을 인식 할 수 있지만 색상이 좋은지 확실하지 않습니다. 좀 이상한 색의 이미지뿐만 아니라 꽤 정상 이미지를 얻을 수 또는하지 ... 여기에 몇 가지 예입니다. purple plane, blue cat, normal horse, blue frog 내가 실수를하고 어떠했는지

사람이 말해 줄 수 또는 사전에하지?

탱크!

답변

1

이상한 색 표시되는 이미지의 실제 이미지의 negative 있습니다 o 진정한 가치를 얻으려면 255에서 각 픽셀 값을 뺄 필요가 있습니다. 당신은 단순히 원본 이미지는, 사용의 모양을보고 싶다면 :

from scipy.misc import imread 
import matplotlib.pyplot as plt 
img = imread(file_path) 
plt.imshow(255 - img) 
plt.show() 

문제의 원래 원인은 그 CIFAR-10 데이터 저장소 0-255의 규모에 픽셀 값 만하기 matplotlib의 imshow() 메서드는 0과 1 사이의 입력을 기대합니다. 0과 1 사이의 크기를 조정하지 않으면 imshow()은 내부적으로 일부 정규화를 수행하므로 일부 이미지가 네거티브가됩니다.

관련 문제