MIT開放圖像標(biāo)注工具源代碼LabelMe是一款LabelMe將助力機(jī)器視覺的發(fā)展,計(jì)算機(jī)視覺需要大量的標(biāo)注圖像來執(zhí)行各類任務(wù),ImageNet的成功就在于其巨量的標(biāo)注圖像。近日,MIT的計(jì)算機(jī)科學(xué)和人工智能實(shí)驗(yàn)室(CSAIL)開放了圖像標(biāo)注工具LabelMe的源代碼,我們可以使用該工具創(chuàng)建定制化標(biāo)注任務(wù)或執(zhí)行圖像標(biāo)注。同時(shí),CSAIL開放此工具的源碼有助于進(jìn)一步開發(fā)出更高效的標(biāo)注方式和工具,有助于機(jī)器視覺的進(jìn)一步發(fā)展。
使用說明
項(xiàng)目開源地址:https://github.com/CSAILVision/LabelMeAnnotationTool
LabelMe地址:http://labelme.csail.mit.edu/Release3.0/
在該網(wǎng)址我們可以找到可在服務(wù)器上安裝的LabelMe圖像標(biāo)注工具源碼。LabelMe是一個(gè)用于在線圖像標(biāo)注的Javascript標(biāo)注工具。與傳統(tǒng)圖像標(biāo)注工具相比,其優(yōu)勢在于我們可以從任意來源獲取該工具,人們可以幫助我們標(biāo)注圖像,而無需在電腦中安裝或復(fù)制大型數(shù)據(jù)集。
快速操作指南
1.將LabelMe標(biāo)注工具代碼放在網(wǎng)頁服務(wù)器上(網(wǎng)頁服務(wù)器配置要求見下文)。
2.在命令行上運(yùn)行:
$ make
這將設(shè)置perl腳本需要的全局變量。注意:如果我們移動(dòng)代碼位置,那么我們必須重新運(yùn)行「make」來刷新全局變量。
1.在「Images」文件夾內(nèi)創(chuàng)建一個(gè)子文件夾,將我們的圖像放在該文件夾內(nèi)。如:「Images/example_folder/img1.jpg」。確保所有的圖像的擴(kuò)展名為「.jpg」,文件夾/文件名由字母和數(shù)字構(gòu)成(即不包含空格和其他字符)。
2.使用網(wǎng)頁瀏覽器前往以下URL地址:http://www.yourserver.edu/path/to/LabelMe/tool.html?collection=LabelMe&mode=f&folder=example_folder&image=img1.jpg
3.標(biāo)注圖像。點(diǎn)擊「showmeanotherimage」前往下一個(gè)圖像。
4.現(xiàn)在,你所作出的標(biāo)注將出現(xiàn)在「Annotations」文件夾內(nèi)。
網(wǎng)頁服務(wù)器要求
在網(wǎng)頁服務(wù)器上設(shè)置LabelMe工具,需要執(zhí)行以下操作:
運(yùn)行Apache服務(wù)器(Ubuntu配置說明:https://github.com/CSAILVision/LabelMeAnnotationTool/blob/master/UBUNTU.md,Windows配置說明:https://github.com/CSAILVision/LabelMeAnnotationTool/blob/master/WINDOWS.md)
在Apache內(nèi)啟用authconfig,使服務(wù)器側(cè)(包括SSI)能夠運(yùn)行。這使得SVG能夠發(fā)揮作用。這一步最常出現(xiàn)錯(cuò)誤,所以務(wù)必確保這一步正常運(yùn)行。
運(yùn)行perl/CGI腳本,這是第二大容易出現(xiàn)錯(cuò)誤的地方。
確保php5和libapache2-mod-php5庫已安裝。我們可以運(yùn)行以下代碼在Linux上運(yùn)行它們:
$ sudo apt-get install php5 libapache2-mod-php5
Ubuntu配置說明:https://github.com/CSAILVision/LabelMeAnnotationTool/blob/master/UBUNTU.md。
Windows配置說明:https://github.com/CSAILVision/LabelMeAnnotationTool/blob/master/WINDOWS.md。
如果無法繪制多邊形(polygons),那么檢查該網(wǎng)頁是否為「application/xhtml+xml」網(wǎng)頁(火狐瀏覽器可以通過Tools->PageInfo查看)。如果不是,確保SSI已啟用(查看上文「在Apache內(nèi)啟用authconfig」)。
確保我們的圖像擁有對(duì)網(wǎng)頁服務(wù)器的讀取權(quán)限,「Annotations」文件夾中的多個(gè)文件夾擁有寫入權(quán)限。此外,「annotationCache/TmpAnnotations」也需要寫入權(quán)限。
該標(biāo)注工具的特點(diǎn)
下面是我們能在整個(gè)標(biāo)注工具內(nèi)使用的統(tǒng)一資源定位符變量:
mode=im:僅展示圖像和畫布(不展示除圖像外的其他東西)。
mode=mt:MechanicalTurk模式。
mode=f:點(diǎn)擊「nextimage」按鈕,進(jìn)入該文件夾下的下一張圖像。
mode=i:點(diǎn)擊「nextimage」按鈕,在LabelMe默認(rèn)集合中隨機(jī)打開下一張圖像。
mode=c:進(jìn)入集合中的下一張圖像(集合通過dirlist設(shè)置)。
username=johndoe:為標(biāo)注會(huì)話設(shè)定用戶名。
collection=LabelMe:使用默認(rèn)LabelMe集合列表,設(shè)置一個(gè)新的集合列表請(qǐng)查看下文。
folder=MyLabelMeFolder:LabelMe中圖像儲(chǔ)存的文件夾。
image=image.jpg:需要標(biāo)注的LabelMe圖像
objects=car,person,building:當(dāng)彈窗詢問用戶對(duì)象的名稱,用戶可以從下拉式菜單中(例car、person、building)選擇一個(gè)對(duì)象。
scribble=false:關(guān)閉scribble模式。
objlist=visible:該命令控制右側(cè)的對(duì)象列表可見或不可見,不可見應(yīng)該設(shè)置為「objlist=hidden」。
actions=n:控制用戶可以執(zhí)行的操作,如果需要設(shè)置任何我們希望執(zhí)行的操作,需要使用下列的屬性組合。例如,我們可以設(shè)置「actions=rmd」來允許執(zhí)行重命名、修改控制點(diǎn)和刪除操作。默認(rèn)情況下,「actions=n」。下面展示了所有可執(zhí)行的操作:
n:創(chuàng)建和編輯新的多邊形(polygons)
r:重命名已存在的對(duì)象
m:在已存在的對(duì)象上修改控制點(diǎn)
d:刪除已存在的對(duì)象
a:允許所有的操作
v:僅查看多邊形,不允許編輯
viewobj=e:控制用戶可查看的對(duì)象,可以使用以下命令選項(xiàng)設(shè)定。默認(rèn)為「viewobj=e」,并且請(qǐng)注意刪除了的對(duì)象將會(huì)顯示為灰色,并且對(duì)象列表中的對(duì)象名將會(huì)采用斜體。
e:允許查看新的和之前標(biāo)注過的對(duì)象
n:僅允許查看新的對(duì)象
d:允許查看新的和已刪除的對(duì)象
a:允許查看所有的對(duì)象(新的、已存在的和已刪除的)
以下為MechanicalTurk模式下的設(shè)置:
mt_sandbox=true:使用MechanicalTurk沙盒模式。該模式可以在MechanicalTurk上進(jìn)行調(diào)試,我們可以設(shè)置該變量以確保每一部分都能運(yùn)行。
N=5:標(biāo)注者至少需要標(biāo)注5個(gè)多邊形。使用N=inf設(shè)置,標(biāo)注者可任意多地標(biāo)注樣本。
mt_intro=http://yourpage.com(http://yourpage.com/):我們可以使用該變量定制化地設(shè)定標(biāo)注者所能看到的指令。默認(rèn)情況下將為標(biāo)注者提供以下指令:http://labelme2.csail.mit.edu/Release3.0/annotationTools/html/mt_instructions.html
mt_instructions=Placeyourinstructionshere:我們可以定制化標(biāo)注者在標(biāo)注任務(wù)上方看到的一行指令。默認(rèn)情況下,指令為:請(qǐng)盡可能多的使用對(duì)象標(biāo)注該圖像。
我們可以使用以下命令行創(chuàng)建需要標(biāo)注的圖片集:
$ cd ./annotationTools/sh/ $ ./populate_dirlist.sh
這將在「./Images」文件夾內(nèi)創(chuàng)建一個(gè)所有圖像的列表,列表在「./annotationCache/DirLists/labelme.txt」文件內(nèi)。
之后,我們可以使用以下URL地址(http://www.yourserver.edu/path/to/LabelMe/tool.html?collection=labelme&mode=i)標(biāo)注集合內(nèi)的圖像。我們可以通過在命令行中運(yùn)行下列命令,創(chuàng)建一個(gè)包含特定文件夾的集合:
$ cd ./annotationTools/sh/ $ ./populate_dirlist.sh my_collection.txt example_folder
該列表出現(xiàn)在「./annotationCache/DirLists/my_collection.txt」內(nèi)部。我們可以使用以下URL地址標(biāo)注集合內(nèi)的圖像:http://www.yourserver.edu/path/to/LabelMe/tool.html?collection=my_collection&mode=i。
我們可以將集合內(nèi)的XML文件模板修改為「./annotationCache/XMLTemplates/your_collection.xml」,以改變集合內(nèi)標(biāo)注文件的布局。默認(rèn)模板是「./annotationCache/XMLTemplates/labelme.xml」。
該標(biāo)注工具行為的日志文件記錄在「./annotationCache/Logs/logfile.txt」中。確保該文件擁有寫入權(quán)限。
CODEAPI
以下是源代碼概覽。更多細(xì)節(jié)詳見https://cdn.rawgit.com/CSAILVision/LabelMeAnnotationTool/master/annotationTools/js/api/index.html。
tool.html:該標(biāo)注工具的入口點(diǎn)。主要功能是添加所有javascript代碼,放置畫布。
annotationTools/js/:包含實(shí)現(xiàn)該標(biāo)注工具功能所需的所有javascript代碼。我們還提供了codeAPI,利用codeAPI可獲取從源代碼注釋中自動(dòng)提取出來的Javascript源代碼。
annotationTools/perl/:包含用于與服務(wù)器后端交流的所有Perl腳本。
annotationTools/css/:包含所有CSS樣式定義。
annotationTools/html/:包含HTML輔助文件(如適用于MechanicalTurk平臺(tái)的說明文件)。