README.md 14.1 KB
Newer Older
朱本福 已提交
1 2
# License-Plate-Detect-Recognition-via-Deep-Neural-Networks-accuracy-up-to-99.9
works in real-time with detection and recognition accuracy up to 99.8% for Chinese license plates: 100 ms/plate!
朱本福 已提交
3 4


朱本福 已提交
5
  【重要通知1】:将从理论到实践,建立一个微信公众号,把近期的总结以专题形式公布出来,初步目录为:
朱本福 已提交
6
  欢迎大家关注公众号:ai_portumo。 
朱本福 已提交
7 8
  
  【重要通知2】:扫描关注公众号ai_portumo,回复“车牌数据”获取37G的实际车牌数据下载链接。请大家不要随意将下载链接共享,我共享数据的目的是为了给我的公众号引流,大家可以推荐朋友关注公众号ai_portumo,并在公众号输入框回复“车牌数据”,获取下载链接。
朱本福 已提交
9
----
朱本福 已提交
10
  共19个文件,每个文件2G左右,覆盖各种数字和英文字体,以及早中晚各种场景,可以用来车牌识别训练和OCR学习。
朱本福 已提交
11
----
朱本福 已提交
12
  ![image](https://github.com/zhubenfu/License-Plate-Detect-Recognition-via-Deep-Neural-Networks-accuracy-up-to-99.9/blob/master/%E6%89%AB%E7%A0%81_%E6%90%9C%E7%B4%A2%E8%81%94%E5%90%88%E4%BC%A0%E6%92%AD%E6%A0%B7%E5%BC%8F-%E7%99%BD%E8%89%B2%E7%89%88.png)  
朱本福 已提交
13 14


朱本福 已提交
15 16 17 18
**目录:**

**【第一章 线性代数】**

朱本福 已提交
19
矩阵、迹、转置
朱本福 已提交
20

朱本福 已提交
21
行列式、三角矩阵、行列式的性质、余子式
朱本福 已提交
22

朱本福 已提交
23
克拉姆法则、齐次线性方程组
朱本福 已提交
24

朱本福 已提交
25
逆矩阵、矩阵的初等变换
朱本福 已提交
26

朱本福 已提交
27
矩阵的秩、线性方程组的解
朱本福 已提交
28

朱本福 已提交
29
向量
朱本福 已提交
30

朱本福 已提交
31
方阵的特征值和特征向量
朱本福 已提交
32

朱本福 已提交
33
相似矩阵、矩阵对角化、对阵矩阵对角化
朱本福 已提交
34

朱本福 已提交
35
二次型与矩阵正定性
朱本福 已提交
36

朱本福 已提交
37
SVD分解的证明、SVD分解、SVD分解的应用
朱本福 已提交
38

朱本福 已提交
39
多元线性回归、最小二乘法
朱本福 已提交
40 41 42

**【第二章 微积分】**

朱本福 已提交
43
中值定理、柯西中值定理、洛必达法则
朱本福 已提交
44

朱本福 已提交
45
泰勒公式
朱本福 已提交
46

朱本福 已提交
47
函数的凹凸性、函数的极值
朱本福 已提交
48

朱本福 已提交
49
不定积分、凑微分、分部积分法、定积分
朱本福 已提交
50

朱本福 已提交
51
牛顿莱布尼茨公式
朱本福 已提交
52

朱本福 已提交
53
全部积分、偏导数
朱本福 已提交
54

朱本福 已提交
55
方向导数与梯度
朱本福 已提交
56

朱本福 已提交
57
多元函数的泰勒公式、海森矩阵
朱本福 已提交
58

朱本福 已提交
59
多元函数的极值
朱本福 已提交
60

朱本福 已提交
61
矩阵的求导
朱本福 已提交
62 63 64

**【第三章 概率论】**

朱本福 已提交
65
条件概率、全概率公式、贝叶斯公式
朱本福 已提交
66

朱本福 已提交
67
独立性
朱本福 已提交
68

朱本福 已提交
69
离散随机变量、连续随机变量
朱本福 已提交
70

朱本福 已提交
71
分布函数:均匀分布、指数分布、正态分布
朱本福 已提交
72

朱本福 已提交
73
随机变量函数的分布
朱本福 已提交
74

朱本福 已提交
75
多维随机变量
朱本福 已提交
76

朱本福 已提交
77
边缘分布、条件分布
朱本福 已提交
78

朱本福 已提交
79
期望(连续型、离散型)
朱本福 已提交
80

朱本福 已提交
81
方差
朱本福 已提交
82

朱本福 已提交
83
方差的常用性质、协方差
朱本福 已提交
84

朱本福 已提交
85
协方差矩阵
朱本福 已提交
86

朱本福 已提交
87
参数估计、矩估计
朱本福 已提交
88

朱本福 已提交
89
极大似然估计、高斯分布、无偏性
朱本福 已提交
90 91 92

**【第四章 机器学习】**

朱本福 已提交
93
无约束优化、梯度下降法
朱本福 已提交
94

朱本福 已提交
95
牛顿法、两种解释
朱本福 已提交
96

朱本福 已提交
97
牛顿法的收敛速度
朱本福 已提交
98

朱本福 已提交
99
有约束的优化、拉格朗日乘子的意义、KKT条件
朱本福 已提交
100

朱本福 已提交
101
不等式约束
朱本福 已提交
102

朱本福 已提交
103
约束问题总结:等式约束、不等式约束
朱本福 已提交
104

朱本福 已提交
105
优化的对偶理论、原始问题、对偶问题
朱本福 已提交
106 107 108

**【第五章 深度学习】**

朱本福 已提交
109
容量、过拟合、欠拟合
朱本福 已提交
110

朱本福 已提交
111
逻辑回归、线性回归、二项逻辑回归模型
朱本福 已提交
112

朱本福 已提交
113
贝叶斯估计、频率派、贝叶斯派
朱本福 已提交
114

朱本福 已提交
115
QA J=‖xa−y‖^2 求导
朱本福 已提交
116

朱本福 已提交
117
PCA原理与推导
朱本福 已提交
118

朱本福 已提交
119
LDA、PCA与LDA区别
朱本福 已提交
120

朱本福 已提交
121
SVM支持向量机
朱本福 已提交
122

朱本福 已提交
123
决策树
朱本福 已提交
124

朱本福 已提交
125
传递函数、激活函数、损失函数、KL距离、相对熵
朱本福 已提交
126

朱本福 已提交
127
前向传播、反向算法
朱本福 已提交
128

朱本福 已提交
129
深度学习中的正则化
朱本福 已提交
130

朱本福 已提交
131
Bagging、Dropout
朱本福 已提交
132

朱本福 已提交
133
深度模型中的优化
朱本福 已提交
134

朱本福 已提交
135
动量Momentum、AdaGrad、Adam、BatchNorm
朱本福 已提交
136

朱本福 已提交
137
卷积网络
朱本福 已提交
138

朱本福 已提交
139
CNN前向算法、反向算法、Pooling
朱本福 已提交
140

朱本福 已提交
141
Inception网络:V1、V2、V3、V4
朱本福 已提交
142

朱本福 已提交
143
循环神经网络、前向、后向
朱本福 已提交
144

朱本福 已提交
145
LSTM
朱本福 已提交
146

朱本福 已提交
147
GRU
朱本福 已提交
148

朱本福 已提交
149
深度学习中的一些高级技术
朱本福 已提交
150

朱本福 已提交
151
神经网络量化
朱本福 已提交
152

朱本福 已提交
153
对抗网络
朱本福 已提交
154 155


朱本福 已提交
156 157
  【重要通知】:将从理论到实践,建立一个微信公众号,把近期的总结以专题形式公布出来,以上为初步目录:
  欢迎大家关注公众号:ai_portumo。
朱本福 已提交
158 159


朱本福 已提交
160
 ![image](https://github.com/zhubenfu/License-Plate-Detect-Recognition-via-Deep-Neural-Networks-accuracy-up-to-99.9/blob/master/%E6%89%AB%E7%A0%81_%E6%90%9C%E7%B4%A2%E8%81%94%E5%90%88%E4%BC%A0%E6%92%AD%E6%A0%B7%E5%BC%8F-%E6%A0%87%E5%87%86%E8%89%B2%E7%89%88.png)  
朱本福 已提交
161

朱本福 已提交
162
  
朱本福 已提交
163
  进来看一定要加star!右上角!
朱本福 已提交
164
  -----
朱本福 已提交
165 166
  github 里面会有一个列表,专门收集了你所有 star 过的项目,点击 github 个人头像,可以看到 your stars 的条目,点击就可以查看你 star 过的所有项目了。

朱本福 已提交
167
准商业项目:正在整理文档 后面全部开放出来文档和全部资料。
朱本福 已提交
168
===========================================
朱本福 已提交
169 170
本项目采用了多种方式识别车牌,每一种方式各有优缺点,现在统一更新出来!  

朱本福 已提交
171 172
| 检测大牌  | 分割单个字符 | 识别车牌 |项目支持 |
| ------------- | ------------- | ------------- |------------- |
朱本福 已提交
173 174
| haar+cascade  | haar+cascade  | 切割出单个字符通过cnn识别 |[Y] |
| mtcnn  | 图像处理  | lstm+ctc  |[Y] |
朱本福 已提交
175 176
| 图像处理:跳变点  |    | fcn全卷积网络带单个字符定位 |[ ] |
| YOLO  |    |   |[ ] |
朱本福 已提交
177

朱本福 已提交
178

朱本福 已提交
179 180 181 182 183
|    | 原图 | 目标 |点回归 |
| ------------- | ------------- | ------------- |------------- |
| YOLO  | 归一化  | X |增一层 |
| mtcnn  | X | 归一化  |增一层 |
| haar+cascade  | X   | 归一化  | |
朱本福 已提交
184 185


朱本福 已提交
186
需用用到的第三方库下载[3rdparty 20180726 百度云](https://pan.baidu.com/s/1kZDZ98-EZr90hQt_NU-jjA  "悬停显示")
朱本福 已提交
187

朱本福 已提交
188
注意说明:
朱本福 已提交
189
项目采用vs2015 x64 release cuda9.2编译
朱本福 已提交
190 191
--------

朱本福 已提交
192
##一、整个大车牌检测基于haar+cascade的检测或者mtcnn的检测,
朱本福 已提交
193
--------------------------------
朱本福 已提交
194
[车牌识别技术详解六--基于Adaboost+haar训练的车牌检测](https://blog.csdn.net/zhubenfulovepoem/article/details/42474239  "悬停显示")
朱本福 已提交
195
  
朱本福 已提交
196 197
  大牌检测采用车牌比例为90:36的比例,训练基于haar特征的adaboost检测。  

朱本福 已提交
198 199
(1)**准备样本:**
**正样本**:样本处理和选择非常有技巧,我的标准是框住整个车牌留出边框,这样既保留了车牌原有的字符特征,字符组特征还有车牌的边框特征。其中双行车牌我只取底下面的一行。并且检测样本最好不要预处理,输入源给出什么图形就用什么图形。*具体的抠图方式可以参考我其他博客车牌识别技术详解三--字符检测的正负样本得取(利用鼠标画框抠图)。*
朱本福 已提交
200

朱本福 已提交
201
**负样本**:负样本选择同样非常有技巧性。尽量采集车牌使用环境下的背景图片,并且需要包含一部分车牌字符但是非正样本的取在车牌周围的负样本。
朱本福 已提交
202 203


朱本福 已提交
204

朱本福 已提交
205
##二、mtcnn检测到车牌之后,通过回归得到四个角点,做透视变换对齐得到水平车牌,实测可以处理角度非常偏的车牌,
朱本福 已提交
206
-------
朱本福 已提交
207 208
![image](https://github.com/zhubenfu/License-Plate-Detect-Recognition-via-Deep-Neural-Networks-accuracy-up-to-99.9/blob/master/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20180720093811.png)  

朱本福 已提交
209
##三、单个车牌字符分割是基于haar+cascade加上逻辑筛选,
朱本福 已提交
210
--------
朱本福 已提交
211
###1、**图像识别中最核心最难搞的模块之一:目标检测定位分割**
朱本福 已提交
212 213
做识别应用最难的部分就是分割了,图像分割好了,后端做识别才更简单。

朱本福 已提交
214 215
*检测前需不需要做图像预处理:建议可以根据实际情况简单处理下,常用的比如cvNorm,但是仅在备份图像上做处理,原图尽量不动,原图留做识别抠图。
*训练一个分类器进行目标检测,以haar+adaboost为例,详细参考字符检测的正负样本得取(利用鼠标画框抠图)和准备样本等。 
朱本福 已提交
216
  
朱本福 已提交
217
![image](https://github.com/zhubenfu/License-Plate-Detect-Recognition-via-Deep-Neural-Networks-accuracy-up-to-99.9/blob/master/20171121204748663.png)
朱本福 已提交
218
     
朱本福 已提交
219
###2.**往往分类器仅仅只能得到以上一个初步的效果,这时候需要根据项目实际图像固有的特征规律进行一些调整。 **
朱本福 已提交
220 221 222



朱本福 已提交
223 224 225 226
[车牌识别技术详解三--字符检测的正负样本得取(利用鼠标画框抠图)](https://blog.csdn.net/zhubenfulovepoem/article/details/12344639   "悬停显示") 

单个字符的分割可以基于haar或者采用fcn!

朱本福 已提交
227
[车牌识别技术详解四--二值化找轮廓做分割得样本(车牌分割,验证码分割)](https://blog.csdn.net/zhubenfulovepoem/article/details/12345539   "悬停显示")
朱本福 已提交
228

朱本福 已提交
229 230


朱本福 已提交
231
##四、识别支持blstm+ctc全图识别、单个字符分割识别和FCN全卷积识别。
朱本福 已提交
232
-------
朱本福 已提交
233
| 算法 | 识别车牌的方法 |优缺点 |
朱本福 已提交
234
| ------------- | ------------- |------------- |
朱本福 已提交
235 236 237
| haar+cascade  | 切割出单个字符通过cnn识别 |由于单个字符样本较多,所以识别率在正面车牌情况下,非常高  |
|   | lstm+ctc  |全图识别,可以处理角度,污迹等等  | 
| fcn+反卷积 | fcn全卷机网络带单个字符定位 |  带定位,但是依赖数据过多 |
朱本福 已提交
238

朱本福 已提交
239
(1)**FCN Multilabel Caffe方法综述[FCN的车牌图像识别,end-to-end 目标定位、图像识别](https://blog.csdn.net/zhubenfulovepoem/article/details/78902747   "悬停显示")  **
朱本福 已提交
240

朱本福 已提交
241
![image](https://github.com/zhubenfu/License-Plate-Detect-Recognition-via-Deep-Neural-Networks-accuracy-up-to-99.9/blob/master/20171121203935599.png)
朱本福 已提交
242

朱本福 已提交
243
![image](https://github.com/zhubenfu/License-Plate-Detect-Recognition-via-Deep-Neural-Networks-accuracy-up-to-99.9/blob/master/20171121203946021.png)
朱本福 已提交
244

朱本福 已提交
245
(2)**单个字符识别:**
朱本福 已提交
246 247 248 249
   识别样本丰富性处理:很多应用你取不到特别多的样本,覆盖不了所有的情况,并且样本之间的均衡性也很难平衡。常见的情况肯定是出现最多的,样本是最多的,还有可能某类样本数是最多的,另一类别下的样本数也是比较少的。 
   实际项目其实时间花的最多的就是在那20%-30%的情况下做边界处理占了项目90%的时间。 
   我们需要尽可能的保证样本的均衡性,采样时候各种情况尽可能包含,每类别下的样本数量尽量均衡。
   某类样本数量不够可以采集图像处理增加样本量,常用的有分割的时候上下左右平移,图像拉伸,滤波等。 
朱本福 已提交
250

朱本福 已提交
251

朱本福 已提交
252

朱本福 已提交
253
##五、部分结果展示
朱本福 已提交
254
----------
朱本福 已提交
255
![image](https://github.com/zhubenfu/License-Plate-Detect-Recognition-via-Deep-Neural-Networks-accuracy-up-to-99.9/blob/master/result_plateCard/QQ%E5%9B%BE%E7%89%8720180529195903.png)
朱本福 已提交
256

朱本福 已提交
257
![image](https://github.com/zhubenfu/License-Plate-Detect-Recognition-via-Deep-Neural-Networks-accuracy-up-to-99.9/blob/master/result_plateCard/QQ%E5%9B%BE%E7%89%8720180529195834.png)  
朱本福 已提交
258 259

![image](https://github.com/zhubenfu/License-Plate-Detect-Recognition-via-Deep-Neural-Networks-accuracy-up-to-99.9/blob/master/result_plateCard/QQ%E5%9B%BE%E7%89%8720180529195858.png)
朱本福 已提交
260 261 262
  

![image](https://github.com/zhubenfu/License-Plate-Detect-Recognition-via-Deep-Neural-Networks-accuracy-up-to-99.9/blob/master/result_plateCard/QQ%E5%9B%BE%E7%89%8720180529195908.png)  
朱本福 已提交
263 264


朱本福 已提交
265
![image](https://github.com/zhubenfu/License-Plate-Detect-Recognition-via-Deep-Neural-Networks-accuracy-up-to-99.9/blob/master/result_plateCard/%E5%BE%AE%E4%BF%A1%E6%88%AA%E5%9B%BE_20180530112203.png) 
朱本福 已提交
266

朱本福 已提交
267
##六、数据资源共享交流:
朱本福 已提交
268
主要是促进交流,不为盈利!将准商业的产品开源,欢迎交流,各抒己见,逐步完善成一个通用的目标检测分割识别的OCR开源项目
朱本福 已提交
269
---
朱本福 已提交
270
(1)交流加群:加QQ群 图像处理分析机器视觉 109128646
朱本福 已提交
271
========
朱本福 已提交
272 273 274 275
感谢群友:E-图像处理_仪山湖  贡献的操作说明!和完整的第三方库,下载地址在群共享里面!  

1: 安装CUDA 9.2, cuda9.2版已经带有显卡驱动,默认安装,保持cuda和显卡驱动一致,否则会报cuda runtime is inefficient 35号错误。  

朱本福 已提交
276
2:确认各项目的include、lib和第三方库路径的配置,本人在项目中除CUDA使用绝对路径外,其余的include、lib路径均使用相对路径
朱本福 已提交
277
```
朱本福 已提交
278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332
    caffe项目:
	   C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include
..\..\opensource\boost_1_57_0
..\..\opensource\opencv\include
..\..\3rdparty\include
..\..\include
..\..\3rdparty\include\lmdb
..\..\3rdparty\include\hdf5
..\..\src\
..\..\3rdparty\include\glog
..\..\3rdparty\include\cudnn
..\..\src\caffe\proto
..\..\3rdparty\include\openblas
   
   ..\..\opensource\boost_1_57_0\lib
..\..\opensource\opencv\lib
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\lib\x64
..\..\3rdparty\lib
..\..\tools_bin

 
	libClassfication项目:
	..\..\3rdparty\include\openblas
..\..\opensource\opencv\include
..\..\opensource\boost_1_57_0
..\..\3rdparty\include
..\..\include
..\..\3rdparty\include\lmdb
..\..\3rdparty\include\hdf5
..\..\src\
..\..\3rdparty\include\glog
..\..\3rdparty\include\cudnn
..\..\src\caffe\proto
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\lib\x64
..\..\opensource\boost_1_57_0\lib
..\..\opensource\opencv\lib
..\..\3rdparty\lib
..\..\tools_bin
	
	ocr_test:
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include
..\..\opensource\boost_1_57_0
..\..\opensource\opencv\include
..\libClassification
..\..\include
..\..\3rdparty\include
..\..\src\
..\..\3rdparty\include\openblas

C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\lib\x64
..\..\opensource\opencv\lib
..\..\opensource\boost_1_57_0\lib
..\..\tools_bin
朱本福 已提交
333
```	
朱本福 已提交
334
	
朱本福 已提交
335 336 337 338 339 340 341 342 343 344
3:生成时要选择Release,x64格式  

4:在项目的cuda生成host代码时,支持一些旧版本的cu伪代码,三个项目都设置成:compute_61,sm_61;compute_52,sm_52;compute_50,sm_50;compute_35,sm_35;compute_30,sm_30,否则会报no kernel image 40号错误  

5:整理的3rdparty请使用群文件的3rdparty-20180730.tar  

6:在visual studio 2015打开caffe.sln方案时(项目根目录下),如果出现无法加载工程的错误,打开项目根目录下的caffe-vsproj\caffe.sln  

7:导入工程后,在ocr_test的项目,右键,选择【生成依赖项】-> 【项目依赖项】,勾选caffe, libClassfication两个项目  

朱本福 已提交
345 346
8: 项目代码中对路径没有做规范化处理,导致在运行期间报找不到模型文件的错误,为了调试方便,这里把代码中的路径全部修改成绝对路径,如ocr_test.cpp的962行,
     string modelfolder = "E:\\License-Plate-Detect-Recognition\\caffe-vsproj\\ocr_test\\plateCard_test";  其他的类似修改
朱本福 已提交
347 348 349 350
   但要区分MTCNN模型和ICNNPredict模型的位置	  
   
9:启动一个cmd,切换到工程根目录下的tools_bin目录,启动ocr_test.ext     

朱本福 已提交
351

朱本福 已提交
352

朱本福 已提交
353
(2)**武汉周边的朋友可以加我,周末一起约起,多交流相互学习!**
朱本福 已提交
354
![image](https://github.com/zhubenfu/License-Plate-Detect-Recognition-via-Deep-Neural-Networks-accuracy-up-to-99.9/blob/master/result_plateCard/%E5%BE%AE%E4%BF%A1%E5%8F%B7%EF%BC%8C%E6%AC%A2%E8%BF%8E%E5%8A%A0%E6%88%91%E4%BA%A4%E6%B5%81.jpg)