2017-05-19 1 views
0

나는 tensorflow retrain tutorial을 실행 중이지만 왜 모델이 원래 훈련 된 이미지와 다른 크기가 될 수 있는지 이해할 수 없습니다. 모델 에 이미지를 공급하는 코드 retrain.py을 살펴 보았지만 코드에서 이미지 크기를 조정하지 않고 바로 reading the image from disk이고 바로 feeds it to the model입니다.tensorflow retraining 마지막 레이어가 다른 이미지 크기를 처리하는 방법은 무엇입니까?

누구나 마지막 단계 교육을 수행 할 때 서로 다른 크기의 이미지를 사용하는 방법을 알고 있습니까?

+0

로 조정되어 있습니까? – James

+0

무엇을 의미합니까? 모델이 가변 크기 이미지를 수용 할 수 있다고 제안 하시겠습니까? – anthonybell

+0

은 모델이 아니지만 코드는 이미지 전처리를 수행하여 모델로 보내기 전에 이미지의 크기를 조정하거나 부분 집합화할 수 있습니다. 이것은 단지 추측입니다 – James

답변

3

기술적으로 Inception 모델은 광범위한 이미지 크기에 직접 적용될 수 있습니다.

https://github.com/tensorflow/models/blob/master/inception/inception/slim/inception_model.py#L320에서 : 이것은 풀링의 윈도우를 지정

 shape = net.get_shape() 
     net = ops.avg_pool(net, shape[1:3], padding='VALID', scope='pool') 

조밀 한 층 전에 마지막 평균 풀링 (오히려 3 × 3 또는 2 × 2 이상)을 글로벌 평균 풀이 때문에 가능하다 전체 이미지가 될 수 있습니다. 환언

는 공간 차원에 걸쳐 풀링 층 평균화 기능하므로 H x W x 2048 무관 HW1 x 1 x 2048된다.


1

그들이 정확도 일부 탈락의 원인이 훈련을받은 (그러나 네트워크가 작동합니다) 방법이 올바른지 @anthonybell 매우 다른 규모에서의 NN을 적용, 내 경험, 말했다 코드가 이미지 크기를 조정하지 않습니다. 당신이 pretrained 네트워크를 선택하면 그러나 이미지 크기 조정 층

<tf.Tensor 'DecodeJpeg/contents:0' shape=() dtype=string>, 
<tf.Tensor 'DecodeJpeg:0' shape=(?, ?, 3) dtype=uint8>, 
<tf.Tensor 'Cast:0' shape=(?, ?, 3) dtype=float32>, 
<tf.Tensor 'ExpandDims/dim:0' shape=(1,) dtype=int32>, 
<tf.Tensor 'ExpandDims:0' shape=(1, ?, ?, 3) dtype=float32>, 
<tf.Tensor 'ResizeBilinear/size:0' shape=(2,) dtype=int32>, 
<tf.Tensor 'ResizeBilinear:0' shape=(1, 299, 299, 3) dtype=float32>, 
<tf.Tensor 'Sub/y:0' shape=() dtype=float32>, 
<tf.Tensor 'Sub:0' shape=(1, 299, 299, 3) dtype=float32>, 
<tf.Tensor 'Mul/y:0' shape=() dtype=float32>, 
<tf.Tensor 'Mul:0' shape=(1, 299, 299, 3) dtype=float32>, 

네트워크가 어떤 해상도의 이미지를 받아 내부적으로 그것은 즉시 이미지 크기 조정에서 일을 할 수있는 299x299

+0

회선을 볼 때 각 레이어의 이미지가 작아지고 크기가 작아지기 때문에 일종의 크기 조정이 필요합니다. 내 이미지가 8x8 인 경우 1x1이되면 어떻게 될까요? – anthonybell

+0

convolution 레이어 사이에 풀링 레이어가 있기 때문입니다. 입력 크기가 8x8 인 경우 크기 조정 레이어가 이미지 크기를 299x299로 조정합니다. –

관련 문제