我生成了一个由(200 x 200x 3)张图像组成的数据集,其中每张图像包含一个40 x 40的不同颜色的方框。使用tensorflow创建一个模型,它可以预测这个40 x 40盒子的弦。输入图片描述
生成这些图像的代码:
from PIL import Image, ImageDraw
from random import randrange
colors = ["#ffd615", "#f9ff21", "#00d1ff",
"#0e153a", "#fc5c9c", "#ac3f21",
"#40514e", "#492540", "#ff8a5c",
"#000000", "#a6fff2", "#f0f696",
"#d72323", "#dee1ec", "#fcb1b1"]
def genrate_image(color):
img = Image.new(mode="RGB", size=(200, 200), color=color)
return img
def save_image(img, imgname):
img.save(imgname)
def draw_rect(image, color, x, y):
draw = ImageDraw.Draw(image)
coords = ((x, y), (x+40, y), (x+40, y+40), (x, y+40))
draw.polygon(coords, fill=color)
#return image, str(coords)
return image, coords[0][0], coords[2][0], coords[0][1], coords[2][1]
FILE_NAME = "train_annotations.txt"
for i in range(0, 100):
img = genrate_image(colors[randrange(0, len(colors))])
img, x0, x1, y0, y1 = draw_rect(img, colors[randrange(0, len(colors))], randrange(200 - 50), randrange(200 - 50))
save_image(img, "dataset/train_images/img"+str(i)+".png")
with open(FILE_NAME, "a+") as f:
f.write(f"{x0} {x1} {y0} {y1}n")
f.close()
有谁能帮我建议一下我怎样才能建立一个模型来预测新图像的坐标吗?
分割这些盒子最简单的方法是K均值聚类,K = 2。你基本上记录了所有像素的rgb像素值。然后使用K-means将像素分成两组,一组是背景组,另一组是框色组。然后使用盒子颜色组,将这些颜色映射回它们的原始坐标。然后求这些坐标的平均值,得到40x40方框的位置。
https://www.tensorflow.org/api_docs/python/tf/compat/v1/estimator/experimental/KMeans以上是关于如何使用K-means的源文档
执行边界框回归就足够了,为此您只需要在СNN之后添加一个具有4个输出值的完全连接层:x1,y1,x2,y2。它们在左上角和右下角。类似的东西可以在这里找到https://github.com/sabhatina/bounding-box-regression.