计算机视觉(computer vision),是指用摄影机、电脑代替人眼对目标进行识别、跟踪和测量从而获取信息和处理信息的能力。通常来说,计算机视觉系统需要将图象信号,纹理和颜色建模,物体几何识别和分类,以及物体建模等方面都紧密地集成在一起。
我们先来看看下面这张图片:
计算机通过读取这张图片反馈了以下信息:
§图片中有沙洲的概率为44.28%
§图片中出现海滩的概率是33.21%
§图片中出现水牛的概率为1.22%
§图片中出现惠比特犬的概率为1.13%
§出现水下呼吸器的概率为0.88%
我们通过肉眼可以很明显地看到对于第1,2,4个标签,计算机的识别还算准确,但是对于第2和5个标签就不那么准确了。
那么,接下来,我们来看看计算机是如何做到以上5个标签的识别的。
我们的实验环境是基于Python + OpenCV,在开始实验之前,我们需要准备预训练好的模型,卷积网络结构,相关图像分类索引及测试集。在这里,我们使用著名的GoogLeNet模型,图像分类索引则采用ImageNet的索引,实验步骤如下:
定义一个构造函数分别接受待识别的图片,卷积网络结构层次配置,分类索引文件,以及模型。
裁剪图片,计算训练集图片中每个像素的RGB均值( , ,),剔除这些像素的RGB均值,将得到的Tuple存入一个BLOB变量中:
其中,α是一个人为赋值的常量。例如ImageNet训练集的均值为:R=103.93, G=116.77, B=123.68,α常量设定为1从而达到下图的效果:
§初始化预训练好的模型和卷积网络,将BLOB变量的数据加载到模型和网络中。
§返回模型计算出来的probability为前五的标签。
由于训练集有限,且模型比较老了,对自然图片的识别还算准确,对近些年来新鲜事物的识别就......
我们将在未来对模型进行优化,以达到更准确的识别,敬请期待……
领取专属 10元无门槛券
私享最新 技术干货