简体   繁体   中英

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 ie:

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.

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?

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM