图像识别方案的选择思考

  图像识别方案的选择思考,由于自己选择方案的失策,导致把三种方案都实现了一遍,花了很多时间吸取教训,但是也获得了经验。大体方向上可以分为模板匹配的识别方式,机器学习训练模型,CNN神经网络训练模型三种。

  模板匹配的识别方式,主要是考虑识别速度和需要匹配的模板数量,识别速度和匹配的图像大小,需要匹配的模板数量相关。识别一次匹配的模板数量尽量少,可以提前在光照、颜色上区分成不同的模式,减少需要匹配的模板数量。被识别的图像可以适当缩放,同时模板也进行缩放,可以明显提高匹配速度,但是会牺牲一定的识别精度。裁剪有缺失的图像,模板匹配效果不佳,需要适当扩展外围,会增加匹配时间。光照均匀,角度比较固定,图像和模板差距不大的识别场景,可以考虑使用这种方式,使用opencv加上自己准备的模板就可以实现初步评估。移植的时候需要编译opencv。

  机器学习训练模型,需要自己设计特征,训练速度和需要的训练集图像数量远远少于CNN,识别精度和适应性与自己设计的特征相关,一般来说训练速度快于CNN,识别精度不如CNN,识别速度快于模板匹配,精度可能不如模板匹配。设计特征一般是颜色,灰度,边缘。建议是不同特征各自一个模型,试过直接串联不同特征的效果并不好。移植需要编译opencv和相关机器学习代码,比如SVM。

  CNN卷积神经网络模型,需要自己准备大量训练图像,训练图像尽量贴近实际识别的图像,懂得设计网络模型,简化模型参数。训练依赖GPU,生成训练图像和调整网络模型比较耗时,但是不用自己设计特征了。移植的时候编译ncnn,模型转换为ncnn格式。识别精度和训练的模型相关,一般优于模板匹配和机器学习,识别速度一般快于模板匹配。主要的难度在于生成训练图像和调整网络模型。

  识别精度不需要特别高,速度上要快可以考虑机器学习先测试效果;场景单一,识别速度不需要特别快,可以考虑用模板匹配;场景光源多变,识别精度、速度要求高,直接上CNN,前期多准备训练图像,加上自己生成训练图像,找一些github上的模型结构改良。

原文地址:https://www.cnblogs.com/linguinost/p/15188615.html