Python 基于图像帧的tensorflow目标检测api和bboxes
通过tag[python]阅读其他人的问题/答案,我遇到了Banach Tarski的一部惊人的作品。所以,我想重温一下他所做的,以便更深入地理解。我一步一步地按照他做的和我用的一样好。更快的\u rcnn\u resnet101模型采用默认参数,批量大小=1 真正的区别在于,我拍摄的不是每个班级都有注解和bbs的货架图片,而是产品图片,每个班级有10个文件夹,在每个文件夹中,你可以看到没有任何背景的完整尺寸的香烟图片。产品图片的平均尺寸为600*1200,货架图片的平均尺寸为3900*2100。所以,我想为什么我不能拍摄这些完整的图像,并从中取出边界框,然后进行训练并获得成功的结果。顺便说一句,我不需要像Banach Tarski那样手动裁剪图像,因为600*1200非常适合更快的\u rcnn\u resnet101神经网络模型及其输入图像的默认参数 示例一:帕尔购物中心的一张课外图片 这看起来很简单,因为我可以通过图像的轮廓创建BBox。所以,我只需要为每个图像创建注释,并从中创建tf_记录以供训练。 我采用了通过图像轮廓创建bboxes的公式Python 基于图像帧的tensorflow目标检测api和bboxes,python,tensorflow,computer-vision,deep-learning,object-detection,Python,Tensorflow,Computer Vision,Deep Learning,Object Detection,通过tag[python]阅读其他人的问题/答案,我遇到了Banach Tarski的一部惊人的作品。所以,我想重温一下他所做的,以便更深入地理解。我一步一步地按照他做的和我用的一样好。更快的\u rcnn\u resnet101模型采用默认参数,批量大小=1 真正的区别在于,我拍摄的不是每个班级都有注解和bbs的货架图片,而是产品图片,每个班级有10个文件夹,在每个文件夹中,你可以看到没有任何背景的完整尺寸的香烟图片。产品图片的平均尺寸为600*1200,货架图片的平均尺寸为3900*2100
x_min = str(1)
y_min = str(1)
x_max = str(img.width - 10)
y_max = str(img.height - 10)
xml注释示例
在12458步每步1个图像后,模型收敛到局部极小值。我保存了所有的检查点和图表。接下来,我创建了out-of-it推断图,并运行object_detection_tutorial.py来展示它是如何在我的测试图像上工作的。但我对结果一点也不满意。
最后一张图片有1024张 × 760大小,也被裁剪为第三个图像的顶部,该图像有3264个 × 2448所以我尝试了不同尺寸的香烟图像,以避免在按模型缩放图像时丢失图像细节
输出:带有预测bboxes的分类图像
我认为问题在于,您的网络了解到对象的大小几乎与输入图像相同,因为每个训练图像只包含一个与输入图像本身大小几乎相同的正对象 我认为您的数据集将是香烟包装分类器的良好起点,但不是对象检测器的起点 更快的-R-CNN模型需要对象样本,但也需要背景样本。然后,模型将通过两步方法在图像中查找对象。在第一步中,所谓的区域建议网络将在图像中寻找感兴趣的区域。这些有趣的领域将在第二步中进行分类。在第二步中,模型决定一个区域是实际的对象还是唯一的背景
因此,为了训练香烟物体检测器,你需要大量的样本,比如你文章的最后一张图片,所有的香烟物体包装都有单独的BBOX和类别标签。很好的解释。谢谢你的建议。希望这也能帮助其他人/
<annotation>
<folder>VOC2007</folder>
<filename>B1_N1.jpg</filename>
<path>/.../grocery-detection/data/images/1/B1_N1.jpg</path>
<source>
<database>The VOC2007 Database</database>
<annotation>PASCAL VOC2007</annotation>
<image>flickr</image>
<flickrid>192073981</flickrid>
</source>
<owner>
<flickrid>tobeng</flickrid>
<name>?</name>
</owner>
<size>
<width>811</width>
<height>1274</height>
<depth>3</depth>
</size>
<segmented>0</segmented>
<object>
<name>1</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>0</difficult>
<bndbox>
<xmin>1</xmin>
<ymin>1</ymin>
<xmax>801</xmax>
<ymax>1264</ymax>
</bndbox>
</object>
</annotation>
feature_dict = {
'image/height': dataset_util.int64_feature(height),
'image/width': dataset_util.int64_feature(width),
'image/filename': dataset_util.bytes_feature(
data['filename'].encode('utf8')),
'image/source_id': dataset_util.bytes_feature(
data['filename'].encode('utf8')),
'image/key/sha256': dataset_util.bytes_feature(key.encode('utf8')),
'image/encoded': dataset_util.bytes_feature(encoded_jpg),
'image/format': dataset_util.bytes_feature('jpeg'.encode('utf8')),
'image/object/bbox/xmin': dataset_util.float_list_feature(xmins),
'image/object/bbox/xmax': dataset_util.float_list_feature(xmaxs),
'image/object/bbox/ymin': dataset_util.float_list_feature(ymins),
'image/object/bbox/ymax': dataset_util.float_list_feature(ymaxs),
'image/object/class/text': dataset_util.bytes_list_feature(classes_text),
'image/object/class/label': dataset_util.int64_list_feature(classes),
'image/object/difficult': dataset_util.int64_list_feature(difficult_obj),
'image/object/truncated': dataset_util.int64_list_feature(truncated),
'image/object/view': dataset_util.bytes_list_feature(poses),
}