背景

导师给的一个项目任务,要求对卡口拍摄的车辆监控图片进行自动识别,识别目标包括:

  • 车牌号
  • 车辆颜色
  • 车辆品牌,具体到如奥迪A6之类
  • 驾驶人是否系安全带
  • 是否贴有年检标志
  • 等等……

相当有挑战性的任务,哈?
打算先实现相对简单一些的任务,如颜色、安全带等。至于车辆品牌识别,Whatever,能做到哪里算哪里了,品牌实在太多。


实验平台

开发平台使用Caffe,参考了博客小咸鱼_的实现(pretrained CaffeNet+finetune),本文主要在其基础上补充一些实现的细节。训练好的模型已经分享到百度云。
链接: https://pan.baidu.com/s/1eRSDFlo 密码: ahyx

1. 训练数据准备

在caffe/examples下建立目录car_color,并在其下面建立几个子目录:
car_color/data:存放训练和验证数据
car_color/models:存放prototxt和训练得到的模型
car_color/pre_train_models:存放预训练的CaffeNet

data目录
首先新建文件color_map.txt,存放待分类的颜色,这里我们划分了8种颜色:

black
white
red
blue
green
gray
yellow
brown

对每种颜色划分train和valid数据:

# ratio for train and valid data
train_ratio = 0.8
val_ratio = 0.2if not os.path.exists('train/' + color):os.makedirs('train/' + color)
if not os.path.exists('val/' + color):os.makedirs('val/' + color)num = len(os.listdir('raw_data/' + color))
print("Folder {} has {} images.".format(color, num))for file in os.listdir('raw_data/' + color):oldfile = 'raw_data/{}/{}'.format(color, file)if train_num > 0:newfile = 'train/{}'.format(file)shutil.copyfile(oldfile, newfile)train_num -= 1elif val_num > 0:newfile = 'val/{}'.format(file)shutil.copyfile(oldfile, newfile)val_num -= 1else:pass

创建train.txt和val.txt,用于lmdb数据库的生成:

prefix = '/your/path/caffe/examples/car_color/data/'
def make_dict(syn_file):i = 0with open(syn_file, 'r') as df:for kv in [d.strip().split(' ') for d in df]:dict[kv[0]] = i; i = i + 1
dict = {}
make_dict('color_map.txt')# list file directories
command = 'cd %s%s; find -name *.jpg | cut -d ''/'' -f2-3 >train.txt' % (prefix, train)
system(command)
command = 'cd %s%s; find -name *.jpg | cut -d ''/'' -f2-3 >val.txt' % (prefix, val)
system(command)# add label
train_in = open(prefix + train + 'train.txt')
val_in = open(prefix + val + 'val.txt')
train_out = open(prefix + 'train.txt', 'w')
val_out = open(prefix + 'val.txt', 'w')
for d in train_in:train_out.write(d[0:len(d)-1] + ' ' + str(dict[d.strip().split('/')[0]]) + '\n')
for d in val_in:val_out.write(d[0:len(d)-1] + ' ' + str(dict[d.strip().split('/')[0]]) + '\n')

生成的train.txt形如:

blue/016_011_00011.jpg 3
brown/001_001_00005.jpg 7
brown/002_002_00001.jpg 7
brown/002_002_00003.jpg 7
brown/003_001_00002.jpg 7
brown/006_001_00003.jpg 7
...

models目录和pre_train_models目录
1. 从models/bvlc_reference_caffenet下拷贝train_val.prototxt、deploy.prototxt和solver.prototxt这三个文件到examples/ car_color/models,并修改对应的路径。
2. 修改train_val.prototxt中fc8的名称和输出层节点数。
3. 下载预训练的CaffeModel至目录examples/car_color/pre_train_models。
篇幅问题不做赘述,具体可以参考小咸鱼_的博客。

生成lmdb数据库和图像均值

./examples/car_color/create_imagenet.sh
./examples/car_color/make_imagenet_mean.sh

2. 开始训练

./build/tools/caffe train -solver examples/car_color/models/solver.prototxt -weights examples/car_color/pre_train_models/bvlc_reference_caffenet.caffemodel

这里有必要把初始学习率设低一些,否则很难收敛。我用的是0.001。
最终实验时每个类别的训练和评估分别用了50/10张图片。
训练速度比我想象的要更快,50个Iter后Valid accuracy就到了72.5%,150个Iter后基本稳定在95%。

3. 实验结果

I0518 11:12:40.746090 12784 solver.cpp:341] Iteration 1000, Testing net (#0)
I0518 11:12:40.938202 12784 solver.cpp:409]     Test net output #0: accuracy = 0.975
I0518 11:12:40.938266 12784 solver.cpp:409]     Test net output #1: loss = 0.0606646 (* 1 = 0.0606646 loss)
I0518 11:12:40.938277 12784 solver.cpp:326] Optimization Done.
I0518 11:12:40.938285 12784 caffe.cpp:215] Optimization Done.

