Closed skdlfjl closed 3 years ago
self.images : (5, 224, 224, 3) self.annotations : (5, 224, 224, 3, 1) 일 경우 (reshape으로 차원을 축소하지 않은 경우)
print("self.images :", self.images)
print("self.annotations :", self.annotations)
로 확인해보면 self.images : [[[[17 17 17] [12 12 12] [16 16 16] ... [17 21 24] [15 19 20] [17 18 20]]
[[13 13 13] [16 16 16] [12 12 12] ... [20 24 27] [16 20 21] [17 18 20]]
[[12 12 12] [15 15 15] [16 16 16] ... (생략)
self.annotations : [[[[[128] [ 0] [ 0]]
[[128] [ 0] [ 0]]
[[128] [ 0] [ 0]]
...
[[128] [ 0] [ 0]]
[[128] [ 0] [ 0]]
[[128] [ 0] [ 0]]]
[[[128] [ 0] [ 0]]
[[128] [ 0] [ 0]]
[[128] [ 0] [ 0]]
... (생략)
이렇게 뜹니다
self.images : (5, 224, 224, 3) self.annotations : (5, 224, 224, 3) 일 경우 (reshape으로 차원을 축소한 경우)
self.annotations : [[[[128 0 0] [128 0 0] [128 0 0] ... [128 0 0] [128 0 0] [128 0 0]]
[[128 0 0] [128 0 0] [128 0 0] ... [128 0 0] [128 0 0] [128 0 0]]
[[128 0 0] [128 0 0] [128 0 0] ... [128 0 0] [128 0 0] [128 0 0]]
...
이렇게 self.images 와 비슷한 형태로 바뀝니다.
추가로 FCN.py의
if FLAGS.mode == "train":
for itr in range(MAX_ITERATION):
# 학습 데이터를 불러오고 feed_dict에 데이터를 지정합니다
train_images, train_annotations = train_dataset_reader.next_batch(FLAGS.batch_size)
이 부분에서
print("train_images :", train_images)
print("train_annotations :", train_annotations)
위 코드를 추가하면 같은 결과를 확인할 수 있습니다.
해당 코드 적용시 FCN.py에서 발생하는 ValueError: Cannot feed value of shape (2, 224, 224, 3, 1) for Tensor 'annotation:0', which has shape '(?, 224, 224, 1)' 의 내용이
ValueError: Cannot feed value of shape (2, 224, 224, 3) for Tensor 'annotation:0', which has shape '(?, 224, 224, 1)' 로 변경됩니다. 역시 참고해서 필요하면 사용..ㅋㅋ
BatchDatsetReader.py의 _read_images(self) 에서
print(self.images.shape) print(self.annotations.shape)
이부분 실행했을 때 결과가 (5, 224, 224, 3) (5, 224, 224, 3, 1) 이렇게 나옵니다
사실 왜 이렇게 뜨는지는 모르겠고... annotations의 shape를 (5, 224, 224, 3, 1) 에서 (5, 224, 224, 3)로 수정하고 싶으면
self.annotations = np.reshape(self.annotations, (5, 224, 224, 3))
이 코드를 추가해주면 됩니다. 위에서도 말했지만 왜 저렇게 뜨는지 모르겠어서(ㅋㅋ) 혹시 필요할수도 있을 것 같아 추가한 코드라 필요한 경우 써주면 됩니다.
self.annotations = np.reshape(self.annotations, (5, 224, 224, 3))
코드 대신
self.annotations = np.reshape(self.annotations, (len(self.images), 224, 224, 3))
을 써주면 validation과 training에 있는 이미지의 갯수가 달라도 정상적으로 reshape 됩니다.
+) jiHee_FCNtest브랜치의 test.py에 교수님이 준 dataset을 train 601개, val 100개로 랜덤추출 하여 (복사)저장한 코드를 push해뒀습니다.
BatchDatsetReader.py의 _read_images(self) 에서
이부분 실행했을 때 결과가 (5, 224, 224, 3) (5, 224, 224, 3, 1) 이렇게 나옵니다
사실 왜 이렇게 뜨는지는 모르겠고... annotations의 shape를 (5, 224, 224, 3, 1) 에서 (5, 224, 224, 3)로 수정하고 싶으면
self.annotations = np.reshape(self.annotations, (5, 224, 224, 3))
이 코드를 추가해주면 됩니다. 위에서도 말했지만 왜 저렇게 뜨는지 모르겠어서(ㅋㅋ) 혹시 필요할수도 있을 것 같아 추가한 코드라 필요한 경우 써주면 됩니다.