999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

面向計算機視覺的領域特定語言

2020-05-12 09:09:46鄭啟龍
小型微型計算機系統 2020年3期
關鍵詞:規則語言模型

姜 靖,鄭啟龍,2

1(中國科學技術大學 計算機科學與技術學院,合肥 230026)

2(中國科學技術大學 國家高性能計算中心,合肥 230026)

E-mail:jjdl@mail.ustc.edu.cn

1 引 言

計算機視覺(Computer Vision,CV)是指使用計算機及相關設備對生物視覺的一種模擬,最終目標是使計算機能夠像人類一樣通過視覺觀察進而理解世界,具有自主適應環境的能力[1].近些年來,計算機視覺得到了飛速發展,大量高效、實用的AI算子被設計了出來.傳統CV算子庫也得到了更新和完善.更多基于計算機視覺的軟件和系統已被廣泛使用.

領域特定語言(Domain Specific Language,DSL)是領域工程技術之一,它是針對某一特定領域具有受限制表達性的一種計算機程序設計語言[2].不同于普通的編程語言,領域特定語言抽象層次更高.針對特定領域,領域特定語言能更簡潔、清晰、系統地描述某部分的意圖,提高開發效率,使開發過程更加輕松.隨著需求和技術的不斷更新,領域特定語言的種類也越來越多.以下是一些比較常見的領域特定語言:用于描述Web頁面的HTML,用于構造軟件系統的Ant、RAKE、MAKE,用于表達語法的 BNF 范式,語法分析器生成語言 YACC、Bison、ANTLR,用于數據庫結構化查詢的SQL,用于描述樣式表的CSS,專用的排版系統LaTex等[3].近些年隨著人工智能的快速發展,一些面向機器學習、深度學習的領域特定語言也相繼面世,例如OptiML、DeepDSL等.

在工業生產和科研工作中,有時需使用大量計算機視覺算子,例如OpenCV算子[4,5]、Halcon算子[6,7]以及其它商業算子,同時也在越來越多的使用基于機器學習和深度學習的AI算子[8].這些算子間的組合調用較為困難,難以集成.例如在完成某商品包裝的缺陷檢測時,比較好的方式是先做A濾波再做亞像素的邊緣提取,A濾波算子只有OpenCV提供,而亞像素的邊緣提取只有某商業算子庫提供,所以需要跨算子庫調用兩種算子.雖然大部分算子庫均提供C++接口,用C++可以完成這些任務,但編碼過于繁瑣,而且一些計算機視覺開發人員并非計算機背景出身,因此他們更愿意使用一種更抽象、簡單的語言.在開發過程中,領域專家和編碼人員的溝通也存在很大的問題.故本文設計實現了一種DSL,其基本思想是為現有的常用計算機視覺算子庫和AI算子提供簡單、一致的語法,從而整合使用這些算子,以提供統一的開發平臺.這樣一種DSL減少了編碼時間和編碼量,能讓領域工作者將更多的時間和精力放在算法設計上.具有開發經驗的用戶也可以修改添加平臺內的元模型,從而實現對平臺的擴展.此處將面向計算機視覺的領域特定語言命名為CVDSL.

圖1 CVDSL整體設計圖

本文采用模型驅動開發的方式對CVDSL進行建模、設計與實現,主要進行了以下幾個方面的工作:1)構建CV領域元模型;2)定義CVDSL語法規則;3)定制CVDSL語法檢查器;4)定制將CVDSL轉換為C++的代碼自動生成器.CVDSL的整體設計方案如圖1所示.

2 CVDSL的設計與實現

本文首先確定了構建CV領域元模型的方法及工具,并通過分析領域中的共性和變性、所需要的原始數據類型、必須的原始數據規模等一系列領域相關因素,確定了元模型的組成內容,在此基礎上建立了CV領域元模型.

本文在CV領域元模型的映射和持久化的基礎上,定義了CVDSL語法規則體系.同時通過自定義語法規則庫,定制了模型語法檢查器.語法檢查的目的是為了防止開發人員在使用領域特定語言編碼時產生語法錯誤,從而影響生成代碼的正確性.

本文通過研究基于模板映射語言的、符合特定標準的應用模型代碼自動生成技術,設計了將CVDSL代碼轉換成對應的C++代碼的代碼自動生成器,實現領域特定語言向通用語言的自動轉換.

