基于kears,对轿车卡车和摩托车做机器学习,并对其进行数据增强提高准确率。RNGken

本项目主要使用PYTHONKeras框架,对轿车、卡车、摩托车进行识别学习。

然后使用Keras的图片数据增强,来增加识别的准确度。

由于的图片数量集数量有限,所以我们采用数据增强(dataaugmentation)技术来降低过拟合,并提高神经网络的识别精度。

对于数据集,我采用的是百度旗下飞浆学习里面的数据集。

如果有需要可以去这个网址进行学习。

这个平台有非常多的数据集可以使用。

先对下载的数据集进行分类

我们先创建以下三个文件夹来作为不同的数据集

然后在训练集(train)里面再分为三个小类。

分别为:轿车(car)摩托车(motorcycle)卡车(truck)

这样我们的训练集都准备好了

检查一下每个分组(训练/测试)中分别包含多少张图像

1#检查一下每个分组(训练/测试)中分别包含多少张图像2importos34train_path="D:/data/train/"5print('totaltrainingcarimages:',len(os.listdir(train_path+"car")))6print('totaltrainingmotorcycleimages:',len(os.listdir(train_path+"motorcycle")))7print('totaltrainingtruckimages:',len(os.listdir(train_path+"truck")))8valid_path="D:/data/validation/"9print('totalvalidationcarimages:',len(os.listdir(valid_path+"car")))10print('totalvalidationmotorcycleimages:',len(os.listdir(valid_path+"motorcycle")))11print('totalvalidationtruckimages:',len(os.listdir(valid_path+"truck")))1213test_path="D:/data/test/"14print('totaltestimages:',len(os.listdir(test_path)))显示结果:

修改训练集的图片名称

1#修改训练集的图片名称2importos3defrename(path,name):4filelist=os.listdir(path)5total_num=len(filelist)6print(total_num)7i=08foriteminfilelist:9ifitem.endswith('.png'):10src=os.path.join(os.path.abspath(path),item)11dst=os.path.join(os.path.abspath(path),name+'.'+str(i)+'.png')12print(item,i)13try:1415os.rename(src,dst)16print("converting%sto%s..."%(src,dst))17i=i+118except:19continue202122rename('D:/data/train/car','car')23rename('D:/data/train/motorcycle','motorcycle')24rename('D:/data/train/truck','truck')显示结果

构建网络

在完成了数据集的清洗任务后,我们就需要搭建卷积神经网络了,我们使用Keras中的Sequential就可以完成网络构建的任务。

卷积神经网络结构由Conv2D层(使用relu函数激活)和MaxPooling2D层交替堆叠构成,这样既可以增大网络容量,也可以减少特征图的尺寸。

神经网络的最后两个层采用全连接层,分别采用relu和sigmoid激活。

在构建时我们先不采用数据增强,来查看训练的结果如何。

1#显示模型的层级结构2model.summary()显示结果

从输出可以看出,神经网络在dense_1(Dense)层的参数总数达到了900多万。

模型编译

使用RNSprop优化器。因为网络的最后一层时单一sigmoid单元,所以使用二元交叉熵作为损失函数。

1#编译模型2model.compile(optimizer=optimizers.RMSprop(lr=1e-4),loss='binary_crossentropy',metrics=['acc'])训练模型

1#训练模型2history=model.fit_generator(train_gen,epochs=15,validation_data=val_gen)显示结果

绘制损失曲线和精度曲线

1importmatplotlib.pyplotaspl23#绘制训练精度损失曲线4acc=history.history['acc']5val_acc=history.history['val_acc']6loss=history.history['loss']7val_loss=history.history['val_loss']89epochs=range(1,len(acc)+1)1011plt.plot(epochs,acc,'bo',label='Trainingacc')12plt.plot(epochs,val_acc,'b',label='Validationacc')13plt.title('Trainingandvalidationaccuracy')14plt.legend()1516plt.figure()1718plt.plot(epochs,loss,'bo',label='Trainingloss')19plt.plot(epochs,val_loss,'b',label='Validationloss')20plt.title('Trainingandvalidationloss')21plt.legend()2223plt.show()显示结果

