首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用tf.image.draw_bounding_boxes在原始图像上绘制边界框以显示检测到对象的位置?

如何使用tf.image.draw_bounding_boxes在原始图像上绘制边界框以显示检测到对象的位置?
EN

Stack Overflow用户
提问于 2019-04-25 23:34:11
回答 2查看 1.5K关注 0票数 0

我是Tensorflow的新手,到目前为止,我已经能够使用从Kaggle获得的数据为花朵数据集构建分类器,并且我已经能够训练CNN来识别向日葵和雏菊,并使用matplotlib.pyplot.figure()调用绘制带有标签的结果。

现在,我想在原始图像本身上绘制一个边界框,以显示它检测到花朵的位置。我读过关于tf.image.draw_bounding_boxes的文章,但我对如何使用它有点困惑,因为从技术上讲,CNN已经在物体上画了一个边界框来对其进行分类。有没有一种方法可以在源文件中的对象被框起来的时候,就进入这个操作并画出丰富的方框?

这是我想要做的一个例子。我想训练我的模型如何识别向日葵,然后当我展示一张向日葵的图片时,我想让它找到向日葵的位置,并在每个向日葵周围画一个边界框。

下面是我在本教程中使用的代码(假设前三行只是创建标签的基本函数,与这个问题无关)

代码语言:javascript
运行
复制
training_images = train_data_with_label()
testing_images = test_data_with_label()
TTest = test_new_data()

# Assign images and labels
tr_img_data = np.array([i[0] for i in training_images]).reshape(-1, 64, 64, 1)
tr_lbl_data = np.array([i[1] for i in training_images])
tst_img_data = np.array([i[0] for i in testing_images]).reshape(-1, 64, 64, 1)
tst_lbl_data = np.array([i[1] for i in testing_images])

model = Sequential()

model.add(InputLayer(input_shape=[64, 64, 1]))

model.add(Conv2D(filters=16, kernel_size=5, strides=1, padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=5, padding='same'))

model.add(Conv2D(filters=32, kernel_size=5, strides=1, padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=5, padding='same'))

model.add(Conv2D(filters=50, kernel_size=5, strides=1, padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=5, padding='same'))

model.add(Conv2D(filters=80, kernel_size=5, strides=1, padding='same', activation='relu'))
model.add(MaxPooling2D(pool_size=5, padding='same'))

model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(512, activation='relu'))
model.add(Dropout(rate=0.5))
model.add(Dense(classes, activation='softmax'))
optimizer = Adam(lr=1e-4)

model.compile(optimizer=optimizer, loss='categorical_crossentropy', metrics=['accuracy'])
model.fit(x=tr_img_data, y=tr_lbl_data, epochs=1000, batch_size=50)
model.summary()


# Save the model's weights
pth = 'S:/SavedWeights/Daisy_vs_Sunflower_vs_Tulip/weights.hdf5'
model.save_weights(pth, overwrite=True)
print("Weights saved!!!")


fig = plt.figure(figsize=(14, 14))

for cnt, data in enumerate(TTest[0:14]):

    y = fig.add_subplot(6, 5, cnt+1)
    img = data[0]
    data = img.reshape(1, 64, 64, 1)
    model_out = model.predict([data])

    if np.argmax(model_out) == 0:
        str_label = 'Daisy'
    elif np.argmax(model_out) == 1:
        str_label = 'Sunflower'
    else:
        str_label = 'Tulip'

    y.imshow(img, cmap='gray')
    plt.title(str_label)
    y.axes.get_xaxis().set_visible(False)
    y.axes.get_yaxis().set_visible(False)

plt.show()

我想找一个例子,说明我如何在这种教程代码上使用这个库,然后拍摄一张任意的图像,确定图像中是否有向日葵,并在它们周围画一个框。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2019-04-29 21:21:58

In弄明白了!事实证明我用错了,我一直在使用图像分类,我应该研究的是目标检测。我阅读了tensorflow文档,并进行了绘制边界框的对象检测。

票数 0
EN

Stack Overflow用户

发布于 2021-09-02 04:23:25

在使用tf.image.draw_bounding_boxes绘制边界框时,使用目标检测算法并训练网络,然后在预测部分

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55852943

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档