深度学习之对象检测例程


halcon的深度学习只做3件事,即“分类”,“对象检测”,“分割”。

下面是“对象检测”的例子。


这个例子是检测香烟的品牌。

下图是训练完成后实际检测的效果。

image.png


训练时注意下面几个问题:

(一)图像宽高要求:

1.图像宽高需是64的整数倍;

2.最好在图像标注之前,就对图像缩放或裁剪至合适宽高;

3.如果已在不符合要求的图像上完成标注,那么需要把图像扩充至合适宽高;避免单纯对图像进行缩放或裁剪,导致图像与标注坐标不一致影响标注准确性;

(二)深度学习对gpu的要求

深度学习在训练阶段需要使用gpu,推理阶段可以使用cpu,需要加上下面的代码:

set_dl_model_param(DLModelHandle, 'runtime', 'cpu')

但是要注意的是:

目前勇哥发现一个问题,同一组图片,经gpu训练后,用gpu推理结果是正确的,但是如果改用cpu推理则结果不正确,有很大差别。

暂时还不知道为什么!

而且cpu推理速度极慢,在勇哥的10核20线程的机器上面(cpu占用100%),还不到6帧。在勇哥的工作笔记本i5 7600上面更惨,才0.3帧。

而在最差的古老显卡gtx 750ti上面,轻松跑到38帧。可见深度学习cpu计算根本就是一个虚头,计算速度和显卡比完全不在一个数量级上面。

image.png


深度学习对gpu的计算能力要求极高,一块rtx2080ti显卡可以极大的提升计算能力。



下图可以看到训练的过程看上去要接近4小时,但这个时间不准确。

实际在勇哥的破显卡gtx750ti上面,大约1小时训练完成。

image.png

所有分类所占的比率。

image.png

Model := 'pretrained_dl_classifier_compact.hdl'
*Model := 'pretrained_dl_classifier_enhanced.hdl'
*Model := 'pretrained_dl_classifier_resnet50.hdl'
*Model := 'model_best.hdl'
AspectRatios := [0.5, 1, 2]

dev_update_off ()
dev_close_window ()
NumEpochs := 200
LearningRate := 0.001*1
read_dict('dataset.hdict',[], [], DLDataset)
get_dict_tuple (DLDataset, 'class_ids', ClassIDs)
get_dict_tuple (DLDataset, 'class_names', ClassNames)

list_image_files ('images', 'default', 'recursive', ImageFiles)
read_image (Image, ImageFiles[0])
get_image_size(Image, Width, Height)
Scale := 1
Width  := (Width / Scale) / 64 * 64
Height := (Height / Scale) / 64 * 64
count_channels(Image, Channels)
if(Model == 'model_best.hdl')
    read_dl_model('model_best.hdl', DLModelHandle)
else
    create_dict (DLModelDetectionParam)
    set_dict_tuple (DLModelDetectionParam, 'image_dimensions', [Width, Height, Channels])
    set_dict_tuple (DLModelDetectionParam, 'min_level', 2)
    set_dict_tuple (DLModelDetectionParam, 'max_level', 4)
    set_dict_tuple (DLModelDetectionParam, 'num_subscales', 3)
    set_dict_tuple (DLModelDetectionParam, 'aspect_ratios', AspectRatios)
    *set_dict_tuple (DLModelDetectionParam, 'capacity', 'medium')
    set_dict_tuple (DLModelDetectionParam, 'capacity', 'high')
get_dict_tuple (DLDataset, 'class_ids', ClassIDs)
set_dict_tuple (DLModelDetectionParam, 'class_ids', ClassIDs)
create_dl_model_detection (Model, |ClassIDs|, DLModelDetectionParam, DLModelHandle)
endif
split_dl_dataset (DLDataset, 70, 20, [])
create_dict (PreprocessSettings)
set_dict_tuple (PreprocessSettings, 'overwrite_files', true)
create_dl_preprocess_param_from_model (DLModelHandle, 'false', 'full_domain', [], [], [], DLPreprocessParam)
preprocess_dl_dataset (DLDataset, 'dataset', DLPreprocessParam, PreprocessSettings, DLDatasetFileName)
* Inspect several randomly selected preprocessed DLSamples visually.
create_dict (WindowDict)
get_dict_tuple (DLDataset, 'samples', DatasetSamples)
for Index := 0 to |DatasetSamples|-1 by 1
    SampleIndex := round(rand(1) * (|DatasetSamples| - 1))
    read_dl_samples (DLDataset, SampleIndex, DLSample)
    dev_display_dl_data (DLSample, [], DLDataset, 'bbox_ground_truth', [], WindowDict)
endfor
*2.) TRAIN   ***
tuple_min2(round(|DatasetSamples|*0.7), 64, BatchSize)
set_dl_model_param_max_gpu_batch_size (DLModelHandle, BatchSize)
set_dl_model_param (DLModelHandle, 'learning_rate', LearningRate)
set_dl_model_param (DLModelHandle, 'runtime_init', 'immediately')
create_dl_train_param (DLModelHandle, NumEpochs, 1, 'true', 42, [], [], TrainParam)
train_dl_model (DLDataset, DLModelHandle, TrainParam, 0, TrainResults, TrainInfos, EvaluationInfos)
dev_close_window ()
dev_get_window(WindowHandle)
dump_window(WindowHandle, 'png', 'train')
*3.) EVALUATE   ***
create_dict (GenParamEval)
set_dict_tuple (GenParamEval, 'detailed_evaluation', true)
set_dict_tuple (GenParamEval, 'show_progress', true)
evaluate_dl_model (DLDataset, DLModelHandle, 'split', 'test', GenParamEval, EvaluationResult, EvalParams)
create_dict (DisplayMode)
set_dict_tuple (DisplayMode, 'display_mode', ['pie_charts_precision','pie_charts_recall'])
dev_display_detection_detailed_evaluation (EvaluationResult, EvalParams, DisplayMode, WindowDict)
dev_get_window(WindowHandle)
dump_window(WindowHandle, 'png', 'recall')
dev_close_window ()
dev_get_window(WindowHandle)
dump_window(WindowHandle, 'png', 'precision')


训练完成后,生成结果model_best.hdl,这个文件有137M。




未完待续。。。。


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864