2.1 構建CV領域元模型

元模型的構建依據元對象機制(MOF,Meta Object Facility).MOF也被稱為MOF標準,其特點是具有易擴展性,高開放性及良好的互操作性.MOF方法的核心是一種具有易擴展性的元模型數據管理方法,其實現的方式是對元數據分層.它的特點是提供了一種四層建模結構,支持各種元數據的框架.在需要添加新元模型數據的時候,就可以方便地加入新的類型[9].

MOF的層次分別為M0、M1、M2和M3,且M3∈M2∈M1∈M0.

1)M3層,元元模型層.為領域元模型的提取或搭建,而定義的模型.一般這些模型包括屬性、數據類型、關聯關系等,是元模型搭建的基礎.CVDSL的元元模型包括獨立的算子(如讀取圖片的算子)、單個的語法規則(如賦值語句)等.

2)M2層,元模型層.由上一層模型搭建而來,它的元素包括各個元元模型之間的關系、元元模型的類型等.這一層輸出的結果是領域元模型,它是定制領域特定語言語義模型和語法規范的基礎.

3)M1層,模型層.這一層的模型由用戶使用上一層的模型搭建而來.所以,這一層的模型是元模型層的實例,即用戶使用CVDSL編寫出來的應用模型.語法檢查將基于這一層的輸出結果進行.

4)M0層,對象和數據.這一層的結果是現實世界中的事物對象,由上一層的結果通過自動生成的方式得到,比如文檔和代碼等.

元模型的構建,需要去符合以下兩個條件:

1)分析領域模型內部特征的相似性,對相似特征進行合并;

2)對于合并之后的領域模型內部特征,需要在對應的元模型上體現.

元模型的構建過程如圖2所示.

圖2 元模型的構建流程

本文采用EMF(Eclipse Modeling Framework)作為構建元模型的工具.用EMF搭建的元模型即Ecore模型.Ecore模型是一種簡化的UML模型.與UML類似,EMF也可以進行圖形化的模型搭建,框架自帶了Existing Elements、Classifier、Feature、Relation、Dynamic、Package六大類型,包括Class、Datatype、Attribute、SuperType、Reference等實用基本模型[10].對于開發人員來說可以很方便地通過拖拽的方式搭建CV領域的元模型.

另一方面,由于EMF的模型實例是由EMF框架提供的模型搭建的,如果當模型實例需要修改或者添加的時候,就可以輕易地通過 EMF提供的各種模型對模型實例進行修改或者額外添加一個新的模型實例.EMF中集成的 Class、Datatype、Attribute、SuperType、Reference 等模型即相當于CV領域中的元元模型,用 EMF 搭建出來的模型實例,就相當于CV領域中的元模型,而在設計好的開發平臺里用EMF搭建的模型實例再次搭建的模型,就相當于是CV領域的模型實例了.將CV領域的模型實例通過代碼自動生成最終將得到模型的目標代碼實現.這樣MOF的四層結構就很清晰了.

通過對CV領域的分析,確定CV領域元模型的兩個主要組成部分如下:

1)基礎語法部分.CV領域的實際應用模型中,是需要循環、分支、跳轉等基礎語法結構的,因此在元模型中,需要有常見的基礎語法建模.

2)算子庫部分.CV領域應用模型的核心是各種算子的組合調用.本文將所涉及的算子分為兩大類:ImageOperators和BasicOperators.其中ImageOperators中包含與圖像處理相關的算子,依據算子的功能劃分成File、Filter、Matching等23類.其中每一類又依據更具體的功能劃分成若干細分類,例如File中的算子被劃分成Images、XLD_file、Text、Misc、Region和Tuple六類.每一細分類中則包含具體的算子模型,例如Images中包含用于進行圖片讀取的算子ReadImage(string path,stringname,string color).BasicOperators中則包含字符串操作、位操作、元組操作、數學函數以及異常處理等相關的算子.

圖3 CV領域元模型部分結構圖

圖3為CV領域元模型部分結構圖,其中”a-> b”表示a包含b,”0..*”表示一個a包含0個或多個b,”0..1”表示一個a包含0個或1個b.整個元模型為樹形結構,DomainModel為樹的根節點.元模型的樹形結構是下文建立語法規則樹的基礎,也是代碼自動生成器中,關鍵字查詢匹配的基礎.