而我们可以采用数据增强的方法来增强我们的准确值。

使用数据增强

ImageDataGenerator参数

1#定义ImageDataGenerator参数2datagen=ImageDataGenerator(3rotation_range=40,4width_shift_range=0.2,5height_shift_range=0.2,6shear_range=0.2,7zoom_range=0.2,8horizontal_flip=True,9fill_mode="nearest")这些的参数的意义如下:

1、rotaion_range是角度值,表示图像随机旋转的范围。

2、width_shift和height_shift是图像在水平和垂直方向上平移的范围。3、shear_range是随机错切变换的角度。

4、zoom_range是图像随机缩放的范围。

5、horizontal_flip是将图像随机做水平翻转。

6、fill_mode是用于填充新创建像素的方法。随机增强一个图片

1#利用ImageDataGenerator实现数据增强23fromkeras.preprocessing.imageimportImageDataGenerator4fromkeras.preprocessingimportimage5importos6importmatplotlib.pyplotasplt78#定义训练集目录9train_car_dir="D:/data/train/car"1011#获得所有样本名称12car_fanmes=[os.path.join(train_car_dir,fname)forfnameinos.listdir(train_car_dir)]131415#定义ImageDataGenerator参数16datagen=ImageDataGenerator(17rotation_range=40,18width_shift_range=0.2,19height_shift_range=0.2,20shear_range=0.2,21zoom_range=0.2,22horizontal_flip=True,23fill_mode="nearest")242526img_path=car_fanmes[14]#选一张图片观察27img=image.load_img(img_path,target_size=(150,150))#读取图像并调整大小28x=image.img_to_array(img)#转换为形状(150,150,3)的numpy数组29x=x.reshape((1,)+x.shape)#将其形状改变为(1,150,150,3)3031i=032forbatchindatagen.flow(x,batch_size=1):#循环是无限的,需要在某个时刻终止循环33plt.figure(i)34imgplot=plt.imshow(image.array_to_img(batch[0]))35i+=136ifi%4==0:37break38plt.show()显示结果

使用数据增强后重新构建模型

训练的数据展示

1importmatplotlib.pyplotasplt23#绘制训练精度损失曲线4acc=history.history['acc']5val_acc=history.history['val_acc']6loss=history.history['loss']7val_loss=history.history['val_loss']89epochs=range(1,len(acc)+1)1011plt.plot(epochs,acc,'bo',label='Trainingacc')12plt.plot(epochs,val_acc,'b',label='Validationacc')13plt.title('Trainingandvalidationaccuracy')14plt.legend()1516plt.figure()1718plt.plot(epochs,loss,'bo',label='Trainingloss')19plt.plot(epochs,val_loss,'b',label='Validationloss')20plt.title('Trainingandvalidationloss')21plt.legend()2223plt.show()显示结果

通过图表可以看出,随着训练批次的增加,对应的评价参数基本是一直上升的,没有出现严重的过拟合现象,最后使用测试及验证,准确率大概在89%左右。

图像增强时只增加了一层dropout层,如果再增加过滤器层和调节其他参数,可以得到更高的精度,大概能在95%。

保存模型

1#将训练过程产生的数据保存为h5文件2model.save('car.h5')对模型进行检测

读取自定义图像并改变形状

1#读取用户自定义图像文件,改尺寸后保存23importmatplotlib.pyplotasplt4fromPILimportImage5importos.path67defconvertjpg(jpgfile,outdir,width=224,height=224):#将图片缩小到(224,224)的大小8img=Image.open(jpgfile)9try:10new_img=img.resize((width,height),Image.BILINEAR)11new_img.save(os.path.join(outdir,os.path.basename(jpgfile)))12exceptExceptionase:13print(e)1415jpgfile='D:/data/test/car.27.jpg'#读取原图像16convertjpg(jpgfile,"D:/data/")#图像大小改变到(224,224)1718img_scale=plt.imread('D:/data/car.27.jpg')19plt.imshow(img_scale)#显示改变图像大小后的图片确实变到了(224,224)大小显示结果

实现识别

