机器学习-------为图像增加标注框

在图像中添加标注框有着很大的用处,在一些用于图像识别的数据集中,图像中某些需要关注的特征通常会被标注框圈出来,或者在一些图像识别问题中把模型要识别出的物体用标注框标注一下,tensorflow中有提供了一个函数供我们使用:image.draw_bounding_boxes()函数用于在图像中加入矩行标注框。以下的代码为我们提供了一个示例:

机器学习-------为图像增加标注框_第1张图片
在使用image.draw_bounding_boxes()函数时需要注意,该函数要求图像矩阵中的数据为实数型,并且要求输入是一个batch的数据,也就是多张图片组成的四维矩阵。所以通过expand_dims()函数在解码之后的图像矩阵上多添加一维,同时通过convert_image_dtype()函数把数据转换为实数型。

运行上面的代码,能够为图像添加两个标注框,得到的结果如下图所示,从图中可以看到,大的标注框为我们标注了图像的整体,小的标注框则只是标注了图像中的重要部位,为了使得图片看的更加清楚,可以适当的把图片缩小一点(通过image.resize_images()函数)。
机器学习-------为图像增加标注框_第2张图片

此外,tensorflow还提供了image.sample_distorted_bounding_box()函数,这个函数会为图像生成单个随机变形的边界框,这样一来我们可以进行随机位置边框的绘制。image.sample_distorted_bounding_box()函数的第一个参数是包含[height,width,channels] 3个值的一维数组,也就是图形的形状。第二个参数bounding_boxes是一个形状为[batch,N,4]的三维数组,其中batch用于指定函数需要处理的图片的数量,N用于描述与图像相关联的N个边界框的形状。对于参数bounding_boxes,例如tf.constant([[[0.05,0.05,0.9,0.7],[0.20,0.3,0.5,0.5]]])的形状为[1,2,4],表示一张图片中的一个标注框。在实际使用中,我们一般只要设置这两个参数就行了,这个函数有3个返回值,最后一个返回值bboxes是形状为[1,1,4]的三维矩阵,表示随机变形后的边界框,可以作为函数image.draw_bounding_boxes()的输入。第一个返回值begin和参数image_size具有相同的类型,是一个一维列表[offer_height,offset_width,0],可以作为slice()的begin参数。第二个返回值size同样和image_size具有相同的类型,是一个一维列表,可以作为slice()函数的size参数。下面我们用代码展示下对图像完成随机裁剪和随机添加标注框。
机器学习-------为图像增加标注框_第3张图片

程序运行如下图所示,(a)是随机添加的标注框,(b)是随机裁剪出来的结果,从图中可以发现,随机裁剪的区域并不是标注框标注出来的区域,由于 image.sample_distorted_bounding_box()函数的返回值具有随机性,所以得到的结果也有可能每次都不同。

机器学习-------为图像增加标注框_第4张图片
机器学习-------为图像增加标注框_第5张图片
总结

本节内容主要讲的是为图片增加标注框,包括随机绘制标注框。这在图像识别以及实际生活当中应用得很多,比如目标检测、行人识别等等,给目标增加标注框有利于识别出图片中的主要物体。

关注小鲸融创,一起深度学习金融科技!

你可能感兴趣的:(深度学习)