create_class_lut_mlpT_create_class_lut_mlpCreateClassLutMlpCreateClassLutMlpcreate_class_lut_mlp创建类查找表多层感知器(算子)
名称
create_class_lut_mlpT_create_class_lut_mlpCreateClassLutMlpCreateClassLutMlpcreate_class_lut_mlp — 使用多层感知器创建查找表来对字节图像进行分类。
签名
描述
create_class_lut_mlpcreate_class_lut_mlpCreateClassLutMlpCreateClassLutMlpCreateClassLutMlpcreate_class_lut_mlp 基于训练好的多层感知器(MLP)MLPHandleMLPHandleMLPHandleMLPHandleMLPHandlemlphandle 的数据生成查找表(LUT)ClassLUTHandleClassLUTHandleClassLUTHandleClassLUTHandleclassLUTHandleclass_luthandle,用于对多通道字节图像进行分类。通过采用基于 MLP 的 LUT 分类器,后续分类操作中的 classify_image_class_mlpclassify_image_class_mlpClassifyImageClassMlpClassifyImageClassMlpClassifyImageClassMlpclassify_image_class_mlp
算子可替换为
classify_image_class_lutclassify_image_class_lutClassifyImageClassLutClassifyImageClassLutClassifyImageClassLutclassify_image_class_lut 算子。由于 MLP 的所有可能响应均存储于 LUT 中,因此无需对每个图像点进行类别估计,从而显著提升分类速度。生成 LUT 时,需重点关注先前调用的 create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlpcreate_class_mlp 算子中定义的 NumInputNumInputNumInputNumInputnumInputnum_input、PreprocessingPreprocessingPreprocessingPreprocessingpreprocessingpreprocessing 和 NumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components 参数。NumInputNumInputNumInputNumInputnumInputnum_input 定义待分类图像必须具备的通道数。通过 PreprocessingPreprocessingPreprocessingPreprocessingpreprocessingpreprocessing(参见 create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlpcreate_class_mlp)可将通道数转换为 NumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components。NumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components 定义了分类器
classify_class_mlpclassify_class_mlpClassifyClassMlpClassifyClassMlpClassifyClassMlpclassify_class_mlp 内部处理的特征向量长度。出于性能和磁盘空间的考虑,LUT 最大维度限制为 3 维。由于该算子替代了 classify_class_mlpclassify_class_mlpClassifyClassMlpClassifyClassMlpClassifyClassMlpclassify_class_mlp,因此 NumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components <= 3 必须成立。若未进行减少图像通道数的预处理(即NumInputNumInputNumInputNumInputnumInputnum_input = NumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components),则所有可能出现在字节图像中的像素值都将由
classify_class_mlpclassify_class_mlpClassifyClassMlpClassifyClassMlpClassifyClassMlpclassify_class_mlp 进行分类。返回的分类结果存储于 LUT 中。若存在减少图像通道数的预处理操作(NumInputNumInputNumInputNumInputnumInputnum_input > NumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components),则 MLP 的预处理参数将存储于 LUT 的独立结构中。创建 LUT 时,所有转换后的像素值均通过 classify_class_mlpclassify_class_mlpClassifyClassMlpClassifyClassMlpClassifyClassMlpclassify_class_mlp 进行分类。返回的分类结果存储于 LUT 中。由于 LU T的离散化特性,其分类精度可能低于 classify_image_class_mlpclassify_image_class_mlpClassifyImageClassMlpClassifyImageClassMlpClassifyImageClassMlpclassify_image_class_mlp。通过 'bit_depth'"bit_depth""bit_depth""bit_depth""bit_depth""bit_depth" 和
'class_selection'"class_selection""class_selection""class_selection""class_selection""class_selection",可以控制分类的精度、所需存储空间及创建 LUT 所需的运行时间。
基于 MLP 的 LUT 分类器的以下参数可通过
GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name 和 GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value 进行设置:
- 'bit_depth'"bit_depth""bit_depth""bit_depth""bit_depth""bit_depth":
-
像素使用的位数。该参数控制 LUT 分类器的存储需求,并受图像位深度限制( 'bit_depth'"bit_depth""bit_depth""bit_depth""bit_depth""bit_depth" <= 8)。若 LUT 位深度较小( 'bit_depth'"bit_depth""bit_depth""bit_depth""bit_depth""bit_depth" < 8),则多个像素组合的类别将映射至同一 LUT 条目,可能导致分类精度降低。其中一个聚类包含 种像素组合,其中 NumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components 表示 LUT 的维度,该维度在 create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlpcreate_class_mlp 中指定。例如,当 'bit_depth'"bit_depth""bit_depth""bit_depth""bit_depth""bit_depth" = 7 且 NumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components = 3 时,8 种像素组合的类别被映射到同一个 LUT 条目中。LUT 最多需要 字节的存储空间。例如,当 NumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components = 3、'bit_depth'"bit_depth""bit_depth""bit_depth""bit_depth""bit_depth" = 8 且 NumOutputNumOutputNumOutputNumOutputnumOutputnum_output < 16
(在 create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlpcreate_class_mlp 中指定)时,该 LUT 在启用内部存储优化后需要 8 MB 存储空间。若 NumOutputNumOutputNumOutputNumOutputnumOutputnum_output = 1,则通过使用 LUT 的完整位深度,仅需 2 MB 存储空间。当 LUT 能完全容纳于缓存时,classify_image_class_lutclassify_image_class_lutClassifyImageClassLutClassifyImageClassLutClassifyImageClassLutclassify_image_class_lut
中的分类运行时间将降至最低。
典型值: 6,7,8
默认值: 8
限制条件: 'bit_depth'"bit_depth""bit_depth""bit_depth""bit_depth""bit_depth" >= 1,
'bit_depth'"bit_depth""bit_depth""bit_depth""bit_depth""bit_depth" <= 8。
- 'class_selection'"class_selection""class_selection""class_selection""class_selection""class_selection":
-
LUT 的类选择方法。可通过修改该方法来控制创建 LUT 分类器的精度和所需运行时间。当 LUT 位深度达到最大值时(即 'bit_depth'"bit_depth""bit_depth""bit_depth""bit_depth""bit_depth" = 8),'class_selection'"class_selection""class_selection""class_selection""class_selection""class_selection" 参数值将被忽略。如果 LUT 的位深度较小('bit_depth'"bit_depth""bit_depth""bit_depth""bit_depth""bit_depth" < 8),则多个像素组合的类别将映射到相同的 LUT 条目。其中一个聚类包含 种像素组合,其中 NumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components 表示 LUT 的维度,该维度在 create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlpcreate_class_mlp 中指定。选择 'class_selection'"class_selection""class_selection""class_selection""class_selection""class_selection" = 'best'"best""best""best""best""best" 时,将聚类中出现频率最高的类别存储在 LUT 中。若采用 'class_selection'"class_selection""class_selection""class_selection""class_selection""class_selection" = 'fast'"fast""fast""fast""fast""fast",则仅对聚类中单个像素(即各分量取值最小的像素)进行分类。返回的类别存储在 LUT 中。这种情况下,后续分类的准确度可能会降低。另一方面,创建 LUT 所需的运行时间可以缩短,该时间与查找表所需的最大存储空间成正比,该存储空间定义为
。
可能值: 'fast'"fast""fast""fast""fast""fast", 'best'"best""best""best""best""best"
默认值: 'fast'"fast""fast""fast""fast""fast"
- 'rejection_threshold'"rejection_threshold""rejection_threshold""rejection_threshold""rejection_threshold""rejection_threshold":
-
MLP 中拒绝不确定分类点的阈值。该参数代表对分类返回的概率测度设置的阈值(参见 classify_class_mlpclassify_class_mlpClassifyClassMlpClassifyClassMlpClassifyClassMlpclassify_class_mlp 和 evaluate_class_mlpevaluate_class_mlpEvaluateClassMlpEvaluateClassMlpEvaluateClassMlpevaluate_class_mlp)。所有概率低于
'rejection_threshold'"rejection_threshold""rejection_threshold""rejection_threshold""rejection_threshold""rejection_threshold" 的像素均不被分配至任何类别。
默认值: 0.5
限制条件: 'rejection_threshold'"rejection_threshold""rejection_threshold""rejection_threshold""rejection_threshold""rejection_threshold" >= 0,
'rejection_threshold'"rejection_threshold""rejection_threshold""rejection_threshold""rejection_threshold""rejection_threshold" <= 1。
执行信息
- 多线程类型:可重入(与非独占算子并行运行)。
- 多线程作用域:全局(可从任何线程调用)。
- 在内部数据级别上自动并行化。
此算子返回一个句柄。请注意,即使该句柄被用作特定算子的输入参数,这些算子仍可能改变此句柄类型的实例状态。
参数
MLPHandleMLPHandleMLPHandleMLPHandleMLPHandlemlphandle (输入控制) class_mlp → HClassMlp, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
MLP 句柄。
GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name (输入控制) attribute.name-array → HTupleSequence[str]HTupleHtuple (string) (string) (HString) (char*)
用于创建 LUT 分类器时可调整的泛型参数名称。
默认值:
[]
建议值:
'bit_depth'"bit_depth""bit_depth""bit_depth""bit_depth""bit_depth", 'class_selection'"class_selection""class_selection""class_selection""class_selection""class_selection", 'rejection_threshold'"rejection_threshold""rejection_threshold""rejection_threshold""rejection_threshold""rejection_threshold"
GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value (输入控制) attribute.value-array → HTupleSequence[Union[str, int, float]]HTupleHtuple (string / integer / real) (string / int / long / double) (HString / Hlong / double) (char* / Hlong / double)
用于创建 LUT 分类器时可调整的泛型参数值。
默认值:
[]
建议值:
8, 7, 6, 'fast'"fast""fast""fast""fast""fast", 'best'"best""best""best""best""best"
ClassLUTHandleClassLUTHandleClassLUTHandleClassLUTHandleclassLUTHandleclass_luthandle (输出控制) class_lut → HClassLUT, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
LUT 分类器的句柄。
结果
如果参数有效,算子 create_class_lut_mlpcreate_class_lut_mlpCreateClassLutMlpCreateClassLutMlpCreateClassLutMlpcreate_class_lut_mlp 返回值 2 (H_MSG_TRUE)。如有必要,则抛出异常。
可能的前趋
train_class_mlptrain_class_mlpTrainClassMlpTrainClassMlpTrainClassMlptrain_class_mlp,
read_class_mlpread_class_mlpReadClassMlpReadClassMlpReadClassMlpread_class_mlp
可能的后继
classify_image_class_lutclassify_image_class_lutClassifyImageClassLutClassifyImageClassLutClassifyImageClassLutclassify_image_class_lut
替代
create_class_lut_gmmcreate_class_lut_gmmCreateClassLutGmmCreateClassLutGmmCreateClassLutGmmcreate_class_lut_gmm,
create_class_lut_knncreate_class_lut_knnCreateClassLutKnnCreateClassLutKnnCreateClassLutKnncreate_class_lut_knn,
create_class_lut_svmcreate_class_lut_svmCreateClassLutSvmCreateClassLutSvmCreateClassLutSvmcreate_class_lut_svm
另见
classify_image_class_lutclassify_image_class_lutClassifyImageClassLutClassifyImageClassLutClassifyImageClassLutclassify_image_class_lut,
clear_class_lutclear_class_lutClearClassLutClearClassLutClearClassLutclear_class_lut
模块
基础