基于深度学习的车辆信息识别(一):车辆颜色识别相关推荐

  1. 开放信息抽取(OIE)系统(五)-- 第四代开放信息抽取系统(基于深度学习, deeplearning-based, 抽取式生成式)

    开放信息抽取(OIE)系统(五)-- 第四代开放信息抽取系统(基于深度学习, deeplearning-based, 抽取式&生成式) 一.第四代开放信息抽取系统背景 第四代开放信息抽取系统的 ...

  2. 基于深度学习的植物虫害检测

    基于深度学习的植物虫害检测 植物病虫害的识别是对植物保护和利用的基础,随着计算机图像识别技术的发展,利用计算机图像处理技术获取植物病虫害信息可以大大提高植物病虫害的识别效率.选择SVM工具箱和Matl ...

  3. 基于深度学习的车牌+车辆识别(YOLOv5和CNN)

    yolov5车牌识别+车辆识别 行人识别yolov5和v7对比 源码加文末QQ 基于深度学习的车牌识别(YOLOv5和CNN) 目录 一.综述 二.车牌检测 一.综述 本篇文章是面向的是小白,想要学习 ...

  4. YOLO车牌识别,基于深度学习YOLOv3,Yolov4开发,支持车辆车型识别

    YOLO车牌识别,基于深度学习YOLOv3,Yolov4开发,支持车辆车型识别 ID:6999650911717802盐市口会玩的川乌

  5. opencv交通标志识别_教你从零开始做一个基于深度学习的交通标志识别系统

    教你从零开始做一个基于深度学习的交通标志识别系统 基于Yolo v3的交通标志识别系统及源码 自动驾驶之--交通标志识别 在本文章你可以学习到如何训练自己采集的数据集,生成模型,并用yolo v3算法 ...

  6. 点云的无序性_基于深度学习的激光雷达点云物体识别方法总结

    0. 前言: 激光雷达作为自动驾驶不可或缺的传感器,随着价格不断下降,各种基于深度学习的模型也层出不穷(坐等马斯克打脸); 激光雷达物体识别的任务: 输入: 激光点云(x, y, z, intensi ...

  7. 基于深度学习的大规模交通标志识别(附6GB交通标志数据集)

    01 1.文章信息 <Deep Learning for Large-Scale Traffic-Sign Detection and Recognition>. 国外学者2020年发在I ...

  8. 基于深度学习的中文车牌识别与管理系统(含UI界面,Python代码)

    摘要:本文详细介绍基于深度学习的中文车牌识别与管理系统,在介绍算法原理的同时,给出Python的实现代码以及PyQt的UI界面.在界面中既可以选择需要识别的车牌视频.图片文件.批量图片进行检测识别,也 ...

  9. 无人驾驶汽车系统入门(十二)——卷积神经网络入门,基于深度学习的车辆实时检测

    无人驾驶汽车系统入门(十二)--卷积神经网络入门,基于深度学习的车辆实时检测 上篇文章我们讲到能否尽可能利用上图像的二维特征来设计神经网络,以此来进一步提高识别的精度.在这篇博客中,我们学习一类专门用 ...

  10. 基于深度学习的车型识别系统(Python+清新界面+数据集)

    摘要:基于深度学习的车型识别系统用于识别不同类型的车辆,应用YOLO V5算法根据不同尺寸大小区分和检测车辆,并统计各类型数量以辅助智能交通管理.本文详细介绍车型识别系统,在介绍算法原理的同时,给出P ...

最新文章

  1. placeholder
  2. 【linux】图形界面基础知识(X、X11、GNOME、Xorg、KDE的概念和它们之间的关系)
  3. 两个html文件互相访问变量,访问一个js文件的变量上的HTML文件
  4. 矩阵乘法递推的优化艺术
  5. openrowset excel 科学计数_txt的数据导入excel中身份证或银行卡显示成科学计数如何解决...
  6. while0表示什么意思_什么是意思表示,有哪些形式?
  7. 7-4 统计Java程序中关键词的出现次数 (25 分)
  8. Manacher's algorithm: 最长回文子串算法
  9. odoo 财务会计相关介绍
  10. 排查DHCP服务器故障
  11. R语言安装bibliometrix包的代码
  12. 2022跨年烟花代码(五)HTML5全屏烟花特效
  13. PX4日志读取并转化为.scv文件、MATLAB显示
  14. 上海软星解散的前因后果
  15. java-注解-自定义注解-注解解析
  16. 开源物业管理系统的对比
  17. 设置jupyter notebook文件保存位置
  18. 老化测试Gsensor失败分析
  19. [个人笔记] Zabbix配置钉钉群聊告警机制
  20. 雷达的工作原理示意图_倒车雷达的工作原理是什么 倒车雷达原理图

热门文章

  1. 数据运营平台-基础架构
  2. larval 使用redis做缓存
  3. 计算机课代表中段考总结,第一学期中段考试总结
  4. 视频教程:Java常见面试题目深度解析!
  5. recycle view drag and swip demo
  6. 转载maven版本更新
  7. 无页面刷新 文件上传
  8. mysql 5.6 64 位安装 缺少libai.so_CentOS6.7安装部署LNMP(nginx1.8.0+php5.6.10+mysql5.6.12) 法外狂徒...
  9. JAVA8之 日期时间时区之 ZoneId[ZoneOffset, ZoneRegion] 笔记
  10. 介绍中国传统节日的网页html,介绍中国传统节日