對于監督學習演算法而言,資料決定了任務的上限,而演算法只是在不斷逼近這個上限,世界上最遙遠的距離就是我們用同一個模型,但是卻有不同的任務,但是資料標注是個耗時耗力的作業,下面介紹一個影像標注工具LabelImg,
LabelImg是一個圖形影像標注工具,它是用Python撰寫的,并使用Qt作為其圖形界面,注釋以PASCAL VOC格式(ImageNet使用的格式)保存為XML檔案,此外,它還支持YOLO和CreateML格式,
1.準備環境,安裝依賴:
在ubuntu系統上,安裝依賴只需要敲入幾個簡單的命令即可
sudo apt-get install pyqt5-dev-tools

2.獲取代碼:
git clone https://github.com/tzutalin/labelImg.git

3.安裝python依賴包:
sudo pip3 install -r requirements/requirements-linux-python3.txt
czl@czl-VirtualBox:~/biaoqian/labelImg$ sudo pip3 install -r requirements/requirements-linux-python3.txt
[sudo] password for czl:
^Csudo: 1 incorrect password attempt
czl@czl-VirtualBox:~/biaoqian/labelImg$ sudo pip3 install -r requirements/requirements-linux-python3.txt
[sudo] password for czl:
WARNING: The directory '/home/czl/.cache/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you should use sudo's -H flag.
WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/lib/python3.6/dist-packages
sysconfig: /usr/lib/python3.6/site-packages
WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/lib/python3.6/dist-packages
sysconfig: /usr/lib/python3.6/site-packages
WARNING: Value for scheme.headers does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/include/python3.6/UNKNOWN
sysconfig: /usr/include/python3.6m
WARNING: Value for scheme.scripts does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/bin
sysconfig: /usr/bin
WARNING: Value for scheme.data does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local
sysconfig: /usr
WARNING: Additional context:
user = False
home = None
root = None
prefix = None
Collecting pyqt5==5.10.1
Downloading PyQt5-5.10.1-5.10.1-cp35.cp36.cp37.cp38-abi3-manylinux1_x86_64.whl (107.8 MB)
|████████████████████████████████| 107.8 MB 39.5 MB/s
Collecting lxml==4.6.3
Downloading lxml-4.6.3-cp36-cp36m-manylinux2014_x86_64.whl (6.3 MB)
|████████████████████████████████| 6.3 MB 29.2 MB/s
Collecting sip<4.20,>=4.19.4
Downloading sip-4.19.8-cp36-cp36m-manylinux1_x86_64.whl (66 kB)
|████████████████████████████████| 66 kB 44.6 MB/s
Installing collected packages: sip, pyqt5, lxml
WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/lib/python3.6/dist-packages
sysconfig: /usr/lib/python3.6/site-packages
WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/lib/python3.6/dist-packages
sysconfig: /usr/lib/python3.6/site-packages
WARNING: Value for scheme.headers does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/include/python3.6/sip
sysconfig: /usr/include/python3.6m/sip
WARNING: Value for scheme.scripts does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/bin
sysconfig: /usr/bin
WARNING: Value for scheme.data does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local
sysconfig: /usr
WARNING: Additional context:
user = False
home = None
root = None
prefix = None
WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/lib/python3.6/dist-packages
sysconfig: /usr/lib/python3.6/site-packages
WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/lib/python3.6/dist-packages
sysconfig: /usr/lib/python3.6/site-packages
WARNING: Value for scheme.headers does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/include/python3.6/pyqt5
sysconfig: /usr/include/python3.6m/pyqt5
WARNING: Value for scheme.scripts does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/bin
sysconfig: /usr/bin
WARNING: Value for scheme.data does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local
sysconfig: /usr
WARNING: Additional context:
user = False
home = None
root = None
prefix = None
WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/lib/python3.6/dist-packages
sysconfig: /usr/lib/python3.6/site-packages
WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/lib/python3.6/dist-packages
sysconfig: /usr/lib/python3.6/site-packages
WARNING: Value for scheme.headers does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/include/python3.6/lxml
sysconfig: /usr/include/python3.6m/lxml
WARNING: Value for scheme.scripts does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/bin
sysconfig: /usr/bin
WARNING: Value for scheme.data does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local
sysconfig: /usr
WARNING: Additional context:
user = False
home = None
root = None
prefix = None
WARNING: Value for scheme.platlib does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/lib/python3.6/dist-packages
sysconfig: /usr/lib/python3.6/site-packages
WARNING: Value for scheme.purelib does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/lib/python3.6/dist-packages
sysconfig: /usr/lib/python3.6/site-packages
WARNING: Value for scheme.headers does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/include/python3.6/UNKNOWN
sysconfig: /usr/include/python3.6m
WARNING: Value for scheme.scripts does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local/bin
sysconfig: /usr/bin
WARNING: Value for scheme.data does not match. Please report this to <https://github.com/pypa/pip/issues/9617>
distutils: /usr/local
sysconfig: /usr
WARNING: Additional context:
user = False
home = None
root = None
prefix = None
Successfully installed lxml-4.6.3 pyqt5-5.10.1 sip-4.19.8
WARNING: Running pip as root will break packages and permissions. You should install packages reliably by using venv: https://pip.pypa.io/warnings/venv
WARNING: You are using pip version 21.1; however, version 21.2.4 is available.
You should consider upgrading via the '/usr/bin/python3 -m pip install --upgrade pip' command.
czl@czl-VirtualBox:~/biaoqian/labelImg$
4. 編譯:
make qt5py3

