隶属于:
C:\Users\Public\Documents\MVTec\HALCON-23.05-Progress\examples\hdevelop\Deep-Learning\Classification
- 本示例是深度学习分类工作流的一系列示例之一。它使用了MVTec药片数据集。
- 这四个部分分别是:
-
- 数据集预处理。
-
- 模型训练。
-
- 训练后模型的评估。
-
- 对新图像进行推理。
- 对新图像进行推理。
*
* 本示例是深度学习分类工作流的一系列示例之一。它使用了MVTec药片数据集。
*
* 这四个部分分别是:
* 1. 数据集预处理。
* 2. 模型训练。
* 3. 训练后模型的评估。
* 4. 对新图像进行推理。
*
* 提示:若想查看工作流的简洁版本,请查看以下示例:
* dl_classification_workflow.hdev
*
* 本示例包含第1部分:“数据集预处理”。
dev_update_off ()
* 在本示例中,预处理步骤会在执行前通过图形窗口进行解释。若要跳过此可视化,请将以下参数设置为false。
ShowExampleScreens := true
*
if (ShowExampleScreens)
* 初始化示例窗口及参数等。
dev_example_init (ShowExampleScreens, ExampleInternals)
*
* 示例系列的介绍文本。
dev_display_screen_introduction_part_1 (ExampleInternals)
stop ()
dev_display_screen_introduction_part_2 (ExampleInternals)
stop ()
*
* 读取数据集。
dev_display_screen_read_dataset (ExampleInternals)
stop ()
*
* 解释如何拆分数据集。
dev_display_screen_split_dataset (ExampleInternals)
stop ()
*
* 解释如何对数据集进行预处理并运行程序。
dev_display_screen_run_program (ExampleInternals)
stop ()
endif
*
* *********************************
* ** 设置输入/输出路径 ***
* *********************************
* 获取示例的路径。
get_system ('example_dir', PathExample)
* 包含真实分类图像数据的文件夹。
RawImageBaseFolder := PathExample + '/images/pill/'
* 所有示例数据都将写入此文件夹。
ExampleDataDir := 'classify_pill_defects_data'
* 数据集目录基础名称,用于preprocess_dl_dataset输出的任何内容。
DataDirectoryBaseName := ExampleDataDir + '/dldataset_pill'
* *************************
* ** 设置参数 ***
* *************************
* 用于读取数据集的LabelSource。
LabelSource := 'last_folder'
* 用于拆分数据集的百分比。
TrainingPercent := 70
ValidationPercent := 15
* 某些模型可能对图像属性有局限性,
* 请参阅read_dl_model()以了解您所选模型的相关信息。
* 在预处理过程中图像将被缩放至的图像尺寸。
ImageWidth := 300
ImageHeight := 300
ImageNumChannels := 3
* 图像预处理的进一步参数。
NormalizationType := 'none'
DomainHandling := 'full_domain'
* 为了获得可重现的拆分,我们设置随机种子。
* 这意味着重新运行脚本将产生相同的数据集拆分。
SeedRand := 42
*****************************************************************************
* ** 读取标记数据并将其拆分为训练、验证和测试 ***
* *****************************************************************************
*设置随机种子。
set_system ('seed_rand', SeedRand)
*
* 使用read_dl_dataset_classification过程读取数据集。
* 或者,您也可以使用read_dict()读取DLDataset字典,
* 例如,该字典由MVTec深度学习工具创建。
read_dl_dataset_classification (RawImageBaseFolder, LabelSource, DLDataset)
* 生成拆分。
split_dl_dataset (DLDataset, TrainingPercent, ValidationPercent, [])
*
*
*
* *********************************
* ** 预处理数据集 ***
* *********************************
* 如果输出目录尚不存在,则创建该目录。
file_exists (ExampleDataDir, FileExists)
if (not FileExists)
make_dir (ExampleDataDir)
endif
*
* 创建预处理参数。
create_dl_preprocess_param ('classification', ImageWidth, ImageHeight, ImageNumChannels, -127, 128, \
NormalizationType, DomainHandling, [], [], [], [], DLPreprocessParam)
*
* 数据集目录,用于preprocess_dl_dataset输出的任何内容。
DataDirectory := DataDirectoryBaseName + '_' + ImageWidth + 'x' + ImageHeight
*
* 预处理数据集。这可能需要几秒钟。
GenParam := dict{overwrite_files: 'auto'}
preprocess_dl_dataset (DLDataset, DataDirectory, DLPreprocessParam, GenParam, DLDatasetFileName)
*
* 单独存储预处理参数,以便在推理等过程中使用。
PreprocessParamFileBaseName := DataDirectory + '/dl_preprocess_param.hdict'
write_dict (DLPreprocessParam, PreprocessParamFileBaseName, [], [])
*
* *******************************************
* ** 预览预处理后的数据集 ***
* *******************************************
*
* 在进入训练阶段之前,建议检查预处理后的数据集。
* 显示10个随机选择的训练图像的DLSamples。
find_dl_samples (DLDataset.samples, 'split', 'train', 'match', SampleIndices)
tuple_shuffle (SampleIndices, ShuffledIndices)
read_dl_samples (DLDataset, ShuffledIndices[0:9], DLSampleBatchDisplay)
*
WindowHandleDict := dict{}
for Index := 0 to |DLSampleBatchDisplay| - 1 by 1
*遍历DLSampleBatchDisplay中的样本。
dev_display_dl_data (DLSampleBatchDisplay[Index], [], DLDataset, \
'classification_ground_truth', [], WindowHandleDict)
Text := 'Press Run (F5) to continue'
dev_disp_text (Text, 'window', 'bottom', 'right', 'black', [], [])
stop ()
endfor
*
* 关闭用于可视化的窗口。
dev_close_window_dict (WindowHandleDict)
*
if (ShowExampleScreens)
*提示深度学习分类训练过程示例。
dev_display_screen_next_example (ExampleInternals)
stop ()
* 关闭示例窗口。
dev_close_example_windows (ExampleInternals)
endif