元模型中不同類型的元元模型的具體構建如表1所示.

2.2 CVDSL語法規則定義

CVDSL的語法規則定義分為以下兩步:

2.2.1 元模型的映射

在CV領域中,元模型本身會映射為領域特定語言中的語法框架,每個元元模型會映射為領域特定語言的每條基礎語法規則以及算子定義,元元模型的參數會映射成領域特定語言中各條語法規則定義的形參定義.

2.2.2 規則添加

為了領域特定語言語法的正確性與美觀,語法規范中除了元模型對應的代碼之外,往往還需要加入其它的代碼.比如一個分支語句的開始結束要有關鍵字給予明顯的提示;在代碼中是否要明確體現每一個模塊之間的關聯關系等.

表1 不同類型的元元模型示例

本文選擇Xtext框架作為CVDSL語法規則定義的工具,因為其支持Ecore元模型的導入.Xtext是一種基于Eclipse的開源框架,配套語言為Xtend,其主要用于DSL的設計與實現.

語法模型映射活動圖如圖4所示.

圖4 語法模型映射

Xtext需要提取元模型語法的關鍵字與結構,組合它們,產生抽象語法樹.在本文中,Xtext的XModelSet()方法會訪問EMF項目中的 Model文件夾,捕獲所有類名稱、屬性、相互之間的邏輯關系等[11].

作為DSL來說,本身即是一種不完備的語言,故在定制語法模型的時候一方面不能讓基于語法模型生成的代碼,在進行語法檢查時遇到特征屬性缺失等問題.另一方面,要使領域開發人員能夠簡便地捕捉到DSL代碼中的相關信息,從而方便定制代碼生成的模板.

CVDSL部分語法規則的Xtend語言形式化描述如下:

DomainModel:(elements+=AbstractElement)*;

AbstractElement:BasicGrammar | Operators;

BasicGrammar:ControlFlow | Assignment |

Import |Arithmetic |Comparison |VariableDeclaration;

Operators:ImageOperatos | BasicOperatos;

ImageOperatos:File |_1D_Measurling | XLD | _3D_Matching |_3D_Reconstruction | Classification | Calibration | Filter | Indentification | Graphics | Image | Inspection | Matirx | Matching | Object | OCR | Morphology | Regions | Segmentation | System | Transformations | Tools | _Tuple;

BasicOperatos:BitOp | StringOp | TupleOp | BooleanOp | TrigonometricFunctions | ExponentialFunctions | NumericalFunctions | ExceptionHandling;

File:Images | XLD_file | Text | Misc | Region | TupleFile;

Images:ReadImage | WriteImage | ListImageFiles | ParseFilename;

ReadImage:′ReadImage′′(′ path=CharacterType‘,’ name=CharacterType(‘,’color=CharcterType)?′)′;

由此可知CVDSL的語法規則框架是繼承于元模型的樹形結構的.

表2為算子部分和基礎語法部分的語法規則定義的Xtend語言形式化描述示例.

表2 算子和基礎語法定義示例

因為Xtend的內置數據類型有限,而在CV領域會涉及到豐富的數據類型,如RealType、Tuple、

Matrix等,因此需要在元模型映射的基礎上擴展新

的數據類型.具體示例如下:

1)擴展數據類型語法定義示例:

terminalDOUBLE:((′0′..′9′)*(′.′)(′0′..′9′)*);

terminalBOOL:′true′ | ′false′;

terminalTUPLE:′[′(STRING | ID | INT | DOUBLE)*′]′;

terminalMATRIX_TYPE:′[′(TUPLE)*′]′;

2)復合數據類型語法定義示例:

CharacterType:STRING | ID;

RealType:INT | DOUBLE;

其中STRING、ID、INT為Xtend語言內置數據類型,DOUBLE為擴展數據類型.CharterType和RealType為復合數據類型.

2.3 定制語法檢查器

CV領域應用模型檢查是依據語法規則庫,檢查在之前步驟中建立的CV領域應用模型,判斷這些已經建立的應用模型的語法是否正確[12].