5.運行:
python3 labelImg.py

6.給影像打標簽
打標簽為yolo可以識別的資料:
首先,在 data/predefined_classes.txt檔案中,已經預先定義了一組用于訓練的類名串列,我們先看一下內容,打開后,發現它包括了15中分類的名字,

打開工具,在側邊工具列save按鈕下點擊滑鼠左鍵,在不同的標簽模型之間切換:

7.選擇打開目錄,成批量的給圖片打標簽

打標簽的程序,右鍵選擇create rectbox或者直接按快捷鍵"w"進行選框操作,

結束后,pic目錄如下圖所示,一個YOLO格式的txt檔案將與您同名的圖片保存在同一個檔案夾中,一個名為“classes.txt”的檔案也被保存到該檔案夾中,"classes.txt"定義了YOLO標簽所參考的類名串列,

class.txt檔案內容

查看生成的檔案以及內容,目測第一列應該是種類,第二到第五列是歸一化后的矩形框范圍,不同的網路,標簽的格式可能有所不同,這里生成的而是針對YOLO訓練的網路,

為了驗證第一列是否是類別,我們違心的按照類別重新將圖片打標簽,保證類別序號遞增且不重復,得到:
czl@czl-VirtualBox:~/biaoqian/pic$ ls -l
total 284
-rw-rw-r-- 1 czl czl 146 8月 16 19:21 classes.txt
-rw-rw-r-- 1 czl czl 8977 8月 16 18:52 dog0.jpeg
-rw-rw-r-- 1 czl czl 38 8月 16 19:20 dog0.xml.txt
-rw-rw-r-- 1 czl czl 99159 8月 16 18:53 dog1.jpeg
-rw-rw-r-- 1 czl czl 38 8月 16 19:20 dog1.xml.txt
-rw-rw-r-- 1 czl czl 7264 8月 16 18:53 dog2.jpeg
-rw-rw-r-- 1 czl czl 38 8月 16 19:20 dog2.xml.txt
-rw-rw-r-- 1 czl czl 75975 8月 16 18:54 person0.jpeg
-rw-rw-r-- 1 czl czl 38 8月 16 19:21 person0.xml.txt
-rw-rw-r-- 1 czl czl 64941 8月 16 18:54 person1.jpeg
-rw-rw-r-- 1 czl czl 38 8月 16 19:21 person1.xml.txt
czl@czl-VirtualBox:~/biaoqian/pic$ cat *.txt
dog
person
cat
tv
car
meatballs
marinara sauce
tomato soup
chicken noodle soup
french onion soup
chicken breast
ribs
pulled pork
hamburger
cavity
0 0.501953 0.498047 0.996094 0.988281
1 0.531429 0.511143 0.842857 0.776163
2 0.779310 0.286972 0.441379 0.559859
3 0.335840 0.313653 0.406015 0.583026
4 0.524242 0.318627 0.793939 0.586275
czl@czl-VirtualBox:~/biaoqian/pic$
可以看到,第一列確實是按照0,1,2,3,4的順序出現,分別表示dog, person,cat, tv, car,可以看到和我們的猜測是符合的,
8.打標簽是否對原圖產生影響?
我們對比一下備份的檔案和打標簽后的圖片:

發現它們沒有任何變化,也就是說,打標簽不會影響到原來的圖片.
9.使用自定義標簽:
使用自定義標簽的命令:
python labelImg.py [IMAGE_PATH] [PRE-DEFINED CLASS FILE]
首先,我們要自定義一個標簽文本檔案:

輸入以下命令:
python3 labelImg.py /home/czl/biaoqian/pic/dog0.jpeg /home/czl/biaoqian/pre-defined-class.txt

可以看到,標簽已經替換成了我們預先設定的標簽種類!
結束!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/294717.html
標籤:python
