模型训练
1.设置超参数
2.设置增强百分比的字典等
3.读取微调的网络!
read_dl_model(路径及文件名,新句柄DLModelHandle)
4.读取预处理后的参数
read_dict(路径及文件名,新句柄DLDataset)
5.设置神经网络模型超参数
set_dl_model_param(DLModelHandle,...)
6.创建训练参数
create_dl_train_param(DLModelHandle,...,TrainParam)
在这一部分主要有三点要注意:
创建模型句柄:DLModelHandle
包含数据信息的字典:DLDataset
具有训练参数的字典TrainParam信息,在多少Epochs下训练进行。
开始训练:
train_dl_model(DLDataset,DLModeHandle,TrainParam,0,TrainResults,TrainInfos,EvaluationInfos)
DLDataset,DLModeHandle,TrainParam,0是输入,TrainResults,TrainInfos,EvaluationInfos是输出
评估模型:
evaluate_dl_model
完整的案例代码是:
dev_update_off ()
ExampleDataDir:='D:/middle report'
InitialModelFileName:=ExampleDataDir+'/pretrained_dl_model_detection.hdl'
DataDirectory:=ExampleDataDir+'/dl_preprocess_param_512x320'
DLDatasetFileName:='D:/middle report/output_data_512x320'+'/dl_dataset.hdict'
BestModelBaseName:=ExampleDataDir+'/best_dl_model_detection'
*最终训练模型的输出路径
FinalModelBaseName:=ExampleDataDir+'/final_dl_model_detection'
*批量大小,每次训练4张图片
BatchSize:=4
*初始化学习率
InitialLearningRate:=0.0005
Momentum:=0.99
NumEpochs:=50
EvaluationIntervalEpochs:=1
*在以下阶段更改学习率
ChangeLearningRateValues:=InitialLearningRate*0.1
ChangeLearningRateEpochs:=[]
WeightPrior:=0.00001
*控制是否显示培训进度(真/假)
DisplayEvaluation:=true
*随机设置一个训练种子
SeedRandom:=42
*设置create_dl_train_param的通用参数
GenParamName:=[]
GenParamValue:=[]
create_dict (AugmentationParam)
*要增加的样本百分比
set_dict_tuple (AugmentationParam,'augmentation_percentage', 50)
*沿行和列镜像图像
set_dict_tuple (AugmentationParam, 'mirror', 'rc')
GenParamName:=[GenParamName,'augment']
GenParamValue := [GenParamValue,AugmentationParam]
create_dict (SerializationStrategy)
set_dict_tuple (SerializationStrategy, 'type', 'best')
set_dict_tuple (SerializationStrategy, 'basename', BestModelBaseName)
GenParamName := [GenParamName,'serialize']
GenParamValue := [GenParamValue,SerializationStrategy]
create_dict (SerializationStrategy)
set_dict_tuple (SerializationStrategy, 'type', 'final')
set_dict_tuple (SerializationStrategy, 'basename', FinalModelBaseName)
GenParamName := [GenParamName,'serialize']
GenParamValue := [GenParamValue,SerializationStrategy]
*检查文件是否存在
check_files_availability (ExampleDataDir, InitialModelFileName, DLDatasetFileName)
*读取在预处理期间初始化的模型
read_dl_model (InitialModelFileName, DLModelHandle)
*读取预处理的DLDataset文件
read_dict (DLDatasetFileName, [], [], DLDataset)
*设置神经网络模型超参数
set_dl_model_param (DLModelHandle, 'learning_rate', InitialLearningRate)
set_dl_model_param (DLModelHandle, 'momentum', Momentum)
set_dl_model_param (DLModelHandle, 'batch_size', BatchSize)
if (|WeightPrior| > 0)
set_dl_model_param (DLModelHandle, 'weight_prior', WeightPrior)
endif
set_dl_model_param (DLModelHandle, 'runtime_init', 'immediately')
create_dl_train_param (DLModelHandle, NumEpochs, EvaluationIntervalEpochs, DisplayEvaluation, SeedRandom, GenParamName, GenParamValue, TrainParam)
*开始训练
train_dl_model (DLDataset, DLModelHandle, TrainParam, 0.0, TrainResults, TrainInfos, EvaluationInfos)
*训练结束后,在关窗前停车
dev_disp_text (' ', 'window', 'bottom', 'left', 'black', [], [])
stop ()
*关闭训练窗口
dev_close_window ()
网络应用
将训练好的神经网络用于实际的项目中
1.为图像生成数据字典
gen_dl_samples_from_images(图像,DLSampleInference)
//和网络中的参数一致
2.让每一幅图像像训练时一样预处理
preprocess_dl_samples(DLSampleInference,DLPreprocessParam)
3.应用神经网络检测
apply_dl_model(DLModelHandle,DLSampleInference,[],DLResultBatch)
将得到的结果dict数据转换后读取
get_dict_tuple(DLResult,'bbox_col1',Box1)
完整的代码是
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
*包含预处理数据参数的dict文件
PreprocessParamFileName:='E:/middle report/output_data_512_320/dl_preprocess_param_512_320.hdict'
*检测神经网路的文件
RetrainedModeFileName:='E:/middle report/best_dl_model_detection.hdl'
*设置类名
ClassNames:=['圆']
ClassIDs:=[0]
*推理期间的批大小
BatchSizeInference:=1
*检测模型的后处理参数(不建议更改)
MinConfidence := 0.6
MaxOverlap := 0.2
MaxOverlapClassAgnostic := 0.7
*推理可以在GPU或者CPU上运行
UseGPU := true
if (UseGPU)
get_system ('cuda_loaded', CudaLoaded)
get_system ('cudnn_loaded', CuDNNLoaded)
get_system ('cublas_loaded', CuBlasLoaded)
if (not (CudaLoaded == 'true' and CuDNNLoaded == 'true' and CuBlasLoaded == 'true'))
UseGPU := false
endif
endif
*读取再训练模型
read_dl_model (RetrainedModeFileName, DLModelHandle)
set_dl_model_param (DLModelHandle, 'batch_size', 1)
if (not UseGPU)
set_dl_model_param (DLModelHandle, 'runtime', 'cpu')
endif
set_dl_model_param (DLModelHandle, 'runtime_init', 'immediately')
set_dl_model_param (DLModelHandle, 'min_confidence', MinConfidence)
set_dl_model_param (DLModelHandle, 'max_overlap', MaxOverlap)
set_dl_model_param (DLModelHandle, 'max_overlap_class_agnostic', MaxOverlapClassAgnostic)
*获取用于预处理的参数
read_dict (PreprocessParamFileName, [], [], DLPreprocessParam)
*创建显示结果的窗口字典
create_dict (WindowDict)
create_dict (DLDataInfo)
set_dict_tuple (DLDataInfo, 'class_names', ClassNames)
set_dict_tuple (DLDataInfo, 'class_ids', ClassIDs)
*为可视化设置参数
create_dict (GenParam)
set_dict_tuple (GenParam, 'scale_windows', 1.2)
*读取图像
open_framegrabber ('GigEVision2', 0, 0, 0, 0, 0, 0, 'progressive', -1, 'default', -1, 'false', 'default', 'c42f90fba890_Hikvision_MVCA01320GM', 0, -1, AcqHandle)
set_framegrabber_param (AcqHandle, 'TriggerMode', 'Off')
grab_image_start (AcqHandle, -1)
*检测拍照得到的数据
*设置图像大小
zoom_image_size (GrayImage, ImageZoom, 512, 320, 'constant')
dev_display (ImageZoom)
gen_dl_samples_from_images (ImageZoom, DLSampleInference)
preprocess_dl_samples (DLSampleInference, DLPreprocessParam)
apply_dl_model (DLModelHandle, DLSampleInference, [], DLResultBatch)
get_dict_tuple (DLResultBatch,'bbox_row1', BboxRow1)
get_dict_tuple (DLResultBatch,'bbox_col1', BboxCol1)
get_dict_tuple (DLResultBatch,'bbox_row2', BboxRow2)
get_dict_tuple (DLResultBatch,'bbox_col2', BboxCol2)
get_dict_tuple (DLResultBatch,'bbox_class_id', BboxClasses)
tuple_length (BboxCol1, Length)
gen_rectangle1 (Rectangle1, BboxRow1, BboxCol1, BboxRow2, BboxCol2)
sub_image (GrayImage, ImageZoom, ImageSub, 1, 128)
reduce_domain (ImageZoom, Rectangle1, ImageReduced)