天天看點

如何利用百度AI Studio做一個車牌定位系統百度AI StudioPaddlePaddle制作資料集訓練

如何利用百度AI Studio做一個車牌定位系統

  • 百度AI Studio
  • PaddlePaddle
  • 制作資料集
  • 訓練

百度AI Studio

百度推出的AI Studio是一個一站式開發平台:囊括了 AI 教程、代碼環境、算法算力、資料集,并提供免費的線上雲計算,是一個一體化程式設計環境。這裡我們主要使用百度AI studio提供的免費算力:V100顯示卡,顯存16G的配置,每天 12 個小時的免費算力支援(試了一下,一般需要到晚上十二點以後才能申請到,白天基本申請不到GPU的使用權限)。

平台主張使用paddle paddle,但是可以自己進行pytorch的配置(tensorflow應該也可以)。雖然可以配置pytorch環境但是每次重新開機伺服器之後又要重新配置pytorch,如果要配置的環境比較多的話,安裝時間也是需要考慮的問題。

AI Studio官網

PaddlePaddle

飛槳(PaddlePaddle)以百度多年的深度學習技術研究和業務應用為基礎,集深度學習核心訓練和推理架構、基礎模型庫、端到端開發套件、豐富的工具元件于一體。是中國首個自主研發、功能完備、開源開放的産業級深度學習平台。

制作資料集

準備的車牌圖檔(198張已标注):車牌

提取碼:psl2

1.點選Open Dir,打開檔案夾,載入圖檔;

2.點選Create RectBox,即可在圖像上畫框标注;

3.輸入标簽,點選OK;

4.點選Save儲存,儲存下來的是XML檔案;

然後把标注好的圖檔整理成VOC格式的資料集:

1.建立三個檔案夾:Annotations、ImageSets、JPEGImages

如何利用百度AI Studio做一個車牌定位系統百度AI StudioPaddlePaddle制作資料集訓練

将标注生成的XML檔案存入Annotations,圖檔存入JPEGImages,訓練集、測試集、驗證集的劃分情況存入ImageSets。 在ImageSets下建立一個Main檔案夾,并且在Mian檔案夾下建立label_list.txt,裡面存入标注的标簽。 此label_list.txt檔案複制一份與Annotations、ImageSets、JPEGImages同級位置放置。 label_list.txt内容如下:

如何利用百度AI Studio做一個車牌定位系統百度AI StudioPaddlePaddle制作資料集訓練

2.建立一個py檔案,命名為create_list

運作該代碼将會生成trainval.txt、train.txt、val.txt、test.txt,将我們标注的1000張圖像按照訓練集、驗證集、測試集的形式做一個劃分。

create_list代碼如下:
import os
import random

trainval_percent = 0.95  # 訓練集驗證集總占比
train_percent = 0.9  # 訓練集在trainval_percent裡的train占比
xmlfilepath = 'D:/Aplate/Annotations'
txtsavepath = 'D:/Aplate/ImageSets/Main'
total_xml = os.listdir(xmlfilepath)

num = len(total_xml)
list = range(num)
tv = int(num * trainval_percent)
tr = int(tv * train_percent)
trainval = random.sample(list, tv)
train = random.sample(trainval, tr)

ftrainval = open('D:/Aplate/ImageSets/Main/trainval.txt', 'w')
ftest = open('D:/Aplate/ImageSets/Main/test.txt', 'w')
ftrain = open('D:/Aplate/ImageSets/Main/train.txt', 'w')
fval = open('D:/Aplate/ImageSets/Main/val.txt', 'w')

for i in list:
name = total_xml[i][:-4] + '\n'
if i in trainval:
    ftrainval.write(name)
    if i in train:
        ftrain.write(name)
    else:
        fval.write(name)
else:
    ftest.write(name)

ftrainval.close()
ftrain.close()
fval.close()
ftest.close()
           

3.建立一個py檔案,命名為list,用于根據在Main檔案夾中劃分好的資料集進行位置索引,生成含有圖像及對應的XML檔案的位址資訊的檔案。

list.py代碼如下:
import os
import re
import random

devkit_dir = './'
output_dir = './'

def get_dir(devkit_dir,  type):
	return os.path.join(devkit_dir, type)

def walk_dir(devkit_dir):
filelist_dir = get_dir(devkit_dir, 'ImageSets/Main')
annotation_dir = get_dir(devkit_dir, 'Annotations')
img_dir = get_dir(devkit_dir, 'JPEGImages')
trainval_list = []
train_list = []
val_list = []
test_list = []

added = set()

