Umama Khalid
Umama Khalid

Reputation: 168

How to resize image regions for CNN?

I am using AlexNet for object recognition. I have trained my model using images with size (277,277). Then have used Selective search algorithm to extract regions from image and feeding those regions to network for testing/prediction. How ever when I resize image regions(from SelectiveSearch), it gives error.

Code For resizing Training Images:

try:
 img_array = cv2.imread(os.path.join(path,img))
 new_array = cv2.resize(img_array, (IMG_SIZE, IMG_SIZE))
 gray_img = cv2.cvtColor(new_array, cv2.COLOR_BGR2GRAY)
 training_data.append([gray_img, class_num])

except Exception as e:
 pass

code for resizing selected image regions:

img_lbl, regions = selectivesearch.selective_search(img, scale=500, sigma=0.4, min_size=10)
for r in regions:
 x, y, w, h = r['rect']
 segment = img[y:y + h, x:x + w]
 gray_img = cv2.resize(segment, (277, 277))
 gray_img = cv2.cvtColor(gray_img, cv2.COLOR_BGR2GRAY)
 gray_img = np.array(gray_img).reshape(-1, 277, 277, 1)
 gray_img = gray_img / 255.0
 prediction = model.predict(gray_img)

it gives error on last line i.e:

prediction = model.predict(gray_img)

and error is:

Error: Error when checking input: expected conv2d_1_input to have shape (227, 227, 1) but got array with shape (277, 277, 1)

When both shapes are same then why it is giving this error.

Upvotes: 0

Views: 959

Answers (1)

Karaszka
Karaszka

Reputation: 306

Your model is expecting a tensor as an input, but you are trying to evaluate on a numpy array. Instead use placeholder of a given shape and then feed your array into this placeholder in a session.

# define a placeholder for input 
image = tf.placeholder(dtype=tf.float32, name="image", shape=[277,277,1])
prediction = model.predict(image)

# evaluate each of your resized images in a session
with tf.Session() as sess:
    for r in regions:
        x, y, w, h = r['rect']
        # rest of your code from the loop here 
        gray_img = gray_img /255.
        p = sess.run(prediction, feed_dict={image: gray_img})
        print(p) # to print the prediction of your model for this image

Maybe you should take a look at this question: What's the difference between tf.placeholder and tf.Variable?

Upvotes: 1

Related Questions