1###导入模型car.h523fromkeras.modelsimportload_model4model=load_model('car.h5')56img_scale=img_scale.reshape(-1,224,224,3).astype('float32')7img_scale=img_scale/255#归一化到0-1之间89result=model.predict(img_scale)#取图片信息10print(result)显示结果

再次识别

识别结果

结论

通过上面的两个列子可以得出。

我们自定义的图像对于轿车的识别率高达了84%,自定义的图像对于卡车的识别占有69%。说明我们对车辆的识别成功。

建议

1、后面我们可以增加数据集的数量,来提高一些准确度。

2、可以增加更多的汽车种类。

3、可以设计出图形化界面,这样就不用每一次都需要手动修改代码了。

THE END
1.中国第一汽车申请一种交通嘲识别模型的专利,提高图像分割精度同时金融界2024年12月2日消息,国家知识产权局信息显示,中国第一汽车股份有限公司申请一项名为“一种交通场景识别模型的训练方法、识别方法及系统”的专利,公开号CN 119048752 A,申请日期为2024年8月。 专利摘要显示,本申请提供一种交通场景识别模型的训练方法、识别方法及系统,其中,该训练方法获取交通场景数据集,并对交通https://www.163.com/dy/article/JIDEKRJP0519QIKK.html
2.Odoo14版本发行说明,全面了解新特性和变化Odoo中文应用商店数据清理 复制 自动识别和合并重复记录。 现场清洁 设置文本字段的自动格式设置和/或清除。 讨论 活动 更改活动类型时,请保留自定义摘要。 活动 显示活动摘要,如果未设置摘要,则回退到活动类型。 活动 小部件改进。显示分配了谁(如果不是当前用户)。图标现在显示活动类型。 https://www.sunpop.cn/odoo14_features_new/
3.信息技术学业水平考试模拟测试选择题判断题(一)69.社区医疗服务需要工作人员逐户上门登记老年人信息,该过程属于( ) A.信息发布 B.信息采集 C.信息编码 D.信息交流 70.为了计算机系统的安全,建议要有( ) A.文字处理软件 B.网页制作软件 C.图片处理软件 D.防病毒软件 71.下列实例中,使用了语音识别技术的是( ) A.按导航仪的语音提示驾驶汽车 B.用“https://www.wjx.cn/jq/14222784.aspx
4.ocr图片识别技术是什么?OCR的作用有哪些?车牌识别:保险移动勘察 证件识别:保险移动勘察;出保单、借贷等录入个人信息 Vin码识别:录入VIN码解析出车型库,估算养车用车成本,对汽车做评估及金融方案 OCR的作用有哪些? 首先我们要清楚在进行图片的识别过程中很容易出现各类的问题,对于这些问题大多是来自于图片识别不出来。图片信息有很多种类型,文字、图形等等。要https://www.foxitsoftware.cn/scanner/jiaocheng/691.html
5.驾考宝典摩托车隐私政策摘要分别需要获取相机、相册(iOS)/读取外部存储(Andorid)权限。图片文件将上传到驾考宝典摩托车App服务器并调用阿里云OCR API(即应用程序接口。由阿里云计算有限公司提供 官网:https://ai.aliyun.com/ocr联系电话:400-80-13260)识别图中文字。图片文件将在上传后的30个自然日后删除。http://laofuzi.kakamobi.com/protocol/protocol.html?_product=%E9%A9%BE%E8%80%83%E5%AE%9D%E5%85%B8%E6%91%A9%E6%89%98%E8%BD%A6&_productCategory=jiakaobaodian&_appName=jiakaomoto&protocolKey=jkbdPrivateAgreement
6.智东西周报:中国类脑芯片登上Nature封面最新AI提前2天预测急性肾7月30日消息,今日头条宣布正式推出新版灵犬反低俗助手,同时支持图片和文本识别。据今日头条方面介绍,在文本识别领域,新版“灵犬”同时应用了“Bert”和半监督技术,训练数据集包含920万个样本,准确率提升至91%。在图片识别领域,“灵犬”采用深度学习作为解决方案,在数据、模型、计算力等方面均做了针对性优化。用户目前https://zhidx.com/p/157282.html
7.数据科学实战手册(R+Python)本书的主要内容有:学习数据科学项目的流程,并使用它来获取、清洗、分析和可视化数据;在多个实战项目中理解数据科学的关键概念;通过一步一步的代码实例来掌握R和Python强大的数据编程能力。无论你是数据科学的新手,还是有经验的专业人士,你都可以从本书提供的89个实际案例中掌握数据科学的关键概念和利用R、Python进行数https://www.epubit.com/bookDetails?id=N5839
8.新闻中心——驱动之家:您身边的电脑专家猛兽峡谷NUC发布有段时间了,7月份ChinaJoy展会上正式在国内亮相,这次的NUC不走小巧、轻薄路线,主要面向游戏玩家,机箱空间达到了8L——当然比起ATX大型游戏PC还是迷你不少。 配置上,猛兽峡谷有2个主要的配置,酷睿i7版使用的是酷睿i7-11700B处理器、酷睿i9版是酷睿i9-11900KB——两款CPU都相当有迷惑性,不是11代酷https://news.mydrivers.com/blog/20210827.htm
9.2022国央企数字化实践报告——深度解读国央企不同嘲数字化痛点中汽协会打造行业级区块链平台,汽车数据共享、监管双落地 某大型能源集团以湖仓一体数据底座强韧数据能力 某石油石化企业率先建成智慧加油加气站零售管理平台,多维度激活新业务增长点 某国有银行以数字化重塑普惠金融业务能力 某国有建筑企业借助低代码平台提升数字化集成管理水平 https://www.shangyexinzhi.com/article/5006827.html
10.阿维塔阿维塔汽车官网特别提示您注意,如信息无法单独或结合其他信息识别到您的个人身份,其不属于法律意义上您的个人信息;当您的信息可以单独或结合其他信息识别到您的个人身份时或我们将无法与任何特定个人信息建立联系的数据与其他您的个人信息结合使用时,这些信息在结合使用期间,将作为您的个人信息按照本隐私政策处理与保护。 https://www.avatr.com/protocol?type=10181001
11.超详细的编码实战,让你的springboot应用识别图片中的行人汽车如果您之前对深度学习和YOLO、darknet等有过了解,相信您会产生疑问:Java能实现这些? 没错,今天咱们就从零开始,开发一个SpringBoot应用实现上述功能,该应用名为yolo-demo 让SpringBoot应用识别图片中的物体,其关键在如何使用已经训练好的神经网络模型,好在OpenCV集成的DNN模块可以加载和使用YOLO4模型,我们只要找到使用Ophttps://cloud.tencent.com/developer/article/1912828
12.人工智能快速发展趋势下,中国该如何应对?网络异常,图片无法展示 | 5、终端场景—智能驾驶。随着智能驾驶等级的提高,技术不断迭代促使车用AI芯片性能逐步增强 SAE(国际自动机工程师学会)将自动驾驶分为六个级别,从L0(非自动化)到L5(完全自动化)。每一级别需要强大的算力进行实时分析、处理大量数据和执行复杂的逻辑运算,对计算能力有着极高的要求。L1(驾驶https://developer.aliyun.com/article/1179745
13.基于3D视觉的汽车轮胎胎面花纹缺陷检测系统AutomotiveTire目前,国内对于首胎胎纹的识别验证,普遍还是采用人工的方式,这种方式存在耗时长,精度低,容易遗漏等缺点。为了解决人工识别出现的种种问题,本文设计了基于3D视觉技术汽车轮胎胎面花纹缺陷检测系统,该系统收集到的是轮胎胎面花纹的点云数据,经过处理可得到轮胎胎面花纹的二维深度图,再由训练好的语义分割模型进行检测识别。https://image.hanspub.org/Html/9-2960379_87048.htm
14.www.jxmzxx.com/appnews/377540.html这样一来我们的"能源菜单"就更丰富了,再也不怕有人卡我们的脖子了。 你看这不就是传说中的"能源自由"吗? 说实话想到这里,我都忍不住想为我们的科学家们鼓掌喝彩。 他们可真是给我们中国人长脸了! 以前一提到石油,我们总是仰人鼻息。 现在好了我们也能在国际能源舞台上昂首挺胸了。 http://www.jxmzxx.com/appnews/377540.html