for _, _, files in os.walk(filelist_dir):
    for fname in files:
        print(fname)
        img_ann_list = []
        if re.match('trainval.txt', fname):
            img_ann_list = trainval_list
        elif re.match('train.txt', fname):
            img_ann_list = train_list
        elif re.match('val.txt', fname):
            img_ann_list = val_list
        elif re.match('test.txt', fname):
            img_ann_list = test_list
        else:
            continue
        fpath = os.path.join(filelist_dir, fname)
        for line in open(fpath):
            name_prefix = line.strip().split()[0]
            print(name_prefix)

            added.add(name_prefix)
            #ann_path = os.path.join(annotation_dir, name_prefix + '.xml')
            ann_path = annotation_dir + '/' + name_prefix + '.xml'
            print(ann_path)
            #img_path = os.path.join(img_dir, name_prefix + '.jpg')
            img_path = img_dir + '/' + name_prefix + '.jpg'
            assert os.path.isfile(ann_path), 'file %s not found.' % ann_path
            assert os.path.isfile(img_path), 'file %s not found.' % img_path
            img_ann_list.append((img_path, ann_path))
        print(img_ann_list)

return trainval_list, train_list, val_list, test_list


def prepare_filelist(devkit_dir, output_dir):
trainval_list = []
train_list = []
val_list = []
test_list = []

trainval, train, val, test = walk_dir(devkit_dir)

trainval_list.extend(trainval)
train_list.extend(train)
val_list.extend(val)
test_list.extend(test)
#print(trainval)
with open(os.path.join(output_dir, 'trainval.txt'), 'w') as ftrainval:
    for item in trainval_list:
        ftrainval.write(item[0] + ' ' + item[1] + '\n')

with open(os.path.join(output_dir, 'train.txt'), 'w') as ftrain:
    for item in train_list:
        ftrain.write(item[0] + ' ' + item[1] + '\n')

with open(os.path.join(output_dir, 'val.txt'), 'w') as fval:
    for item in val_list:
        fval.write(item[0] + ' ' + item[1] + '\n')

with open(os.path.join(output_dir, 'test.txt'), 'w') as ftest:
    for item in test_list:
        ftest.write(item[0] + ' ' + item[1] + '\n')
           

if name == ‘main’:

prepare_filelist(devkit_dir, output_dir)

4.此時建立好的資料集如下:

如何利用百度AI Studio做一個車牌定位系統百度AI StudioPaddlePaddle制作資料集訓練

5.将整個檔案拷貝至 ./PaddleDetection/dataset/voc 下,以上全部完成後,還需要修改兩個地方,ssd_mobilenet_v1_voc源碼中是以20類目标為準設計的,本項目的目标僅為1類。

1)找到 ./PaddleDetection/configs/ssd/ssd_mobilenet_v1_voc.yml檔案,修改第12行的num_classes,2代表1個标簽加一個背景。

2)找到 ./PaddleDetection/ppdet/data/source/voc.py檔案,修改167行的pascalvoc_label()函數,按照前面設定的label_list.txt檔案裡的标簽順序依次修改,并将多餘的内容删掉。

6.至此,整個資料集制作及配置完成。資料集制作完成後,上傳至AI Studio,準備開始訓練模型。

如何利用百度AI Studio做一個車牌定位系統百度AI StudioPaddlePaddle制作資料集訓練

标簽添加完記得按回車

訓練

  1. 資料集準備
1.解壓資料集
!unzip data/data25497/plate.zip

2.進入PaddleDetection目錄
%cd /home/aistudio/PaddleDetection
/home/aistudio/PaddleDetection
           
  1. 環境準備
1.安裝Python依賴庫
!pip install -r requirements.txt

2.配置python環境變量
%env PYTHONPATH=/home/aistudio/PaddleDetection
env: PYTHONPATH=/home/aistudio/PaddleDetection
3,測試環境
!export PYTHONPATH=`pwd`:$PYTHONPATH
!python ppdet/modeling/tests/test_architectures.py
           

出現 No module named ‘ppdet’ 是環境配置的問題,有兩種解決辦法:

1.設定環境變量
%env PYTHONPATH=/home/aistudio/PaddleDetection
2.找到報錯的檔案添加以下代碼
import sys
DIR = '/home/aistudio/PaddleDetection'
sys.path.append(DIR)
           

測試通過後,就可以進行訓練了。

  1. 開始訓練
%cd home/aistudio/PaddleDetection/
!python -u tools/train.py -c configs/ssd/ssd_mobilenet_v1_voc.yml --use_tb=True --eval
           

訓練完成後輸出的模型儲存在 ./PaddleDetection/output/ssd_mobilenet_v1_voc 檔案夾下,本次訓練總輪數預設為28000輪,每隔2000輪儲存一次模型,以輪次命名的均為階段性模型,model_final為訓練結束時儲存的模型,best_model是每次評估後的最佳mAP模型。

測試,檢視模型效果

%cd /home/aistudio/PaddleDetection/
!python tools/infer.py -c configs/ssd/ssd_mobilenet_v1_voc.yml --infer_img=/home/aistudio/1.jpg
           

繼續閱讀