語法檢查應以領域特定語言的語法模型為基礎,定制模型語法檢查器[13].模型語法檢查器通過用戶對模型的選擇,找到其對應的對象根節點,然后找到應用模型對應的CV領域元模型.此時找到領域特定語言相應元模型對應的語法規則,驗證用戶搭建的應用模型的正確性,與通用語言相同,這種驗證應該是一種即時性的驗證.同時,在語法檢查器中還應該包括警告驗證.警告,不一定會導致程序錯誤,但是可能會提高出錯的風險,或者影響用戶閱讀體驗.比如模塊名稱是由不恰當的字符組成,或者將不同類型的數據進行比較等.無論是錯誤還是提醒,語法檢查器都應該進行快速定位,并將語法檢查的結果直觀體現在用戶界面上.語法檢查的流程如圖5所示.

圖5 語法檢查流程

語法檢查器的開發同樣基于Xtext.Xtext驗證機制中提供兩個文件:CVDSLValidator.Xtend和CVDSLQuickfixProvider.Xtend.這兩個文件,前者主要是添加檢查規則,對出現錯誤的代碼進行標注說明,后者主要是針對不同的代碼錯誤提供快速修正的方法.具體實現過程如下:

1)由編輯器中的監視器通知CVDSLValidator.Xtend,用戶修改了模型.

2)由typeof()接口,確定模型的類型.

3)再次調用typeof()接口確定檢查的屬性,或者調用方法的名稱.

4)判斷相關屬性類型,屬性值等數據是否符合規范標準.

5)如果符合標準,該次檢查結束.如果不符合標準,定位不符合標準的代碼位置,執行6).

6)根據具體標準的不同,使用error()或者warning()接口.這兩個接口都需要提供代碼的定位以便標注,同時為了用戶修改的方便,還需要提供相應的提示文字.如果該類錯誤可控性較高,則將該錯誤用一串字符串作為特征,調用CVDSLQuickfixProvider.Xtend相應快速修復方法.

7)CVDSLQuickfixProvider.Xtend中的相應方法會得到錯誤的關鍵信息,在提示框里對用戶提供快速修復按鈕.

8)用戶點擊快速修復后,模型會發生相應變化,故將再次激活步驟1).

算法1描述了在CVDSLValidator.Xtend文件中檢查算子首字母是否大寫的過程.

算法1.檢查算子首字母是否大寫:

輸入:算子類型參數

輸出:在編程界面上提示算子首字母是否大寫

1.通過代碼生成器中的過濾器獲取每一個operator,將其作為參數傳入2.中函數

2.defcheckOpetationNameStartsWithCapital:

ifoperator.name.charAt(0).lowerCase==true

warning("Operator′s name should start with a capital",CVDSLPackage.eINSTANCE.operation_Name,INVALID_NAME,operator.name);

算法2描述了在CVDSLQuickfixProvider.Xtend文件中快速修正首字母為大寫的過程.

算法2.快速修正算子首字母為大寫:

輸入:Issue類對象,IssueResolutionAcceptor對象

輸出:在編程界面上呈現出將算子首字母修正為大寫的提示,雙擊即可修正

1.將輸入中的系統類的對象傳入2.中函數

2.defvoidcapitalizeOperationNameFirstLetterWithModel

acceptor.accept( issue,"Capitalize first letter","Capitalize first letter of ′" + issue.data.get( 0)+ "′","upcase.gif",[element,context|(element as Operation).

name=issue.data.get(0).toFirstUpper])

表3 語法檢查器運行示例

表3為檢查算子首字母是否大寫及快速修正的運行示例.

2.4 定制代碼自動生成器

領域特定語言雖然在領域相關環境或者人員中具有其獨特的優勢和作用,但是基于通用性、安全性等的考量,領域特定語言的代碼必須能夠轉換成通用語言代碼.

由于計算機視覺領域軟件有規模龐大、功能復雜、迭代更新快等因素,再加上人工代碼的書寫習慣差異及良莠不齊的不確定性,希望人工通過領域語言代碼,編寫通用代碼是不現實的.所以選擇代碼自動生成是必然結果[14].

代碼生成技術可以提高代碼質量,增強代碼的一致性,也可以突出設計決策或者便于系統的遷移實現.應用模型代碼生成技術使設計師擁有更多的設計時間,使得程序員將更多的時間花在系統架構設計上,從而可以提高系統健壯性、可擴展性、以及可維護性.

