前言
本篇博客主要記錄在autodl服務器中基于yolov8實現車牌檢測與識別,以下記錄實現全過程~
yolov8源碼:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite
一、環境配置
1、第一步:配置yolov8環境
使用云服務器autoDL
二、數據集準備
數據集下載地址:https://github.com/detectRecog/CCPD
1、數據集介紹
? ? ? ? CCPD2020數據集是一個大型的、多樣化的、經過仔細標注的中國城市車牌開源數據集。CCPD數據集主要分為CCPD2019數據集和CCPD2020(CCPD-Green)數據集。CCPD2019數據集車牌類型僅有普通車牌(藍色車牌),CCPD2020數據集車牌類型僅有新能源車牌(綠色車牌)。CCPD數據集沒有專門的標注文件,每張圖片的文件名就是該圖像對于的數據標注。? ??
數據集圖片命名規則:
025-95_113-154&383_386&473-386&473_177&454_154&383_363&402-0_0_22_27_27_33_16-37-15.jpg1. 025:車牌區域占整個畫面的比例;
2. 95_113: 車牌水平和垂直角度, 水平95°, 豎直113°
3. 154&383_386&473:標注框左上、右下坐標,左上(154, 383), 右下(386, 473)
4. 86&473_177&454_154&383_363&402:標注框四個角點坐標,順序為右下、左下、左上、右上
5. 0_0_22_27_27_33_16:車牌號碼映射關系如下: 第一個0為省份 對應省份字典provinces中的’皖’,;第二個0是該車所在地的地市一級代碼,對應地市一級代碼字典alphabets的’A’;后5位為字母和文字, 查看車牌號ads字典,如22為Y,27為3,33為9,16為S,最終車牌號碼為皖AY339S
省份:[“皖”, “滬”, “津”, “渝”, “冀”, “晉”, “蒙”, “遼”, “吉”, “黑”, “蘇”, “浙”, “京”, “閩”, “贛”,
“魯”, “豫”, “鄂”, “湘”, “粵”, “桂”, “瓊”, “川”, “貴”, “云”, “藏”, “陜”, “甘”, “青”, “寧”,
“新”]地市:[‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘P’, ‘Q’,
‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’,‘X’, ‘Y’, ‘Z’]車牌字典:[‘A’, ‘B’, ‘C’, ‘D’, ‘E’, ‘F’, ‘G’, ‘H’, ‘J’, ‘K’, ‘L’, ‘M’, ‘N’, ‘P’,
‘Q’, ‘R’, ‘S’, ‘T’, ‘U’, ‘V’, ‘W’, ‘X’,‘Y’, ‘Z’, ‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’,
‘6’, ‘7’, ‘8’, ‘9’]
?
CCPD2019數據集包含將近30萬張圖片、圖片尺寸為720x1160x3,共包含8種類型圖片,每種類型、數量及類型說明如下表:
2、數據集制作
第一步:新建datasets目錄,將數據集上傳
第二步:解壓數據集,根據以下目錄結構制作訓練集、驗證集和測試集:
代碼如下:
import shutil
import cv2
import osdef txt_translate(path, txt_path):print(path)print(txt_path)for filename in os.listdir(path):# print(filename)list1 = filename.split("-", 3) # 第一次分割,以減號'-'做分割subname = list1[2]list2 = filename.split(".", 1)subname1 = list2[1]if subname1 == 'txt':continuelt, rb = subname.split("_", 1) # 第二次分割,以下劃線'_'做分割lx, ly = lt.split("&", 1)rx, ry = rb.split("&", 1)width = int(rx) - int(lx)height = int(ry) - int(ly) # bounding box的寬和高cx = float(lx) + width / 2cy = float(ly) + height / 2 # bounding box中心點img = cv2.imread(path + filename)if img is None: # 自動刪除失效圖片(下載過程有的圖片會存在無法讀取的情況)print(path + filename)os.remove(path + filename)continuewidth = width / img.shape[1]height = height / img.shape[0]cx = cx / img.shape[1]cy = cy / img.shape[0]txtname = filename.split(".", 1)txtfile = txt_path + txtname[0] + ".txt"# 綠牌是第0類,藍牌是第1類with open(txtfile, "w") as f:f.write(str(0) + " " + str(cx) + " " + str(cy) + " " + str(width) + " " + str(height))if __name__ == '__main__':# det圖片存儲地址trainDir = r"/root/ultralytics/datasets/CCPD2020/ccpd_green/train/"validDir = r"/root/ultralytics/datasets/CCPD2020/ccpd_green/val/"testDir = r"/root/ultralytics/datasets/CCPD2020/ccpd_green/test/"# det txt存儲地址train_txt_path = r"/root/ultralytics/datasets/platedata/labels/train/"val_txt_path = r"/root/ultralytics/datasets/platedata/labels/val/"test_txt_path = r"/root/ultralytics/datasets/platedata/labels/test/"txt_translate(trainDir, train_txt_path)txt_translate(validDir, val_txt_path)txt_translate(testDir, test_txt_path)
制作之后文件夾結構:
3、配置文件修改
第一步:在/root/ultralytics/ultralytics/cfg/datasets下復制COCO128數據集,重命名為CCPD2020.yaml
更改內容如下:
# Ultralytics YOLO 🚀, AGPL-3.0 license
# COCO128 dataset https://www.kaggle.com/ultralytics/coco128 (first 128 images from COCO train2017) by Ultralytics
# Documentation: https://docs.ultralytics.com/datasets/detect/coco/
# Example usage: yolo train data=coco128.yaml
# parent
# ├── ultralytics
# └── datasets
# └── coco128 ← downloads here (7 MB)# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
#path: ../datasets/coco128 # dataset root dir
train: /root/ultralytics/datasets/platedata/images/train # train images (relative to 'path') 128 images
val: /root/ultralytics/datasets/platedata/images/val # val images (relative to 'path') 128 images
test: /root/ultralytics/datasets/platedata/images/test # test images (optional)# Classes
names:0: license_plate# Download script/URL (optional)
#download: https://ultralytics.com/assets/coco128.zip
第二步:將/root/ultralytics/ultralytics/cfg/models/v8/yolov8.yaml下的nc改為1
第三步:修改/root/ultralytics/train_v8.py文件,更改內容如下:
4、開始訓練
運行python train_v8.py
訓練結果: