Halcon深度学习常用算子及参数解释,完整流程(二)

模型训练

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)  
  • 0
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
Halcon中关于intersection的算子有: 1. IntersectionLineLine:计算两条直线的交点坐标。 2. IntersectionLineSegment:计算一条直线与线段的交点坐标。 3. IntersectionLines:计算多条直线的交点坐标。 4. IntersectionRaySegment:计算一条射线与线段的交点坐标。 5. IntersectionSegments:计算多条线段的交点坐标。 6. IntersectionCircleCircle:计算两个圆的交点坐标。 7. IntersectionLineCircle:计算一条直线与圆的交点坐标。 8. IntersectionRayCircle:计算一条射线与圆的交点坐标。 9. IntersectionSegmentCircle:计算一条线段与圆的交点坐标。 10. IntersectionCircles:计算多个圆的交点坐标。 每个算子的详细解释如下: 1. IntersectionLineLine:计算两条直线的交点坐标。 输入参数:Line1StartRow,Line1StartCol,Line1EndRow,Line1EndCol,Line2StartRow,Line2StartCol,Line2EndRow,Line2EndCol。 输出参数:IntersectionRow,IntersectionCol。 解释:计算两条直线的交点坐标。 2. IntersectionLineSegment:计算一条直线与线段的交点坐标。 输入参数:LineStartRow,LineStartCol,LineEndRow,LineEndCol,SegmentStartRow,SegmentStartCol,SegmentEndRow,SegmentEndCol。 输出参数:IntersectionRow,IntersectionCol。 解释:计算一条直线与线段的交点坐标。 3. IntersectionLines:计算多条直线的交点坐标。 输入参数:LineStartRow,LineStartCol,LineEndRow,LineEndCol。 输出参数:IntersectionRow,IntersectionCol。 解释:计算多条直线的交点坐标。 4. IntersectionRaySegment:计算一条射线与线段的交点坐标。 输入参数:RayStartRow,RayStartCol,RayEndRow,RayEndCol,SegmentStartRow,SegmentStartCol,SegmentEndRow,SegmentEndCol。 输出参数:IntersectionRow,IntersectionCol。 解释:计算一条射线与线段的交点坐标。 5. IntersectionSegments:计算多条线段的交点坐标。 输入参数:SegmentStartRow,SegmentStartCol,SegmentEndRow,SegmentEndCol。 输出参数:IntersectionRow,IntersectionCol。 解释:计算多条线段的交点坐标。 6. IntersectionCircleCircle:计算两个圆的交点坐标。 输入参数:Circle1Row,Circle1Col,Circle1Radius,Circle2Row,Circle2Col,Circle2Radius。 输出参数:Intersection1Row,Intersection1Col,Intersection2Row,Intersection2Col。 解释:计算两个圆的交点坐标。 7. IntersectionLineCircle:计算一条直线与圆的交点坐标。 输入参数:LineStartRow,LineStartCol,LineEndRow,LineEndCol,CircleRow,CircleCol,CircleRadius。 输出参数:Intersection1Row,Intersection1Col,Intersection2Row,Intersection2Col。 解释:计算一条直线与圆的交点坐标。 8. IntersectionRayCircle:计算一条射线与圆的交点坐标。 输入参数:RayStartRow,RayStartCol,RayEndRow,RayEndCol,CircleRow,CircleCol,CircleRadius。 输出参数:Intersection1Row,Intersection1Col,Intersection2Row,Intersection2Col。 解释:计算一条射线与圆的交点坐标。 9. IntersectionSegmentCircle:计算一条线段与圆的交点坐标。 输入参数:SegmentStartRow,SegmentStartCol,SegmentEndRow,SegmentEndCol,CircleRow,CircleCol,CircleRadius。 输出参数:Intersection1Row,Intersection1Col,Intersection2Row,Intersection2Col。 解释:计算一条线段与圆的交点坐标。 10. IntersectionCircles:计算多个圆的交点坐标。 输入参数:CircleRow,CircleCol,CircleRadius。 输出参数:Intersection1Row,Intersection1Col,Intersection2Row,Intersection2Col。 解释:计算多个圆的交点坐标。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

手写不期而遇

感谢你的打赏,也欢迎一起学习

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值