所以,CV領域軟件的非領域代碼生成器,應當建立在已經研究的領域語言規則標準及非領域語言規則標準之上,然后將開發過程中各個階段的模型集成,從而形成統一且符合規則標準的持久化模型文件,然后將這些模型文件通過代碼生成器生成出符合已有標準的通用代碼.

代碼自動生成器的開發同樣基于Xtext框架,因為其可滿足代碼自動生成器對于良好擴展性的需求.代碼自動生成器主要由元模型分析數據、應用模型分析數據、生成通用代碼的模板以及環境配置工具組成,其設計的核心思想是制定CVDSL與C++間的映射關系,確定每一條合法的CVDSL語句將對應的C++代碼塊.當代碼生成器獲取到CVDSL的應用模型后,會依據上文中建立的語法樹,檢索每一行代碼,確定它所對應的元元模型類型和語法規則,然后依據該語句與C++代碼塊的映射規則,進行代碼生成.圖6為代碼自動生成活動圖.

圖6 代碼自動生成活動圖

算法3描述了CVDSL代碼自動轉換為C++代碼的過程.

算法3.CVDSL代碼自動轉換C++代碼模板

輸入:Resource類對象,IFileSystemAccess類對象,IGeneratorContext類對象

輸出:生成的C++代碼文件

1.對classCVDSLGeneratoreXtendsAbstractGenerator中的函數doGenerate進行重寫

2.在函數overridevoiddoGenerate(Resource resource,IFileSystemAccess2 fsa,IGeneratorContext context)中,對CVDSL中的每一個元元模型進行遍歷,然后調用相應的映射模板進行代碼生成

for(e:resource.allContents.toIterable.filter(AbstractElement)):

/*調用自定義的映射模板中的函數,獲取每一行CVDSL代碼所對應的C++代碼塊,并進行存儲*/

fsa.generateFile(/*這里包含兩個參數:①所生成的文件名②上文中已獲取的所需生成文件的內容*/)

算法4描述了ReadImage算子的代碼生成過程.

算法4.ReadImage算子代碼生成模板

輸入:CVDSL中的ReadImage類型變量

輸出:ReadImage對應的C++代碼

1.將ReadImage變量作為參數傳遞給compile函數,在complie函數中,解析ReadImage的參數,并用content記錄對應的C++代碼

varcontent=′′′′′′

content+=′′′Mat ′′′

content+=readImage.name.compile

content+=′′′=imread(′′′

content+=readImage.path.compile

content+=′′′,′′′

if(readImage.color==null)

content+="IMREAD_COLOR"

else

content+=readImage.color.compile

content+=′′′)′′′

2.返回content

returncontent

3 實驗及評估

3.1 實 驗

3.1.1 實驗過程

本實驗邀請了四位領域工作者,并提前對他們進行了兩種語言的培訓.而后將他們分為兩組,分別使用CVDSL和C++來開發貓眼識別、人臉識別和人臉定位三個CV應用模型,并對開發時間以及代碼量進行了對比.

3.1.2 實驗結果及評估

實驗結果如表4、表5所示.從表4可知,采用CVDSL的開發效率約為采用C++的3倍.從表5可知,采用CVDSL開發的代碼量約為采用C++的0.5倍.由此可得到初步結論:在CV領域,使用CVDSL編程比C++編程效率更高,所編寫的代碼量更少,更加面向領域工作者,凸顯出了CVDSL的易用性和高效性.

表4 CVDSL與C++開發時間對比

表5 CVDSL與C++代碼量對比

表6為貓眼識別應用模型示例,對比CVDSL源碼和所生成的C++代碼,可知CVDSL具有以下優點:

1)語法規則嚴格統一;從表6可知,使用C++調用不同底層算子庫中的算子時,在語法上是存在差異的.CVDSL在語法規則定義上,統一了所有算子的語法風格,通過代碼生成器中制定的映射規則將這些差異透明化,從而可以極大降低領域工作者的編碼難度.

2)相關頭文件及代碼自動補全;在表6中,生成的C++代碼中編號為0的行,是依據函數體中使用的相關算子自動補全的,既減少了領域工作者的編碼量,又降低了bug的出現率.

