Keras 이미지 데이터 Shape 문제 해결

명상하라·2020년 10월 5일
0

딥러닝

목록 보기
2/2

Keras에서 이미지 데이터를 다룰 때 한 가지 주의하여야할 것이 있다.
바로 이미지 Array의 형태(Shape)이다.

ValueError: Negative dimension size caused by subtracting 2 from 1 for 'max_pooling2d_1/MaxPool' (op: 'MaxPool') with input shapes: [?,1,16,32].

만약 직접 데이터를 전처리했고, 위와같은 에러 메세지를 만났다면 이미지 Shape을 잘못 세팅하였을 가능성이 높다.

본인은 opencv에 익숙해져있어서 당연히 대부분의 라이브러리나 필드에서 opencv의 array 구조로 이루어져있는 줄 알았다. 이 때문에 오류 메세지를 붙들고 한참을 헤메었다. 결론은 이미지 형태가 문제였다.

opencv-python은 5x5 사이즈의 RGB 이미지를 표현할 때, 채널 별로 5x5 모양의 Array를 구성한다.

예를 들면,

위의 형태처럼 채널 별로 5x5 이미지들 3개(RGB)로 이루어져있다.

그런데 Keras에서는

위의 이미지처럼 픽셀 단위로 RGB Value가 먼저 묶이고 해당 단위의 list들이 5x5로 묶인다.

따라서 numpy array의 shape property를 찍어보면,
opencv형태는 (3, 5, 5)로 표시될 것이고 Keras형태는 (5, 5, 3)으로 표시될 것이다.

이전에 간단히 튜토리얼을 진행할때는 Keras에서 튜토리얼 데이터를 제공해주어서 생각해보지 못했던 문제인데 직접 데이터를 가공해보면서 배우게 되었다. 역시 몸소 터득하는 것이 기억에도 오래남고 내 것으로 만들 수 있는 것 같다.

profile
개발 메모장

1개의 댓글

comment-user-thumbnail
2020년 12월 5일

안녕하세요. 비슷한 문제가 있어서 질문드립니다.
현재 Numpy를 통해 전처리한 이미지 데이터의 shape가 (None, 4, 1, 5) 형태인데 Keras에서는 (None 1, 5, 4)형태로 입력해줘야하는데 단순히 reshape를 통해 형태를 변경할 경우 원하는 데이터의 형태와 달라지는데 이 부부은 어떻게 해결할 수 있을까요?

답글 달기