智能识别车,车辆识别技术有哪些,智能识别汽车
介绍
车标是什么?
在学习TensorFlow的过程中,我在开源社区发现了一个叫MobileNet的模型,可以对图片进行分类。Google发布的TensorFlow-for-poems项目正好支持这种模式。我们希望将TensorFlow和MobileNet结合起来,应用于不同车标的图片分类。同时以此为基础,可以体验ML/TF中不同超参数对训练的影响。
我们要创造什么?
在此Codelab中,您将使用徽标图像来训练TensorFlow模型。您将了解到:
1收集和分类车辆标志图像。
2使用MobileNet_v1_128型号。
3训练模型,检验效果。
4分别测试学习率为0.1,0.001,0.0001,0.00001时的训练效果。
5测试用MobileNet_v1_224替换预训练模型后的训练效果。
6.选择最佳训练超参数并执行预测。
你需要什么?
黑核桃实验室。AI云接入账号
收集和分类车辆标志图像。
这个Codelab使用图像分类的方法来识别车标,所以要采集的数据集非常简单,你只需要拍下各种车标的照片就可以了。这个Codelab提供了已经拍摄的演示用数据集,可以和自己拍摄的数据集一起使用。
拍摄数据集时,需要注意以下几点。
1拍摄的照片分辨率应为1:1。
2拍摄的车标占据了图片的大部分区域。
三个车标应拍摄相同数量的图片,每个车标应不少于200张。
4不要逆光拍摄。
创建一个名为Codelab的新目录,并在该目录下创建一个名为data的新目录。新建一个终端界面,进入Codelab目录,将Tools/datasets目录下的图片复制到这个目录下。
CP-r…/工具/数据集/*数据
在Codelab/data目录下上传自己的图片,解压。(以image.zip为例)
解压缩image.zip
rm image.zip
在图像分类模型的训练过程中,模型需要知道训练好的标签以及每个标签对应的图片,因此需要根据车标的类型对上一步拍摄的图片进行分类。
本次Codelab采用的训练方案是基于TensorFlow-for-poems项目,只需要将同一个车标分类到一个目录中,即训练时传入的标签名称就是分类的目录名称。
这个Codelab提供的数据集已经按照名称进行了分类,在Codelab/data目录下新创建了别克、长安、宝马、日产、通用等命名的目录。切换到终端界面,进入Codelab/data目录,将对应名称段的图片分别移动到这些目录中。
别克:1521121626331.jpg ~ 1521121911843.jpg
长安:1521171197033.jpg ~ 1521171332105.jpg
宝马:1521187291619.jpg ~ 1521187912599.jpg
日产:1521189204685.jpg ~ 1521189316223.jpg
通用汽车:1521257197105.jpg ~ 1521257469684.jpg
mv 1521121*别克
mv 1521171*长安
mv 1521187*宝马
mv 1521189*日产
mv 1521257* GM
使用MobileNet_v1_128型号
可以实现图像分类的模型有很多,如MobileNet、Inception、GoogleNet等。而且每个型号都有自己的特点。下图是Google的Codelab提供的各种图像分类模型的对比,其中选择了MobileNet模型。
MobileNet V1模型目前支持两种分辨率的图像,即128128和224224,但提供的训练程序会自动将传入的图像转换为指定的分辨率。
在终端接口中声明环境变量,即训练中要使用的模型和图像参数。在当前步骤中,我们选择使用MobileNet模型,训练图像分辨率为128*128。
IMAGE_SIZE=128
architecture=" mobilenet _ 1.0 _ katex解析错误:未定义的控制序列:\在位置630:…scripts . retrain\-瓶颈_di…{ARCHITECTURE} "
output _ graph=output/retrained _ graph _ 128 _ 0 _ 01 . Pb
output _ labels=output/retained _ labels _ 128 _ 0 _ 01 . txt
ARCHITECTURE= $ { ARCHITECTURE }
测试百分比=10
验证百分比=10
image _ dir=data
学习率=0.001
在执行训练后,程序会自动下载模型文件并进行训练,并且训练结束后在输出图目录下生成retrained _ graph _ 128 _ 0 _ 01.pb文件,在输出_标签目录下生成重新培训_标签_128_0_01.txt文件。
有两种评估训练结果的方式,一种是通过张量板查看训练过程中各个参数的值,一种是执行评估程序直接查看识别准确率。
切换到朱皮特界面,进入codelab/tmp/training _摘要目录,选择在当前目录下进入张量板界面。
张量板中的准确度_1的曲线图即为识别的准确率随着训练步数的增加的变化情况。
如果想直接查看最终的准确率,先编辑Codelab/scripts/evaluate.py文件,根据下面的提示找到并修改程序。
找到这段代码使用load_graph(graph_file_name).as _ default()as graph:ground _ truth _ input=TF。占位符(TF。float 32,[None,5],name=GroundTruthInput )修改为这段代码使用load_graph(graph_file_name).as _ default()as graph:ground _ truth _ input=TF。占位符(TF。浮点32,[无,(替换为训练用标签的种类数)],name= GroundTruthInput )--找到这段代码image _ dir= TF _ files/flower _ photos
修改为这段代码image_dir=data
-找到这段代码用tf .sess: for filename,ground_truth in zip(filenames,ground _ truth):image=image。打开(文件名).调整大小((224,224),图像。抗锯齿)修改为这段代码用tf .sess: for filename,ground_truth in zip(filenames,ground _ truth):image=image。打开(文件名).调整大小((128,128),图像。抗锯齿)切换到末端的界面,进入编码实验室目录,执行评估程序。
python 3m脚本。评估输出/rettrained _ graph _ 128 _ 0 _ 01。铅
输出值中准确即为训练的准确率。
调整学习率
决定最终识别率的因素有三种,一种是训练的模型,一种是数据集的完整性和干净性,另一种是训练的超参数的合理性。
超参数即不会在训练过程中随着训练的进行而发生变化的训练参数,在本编码实验室中,选择学习率为超参数并将其调整为0.1、0.001、0.0001、0.00001 再次训练。切换到末端的界面,进入编码实验室目录,选择不同的学习率开始训练。
学习率为0.1 时:
python3 -m脚本。再培训
瓶颈目录=tmp/瓶颈
多少训练步数=5000
型号_目录=型号
summaries _ dir=tmp/training _ summaries/ katex解析错误:未定义的控制序列:\在位置17:……建筑} \ -输出_gr…{ARCHITECTURE}
测试百分比=10
验证百分比=10
image _ dir=data
学习率=0.1
学习率为0.001 时:
python3 -m脚本。再培训
瓶颈目录=tmp/瓶颈
多少训练步数=5000
型号_目录=型号
summaries _ dir=tmp/training _ summaries/ katex解析错误:未定义的控制序列:\在位置17:……建筑} \ -输出_gr…{ARCHITECTURE}
测试百分比=10
验证百分比=10
image _ dir=data
学习率=0.001
学习率为0.0001 时:
python3 -m脚本。再培训
瓶颈目录=tmp/瓶颈
多少训练步数=5000
型号_目录=型号
summaries _ dir=tmp/training _ summaries/ katex解析错误:未定义的控制序列:\在位置17:……建筑} \ -输出_gr…{ARCHITECTURE}
测试百分比=10
验证百分比=10
image _ dir=data
学习率=0.0001
学习率为0.00001 时:
python3 -m脚本。再培训
瓶颈目录=tmp/瓶颈
多少训练步数=5000
型号_目录=型号
summaries _ dir=tmp/training _ summaries/ katex解析错误:未定义的控制序列:\在位置17:……建筑} \ -输出_gr…{ARCHITECTURE}
测试百分比=10
验证百分比=10
image _ dir=data
learning _ rate=0.00001
切换到末端的界面,进入编码实验室目录,执行评估程序。
python 3m脚本。评估输出/rettrained _ graph _ 128 _ 0 _ 1。铅
python 3m脚本。评估输出/rettrained _ graph _ 128 _ 0 _ 001。铅
python 3m脚本。评估输出/rettrained _ graph _ 128 _ 0 _ 0001。铅
python 3m脚本。评估输出/rettrained _ graph _ 128 _ 0 _ 00001。铅
输出值中准确即为训练的准确率。
调整训练分辨率
训练时所使用的图像分辨率也是训练的超参数之一,不同的分辨率同样会影响模型的训练结果。在学习率为0.01 的情况下,测试训练图像分辨率为224224 时的结果。
测试图像分辨率为224224*:
IMAGE_SIZE=224
ARCHITECTURE=" MobileNet _ 1.0 _ $ { IMAGE _ SIZE } "
python3 -m脚本。再培训
瓶颈目录=tmp/瓶颈
多少训练步数=5000
型号_目录=型号
summaries _ dir=tmp/training _ summaries/ katex解析错误:未定义的控制序列:\在位置17:……建筑} \ -输出图=…{建筑}
测试百分比=10
验证百分比=10
image _ dir=data
学习率=0.001
编辑Codelab/scripts/evaluate.py文件,根据下面的提示找到并修改程序。
找到这段代码用tf .sess: for filename,ground_truth in zip(filenames,ground _ truth):image=image。打开(文件名).调整大小((128,128),图像。抗锯齿)修改为这段代码用tf .sess: for filename,ground_truth in zip(filenames,ground _ truth):image=image。打开(文件名).调整大小((224,224),图像。抗锯齿)终端界面,进入编码实验室目录,执行评估程序。
python 3m脚本。评估输出/rettrained _ graph _ 224 _ 0 _ 01。铅
输出值中准确即为训练的准确率。
执行预测
在训练完成之后,可能结果会显示准确率100% ,貌似不太可信啊,我们可以使用另外的交通标志图片进行测试。
切换到朱皮特项目树界面,在编码实验室目录下新建名为试验的目录。从网上寻找对应的车标图片,放在试验目录下,这里寻找的照片不需要特别注意分辨率,测试程序中内置了统一分辨率的功能。
参考下面的程序执行在线测试,测试结果会显示在输出中,每次执行会选择目录中的一张图片预测。
图表表示训练后生成的铅文件所在的路径
图像表示要预测的图片所在的路径
python3 -m脚本。标签_图像
graph=output/retained _ graph _ 224 _ 0 _ 01。铅
标签=输出/保留_标签_ 224 _ 0 _ 01。文本文件(textfile)
输入高度=224
input _ width=224
图像=测试/图像。使用jpeg文件交换格式存储的编码图像文件扩展名
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。