3)算子合并;在構建CV應用模型時,很多時候某些算子間有著嚴格的調用次序,那么在構建元模型和定制語法規則時,可將這些算子進行合并.例如本例中CVDSL代碼中編號6的代碼行,在通過代碼生成后得到了對應C++代碼中編號為6的兩行代碼.通過算子合并的方式可以極大降低領域工作者的編碼難度和編碼量.

4)保證算子性能較優;通過前期的充分調研,以及與多位CV領域專家、工程師的充分溝通,本文對實現不同功能的算子的性能進行了評估.例如Halcon中與域處理相關的算子的性能要優于其他算子庫中的相應算子,因此在進行代碼生成時,以Region為前綴的算子,在生成的C++代碼中,默認調用Halcon中的相應算子.這樣領域工作者在進行編碼時,僅需考慮算子的功能,而無需考慮算子的性能優劣,這在很大程度上提高了其編碼效率.

5)隱藏不同算子庫中變量的聲明;不同算子庫中的某些變量,在C++代碼中有著不同的變量類型.例如OpenCV用Mat來表示圖像類型,而Halcon中用Himage來表示圖像類型.CVDSL通過在代碼自動生成器中判別不同算子所屬的算子庫以及算子的參數類型,生成相應變量聲明的C++代碼.同時CVDSL對不同類型變量的轉換進行了封裝.這一過程對于領域工作者是透明的,從而降低了其編碼難度.

3.2 基于FQAD對CVDSL的評估

FQAD是基于ISO/IEC 25010:2011標準的用于DSL定性評估的框架[15].該框架定義了一套評估DSL質量的特性,包括:功能適用性,可用性,可靠性,可擴展性,可集成性,可維護性,生產力,兼容性,表達性和可重用性.本文基于以上特性,對CVDSL作出了如下評估:

1)功能適用性是指DSL完全開發的程度,即判斷DSL是否包括所有必要的功能且不包括域中不存在的功能.CVDSL擁有完整的面向于域的語法定義,且其底層有多個計算機視覺算子庫的支持,并支持算子庫的擴展,因此可以滿足大部分計算機視覺應用模型開發的需求.且其語法規則不具有普適性,僅面向計算機視覺領域.綜上可知CVDSL擁有良好的功能適用性.

2)可用性是指用戶可以使用DSL來實現指定目標的難易程度.為分析CVDSL的可用性,本文邀請多位CV領域專家和CV領域工程師對CVDSL進行了評估,得出的結論是:CVDSL簡單且具有表現力,相對容易學習.與通用編程語言C++相比,CVDSL降低了構建CV應用模型的復雜性,并提高了可理解性和可維護性.綜上可知CVDSL的可用性極高,未來可通過完善用戶使用手冊來進一步提高CVDSL的可用性.

3)可靠性是指生成可靠程序語言的屬性.CVDSL語法規則的定義較為完善,并且本文針對CVDSL的語法規則及CV領域C++代碼風格定制了語法檢查器,大幅度減少了在編碼過程中可能產生的語法錯誤.同時本文設計實現了基于模板映射的的代碼自動生成器,使得每一行CVDSL代碼能夠轉換成對應的C++代碼塊,確保了C++代碼風格的統一.以上都是CVDSL可靠性的保證,未來可通過在CVDSL級定制調試器來進一步提高CVDSL的可靠性.

4)可擴展性是指DSL添加新功能的難易程度.本文是采用模型驅動開發的方式對CVDSL進行建模、設計與實現的,因此可方便的通過擴展元模型來實現對CVDSL功能的擴展,可見CVDSL擁有很好的擴展性.

表6 貓眼識別應用模型示例

5)可集成性是指DSL與其他語言和建模工具集成的難易程度.CVDSL的開發是基于EMF工具和Xtext框架的,兩者均屬于Eclipse框架中的插件.Eclipse平臺允許開發人員通過插件擴展Eclipse IDE等Eclipse應用程序以及其他功能,故未來可將CVDSL語言框架開發為Eclipse框架中的插件,然后使用Eclipse IDE和整個OSGI組件模型來完成CVDSL和其他語言的集成.

6)可維護性是指DSL易于維護的程度.可維護性與可擴展性相關,上文中已說明CVDSL具有很好的可擴展性,并且CVDSL的構建是基于元模型的,故易于修改和完善.由此可知CVDSL是具有良好的可維護性的.

