智能识别车,车辆识别技术有哪些,智能识别汽车

  智能识别车,车辆识别技术有哪些,智能识别汽车

  介绍

  车标是什么?

  在学习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文件交换格式存储的编码图像文件扩展名

智能识别车,车辆识别技术有哪些,智能识别汽车