车辆图像识别分类 深度学习训练自己的数据集

鉴于有很多人来询问我数据集(我翻箱倒柜找了一下= =放在这里了,有需要自取)
链接:
提取码:1efk
复制这段内容后打开百度网盘手机App,操作更方便哦
一、实验目的
考核各位同学使用较小的模型和小规模的训练数据下的模型设计和训练的能力 。需要同学充分利用迁移学习等方法,以解决训练数据少的问题,同时需要思考和解决深度学习中过拟合的问题 。所提供的场景定义为比较单一的车辆场景,一定程度上平衡了难度系数 。
二、实验内容
使用提供的2000张标注了的车辆场景分类信息的高分辨率图片,建立并训练模型,并将此模型运用于测试数据集的图像分类标注 。
标签信息:
0,巴士,bus
1,出租车,taxi
2,货车,truck
【车辆图像识别分类深度学习训练自己的数据集】3,家用轿车,sedan
4,面包车,
5,吉普车,jeep
6,运动型多功能车,SUV
7,重型货车,heavy truck
8,赛车,car
9,消防车,fire
三、实验内容 1、实验平台:
WIN10++
安装教程:
2、实验流程:
代码利用卷积网络完成一个图像分类的功能 。训练完成后,模型保存在model文件中,可直接使用模型进行线上分类 。同一个代码包括了训练和测试阶段,通过修改train参数为True和False控制训练和测试 。显示实验结果,再根据结果做微小调整 。
数据处理->导入相关库->配置信息->数据读取->定义(容器)->定义卷积网络(卷积和部分)->定义全连接部分->定义损失函数和优化器(这里有一个技巧,没有必要给传递平均的损失,直接将未平均的损失函数传给即可)->定义模型保存器/载入器->进入训练/测试执行阶段
3、实验代码 整体代码参考的如下网址:
需要修改的两点:
1、由于参考代码训练的是32X32图片,而且图片名字也是标签名+序号,所以我们想要直接用的话,就必须做修改工作
分为:、两个步骤
2、参考代码训练和测试的数据集是同一个,而我们这里有区分,所以要把源代码分为train.py,test.py
修改图片:
在项目根目录新建以下空文件夹
移入源数据(这里的测试集用的是val,用test还要修改代码懒得弄)
运行renas.py(注意,这里运行一次就可以了,因为运行完,默认将train内源数据删除)

车辆图像识别分类  深度学习训练自己的数据集

文章插图
运行结果:
代码:
#coding=utf-8from PIL import Imageimport osimport os.pathimport globdef rename(rename_path,outer_path,folderlist):#列举文件夹for folder in folderlist:if os.path.basename(folder)=='bus':foldnum = 0elif os.path.basename(folder)=='taxi':foldnum = 1elif os.path.basename(folder)=='truck':foldnum = 2elif os.path.basename(folder)=='family sedan':foldnum = 3elif os.path.basename(folder)=='minibus':foldnum = 4elif os.path.basename(folder)=='jeep':foldnum = 5elif os.path.basename(folder)=='SUV':foldnum = 6elif os.path.basename(folder)=='heavy truck':foldnum = 7elif os.path.basename(folder)=='racing car':foldnum = 8elif os.path.basename(folder)=='fire engine':foldnum = 9inner_path = os.path.join(outer_path, folder) total_num_folder = len(folderlist)#文件夹的总数# print 'total have %d folders' % (total_num_folder)#打印文件夹的总数filelist = os.listdir(inner_path)#列举图片i = 0for item in filelist:total_num_file = len(filelist)#单个文件夹内图片的总数if item.endswith('.jpg'):src = http://www.kingceram.com/post/os.path.join(os.path.abspath(inner_path), item)#原图的地址dst = os.path.join(os.path.abspath(rename_path), str(foldnum) + '_' + str(i) + '.jpg')#新图的地址(这里可以把str(folder) + '_' + str(i) + '.jpg'改成你想改的名称)try:os.rename(src, dst)# print 'converting %s to %s ...' % (src, dst)i += 1except:continue#训练集rename_path1 = 'E:/Tensorflow-CNN-VehicleIdentification/renametrain'outer_path1 = 'E:/Tensorflow-CNN-VehicleIdentification/train'folderlist1 = os.listdir(r"E:/Tensorflow-CNN-VehicleIdentification/train")rename(rename_path1,outer_path1,folderlist1)print("train totally rename ! ! !")#测试集rename_path2 = 'E:/Tensorflow-CNN-VehicleIdentification/renametest'outer_path2 = 'E:/Tensorflow-CNN-VehicleIdentification/val'folderlist2 = os.listdir(r"E:/Tensorflow-CNN-VehicleIdentification/val")rename(rename_path2,outer_path2,folderlist2)print("test totally rename ! ! !")#修改图片尺寸def convertjpg(jpgfile,outdir,width=32,height=32):img=Image.open(jpgfile)img=img.convert('RGB')img.save(os.path.join(outdir,os.path.basename(jpgfile)))new_img=img.resize((width,height),Image.BILINEAR)new_img.save(os.path.join(outdir,os.path.basename(jpgfile)))#训练集for jpgfile in glob.glob("E:/Tensorflow-CNN-VehicleIdentification/renametrain/*.jpg"):convertjpg(jpgfile,"E:/Tensorflow-CNN-VehicleIdentification/data")print("train totally resize ! ! !")#测试集for jpgfile in glob.glob("E:/Tensorflow-CNN-VehicleIdentification/renametest/*.jpg"):convertjpg(jpgfile,"E:/Tensorflow-CNN-VehicleIdentification/test")print("test totally resize ! ! !")