7)生產力是指DSL提高編程效率的程度.CVDSL僅面向計算機視覺領域,因此與通用編程語言相比,在領域概念的描述上有著明顯的優勢,便于領域工作者的建模.從上文的實驗中可知使用CVDSL開發CV應用模型的效率約為C++的3倍,大大提高了領域工作者的開發效率.

8)兼容性是指DSL與域和開發過程的兼容程度.CVDSL是基于CV領域元模型的,因此與CV領域有很好的兼容性.同時CV領域元模型的構建與CV應用模型的開發過程密切相關,這使得CVDSL與開發過程也有著良好的兼容性.

9)可重用性是指DSL的語言結構在其他語言中的使用程度.CVDSL本身的語言結構是唯一的,但為CVDSL所定制的基于模板映射的代碼自動生成器是可重用的,通過修改映射規則,CVDSL可以轉換成任意一種通用編程語言.同時CVDSL底層的算子庫也是可重用的,凡有相應算子庫接口的語言均可調用.

10)表達性是指問題解決策略映射為程序的難易程度.CVDSL的語法規則是針對CV領域而定制的,因此其對于任何CV應用模型都有很好的表達性.與C++相比,CVDSL封裝了很多與問題解決策略無關的編程細節,如類型轉換等.通過使用CVDSL,領域工作者可以輕松的將問題解決策略映射為程序.在CV領域,CVDSL有著強大的表達性.

3.3 CVDSL與Halide的性能比較

Halide是面向圖像處理的著名領域特定語言,比起傳統編程語言,用Halide編寫的程序不僅更容易閱讀、編寫和修改,而且由于Halide能夠自動優化代碼,因此程序運行速度也顯著提高[16].Halide語言將算法描述、算法中數據存儲與計算執行等調度方便的內容解耦合,從而算法的描述和性能的優化可以分開進行,可在不改動算法的情況下對算法進行調優[17].

下面基于FQAD中定義的特性,對CVDSL與Halide進行性能比較:

1)功能適用性:Halide和CVDSL均只面向計算機視覺領域,在語法上均不具有普適性,且均能滿足大部分計算機視覺應用模型的開發,因此都具有很好的功能適用性.但在對代碼性能要求更高的情況下,Halide要優于CVDSL.

2)可用性:Halide不是獨立的編程語言,而是嵌入在C++中的.在語法上,相比較于CVDSL,要復雜一些,CVDSL更易于學習和使用.可用性上CVDSL要優于Halide.

3)可靠性:Halide是非常成熟的商用編程語言,有獨立的編譯器,能在多種操作系統上運行,且其能自動優化代碼.而CVDSL目前沒有獨立的編譯器,僅提供從CVDSL到C++的代碼自動生成器.因此在可靠性上比Halide稍差一些.

4)可擴展性:Halide是成熟的商用編程語言,普通用戶很難在功能上進行擴展.而具有開發經驗的用戶可通過擴展元模型,方便的對CVDSL進行功能擴展.Halide提供C++API,甚至可以將Halide中功能強大的算子擴展到CVDSL中,因此CVDSL有著更優的可擴展性.

5)可集成性:CVDSL是一門獨立的語言,因此很難做到和其他語言集成,但后期可將CVDSL開發成Eclipse的插件,因此可將其與其它建模工具進行集成.Halide在某種意義上可看做一個函數庫,因此它可與其它提供接口的通用編程語言進行集成.由此可見在不同層面上,CVDSL和Halide都有較好的集成性.

6)可維護性:CVDSL的構建是基于元模型的,具有良好的維護性.Halide作為一門著名的編程語言,同樣具有很好的維護性.

7)生產力:CVDSL語法更簡潔,底層算子庫更龐大.但Halide對于代碼的優化更好,因此兩者都可以大大提高領域工作者的開發效率.對于不同的開發需求,兩者所能帶來的效率提升則不同.

8)兼容性:CVDSL和Halide都是僅面向計算機視覺的編程語言,因此兩者與域及開發過程必然具有很好的兼容性.

9)可重用性:CVDSL的可重用性體現在基于模板映射的代碼生成器.而Halide有著獨立的編譯器,其語言結構很難在其他語言中重用,因此CVDSL相比較于Halide,有著更好的可重用性.

10)表達性:CVDSL與Halide對于任何CV領域的問題,都可以方便的將解決策略映射為程序,因此兩者都具有很好的表達性.

