作者:才能我浪費99
1. 簡介:
1.1. 什么是EasyDL專業版
EasyDL專業版是EasyDL在2019年10月下旬全新推出的針對AI初學者或者AI專業工程師的企業用戶及開發者推出的AI模型訓練與服務平臺,目前支持視覺及自然語言處理兩大技術方向,內置百度海量資料訓練的預訓練模型,可靈活腳本調參,只需少量資料可達到優模型效果,
適用人群:
專業AI工程師且追求靈活、深度調參的企業或個人開發者
支持定制模型型別,
1.2. 支持視覺及自然語言處理兩大技術方向:
視覺:支持影像分類及物體檢測兩類模型訓練,
任務型別: 預置演算法
影像分類: Resnet(50,101)、Se_Resnext(50,101)、Mobilenet Nasnet
物體檢測: FasterRCNN、YoloV3、mobilenetSSD
自然語言處理:支持文本分類及短文本匹配兩類模型訓練,內置百度百億級資料所訓練出的預訓練模型ENNIE.
ERNIE(艾尼)是百度自研持續學習語意理解框架,該框架可持續學習海量資料中的知識,基于該框架的ERNIE2.0預訓練模型,已累計學習10億多知識,中英文效果全面領先,適用于各類NLP應用場景,
任務型別 :預置網路
文本分類: BOW、CNN、GRU、TextCNN、LSTM、BiLSTM
短文本匹配:SimNet(BOW、CNN、GRU、LSTM)、FC
1.3. EasyDL專業版特點
預置百度百億級資料規模的預訓練模型,包括豐富的視覺模型及自然語言處理模型ERNIE,訓練效果更突出,
對比經典版,支持代碼級調整模型引數和模型結構,封裝底層演算法邏輯細節,代碼行數更少,更易有演算法基礎的開發者上手,
支持從資料管理,模型訓練到模型部署一站式AI服務,
如果說EasyDL經典版是倚天劍,PaddlePaddle是屠龍刀,那么EasyDL專業版就是刀劍合璧,
2. 評測案例
該應用為一個特種車輛識別的應用,主要識別郵車和消防車,未來可以擴展加入更多的車輛種類,對于特種車輛管理有很好的應用價值,
2.1. 整體說明
EasyDL專業版的作業流程如下圖所示:
EasyDL專業版的主界面如下圖所示:
2.2. 業務需求:
需要對各種特種車輛進行識別,在本評測中為郵車、消防車兩種,
2.3. 上傳并標注資料:
首先需要建立特種車輛資料集,在主界面上點擊“資料管理/標注”就可以進入資料管理界面,具體步驟如下:
1.設計標簽
在上傳之前確定想要識別哪幾種物體,并上傳含有這些物體的圖片,每個標簽對應想要在圖片中識別出的一種物體,在本例中只有2個標簽,就是郵車(標簽:youche)和消防車(標簽:xiaofang),
例如:
2.準備圖片
基于設計好的標簽準備圖片:
每種要識別的物體在所有圖片中出現的數量最好大于50
如果某些標簽的圖片具有相似性,需要增加更多圖片
一個模型的圖片總量限制4張~10萬張
圖片格式要求:
• 目前支持圖片型別為png、jpg、bmp、jpeg,圖片大小限制在4M以內
• 圖片長寬比在3:1以內,其中最長邊小于4096px,最短邊大于30px
圖片內容要求:
• 訓練圖片和實際場景要識別的圖片拍攝環境一致,舉例:如果實際要識別的圖片是攝像頭俯拍的,那訓練圖片就不能用網上下載的目標正面圖片,
• 每個標簽的圖片需要覆寫實際場景里面的可能性,如拍照角度、光線明暗的變化,訓練集覆寫的場景越多,模型的泛化能力越強,
本例中從網上找了30多張不同角度的特種車輛圖片,(因為是測驗版,所以圖片較少,實際應用的時候每種標簽的圖片不應少于50)
3. 上傳和標注圖片
先在【創建資料集】頁面創建資料集:
如果訓練資料需要多人分工標注,可以創建多個資料集,將訓練資料分批上傳到這些資料集后,再將資料集"共享"給自己的小伙伴,同步進行標注,
再進入【資料標注/上傳】:
1、選擇資料集
2、上傳已準備好的圖片
3、在標注區域內進行標注
首先在標注框上方找到工具列,點擊標注按鈕在圖片中拖影片框,圈出要識別的目標,
如下圖所示:
然后在右側的標簽欄中,增加新標簽,或選擇已有標簽
2.4. 創建專案和任務
在主界面點擊“全部訓練任務”即可進入專案界面:
點擊新建專案,填寫相關資訊資訊,即可創建專案,
在本次評測中我們使用物體檢測,
創建專案后在新建的專案內選擇創建任務,以建立一個新的任務:
按要求輸入資訊,資料集及驗證集選擇我們上一步建立的資料集youche和youchevalid,
網路方面,因為我們這次主要是對位置進行確認,對BoundingBox要求不高,所以先選用YOLO,
大家看腳本編輯框里面的內容可以發現就是采用PaddlePaddle實作模型功能的Python代碼,點擊腳本編輯框里面的立即編輯按鈕可以對生成的腳本進行編輯,方便進行客戶化的定制,
選擇保存就可以將任務保存,
2.5. 訓練模型
在任務界面中點擊提交訓練任務,就可以開始訓練模型,因為我們這次準備的資料不多,所以有一個提示,點擊繼續訓練就好:
運行開始后可以看到本任務的狀態為運行中:
可以點擊日志,查看運行情況:
訓練時間與資料量大小有關,1000張圖片可能需要幾個小時訓練,不過本評測案例因為只有不到40張圖,所以速度很快,運行成功有界面如圖:
2.6. 校驗模型效果
可通過模型評估報告或模型校驗了解模型效果:
選擇一張測驗圖:
感覺效果還可以,雖然BoundingBox有點偏差,不過主要是因為訓練集太小以及采用了追求速度的YOLO演算法,如果增加訓練集以及采用FastRCNN會有不小的提升,
還可以選擇“模型效果”查看模型資訊:
2.7. 模型部署
為了應用模型,需要對模型進行部署,點擊“部署”按鈕進入部署界面:
本次選擇公有云部署,錄入相關的資訊,發布模型生成在線API:
發布后的服務,可以在“我的服務”中進行查看,修改:
2.8. 介面賦權
在正式使用之前,還需要做的一項作業為介面賦權,需要登錄EasyDL控制臺中創建一個應用,獲得由一串數字組成的appid,然后就可以參考介面檔案正式使用了
也可以直接點擊服務界面的"立即使用"進入賦權界面:
3. 測驗不同演算法:
現在物體檢測支持 FasterRCNN、YoloV3、mobilenetSSD,三種演算法,我們在第2章使用的是YoloV3,在本章我們將對其他兩種演算法建立不同版本的服務,并互相進行對比,
3.1. 演算法簡介:
目標檢測可以理解為是物體識別和物體定位的綜合,不僅僅要識別出物體屬于哪個分類,更重要的是得到物體在圖片中的具體位置,因為具體演算法內容很長,在這里只能進行一個簡單的說明,
為了完成這兩個任務,目標檢測模型分為兩類,一類是two-stage,將物體識別和物體定位分為兩個步驟,分別完成,這一類的典型代表是R-CNN, fast R-CNN, faster-RCNN家族,他們識別錯誤率低,漏識別率也較低,但速度較慢,不能滿足實時檢測場景,為了解決這一問題,另一類方式出現了,稱為one-stage, 典型代表是Yolo, YoloV2, YoloV3等,他們識別速度很快,可以達到實時性要求,而且準確率也基本能達到faster R-CNN的水平,
Faster R-CNN準確率mAP較高,漏檢率recall較低,但速度較慢,而yolo則相反,速度快,但準確率和漏檢率不盡人意,SSD綜合了他們的優缺點,它的貢獻在于它利用了多層網路特征,而不僅僅是FC7,
3.2. V2版(Fast RCNN):
在任務界面選擇新建任務:
具體操作參考第2章的內容即可,區別在于網路選擇Faster_R-CNN-ResNet50-FPN,訓練后的模型效果如下所示:
可以發現在評測集上,FasterRCNN演算法的效果很好,讓我們驗證一下具體的效果,選擇與V1版一樣的圖片進行驗證,效果如下:
可以看到,效果的確比YOLOV3的效果要好一些,圈取的內容更加準確,
3.3. V3版(SSD):
具體操作參考第2章的內容即可,區別在于網路選擇SSD,訓練后的模型效果如下所示:
選擇與V1版一樣的圖片進行驗證,效果如下:
4. 應用評測及結論
4.1. 評測代碼
按照服務API的說明,針對V1版(YOLOV3)的服務,撰寫呼叫代碼(Python3),需要注意的是與其他影像識別服務不同的是定制化影像識別服務以json方式請求,
Body請求示例:
{
“image”: “”
}
具體代碼如下:
import urllib
import base64
import json
import time
import urllib3
#獲取token
def get_token():
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret
request = urllib.request.Request(host)
request.add_header('Content-Type', 'application/json; charset=UTF-8')
response = urllib.request.urlopen(request)
token_content = response.read()
#print (token_content)
if token_content:
token_info = json.loads(token_content)
token_key = token_info['access_token']
return token_key
#保存圖片
def save_base_image(img_str,filename):
img_data = https://www.cnblogs.com/AIBOOM/p/base64.b64decode(img_str)
with open(filename, 'wb') as f:
f.write(img_data)
#畫識別結果
def draw_result(originfilename,results,resultfilename,fontsize):
from PIL import Image, ImageDraw,ImageFont
image_origin = Image.open(originfilename)
draw =ImageDraw.Draw(image_origin)
setFont = ImageFont.truetype('C:/windows/fonts/simhei.ttf', fontsize)
for result in results:
location=result['location']
draw.rectangle((location['left'],location['top'],location['left']+location['width'],location['top']+location['height']),outline = "red")
draw.text((location['left'],location['top']), result['name']+', Score:'+str(round(result['score'],3)),"blue",font=setFont)
image_origin.save(resultfilename, "JPEG")
def specialcar(filename,resultfilename,fontsize):
url = "https://aip.baidubce.com/rpc/2.0/ai_custom_pro/v1/detection/specialcar"
# 二進制方式打開圖片檔案
f = open(filename, 'rb')
img = base64.b64encode(f.read())
access_token = get_token()
url=url+'?access_token='+access_token
begin = time.perf_counter()
#img引數進行一下str轉換
params={'image':''+str(img,'utf-8')+''}
#對引數params資料進行json處理
encoded_data = https://www.cnblogs.com/AIBOOM/p/json.dumps(params).encode('utf-8')
request=urllib3.PoolManager().request('POST',
url,
body=encoded_data,
headers={'Content-Type':'application/json'})
#對回傳的byte位元組進行處理,Python3輸出位串,而不是可讀的字串,需要進行轉換
content = str(request.data,'utf-8')
end = time.perf_counter()
print('處理時長:'+'%.2f'%(end-begin)+'秒')
if content:
#print(content)
data = https://www.cnblogs.com/AIBOOM/p/json.loads(content)
#print(data)
results=data['results']
print(results)
draw_result(filename,results,resultfilename,fontsize)
4.2 測驗結果:
首先是消防車及識別結果::
郵車及識別結果:
速度非常快,效果也很不錯,雖然BoundingBox有點偏差,不過主要是因為訓練集太小以及采用了追求速度的YOLO演算法,如果增加訓練集以及采用FasterRCNN會有不小的提升,
4.3. 評測結論
EasyDL專業版定會是深度學習開發者非常喜歡的一個功能,它將EasyDL圖形開發的易用性及編程的靈活性結合在一起,在提供了很多便利的同時,又將控制權交給了客戶,讓客戶可以更加靈活的使用深度學習技術,激發無限可能,感覺非常棒,后續我準備增加訓練集再試一下,看看能提高多少,然后再嘗試一下離線部署成Docker的效果,建議大家都試一下,
4.4. 評測后的優化建議:
希望百度后續能增加更多的模型,比如Mask RCNN等;
希望能支持不規則形狀的BoundingBox,
希望后續增加資料匯入匯出功能,
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
近期《百度大腦EasyDL深度實戰營》專業版課程從3月4日至25日,每周三/四 晚8點在線直播,感興趣的同學可以加入專業版QQ群:868826008進行學習討論,

轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/4054.html
標籤:其他
上一篇:一個軟體產品的幸福人生
下一篇:敏捷開發四大宣言
