主頁 > 軟體工程 > 快速上手百度大腦EasyDL專業版·物體檢測模型(附代碼)

快速上手百度大腦EasyDL專業版·物體檢測模型(附代碼)

2020-09-11 02:40:44 軟體工程

作者:才能我浪費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

標籤:其他

上一篇:一個軟體產品的幸福人生

下一篇:敏捷開發四大宣言

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • Git本地庫既關聯GitHub又關聯Gitee

    創建代碼倉庫 使用gitee舉例(github和gitee差不多) 1.在gitee右上角點擊+,選擇新建倉庫 ? 2.選擇填寫倉庫資訊,然后進行創建 ? 3.服務端已經準備好了,本地開始作準備 (1)Git 全域設定 git config --global user.name "成鈺" git c ......

    uj5u.com 2020-09-10 05:04:14 more
  • CODING DevOps 代碼質量實戰系列第二課,相約周三

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。**《DevOps 代碼質量實戰(PHP 版)》**為 CODING DevOps 代碼質量實戰系列的第二課,同時也是本系列的 PHP ......

    uj5u.com 2020-09-10 05:07:43 more
  • 推薦Scrum書籍

    推薦Scrum書籍 直接上干貨,推薦書籍清單如下(推薦有順序的哦) Scrum指南 Scrum精髓 Scrum敏捷軟體開發 Scrum捷徑 硝煙中的Scrum和XP : 我們如何實施Scrum 敏捷軟體開發:Scrum實戰指南 Scrum要素 大規模Scrum:大規模敏捷組織的設計 用戶故事地圖 用 ......

    uj5u.com 2020-09-10 05:07:45 more
  • CODING DevOps 代碼質量實戰系列最后一課,周四發車

    隨著 ToB(企業服務)的興起和 ToC(消費互聯網)產品進入成熟期,線上故障帶來的損失越來越大,代碼質量越來越重要,而「質量內建」正是 DevOps 核心理念之一。 **《DevOps 代碼質量實戰(Java 版)》**為 CODING DevOps 代碼質量實戰系列的最后一課,同時也是本系列的 ......

    uj5u.com 2020-09-10 05:07:52 more
  • 敏捷軟體工程實踐書籍

    Scrum轉型想要做好,第一步先了解并真正落實Scrum,那么我推薦的Scrum書籍是要看懂并實踐的。第二步是團隊的工程實踐要做扎實。 下面推薦工程實踐書單: 重構:改善既有代碼的設計 決議極限編程 : 擁抱變化 代碼整潔代碼 程式員的職業素養 修改代碼的藝術 撰寫可讀代碼的藝術 測驗驅動開發 : ......

    uj5u.com 2020-09-10 05:07:55 more
  • Jenkins+svn+nginx實作windows環境自動部署vue前端專案

    前面文章介紹了Jenkins+svn+tomcat實作自動化部署,現在終于有空抽時間出來寫下Jenkins+svn+nginx實作自動部署vue前端專案。 jenkins的安裝和配置已經在前面文章進行介紹,下面介紹實作vue前端專案需要進行的哪些額外的步驟。 注意:在安裝jenkins和nginx的 ......

    uj5u.com 2020-09-10 05:08:49 more
  • CODING DevOps 微服務專案實戰系列第一課,明天等你

    CODING DevOps 微服務專案實戰系列第一課**《DevOps 微服務專案實戰:DevOps 初體驗》**將由 CODING DevOps 開發工程師 王寬老師 向大家介紹 DevOps 的基本理念,并探討為什么現代開發活動需要 DevOps,同時將以 eShopOnContainers 項 ......

    uj5u.com 2020-09-10 05:09:14 more
  • CODING DevOps 微服務專案實戰系列第二課來啦!

    近年來,工程專案的結構越來越復雜,需要接入合適的持續集成流水線形式,才能滿足更多變的需求,那么如何優雅地使用 CI 能力提升生產效率呢?CODING DevOps 微服務專案實戰系列第二課 《DevOps 微服務專案實戰:CI 進階用法》 將由 CODING DevOps 全堆疊工程師 何晨哲老師 向 ......

    uj5u.com 2020-09-10 05:09:33 more
  • CODING DevOps 微服務專案實戰系列最后一課,周四開講!

    隨著軟體工程越來越復雜化,如何在 Kubernetes 集群進行灰度發布成為了生產部署的”必修課“,而如何實作安全可控、自動化的灰度發布也成為了持續部署重點關注的問題。CODING DevOps 微服務專案實戰系列最后一課:**《DevOps 微服務專案實戰:基于 Nginx-ingress 的自動 ......

    uj5u.com 2020-09-10 05:10:00 more
  • CODING 儀表盤功能正式推出,實作作業資料可視化!

    CODING 儀表盤功能現已正式推出!該功能旨在用一張張統計卡片的形式,統計并展示使用 CODING 中所產生的資料。這意味著無需額外的設定,就可以收集歸納寶貴的作業資料并予之量化分析。這些海量的資料皆會以圖表或串列的方式躍然紙上,方便團隊成員隨時查看各專案的進度、狀態和指標,云端協作迎來真正意義上 ......

    uj5u.com 2020-09-10 05:11:01 more