綜上可知,CVDSL與Halide各有優劣,選擇哪門開發語言完全依賴于開發需求.

4 總 結

本文基于CV領域元模型,采用模型驅動開發的方式,設計實現了一種面向計算機視覺的領域特定語言——CVDSL.本文首先分析了CV領域元模型的結構及構建方法,然后在領域元模型的基礎上,定義了CVDSL的語法規則,并依據語法規則定制了語法檢查器,以減少在使用CVDSL編碼過程中出現的語法錯誤.最后本文基于模板映射規則,設計實現了將CVDSL轉換為C++的代碼自動生成器,保證了其通用性和安全性.

本文通過實驗和FQAD框架,對CVDSL做了詳細評估,分析了CVDSL所具有的優勢和特性,并依據FQAD對CVDSL和Halide進行了比較.在未來的工作中,可通過定制CVDSL級調試器來提升其可靠性,并可通過將CVDSL語言框架封裝成Eclipse插件的方式來提升其可集成性.

猜你喜歡
規則語言模型
一半模型
撐竿跳規則的制定
數獨的規則和演變
重要模型『一線三等角』
重尾非線性自回歸模型自加權M-估計的漸近分布
語言是刀
文苑(2020年4期)2020-05-30 12:35:30
讓語言描寫搖曳多姿
讓規則不規則
Coco薇(2017年11期)2018-01-03 20:59:57
TPP反腐敗規則對我國的啟示
累積動態分析下的同聲傳譯語言壓縮
主站蜘蛛池模板: 欧美一级一级做性视频| 天天摸天天操免费播放小视频| 国产在线精品人成导航| 永久免费av网站可以直接看的 | 91av成人日本不卡三区| 国产精品林美惠子在线观看| 精品午夜国产福利观看| 国内熟女少妇一线天| 91丝袜乱伦| 中文字幕亚洲电影| 少妇被粗大的猛烈进出免费视频| 日本久久久久久免费网络| 国产亚洲精品资源在线26u| 日本www色视频| 国产精品成人AⅤ在线一二三四| 日韩精品久久无码中文字幕色欲| 日本免费一级视频| 91美女在线| 欧美a级完整在线观看| 成人免费网站久久久| 一区二区日韩国产精久久| 日韩欧美国产区| 伊人久久大香线蕉aⅴ色| 亚洲中文字幕无码爆乳| 直接黄91麻豆网站| 国产黄色免费看| 三级欧美在线| 亚洲欧美另类视频| 日本精品影院| 精品国产美女福到在线不卡f| 国产主播在线一区| 亚洲精选无码久久久| 91毛片网| 国产精品香蕉在线观看不卡| 国产后式a一视频| 久久精品视频一| 91无码人妻精品一区| 青青操视频在线| 亚洲一区二区日韩欧美gif| 人妻中文久热无码丝袜| 免费看一级毛片波多结衣| 国产肉感大码AV无码| 久久性妇女精品免费| 国产欧美中文字幕| 91色爱欧美精品www| 日韩精品中文字幕一区三区| 亚洲国产综合精品一区| 免费国产无遮挡又黄又爽| 广东一级毛片| 黄色网页在线播放| 黄色片中文字幕| 人妻丰满熟妇av五码区| 亚洲最大在线观看| 亚洲欧美另类久久久精品播放的| 国产日韩欧美黄色片免费观看| 国产精品欧美日本韩免费一区二区三区不卡| 丝袜高跟美脚国产1区| 国产成人做受免费视频| 高清国产在线| 69视频国产| 国产福利一区在线| a亚洲天堂| 亚洲国产天堂在线观看| 国产精品久久自在自线观看| 国产欧美精品一区二区 | 亚洲全网成人资源在线观看| 91麻豆国产视频| 性欧美久久| 久久精品视频亚洲| 日本尹人综合香蕉在线观看| 免费观看成人久久网免费观看| 性色在线视频精品| 国产欧美视频在线| 国产成人一二三| 色丁丁毛片在线观看| 91区国产福利在线观看午夜| 99精品伊人久久久大香线蕉| 日本黄网在线观看| 1024你懂的国产精品| 中文字幕亚洲综久久2021| 在线观看免费黄色网址| 久久无码av三级|