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