最新发布
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:41:12 more
  • windows系統git使用ssh方式和gitee/github進行同步

    使用git來clone專案有兩種方式:HTTPS和SSH:
    HTTPS:不管是誰,拿到url隨便clone,但是在push的時候需要驗證用戶名和密碼;
    SSH:clone的專案你必須是擁有者或者管理員,而且需要在clone前添加SSH Key。SSH 在push的時候,是不需要輸入用戶名的,如果配置... ......

    uj5u.com 2023-04-19 08:35:34 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:05:44 more
  • 2023年農牧行業6大CRM系統、5大場景盤點

    在物聯網、大資料、云計算、人工智能、自動化技術等現代資訊技術蓬勃發展與逐步成熟的背景下,數字化正成為農牧行業供給側結構性變革與高質量發展的核心驅動因素。因此,改造和提升傳統農牧業、開拓創新現代智慧農牧業,加快推進農牧業的現代化、資訊化、數字化建設已成為農牧業發展的重要方向。 當下,企業數字化轉型已經 ......

    uj5u.com 2023-04-18 08:00:18 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:20:31 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:55 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:18:51 more
  • 談一談我對協同開發的一些認識

    如今各互聯網公司普通都使用敏捷開發,采用小步快跑的形式來進行專案開發。如果是小專案或者小需求,那一個開發可能就搞定了。但對于電商等復雜的系統,其功能多,結構復雜,一個人肯定是搞不定的,所以都是很多人來共同開發維護。以我曾經待過的商城團隊為例,光是后端開發就有七十多人。 為了更好地開發這類大型系統,往 ......

    uj5u.com 2023-04-17 08:18:00 more
  • 專案管理PRINCE2核心知識點整理

    PRINCE2,即 PRoject IN Controlled Environment(受控環境中的專案)是一種結構化的專案管理方法論,由英國政府內閣商務部(OGC)推出,是英國專案管理標準。
    PRINCE2 作為一種開放的方法論,是一套結構化的專案管理流程,描述了如何以一種邏輯性的、有組織的方法,... ......

    uj5u.com 2023-04-17 08:17:55 more
  • 計算機組成原理—存盤器

    計算機組成原理—硬體結構 二、存盤器 1.概述 存盤器是計算機系統中的記憶設備,用來存放程式和資料 1.1存盤器的層次結構 快取-主存層次主要解決CPU和主存速度不匹配的問題,速度接近快取 主存-輔存層次主要解決存盤系統的容量問題,容量接近與價位接近于主存 2.主存盤器 2.1概述 主存與CPU的聯 ......

    uj5u.com 2023-04-17 08:12:06 more