第十七章 Legacy,遗留问题
17.1 2D Metrology ,二维测量
操作符列表
copy_metrology_object
复制一个计量模型的计量对象。
transform_metrology_object
转换计量模型的计量对象,例如用于校准。
17.2 Classification ,分类
操作符列表
clear_sampset
释放数据集的内存。
close_class_box
销毁分类器。
create_class_box
创建一个新的分类器。
descript_class_box
描述盒子分类器的类。
deserialize_class_box
反序列化序列化的分类器。
enquire_class_box
对属性元组进行分类。
enquire_reject_class_box
用拒绝类对属性元组进行分类。
get_class_box_param
获取有关当前参数的信息。
learn_class_box
训练分类器。
learn_sampset_box
用一个数据集训练分类器。
read_class_box
从文件中读取分类器。
read_sampset
从文件中读取训练数据集。
serialize_class_box
序列化一个分类器。
set_class_box_param
设置分类系统参数。
test_sampset_box
对数组集进行分类。
write_class_box
将分类器保存在文件中。
17.3 Control ,控制
操作符列表
ifelse
带可选项的条件语句。
17.4 DL Classification ,DL分类(…)
本章中描述的工作流程和操作符已经过时,仅出于向后兼容的原因而提供。新的应用程序应该使用深度学习/分类中描述的工作流和操作符。
本章解释了如何在训练和推理阶段使用基于深度学习的分类。
17.4.1 一般工作流程
本节描述了使用过时的工作流程进行深度学习分类的主要步骤和工作流程。
1.准备网络和数据
这一部分是关于如何准备和预处理数据。
(1)首先,必须使用算子读取预训练的网络
read_dl_classifier。
当想要读取自己训练过的网络时,也可以使用此操作符,在使用write_dl_classifier保存它们之后。
(2)读取数据为您进行深度学习分类训练的程序
read_dl_classifier_data_set
是可用的。使用此过程,可以获得图像文件路径及其各自标签(ground truth标签)的列表,以及唯一类的列表,所列图像中至少有一个属于该类。
(3)网络会对图像提出一些要求,如图像的尺寸和灰度值范围。默认值列在read_dl_classifier中。这些是网络被预先训练的值。网络架构允许不同的图像尺寸,可以使用set_dl_classifier_param设置,但根据网络的不同,更改可能需要重新训练。可以使用
get_dl_classifier_param。
过程preprocess_dl_classifier_images为如何实现这样一个预处理阶段提供了很好的指导。我们建议在开始分类器训练之前对所有用于训练的图像进行预处理和存储,因为这样可以显著加快训练速度。
(4)接下来,我们建议将数据集分成三个不同的数据集,分别用于训练、验证和测试,请参阅深度学习章节中的“数据”部分。这可以通过使用程序来实现
split_dl_classifier_data_set。
(5)需要指定希望与分类器区分的“类”(之前通过使用read_dl_classifier_data_set确定)。对于这个,算子
set_dl_classifier_param
是可用的。
这个运算符也可以用来设置对训练很重要的超参数,例如“batch_size”和“learning_rate”。有关更详细的解释,请参阅深度学习一章和set_dl_classifier_param的文档。
2.培训网络并评估培训进度
一旦你的网络设置好了,你的数据准备好了,就该为你的特定任务训练分类器了。
(1)与运算符一起设置用于训练的超参数
set_dl_classifier_param。
有关可能的超参数的概述,请参阅set_dl_classifier_param的文档。更多的解释可以在深度学习一章中找到。
(2)训练分类器和操作符
train_dl_classifier_batch
是可用的。中间训练结果存储在输出句柄中。
正如train_dl_classifier_batch的名称所示,该算子一次处理一批数据(图像和地面真值标签)。为了用train_dl_classifier_batch连续训练分类器,我们对训练数据进行迭代。可以多次重复这个过程,迭代许多训练阶段,直到对训练结果感到满意为止。
(3)要知道分类器学习新任务的程度,这个过程
plot_dl_classifier_training_progress
提供。有了它,可以在训练过程中绘制分类错误。为了计算可视化所需的输入,程序
select_percentage_dl_classifier_data,
apply_dl_classifier_batchwise,
evaluate_dl_classifier
是可用的。使用它们,可以减少用于此分类验证的图像数量,对选定的数据应用分类器并计算,例如,top-1错误。
3.应用和评估最终分类器
您的分类器已经为您的任务进行了训练,并准备好应用。但是在实际部署之前,您应该根据测试数据评估分类器的性能。
(1)要在包含任意数量图像的集合上应用分类器,请使用操作符
apply_dl_classifier。
此操作符的运行时间取决于给定图像集所需的批处理数量。
结果在句柄中返回。
要检索预测的类和置信度,请使用操作符
get_dl_classifier_result。
(2)现在是评估这些结果的时候了。在使用evaluate_dl_classifier进行训练期间,可以评估分类器的性能。
为了可视化和分析分类器的质量,混淆矩阵是一个有用的工具(见下面的解释)。为此,可以使用程序
gen_confusion_matrix,
gen_interactive_confusion_matrix。
交互式过程使您能够选择特定类别的示例,但它不能处理导出的代码。
此外,在对一组数据应用分类器之后,可以使用该过程
get_dl_classifier_image_results
根据某些标准显示和返回图像,例如,错误分类的图像。然后,您可能希望将此输入用于过程
dev_display_dl_classifier_heatmap,
显示输入图像的热图,通过该热图可以分析图像的哪些区域与分类结果相关。
4.推理阶段
当你的分类器经过训练并且你对它的性能感到满意时,你可以用它来分类新的图像。为此,您只需根据网络需求预处理图像(即,与用于训练分类器的数据集相同的方式),并使用
apply_dl_classifier。
17.4.2 分类数据
我们区分用于训练的数据和用于推理的数据。后者由裸图像组成。但是对于前一种方法,您已经知道图像属于哪个类,并在相应的标签上提供此信息。
训练数据用于为您的特定任务训练分类器。在这些数据的帮助下,分类器可以学习要区分哪些类以及它们的代表是什么样的。在分类中,将图像作为一个整体进行分类。因此,训练数据由图像和它们的真值标签组成,也就是你所说的图像所属的类别。请注意,对于您的任务,图像应该尽可能具有代表性。有不同的可能的方法,如何存储和检索地面真值标签。过程read_dl_classifier_data_set支持以下图像真实值标签的来源:
包含图像的最后一个文件夹名称;
文件名。
为了训练分类器,我们使用一种称为迁移学习的技术(参见深度学习一章)。为此,需要更少的资源,但仍然需要一组合适的数据,通常每个类需要数百到数千个数据。虽然一般来说,当在更大的数据集上训练时,网络应该更可靠,但训练所需的数据量也取决于任务的复杂性。你还需要足够的训练数据来将其分成三个子集,这些子集最好是独立和相同分布的,请参阅深度学习章节中的“数据”部分。
无论何种应用,网络对图像的尺寸、灰度值范围、类型等都提出了要求。具体的值取决于网络本身,可以使用get_dl_classifier_param查询。您可以通过过程preprocess_dl_classifier_images找到关于如何实现这样一个预处理阶段的指导。
17.4.3操作符列表
apply_dl_classifier
使用基于深度学习的分类器推断一组图像的类关联。
clear_dl_classifier
清除基于深度学习的分类器。
clear_dl_classifier_result
清除包含基于深度学习的分类结果的句柄。
clear_dl_classifier_train_result
清除基于深度学习的分类器训练结果的句柄。
deserialize_dl_classifier
反序列化基于深度学习的分类器。
get_dl_classifier_param
返回基于深度学习的分类器的参数。
get_dl_classifier_result
检索由基于深度学习的分类器推断的分类结果。
get_dl_classifier_train_result
返回基于深度学习的分类器单个训练步骤的结果。
read_dl_classifier
从文件中读取基于深度学习的分类器。
serialize_dl_classifier
序列化基于深度学习的分类器。
set_dl_classifier_param
配置基于深度学习的分类器参数。
train_dl_classifier_batch
在一批图像上执行基于深度学习的分类器的训练步骤。
write_dl_classifier
在文件中编写一个基于深度学习的分类器。
17.5 Develop ,开发
操作符列表
dev_map_par
打开对话框以指定可视化参数。
dev_map_prog
使HDevelop的主窗口可见。
dev_map_var
打开HDevelop的变量窗口。
dev_unmap_par
关闭对话框以指定可视化参数。
dev_unmap_prog
隐藏主窗口。
dev_unmap_var
隐藏变量窗口。
17.6 Filters ,过滤器
操作符列表
gauss_image
平滑图像使用离散高斯函数。
polar_trans_image
将图像转换为极坐标.
17.7 Graphics ,图形
操作符列表
clear_rectangle
删除输出窗口上的矩形。
disp_distribution
显示噪声分布。
disp_lut
查找表(lut)的图形视图。
get_comprise
得到一个图像矩阵的输出处理。
get_fix
获取当前查找表(lut)的固定模式。
get_fixed_lut
修复“真实彩色图像”的“查找表”(lut)。
get_line_approx
得到当前轮廓显示的近似误差。
get_lut_style
获取查找表(lut)的修改参数。
get_pixel
获取当前颜色查找表索引。
get_tshape
获取文本光标的形状。
gnuplot_close
关闭所有打开的gnuplot文件或终止活动的gnuplot子进程。
gnuplot_open_file
打开gnuplot文件以实现图像和控制值的可视化。
gnuplot_open_pipe
打开通往gnuplot进程的管道,以可视化图像和控制值。
gnuplot_plot_ctrl
使用gnuplot绘制控制值。
gnuplot_plot_funct_1d
使用gnuplot绘制函数。
gnuplot_plot_image
使用gnuplot可视化图像。
move_rectangle
在输出窗口内复制。
open_textwindow
打开文本窗口。
query_tshape
查询所有可用于文本游标的形状。
set_comprise
定义图像矩阵输出剪辑。
set_fix
设置“查找表(lut)”的修复。
set_fixed_lut
修复“查找表”(lut)为“真实彩色图像”。
set_line_approx
定义轮廓显示的近似误差。
set_lut_style
更改查找表(lut)。
set_pixel
定义一个颜色查找表索引。
set_tshape
设置文本光标的形状。
slide_image
来自两个窗口缓冲区的交互式输出。
write_lut
将查找表(lut)写入文件。
17.8 Matching ,匹配
操作符列表
adapt_template
使模板适应图像的大小。
best_match
搜索模板和图像的最佳匹配。
best_match_mg
在金字塔中搜索最佳的灰度值匹配。
best_match_pre_mg
在预先生成的金字塔中搜索最佳灰度值匹配。
best_match_rot
搜索模板与旋转图像的最佳匹配。
best_match_rot_mg
搜索模板与旋转金字塔的最佳匹配。
clear_template
释放模板的内存。
create_template
为模板匹配准备一个模式。
create_template_rot
准备模板旋转匹配的模式。
deserialize_template
反序列化序列化模板。
fast_match
搜索模板和图像的所有良好匹配。
fast_match_mg
在金字塔中搜索所有好的灰度值匹配。
read_template
从文件中读取模板。
serialize_template
序列化模板。
set_offset_template
模板的灰度值偏移量。
set_reference_template
定义匹配模板的引用位置。
write_template
将模板写入文件。
17.9 Morphology ,形态
操作符列表
closing_golay
用Golay字母表中的一个元素关闭一个区域。
dilation_golay
用Golay字母表中的一个元素扩展一个区域。
dilation_seq
依次扩大一个区域。
erosion_golay
用Golay字母表中的一个元素侵蚀一个地区。
erosion_seq
依次侵蚀一个地区。
fitting
在具有多个结构元素的开始之后执行关闭。
gen_struct_elements
生成标准的结构元素。
golay_elements
生成Golay字母表的结构元素。
hit_or_miss_golay
对使用Golay字母表的地区进行无懈可击的操作。
hit_or_miss_seq
使用Golay字母表的区域的命中或不命中操作(顺序)。
morph_hat
计算top_hat和bottom_hat的并集。
morph_skeleton
计算一个区域的形态骨架。
morph_skiz
区域变薄。
opening_golay
用Golay字母表中的一个元素打开一个区域。
opening_seg
分离重叠区域。
thickening
将命中或失败操作的结果添加到区域中。
thickening_golay
将命中或不命中操作的结果添加到区域(使用Golay结构元素)。
thickening_seq
将命中或未命中操作的结果添加到区域(顺序)。
thinning
从区域中删除命中或不命中操作的结果。
thinning_golay
从区域中删除命中或不命中操作的结果(使用Golay结构元素)。
thinning_seq
从区域(顺序)中删除命中或不命中操作的结果。
17.10 OCR ,光学字符识别
操作符列表
close_ocr
OCR分类器的内存释放。
create_ocr_class_box
创建一个新的ocr分类器。
create_text_model
创建一个文本模型。
deserialize_ocr
反序列化序列化的OCR分类器。
do_ocr_multi
字符进行分类。
do_ocr_single
给一个字符分类。
info_ocr_class_box
获取有关OCR分类器的信息。
ocr_change_char
为字符定义一个新的转换表。
ocr_get_features
访问与字符对应的特征。
read_ocr
从文件中读取OCR分类器。
serialize_ocr
序列化OCR分类器。
testd_ocr_class_box
测试OCR分类器。
traind_ocr_class_box
通过输入区域训练OCR分类器。
trainf_ocr_class_box
在训练文件的帮助下训练OCR分类器。
write_ocr
将OCR分类器写入文件。
17.11 Regions ,区域
操作符列表
get_region_chain
作为链码的物体轮廓。
hamming_change_region
生成一个具有给定汉明距离的区域。
interjacent
使用给定区域划分图像平面。
17.12 Segmentation ,分割
操作符列表
bin_threshold
使用自动确定的阈值分割图像。
class_ndim_box
使用超长方体对像素进行分类。
expand_line
展开从给定行开始的区域。
learn_ndim_box
使用多通道图像训练分类器。
17.13 Tools ,工具
操作符列表
approx_chain
用圆弧和直线近似等高线。
approx_chain_simple
用圆弧和直线近似等高线。
clear_all_bar_code_models
此操作符不可操作。它具有以下功能:删除所有条形码模型并释放分配的内存。
clear_all_barriers
此操作符不可操作。它有以下功能:销毁所有屏障同步对象。
clear_all_calib_data
释放所有校准数据模型的内存。
clear_all_camera_setup_models
释放所有相机设置模型的内存。
clear_all_class_gmm
此操作符不可操作。它有以下功能:清除所有高斯混合模型。
clear_all_class_knn
此操作符不可操作。它有以下功能:清除所有k-NN分类器。
clear_all_class_lut
此操作符不可操作。它具有以下功能:清除所有查找表分类器。
clear_all_class_mlp
此操作符不可操作。它具有以下功能:清除所有多层感知器。
clear_all_class_svm
此操作符不可操作。它具有以下功能:清除所有支持向量机。
clear_all_class_train_data
此操作符不可操作。它具有以下功能:清除分类器的所有训练数据。
clear_all_color_trans_luts
此操作符不可操作。它具有以下功能:删除所有颜色空间变换的查找表。
clear_all_component_models
此操作符不可操作。它具有以下功能:释放所有组件模型的内存。
clear_all_conditions
此操作符不可操作。它具有以下功能:销毁所有条件同步对象。
clear_all_data_code_2d_models
此操作符不可操作。它具有以下功能:删除所有2D数据代码模型并释放已分配的内存。
clear_all_deformable_models
此操作符不可操作。它具有以下功能:释放所有可变形模型的内存。
clear_all_descriptor_models
此操作符不可操作。它有以下功能:释放RAM中所有描述符模型的内存。
clear_all_events
此操作符不可操作。主要功能如下:清除所有事件同步对象。
clear_all_lexica
此操作符不可操作。它具有以下功能:清除所有词典。
clear_all_matrices
此操作符不可操作。它有以下功能:从内存中清除所有矩阵。
clear_all_metrology_models
此操作符不可操作。它的功能如下:删除所有计量模型,释放已分配的内存。
clear_all_mutexes
此操作符不可操作。它有以下功能:清除所有互斥锁同步对象。
clear_all_ncc_models
此操作符不可操作。它具有以下功能:释放所有NCC模型的内存。
clear_all_object_model_3d
此操作符不可操作。它具有以下功能:释放所有3D对象模型的内存。
clear_all_ocr_class_knn
此操作符不可操作。它具有以下功能:清除所有OCR分类器。
clear_all_ocr_class_mlp
此操作符不可操作。它具有以下功能:清除所有OCR分类器。
clear_all_ocr_class_svm
此操作符不可操作。清除所有基于支持向量机的OCR分类器。
clear_all_sample_identifiers
此操作符不可操作。它具有以下功能:释放所有示例标识符的内存。
clear_all_scattered_data_interpolators
此操作符不可操作。它有以下功能:清除所有分散的数据插值器。
clear_all_serialized_items
此操作符不可操作。它具有以下功能:删除所有当前存在的序列化项。
clear_all_shape_model_3d
此操作符不可操作。它具有以下功能:释放所有3D形状模型的内存。
clear_all_shape_models
此操作符不可操作。它具有以下功能:释放所有形状模型的内存。
clear_all_sheet_of_light_models
此操作符不可操作。它具有以下功能:删除所有光片模型并释放分配的内存。
clear_all_stereo_models
此操作符不可操作。它具有以下功能:释放所有立体模型的内存。
clear_all_surface_matching_results
此操作符不可操作。它的功能如下:释放所有曲面匹配结果的内存。
clear_all_surface_models
此操作符不可操作。它具有以下功能:释放所有曲面模型的内存。
clear_all_templates
此操作符不可操作。它具有以下功能:释放所有模板的内存。
clear_all_text_models
此操作符不可操作。它具有以下功能:清除所有文本模型。
clear_all_text_results
此操作符不可操作。它有以下功能:清除所有文本结果。
clear_all_training_components
此操作符不可操作。它具有以下功能:释放所有组件训练结果的内存。
clear_all_variation_models
此操作符不可操作。它具有以下功能:释放所有变型模型的内存。
close_all_bg_esti
此操作符不可操作。它具有以下功能:删除所有背景估计数据集。
close_all_class_box
此操作符不可操作。它具有以下功能:销毁所有分类器。
close_all_files
此操作符不可操作。它有以下功能:关闭所有打开的文件。
close_all_framegrabbers
此操作符不可操作。它具有以下功能:关闭所有图像采集设备。
close_all_measures
此操作符不可操作。它具有以下功能:删除所有测量对象。
close_all_ocrs
此操作符不可操作。它具有以下功能:销毁所有OCR分类器。
close_all_ocvs
此操作符不可操作。它具有以下功能:清除所有OCV工具。
close_all_serials
此操作符不可操作。它具有以下功能:关闭所有串行设备。
close_all_sockets
此操作符不可操作。它有以下功能:关闭所有打开的套接字。
filter_kalman
利用卡尔曼滤波估计系统的当前状态。
intersection_ll
计算两条直线的交点。
partition_lines
根据各种标准划分线条。
read_kalman
阅读卡尔曼滤波器的描述文件。
select_lines
根据各种标准选择线路。
select_lines_longest
选择最长的输入行。
update_kalman
读取卡尔曼滤波器的更新文件。
17.14 XLD,亚像素的轮廓和多边形
操作符列表
union_straight_contours_histo_xld
计算与给定直线距离相近的相邻直线轮廓的并集。