halcon图像处理之基于深度学习的分类
halcon提供了基于它⾃⾝的深度学习框架,虽然深⼊学习基本算法框架上没有提供改动的接⼝,但在应⽤上确实做到了便捷性。也是基于这种特性,halcon在深度学习模块⽅⾯也具有⾃⾝特⾊,博主认为其主要特设在于 1、代码集成度⾼、便捷性⾼ 2、可视化⼿段多样 3、针对性⽐较明显,且易于传统算法和深度学习算法的结合等。
1、深度学习算法基本概述
深度学习顾名思义就是通过深度的神经⽹络进⾏特征提取与学习,最终得到准确的学习结果的⼀种⽅式。⼀般,深度学习算法都采⽤python进⾏开发,主要的开发框架有tensorflow、pytorch、caffe等。深度学习的本质就是参数迭代,结果就是学习完成后得到的输出模型。其与传统的学习模型相⽐,最明显的区别就是⽹络更加复杂。最近⼏年⽐较⽕的深度⽹络包括:编解码⽹络、强化学习⽹络、⽣成对抗⽹络等。
图像处理
在深度学习中,对图像的处理主要是以分类和定位为主(也有⽣成)常见的分类算法包括ResNet系列和GoogleNet系列等。⽽定位算法⼀般和分类算法合在⼀起的,主要因场景不同⽽不同,包括⾯向⾮实时检测的RCNN类算法及⾯向实时检测的YOLO系列算法等。
深度学习⽹络基本构成
训练模块:
a、特征提取部分
b、分类或回归⽹络
c、优化部分
测试及验证模块:
halcon中所⾃带的⽹络
halcon中有三种分类器⽹络,分别为:
a、pretrained_dl_classifier_compact.hdl代表的compact transformer⽹络,该⽹络⽐较轻便,所以训练速度表较快内存消耗⼩等优点;
b、pretrained_dl_classifier_enhanced.hdl 所代表的Enhanced ResNet⽹络;
c、pretrained_dl_classifier_resnet50.hdl所代表的ResNet50⽹络。
2、基于halcon的深度学习图像分类的实现
数据处理
图像数据是⽆法直接输⼊⽹络中学习的,所以⼀般都要先将图像数据转换为矩阵然后的输⼊⽹络中,具体过程参照如下halcon代码:
*数据处理及数据集定义
RawDataPath :='D:/DataSet/Image_total/'+['Bad','Up','Down','Left','Right']
*read_dl_classifier_data_set,这⾥参照的是halcon中的'classify_fruit_deep_learning'中的⽰例函数
read_dl_classifier_data_set(RawDataPath,'last_folder', RawImageFiles, Labels, LabelIndices, Classes)
for I :=0 to |RawImageFiles|-1 by 1
read_image(Image, RawImageFiles[I])
* Write preprocessed image to hobj file.
PreprocessingGenParamName :='domain_handling'
PreprocessingGenParamValue :='crop_domain'
ObjectFilesOut := PreprocessedFolder +'/'+ Labels +'/'+ BaseNames +'.hobj'
*preprocess_dl_classifier_images,这⾥参照的是halcon中的'classify_fruit_deep_learning'中的⽰例函数,⽬的是将图像处理为特定⼤⼩的
preprocess_dl_classifier_images(Image, ImagePreprocessed, PreprocessingGenParamName, PreprocessingGenParamValue,DLSetHandle) write_object(ImagePreprocessed, ObjectFilesOut[I])
endfor
*数据集划分,采⽤'classify_fruit_deep_learning'中的split_dl_classifier_data_set函数
read_dl_classifier_data_set(PreprocessedFolder,'last_folder', ImageFiles, Labels, LabelsIndices, Classes)
* Split the data into three subsets,
*for training 70%, validation 15%,and testing 15%.
TrainingPercent :=70
ValidationPercent :=15
split_dl_classifier_data_set(ImageFiles, Labels, TrainingPercent, ValidationPercent, TrainingImages, TrainingLabels, ValidationImages, ValidationLabels, TestImages, TestLabels)
模型训练部分:
a、超参数设置,具体参照下表:
*1、超参数设置,包括epoch、batch size、learning rate等,通过set_dl_classifier_param()实现
set_dl_classifier_param(DLSetHandle,'classes', Classes)
BatchSize :=16
set_dl_classifier_param(DLSetHandle,'batch_size', BatchSize)
b、模型训练
*1、获取数据集
read_image(BatchImages, BatchImageFiles)
*2、将数据输⼊模型
train_dl_classifier_batch(BatchImages, DLClassifierHandle, BatchLabels, DLClassifierTrainResultHandle) *3、保存模型
write_dl_classifier(DLSetHandle,'getline.hdl')
c、模型的测试与验证:
**1、获取模型
* Read the classifier.
read_dl_classifier(FileName, DLSetHandle)
* If it is not possible to accumulate more than one image
* at a time the batch size should be set to
**2、设置超参数
set_dl_classifier_param(DLSetHandle,'batch_size',1)
**3、读取测试数据
read_image(Image, ImageFile)
**4、将数据输⼊已训练好的模型
apply_dl_classifier(ImagePreprocessed, DLSetHandle, DLClassifierResultHandle)
**5、获取输出结果
get_dl_classifier_result(DLClassifierResultHandle,'all','predicted_classes', PredictedClass)
d、模型的使⽤
**1、获取待验证的数据
list_image_files('D:/DataSet/testImage','default',[], ImageFiles)
read_image(Image, ImageFiles)
count_obj(Image, Number)
**2、获取模型
read_dl_classifier('C:/Users/25003958/Desktop/getline.hdl', DLSetHandle)
**3、设置超参数
set_dl_classifier_param(DLSetHandle,'batch_size',1)
set_dl_classifier_param(DLSetHandle,'runtime','cpu')
set_dl_classifier_param(DLSetHandle,'runtime_init','immediately')
**4、逐个输出结果
for i:=1 to Number by 1
select_obj(Image, ObjectSelected, i)
dev_resize_window_fit_image(ObjectSelected,0,0,-1,-1)
PreprocessingGenParamName :='domain_handling'
PreprocessingGenParamValue :='crop_domain'
preprocess_dl_classifier_images(ObjectSelected, ImagePreprocessed, PreprocessingGenParamName, PreprocessingGenParamValue,DLSetHandle) apply_dl_classifier(ImagePreprocessed, DLSetHandle, DLClassifierResultHandle)
get_dl_classifier_result(DLClassifierResultHandle,'all','predicted_classes', PredictedClass)
*
validation框架dev_display(ObjectSelected)
Text :='Predicted class: '+ PredictedClass
dev_disp_text(Text,'window','top','left','red','box','false')
dev_disp_text('Press Run (F5) to continue','window','bottom','right','black',[],[])
stop()
dev_clear_window()
endfor
3、总结
a、深度学习模块可参照python版本的模型的的训练和使⽤
b、halcon中的深度学习算法⽐较固定,⽬前只提供了三种,不利于畸变较⼤、伸缩性较⼤、特征复杂的场景
c、halcon中的深度学习模块具有很好的扩展性,有利于新的算法的扩展
d、halcon中的深度学习模块的优势在于传统⽅法和深度学习⽅法的结合,即通过传统⽅法进⾏’降噪’,然后将处理好的图像输⼊深度学习⽹络中进⾏训练,这样的⽅式具有⼀定的应⽤场景
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论