- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在设置新的 Tensorflow Object Detection API在大面积的卫星图像中寻找小物体。它工作得很好 - 它找到了我想要的所有 10 个对象,但我也得到了 50-100 个误报 [看起来有点像目标对象,但事实并非如此]。
我正在使用sample config来自'pets' tutorial ,微调他们提供的 faster_rcnn_resnet101_coco
模型。我从小规模开始,只有 100 个对象的训练示例(仅 1 个类)。我的验证集中有 50 个示例。每个示例都是一个 200x200 像素图像,中心有一个标记对象 (~40x40)。我训练直到我的精度和损失曲线达到稳定水平。
我对使用深度学习进行对象检测还比较陌生。提高精确度的最佳策略是什么?例如硬负挖矿?增加我的训练数据集大小?我还没有尝试过他们提供的最准确的模型 faster_rcnn_inception_resnet_v2_atrous_coco
,因为我想保持一定的速度,但如果需要的话我会这样做。
硬阴性挖掘似乎是一个合乎逻辑的步骤。如果您同意,我如何实现它并为我的训练数据集设置 tfrecord 文件?假设我为 50-100 个误报中的每一个制作了 200x200 的图像:
最佳答案
我最近在工作中重新审视了这个主题,并认为我会为将来访问的任何人更新我当前的学习内容。
该主题出现在 Tensorflow's Models repo issue tracker 。 SSD 允许您设置要挖掘的负例与正例的比例 (max_males_per_positive: 3
),但您也可以为没有正例的图像设置最小数量 (min_males_per_image: 3
)。这两个都在 model-ssd-loss 配置部分中定义。
也就是说,我在 Faster-RCNN 的模型配置中没有看到相同的选项。问题中提到 models/research/object_detection/core/balanced_positive_negative_sampler.py
包含用于 Faster-RCNN 的代码。
本期讨论的另一个选项是专门为相似者创建第二个类。在训练期间,模型将尝试学习类别差异,这将有助于实现您的目的。
最后,我发现了这个article关于滤波器放大器网络 (FAN) 的信息可能会为您的航空图像工作提供信息。
================================================== ===================
以下论文描述了与您描述的相同目的的硬负挖掘: Training Region-based Object Detectors with Online Hard Example Mining
在第 3.1 节中,他们描述了使用前台和后台类:
Background RoIs. A region is labeled background (bg) if its maximum IoU with ground truth is in the interval [bg lo, 0.5). A lower threshold of bg lo = 0.1 is used by both FRCN and SPPnet, and is hypothesized in [14] to crudely approximate hard negative mining; the assumption is that regions with some overlap with the ground truth are more likely to be the confusing or hard ones. We show in Section 5.4 that although this heuristic helps convergence and detection accuracy, it is suboptimal because it ignores some infrequent, but important, difficult background regions. Our method removes the bg lo threshold.
事实上这篇论文被引用,其思想被用在Tensorflow的对象检测loss.py代码中进行硬挖掘:
class HardExampleMiner(object):
"""Hard example mining for regions in a list of images.
Implements hard example mining to select a subset of regions to be
back-propagated. For each image, selects the regions with highest losses,
subject to the condition that a newly selected region cannot have
an IOU > iou_threshold with any of the previously selected regions.
This can be achieved by re-using a greedy non-maximum suppression algorithm.
A constraint on the number of negatives mined per positive region can also be
enforced.
Reference papers: "Training Region-based Object Detectors with Online
Hard Example Mining" (CVPR 2016) by Srivastava et al., and
"SSD: Single Shot MultiBox Detector" (ECCV 2016) by Liu et al.
"""
根据您的模型配置文件,HardMinerObject 由如下代码中的loss_builder.py 返回:
def build_hard_example_miner(config,
classification_weight,
localization_weight):
"""Builds hard example miner based on the config.
Args:
config: A losses_pb2.HardExampleMiner object.
classification_weight: Classification loss weight.
localization_weight: Localization loss weight.
Returns:
Hard example miner.
"""
loss_type = None
if config.loss_type == losses_pb2.HardExampleMiner.BOTH:
loss_type = 'both'
if config.loss_type == losses_pb2.HardExampleMiner.CLASSIFICATION:
loss_type = 'cls'
if config.loss_type == losses_pb2.HardExampleMiner.LOCALIZATION:
loss_type = 'loc'
max_negatives_per_positive = None
num_hard_examples = None
if config.max_negatives_per_positive > 0:
max_negatives_per_positive = config.max_negatives_per_positive
if config.num_hard_examples > 0:
num_hard_examples = config.num_hard_examples
hard_example_miner = losses.HardExampleMiner(
num_hard_examples=num_hard_examples,
iou_threshold=config.iou_threshold,
loss_type=loss_type,
cls_loss_weight=classification_weight,
loc_loss_weight=localization_weight,
max_negatives_per_positive=max_negatives_per_positive,
min_negatives_per_image=config.min_negatives_per_image)
return hard_example_miner
由 model_builder.py 返回并由 train.py 调用。所以基本上,在我看来,简单地生成真正的正标签(使用 LabelImg 或 RectLabel 之类的工具)应该足以让训练算法在同一图像中找到硬底片。相关问题给出了一个很好的walkthrough .
如果您想要输入没有真正阳性的数据(即图像中不应对任何内容进行分类),只需将阴性图像添加到没有边界框的 tfrecord 中即可。
关于machine-learning - 减少误报的最佳策略 : Google's new Object Detection API on Satellite Imagery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45666499/
基本上,我的问题是,由于无监督学习是机器学习的一种,是否需要机器“学习”的某些方面并根据其发现进行改进?例如,如果开发了一种算法来获取未标记的图像并找到它们之间的关联,那么它是否需要根据这些关联来改进
生成模型和判别模型似乎可以学习条件 P(x|y) 和联合 P(x,y) 概率分布。但从根本上讲,我无法说服自己“学习概率分布”意味着什么。 最佳答案 这意味着您的模型要么充当训练样本的分布估计器,要么
是否有类似于 的 scikit-learn 方法/类元成本 在 Weka 或其他实用程序中实现的算法以执行常量敏感分析? 最佳答案 不,没有。部分分类器提供 class_weight和 sample_
是否Scikit-learn支持迁移学习?请检查以下代码。 型号 clf由 fit(X,y) 获取 jar 头型号clf2在clf的基础上学习和转移学习 fit(X2,y2) ? >>> from s
我发现使用相同数据的两种交叉验证技术之间的分类性能存在差异。我想知道是否有人可以阐明这一点。 方法一:cross_validation.train_test_split 方法 2:分层折叠。 具有相同
我正在查看 scikit-learn 文档中的这个示例:http://scikit-learn.org/0.18/auto_examples/model_selection/plot_nested_c
我想训练一个具有很多标称属性的数据集。我从一些帖子中注意到,要转换标称属性必须将它们转换为重复的二进制特征。另外据我所知,这样做在概念上会使数据集稀疏。我也知道 scikit-learn 使用稀疏矩阵
我正在尝试在 scikit-learn (sklearn.feature_selection.SelectKBest) 中通过卡方方法进行特征选择。当我尝试将其应用于多标签问题时,我收到此警告: 用户
有几种算法可以构建决策树,例如 CART(分类和回归树)、ID3(迭代二分法 3)等 scikit-learn 默认使用哪种决策树算法? 当我查看一些决策树 python 脚本时,它神奇地生成了带有
我正在尝试在 scikit-learn (sklearn.feature_selection.SelectKBest) 中通过卡方方法进行特征选择。当我尝试将其应用于多标签问题时,我收到此警告: 用户
有几种算法可以构建决策树,例如 CART(分类和回归树)、ID3(迭代二分法 3)等 scikit-learn 默认使用哪种决策树算法? 当我查看一些决策树 python 脚本时,它神奇地生成了带有
有没有办法让 scikit-learn 中的 fit 方法有一个进度条? 是否可以包含自定义的类似 Pyprind 的内容? ? 最佳答案 如果您使用 verbose=1 初始化模型调用前 fit你应
我正在使用基于 rlglue 的 python-rl q 学习框架。 我的理解是,随着情节的发展,算法会收敛到一个最优策略(这是一个映射,说明在什么状态下采取什么行动)。 问题 1:这是否意味着经过若
我正在尝试使用 grisSearchCV 在 scikit-learn 中拟合一些模型,并且我想使用“一个标准错误”规则来选择最佳模型,即从分数在 1 以内的模型子集中选择最简约的模型最好成绩的标准误
我正在尝试离散数据以进行分类。它们的值是字符串,我将它们转换为数字 0,1,2,3。 这就是数据的样子(pandas 数据框)。我已将数据帧拆分为 dataLabel 和 dataFeatures L
每当我开始拥有更多的类(1000 或更多)时,MultinominalNB 就会变得非常慢并且需要 GB 的 RAM。对于所有支持 .partial_fit()(SGDClassifier、Perce
我需要使用感知器算法来研究一些非线性可分数据集的学习率和渐近误差。 为了做到这一点,我需要了解构造函数的一些参数。我花了很多时间在谷歌上搜索它们,但我仍然不太明白它们的作用或如何使用它们。 给我带来更
我知道作为功能 ordinal data could be assigned arbitrary numbers and OneHotEncoding could be done for catego
这是一个示例,其中有逐步的过程使系统学习并对输入数据进行分类。 它对给定的 5 个数据集域进行了正确分类。此外,它还对停用词进行分类。 例如 输入:docs_new = ['上帝就是爱', '什么在哪
我有一个 scikit-learn 模型,它简化了一点,如下所示: clf1 = RandomForestClassifier() clf1.fit(data_training, non_binary
我是一名优秀的程序员,十分优秀!