车牌识别算法模型训练
车牌识别算法模型训练过程以及模型权重文件
·
在本专题的第一篇博文中讲述了车牌检测数据集的制作方法(车牌识别数据集解析_reset2021的博客-CSDN博客
1)数据清洗
对 CCPD2019中 ccpd_base数据集进行处理,得到数据集结构如下

其中,labels为为车牌信息,也即图像文件的名称
2) 下载源码
① 源码结构说明

1)data为 数据集记载接口
2)model 为模型定义
3)weights 为存放模型生成文件以及预训练模型
4) test_LPRNet.py 为模型测试接口
5)train_LPRNet.py 为模型训练接口
② 修改训练接口的相关参数
def get_parser():
parser = argparse.ArgumentParser(description='parameters to train net')
parser.add_argument('--max_epoch', default=140, help='epoch to train the network')
parser.add_argument('--img_size', default=[94, 24], help='the image size')
parser.add_argument('--train_img_dirs', default=r"../datasets/CCPD/ccpd_2019_yolo/images/ccpd_base/res_images/train", help='the train images path')
parser.add_argument('--test_img_dirs', default=r"../datasets/CCPD/ccpd_2019_yolo/images/ccpd_base/res_images/val", help='the test images path')
parser.add_argument('--dropout_rate', default=0.5, help='dropout rate.')
parser.add_argument('--learning_rate', default=0.01, help='base value of learning rate.')
parser.add_argument('--lpr_max_len', default=8, help='license plate number max length.')
parser.add_argument('--train_batch_size', default=512, help='training batch size.')
parser.add_argument('--test_batch_size', default=512, help='testing batch size.')
parser.add_argument('--phase_train', default=True, type=bool, help='train or test phase flag.')
parser.add_argument('--num_workers', default=0, type=int, help='Number of workers used in dataloading')
parser.add_argument('--cuda', default=True, type=bool, help='Use cuda to train model')
parser.add_argument('--resume_epoch', default=60, type=int, help='resume iter for retraining')
parser.add_argument('--save_interval', default=500, type=int, help='interval for save model state dict')
parser.add_argument('--test_interval', default=500, type=int, help='interval for evaluate')
parser.add_argument('--momentum', default=0.9, type=float, help='momentum')
parser.add_argument('--weight_decay', default=2e-5, type=float, help='Weight decay for SGD')
parser.add_argument('--lr_schedule', default=[20, 40, 60, 80, 100,120], help='schedule for learning rate.')
parser.add_argument('--save_folder', default=r'./train_runs_2023/',
help='Location to save checkpoint models')
parser.add_argument('--pretrained_model', default='./weights/Final_LPRNet_model.pth', help='no pretrain')
args = parser.parse_args()
主要修改
parser.add_argument('--train_img_dirs', default=r"../datasets/CCPD/ccpd_2019_yolo/images/ccpd_base/res_images/train", help='the train images path')
parser.add_argument('--test_img_dirs', default=r"../datasets/CCPD/ccpd_2019_yolo/images/ccpd_base/res_images/val", help='the test images path')
parser.add_argument('--save_folder', default=r'./train_runs_2023/',
help='Location to save checkpoint models')
parser.add_argument('--pretrained_model', default='./weights/Final_LPRNet_model.pth', help='no pretrain')
其中,上面两个参数为训练数据集与验证数据集的路径。下面两个参数为模型保存路径以及预训练权重路径。
③ 开始训练:
python train_LPRNet.py
部分打印如下所示:
Epoch:132 || epochiter: 97/213|| Totel iter 28000 || Loss: 0.0593||Batch time: 2.6856 sec. ||LR: 0.01000000
Epoch:132 || epochiter: 117/213|| Totel iter 28020 || Loss: 0.0658||Batch time: 2.9843 sec. ||LR: 0.01000000
Epoch:132 || epochiter: 137/213|| Totel iter 28040 || Loss: 0.0923||Batch time: 3.4117 sec. ||LR: 0.01000000
Epoch:132 || epochiter: 157/213|| Totel iter 28060 || Loss: 0.0530||Batch time: 2.4972 sec. ||LR: 0.01000000
Epoch:132 || epochiter: 177/213|| Totel iter 28080 || Loss: 0.0929||Batch time: 2.7108 sec. ||LR: 0.01000000
Epoch:132 || epochiter: 197/213|| Totel iter 28100 || Loss: 0.0786||Batch time: 3.6349 sec. ||LR: 0.01000000
Epoch:133 || epochiter: 4/213|| Totel iter 28120 || Loss: 0.0782||Batch time: 3.0764 sec. ||LR: 0.01000000
Epoch:133 || epochiter: 24/213|| Totel iter 28140 || Loss: 0.0652||Batch time: 1.7216 sec. ||LR: 0.01000000
Epoch:133 || epochiter: 44/213|| Totel iter 28160 || Loss: 0.0754||Batch time: 1.5574 sec. ||LR: 0.01000000
Epoch:133 || epochiter: 64/213|| Totel iter 28180 || Loss: 0.0764||Batch time: 1.7807 sec. ||LR: 0.01000000
Epoch:133 || epochiter: 84/213|| Totel iter 28200 || Loss: 0.0871||Batch time: 3.0359 sec. ||LR: 0.01000000
Epoch:133 || epochiter: 104/213|| Totel iter 28220 || Loss: 0.0811||Batch time: 2.6455 sec. ||LR: 0.01000000
Epoch:133 || epochiter: 124/213|| Totel iter 28240 || Loss: 0.0431||Batch time: 2.4653 sec. ||LR: 0.01000000
Epoch:133 || epochiter: 144/213|| Totel iter 28260 || Loss: 0.0801||Batch time: 2.5873 sec. ||LR: 0.01000000
Epoch:133 || epochiter: 164/213|| Totel iter 28280 || Loss: 0.0708||Batch time: 3.1715 sec. ||LR: 0.01000000
Epoch:133 || epochiter: 184/213|| Totel iter 28300 || Loss: 0.0740||Batch time: 2.6167 sec. ||LR: 0.01000000
Epoch:133 || epochiter: 204/213|| Totel iter 28320 || Loss: 0.0781||Batch time: 2.8141 sec. ||LR: 0.01000000
Epoch:134 || epochiter: 11/213|| Totel iter 28340 || Loss: 0.0685||Batch time: 2.4714 sec. ||LR: 0.01000000
Epoch:134 || epochiter: 31/213|| Totel iter 28360 || Loss: 0.0738||Batch time: 2.4797 sec. ||LR: 0.01000000
Epoch:134 || epochiter: 51/213|| Totel iter 28380 || Loss: 0.0745||Batch time: 2.6958 sec. ||LR: 0.01000000
Epoch:134 || epochiter: 71/213|| Totel iter 28400 || Loss: 0.0538||Batch time: 2.4884 sec. ||LR: 0.01000000
Epoch:134 || epochiter: 91/213|| Totel iter 28420 || Loss: 0.0617||Batch time: 2.6363 sec. ||LR: 0.01000000
Epoch:134 || epochiter: 111/213|| Totel iter 28440 || Loss: 0.0983||Batch time: 2.4005 sec. ||LR: 0.01000000
Epoch:134 || epochiter: 131/213|| Totel iter 28460 || Loss: 0.0709||Batch time: 1.5192 sec. ||LR: 0.01000000
Epoch:134 || epochiter: 151/213|| Totel iter 28480 || Loss: 0.0724||Batch time: 2.9176 sec. ||LR: 0.01000000
[Info] Test Accuracy: 0.88671875 [16798:856:1290:18944]
[Info] Test Speed: 0.004879352755456027s 1/19117]
Epoch:134 || epochiter: 171/213|| Totel iter 28500 || Loss: 0.0882||Batch time: 2.5666 sec. ||LR: 0.01000000
Epoch:134 || epochiter: 191/213|| Totel iter 28520 || Loss: 0.0796||Batch time: 2.9046 sec. ||LR: 0.01000000
Epoch:134 || epochiter: 211/213|| Totel iter 28540 || Loss: 0.0923||Batch time: 2.4908 sec. ||LR: 0.01000000
Epoch:135 || epochiter: 18/213|| Totel iter 28560 || Loss: 0.0862||Batch time: 2.7225 sec. ||LR: 0.01000000
Epoch:135 || epochiter: 38/213|| Totel iter 28580 || Loss: 0.0461||Batch time: 1.6113 sec. ||LR: 0.01000000
Epoch:135 || epochiter: 58/213|| Totel iter 28600 || Loss: 0.0798||Batch time: 1.6577 sec. ||LR: 0.01000000
Epoch:135 || epochiter: 78/213|| Totel iter 28620 || Loss: 0.0741||Batch time: 2.9774 sec. ||LR: 0.01000000
Epoch:135 || epochiter: 98/213|| Totel iter 28640 || Loss: 0.0953||Batch time: 2.9027 sec. ||LR: 0.01000000
Epoch:135 || epochiter: 118/213|| Totel iter 28660 || Loss: 0.0988||Batch time: 2.7198 sec. ||LR: 0.01000000
Epoch:135 || epochiter: 138/213|| Totel iter 28680 || Loss: 0.0688||Batch time: 2.4990 sec. ||LR: 0.01000000
Epoch:135 || epochiter: 158/213|| Totel iter 28700 || Loss: 0.0439||Batch time: 2.5107 sec. ||LR: 0.01000000
Epoch:135 || epochiter: 178/213|| Totel iter 28720 || Loss: 0.0735||Batch time: 2.6372 sec. ||LR: 0.01000000
Epoch:135 || epochiter: 198/213|| Totel iter 28740 || Loss: 0.0593||Batch time: 2.6569 sec. ||LR: 0.01000000
Epoch:136 || epochiter: 5/213|| Totel iter 28760 || Loss: 0.0644||Batch time: 2.2701 sec. ||LR: 0.01000000
Epoch:136 || epochiter: 25/213|| Totel iter 28780 || Loss: 0.0734||Batch time: 2.4448 sec. ||LR: 0.01000000
Epoch:136 || epochiter: 45/213|| Totel iter 28800 || Loss: 0.0638||Batch time: 2.2956 sec. ||LR: 0.01000000
Epoch:136 || epochiter: 65/213|| Totel iter 28820 || Loss: 0.0851||Batch time: 1.4244 sec. ||LR: 0.01000000
Epoch:136 || epochiter: 85/213|| Totel iter 28840 || Loss: 0.0510||Batch time: 2.4301 sec. ||LR: 0.01000000
Epoch:136 || epochiter: 105/213|| Totel iter 28860 || Loss: 0.0579||Batch time: 2.7128 sec. ||LR: 0.01000000
Epoch:136 || epochiter: 125/213|| Totel iter 28880 || Loss: 0.0778||Batch time: 2.5363 sec. ||LR: 0.01000000
Epoch:136 || epochiter: 145/213|| Totel iter 28900 || Loss: 0.0735||Batch time: 2.5044 sec. ||LR: 0.01000000
Epoch:136 || epochiter: 165/213|| Totel iter 28920 || Loss: 0.0841||Batch time: 2.4243 sec. ||LR: 0.01000000
Epoch:136 || epochiter: 185/213|| Totel iter 28940 || Loss: 0.0792||Batch time: 2.3947 sec. ||LR: 0.01000000
Epoch:136 || epochiter: 205/213|| Totel iter 28960 || Loss: 0.0795||Batch time: 2.3946 sec. ||LR: 0.01000000
Epoch:137 || epochiter: 12/213|| Totel iter 28980 || Loss: 0.0660||Batch time: 2.0044 sec. ||LR: 0.01000000
[Info] Test Accuracy: 0.900390625 [17057:842:1045:18944]
[Info] Test Speed: 0.003254071460294257s 1/19117]
Epoch:137 || epochiter: 32/213|| Totel iter 29000 || Loss: 0.0765||Batch time: 3.2783 sec. ||LR: 0.01000000
Epoch:137 || epochiter: 52/213|| Totel iter 29020 || Loss: 0.0563||Batch time: 2.5004 sec. ||LR: 0.01000000
Epoch:137 || epochiter: 72/213|| Totel iter 29040 || Loss: 0.0958||Batch time: 2.5501 sec. ||LR: 0.01000000
Epoch:137 || epochiter: 92/213|| Totel iter 29060 || Loss: 0.0531||Batch time: 2.4735 sec. ||LR: 0.01000000
Epoch:137 || epochiter: 112/213|| Totel iter 29080 || Loss: 0.0557||Batch time: 2.6080 sec. ||LR: 0.01000000
Epoch:137 || epochiter: 132/213|| Totel iter 29100 || Loss: 0.1042||Batch time: 2.5908 sec. ||LR: 0.01000000
Epoch:137 || epochiter: 152/213|| Totel iter 29120 || Loss: 0.0916||Batch time: 2.6287 sec. ||LR: 0.01000000
Epoch:137 || epochiter: 172/213|| Totel iter 29140 || Loss: 0.0768||Batch time: 1.4714 sec. ||LR: 0.01000000
Epoch:137 || epochiter: 192/213|| Totel iter 29160 || Loss: 0.0393||Batch time: 2.3952 sec. ||LR: 0.01000000
Epoch:137 || epochiter: 212/213|| Totel iter 29180 || Loss: 0.0599||Batch time: 1.5093 sec. ||LR: 0.01000000
Epoch:138 || epochiter: 19/213|| Totel iter 29200 || Loss: 0.0674||Batch time: 2.5899 sec. ||LR: 0.01000000
Epoch:138 || epochiter: 39/213|| Totel iter 29220 || Loss: 0.0728||Batch time: 2.8100 sec. ||LR: 0.01000000
Epoch:138 || epochiter: 59/213|| Totel iter 29240 || Loss: 0.0756||Batch time: 1.5109 sec. ||LR: 0.01000000
Epoch:138 || epochiter: 79/213|| Totel iter 29260 || Loss: 0.0735||Batch time: 2.6111 sec. ||LR: 0.01000000
Epoch:138 || epochiter: 99/213|| Totel iter 29280 || Loss: 0.0697||Batch time: 2.6712 sec. ||LR: 0.01000000
Epoch:138 || epochiter: 119/213|| Totel iter 29300 || Loss: 0.1383||Batch time: 2.5968 sec. ||LR: 0.01000000
Epoch:138 || epochiter: 139/213|| Totel iter 29320 || Loss: 0.0528||Batch time: 2.6106 sec. ||LR: 0.01000000
Epoch:138 || epochiter: 159/213|| Totel iter 29340 || Loss: 0.0669||Batch time: 2.5904 sec. ||LR: 0.01000000
Epoch:138 || epochiter: 179/213|| Totel iter 29360 || Loss: 0.0613||Batch time: 2.4705 sec. ||LR: 0.01000000
Epoch:138 || epochiter: 199/213|| Totel iter 29380 || Loss: 0.0800||Batch time: 2.9948 sec. ||LR: 0.01000000
Epoch:139 || epochiter: 6/213|| Totel iter 29400 || Loss: 0.0566||Batch time: 2.5206 sec. ||LR: 0.01000000
Epoch:139 || epochiter: 26/213|| Totel iter 29420 || Loss: 0.0883||Batch time: 2.5943 sec. ||LR: 0.01000000
Epoch:139 || epochiter: 46/213|| Totel iter 29440 || Loss: 0.0675||Batch time: 2.1599 sec. ||LR: 0.01000000
Epoch:139 || epochiter: 66/213|| Totel iter 29460 || Loss: 0.0963||Batch time: 3.4811 sec. ||LR: 0.01000000
Epoch:139 || epochiter: 86/213|| Totel iter 29480 || Loss: 0.0646||Batch time: 2.8414 sec. ||LR: 0.01000000
[Info] Test Accuracy: 0.8535684121621622 [16170:1003:1771:18944]
[Info] Test Speed: 0.005983558204711939s 1/19117]
Epoch:139 || epochiter: 106/213|| Totel iter 29500 || Loss: 0.0842||Batch time: 2.6033 sec. ||LR: 0.01000000
Epoch:139 || epochiter: 126/213|| Totel iter 29520 || Loss: 0.0579||Batch time: 2.7725 sec. ||LR: 0.01000000
Epoch:139 || epochiter: 146/213|| Totel iter 29540 || Loss: 0.0377||Batch time: 3.0633 sec. ||LR: 0.01000000
Epoch:139 || epochiter: 166/213|| Totel iter 29560 || Loss: 0.0728||Batch time: 3.1834 sec. ||LR: 0.01000000
Epoch:139 || epochiter: 186/213|| Totel iter 29580 || Loss: 0.0628||Batch time: 2.5790 sec. ||LR: 0.01000000
Epoch:139 || epochiter: 206/213|| Totel iter 29600 || Loss: 0.0569||Batch time: 2.7658 sec. ||LR: 0.01000000
Epoch:140 || epochiter: 13/213|| Totel iter 29620 || Loss: 0.0608||Batch time: 3.1631 sec. ||LR: 0.01000000
Epoch:140 || epochiter: 33/213|| Totel iter 29640 || Loss: 0.0810||Batch time: 3.2183 sec. ||LR: 0.01000000
Epoch:140 || epochiter: 53/213|| Totel iter 29660 || Loss: 0.0669||Batch time: 1.6993 sec. ||LR: 0.01000000
Epoch:140 || epochiter: 73/213|| Totel iter 29680 || Loss: 0.0698||Batch time: 2.4664 sec. ||LR: 0.01000000
Epoch:140 || epochiter: 93/213|| Totel iter 29700 || Loss: 0.0846||Batch time: 2.9049 sec. ||LR: 0.01000000
Epoch:140 || epochiter: 113/213|| Totel iter 29720 || Loss: 0.0707||Batch time: 3.3820 sec. ||LR: 0.01000000
Epoch:140 || epochiter: 133/213|| Totel iter 29740 || Loss: 0.0684||Batch time: 2.2185 sec. ||LR: 0.01000000
Epoch:140 || epochiter: 153/213|| Totel iter 29760 || Loss: 0.0789||Batch time: 2.8385 sec. ||LR: 0.01000000
Epoch:140 || epochiter: 173/213|| Totel iter 29780 || Loss: 0.0714||Batch time: 2.8002 sec. ||LR: 0.01000000
Epoch:140 || epochiter: 193/213|| Totel iter 29800 || Loss: 0.0725||Batch time: 2.5646 sec. ||LR: 0.01000000
Final test Accuracy:
[Info] Test Accuracy: 0.8961148648648649 [16976:864:1104:18944]
[Info] Test Speed: 0.00455971425651051s 1/19117]
5)模型运行结果保存在
train_runs中。
loss的图像如下所示

源码以及训练结果见
https://download.csdn.net/download/reset2021/87946277?spm=1001.2101.3001.9500
更多推荐
所有评论(0)