機械学習
記事内に商品プロモーションを含む場合があります

物体検出用アノテーションツール「labelImg」の使い方(YOLO対応)

LabelImgの使い方
Aru

物体検出のアノテーション作業は、各物体に枠をつけるという非常に手間のかかるプロセスです。しかし、専用ツールを使用すれば、その作業効率を大幅に向上させることが可能です。この記事では、YOLO、PascalVOC、CreateMLフォーマットに対応したアノテーションツール「labelImg」のインストール方法から、実際の使い方までを詳しく解説します。

残念なことに現在はlabelimgの開発は積極的に行われておらず、LabelStudioに統合されたようです。LabelImgの機能が統合されたより高機能なアノテーションツールLabel Studioについては以下の記事を参考にしてください。

【超多機能!】LabelStudioを使った物体検知のアノテーション手順
【超多機能!】LabelStudioを使った物体検知のアノテーション手順

また、YOLOv8と組み合わせてアノテーションを効率化する方法も紹介しています。こちらについては以下の記事を参考にしてください。

あわせて読みたい
物体検出のアノテーションで楽する方法(YOLOv8+labelImg)
物体検出のアノテーションで楽する方法(YOLOv8+labelImg)

物体検出のアノテーションとは?

ディープラーニングにおけるアノテーション(annotation)とは、テキストや音声・画像といったデータに、ラベル・タグやメタデータを付ける作業のことを指します。

例えば、画像のクラス分類タスクのアノテーションとは、各画像に対して「これは犬」、「これは猫」というようにラベルをつける作業になります。

物体検出タスクの場合、アノテーションとは「この場所に写っているのは猫」というラベル付を行うことなります。つまり、物体検出のアノテーションでは、「この場所」という場所の情報と「」という分類情報を、つけていく作業が必要となるわけです。

つまり物体検出タスクのアノテーションは、「ターゲットとする物体を囲む枠と名前(ラベル)をつける」作業になります。

annotation example

物体検出のアノテーションでは、「場所」と「何か」のペアをラベリングする

この作業、かなり面倒です。専用ツールなしで行う場合は、画像エディタで検出したい物体の座標を調べて、それを囲む枠を計算し、エクセルシートやテキストデータとして保存する作業が必要になります。

少しやってみたらわかりますが、専用ツールなしのアノテーションは非常に苦痛です。このため、物体検出のアノテーションでは、専用のアノテーションツールを用いるのが一般的です。

アノテーションツールを使えば、マウス操作で直感的にターゲットのオブジェクトを囲うことができるので、枠とラベルをつける作業がかなり楽になります。

このようなアノテーションツールのうち、操作が比較的簡単で覚えやすいツールとしてlabelImgがあります。

この記事では、labelImgの使い方について解説します。

アノテーションしたデータはYOLOなどで利用することが可能です。YOLOv8を使って学習する方法については、以下の記事を参考にしてください。

YOLOv8(YOLOv9)で独自データを使った学習と推論を実践(物体検出)
YOLOv8(YOLOv9)で独自データを使った学習と推論を実践(物体検出)

※labelImgで枠をつけた場合は、フォーマットの変換をせずに直接学習させることが可能です。

labelImgとは

labelImgは、物体検出タスクのためのオープンソースのアノテーションツールです。主に機械学習の訓練データを作成するために利用されますが、YOLOなどの枠情報データを読み込むことができますので、推論結果のビューアーとしても利用することも可能です。

私は、検出結果のビューワとしても利用しています

labelImgを利用すると、マウス操作で画像内のオブジェクトに対して枠をつけ、ラベル付けをすることが可能です。

既に開発は終了している(積極的な開発は行われていない)のですが、シンプルで使いやすく、ちょっとしたアノテーションがやりやすいので、私は、いまだに少量のアノテーションで活用しています。

なお、labelImgが対応するフォーマットは、PASCAL VOC形式、YOLO形式、CreateML形式です。

LabelImgの開発は止まっているようです(LabelStudioのコミュニティに吸収)

labelimgのgithugのリポジトリ
引用元:https://github.com/HumanSignal/labelImg

上で書いたように、開発は終了しているようです

labelimgを取り込んだ先のツールで「LabelStudio」は、非常に多機能なツールです。Label Studioについては以下の記事を参考にしてください。

【超多機能!】LabelStudioを使った物体検知のアノテーション手順
【超多機能!】LabelStudioを使った物体検知のアノテーション手順

labelImgをインストール

Python環境があるのであれば、以下のpipコマンドでインストールできます。

pip3 install labelimg
Apple SiliconのMacの場合

m1 mac等でインストールでエラーが発生する場合は、PySide6を使ったバージョンのインストールを試してみてください

ネットにいくつか情報がありましたが、このやり方でうまくいきました。

git clone --depth=1 --branch pyside6 --single-branch https://github.com/tzutalin/labelImg.git
cd labelImg
pip install pyside6 lxml
make pyside6
python labelImg.py

参考サイト:M1 mac に labelImg を(きれいに)インストールする方法

labelImgの利用手順

ここでは、labelImgの利用手順を説明します。

ここに書いた手順以外でも使うことができますが、個人的にはこのやり方が一番ミスが少なかったです。

labelImgを起動する前に、アノテーションを行う画像を入れた画像フォルダを作り、アノテーション結果を格納するためのフォルダも作成しておいてください。

画像フォルダ(images)と、アノテーション結果フォルダ(labels)の配置例です。以下のような感じでフォルダを作成しておくと良いです。

labelImgを起動

コマンドラインで、以下のコマンドを実行すると起動します。

labelImg

起動すると、下記のような画面が表示されます(画面はMacです)。

フォルダを設定する

保存先を変更するで、ラベルを格納するフォルダ(例ではlabelsフォルダ)を指定します

labelimg-save

ディレクトリを開くで、画像が入ったフォルダ(例ではImagesフォルダ)を指定します

labelimg-open

アノテーションデータのフォーマットを指定します。最初は、Pascal VOCになっていると思います。これを、Yoloに変更します

これで、準備はOKです。ここまでの操作後、フォルダ(Images)に入った画像が表示されていると思います。

labelimg-sample

アノテーションをしていく

画像の上で右クリックすると「矩形を作成する」と言うメニューが現れますので、これを選択します。

labelimg-02

猫の囲むように枠をつけるとウィンドウが表示されるので、ここにラベル(cat)を入れます。

labelimg-03

同じ要領で人にも、ラベル(human)をつけます。

これで人と猫それぞれに枠が作成できました。

右のウィンドウcathumanのラベルがついていることを確認してください。サンプルでは画像が1枚しかありませんが、フォルダ内に画像が複数枚ある場合は、左側の矢印アイコンをクリックすることで画像を変更できます。

また、画面右下の枠に「ファイル一覧」が表示されます。こちらに表示されたファイル名をクリックすることでも画像を変更できます。

labelimg-04

変更後は、左にある保存アイコンするをクリックして、アノテーションデータを保存します。

ちなみに、メニューの自動で保存するを設定しておけば、画像を切り替えるタイミングなどで自動で保存されるようになります。便利なので、ONにしておいた方が良いです。

labelimg-menu

保存されたファイルを確認する

Yoloフォーマットで保存した場合、保存先に指定したフォルダにclasses.txtと、画像ファイルと同名のtxtファイルが作成されます。classes.txtはクラス名が列挙したファイルで、上のアノテーション例では以下のようなものが作成されます。

cat
human

上からクラス0のラベル、クラス1のラベル・・・と並びます。

画像ファイルと同名のテキストファイルがアノテーション結果で、以下のようなフォーマットです。

0 0.296810 0.801875 0.540915 0.356250
1 0.742718 0.497500 0.514563 0.945000

今回は、Yoloフォーマットなので、(class number, center x, center y, width, height)の順に並びます。

座標や幅・高さは画像の幅、高さを1.0とした場合の値となります。例えば、100×100ピクセルのサイズの画像で、(20,20)で、幅と高さが10ピクセルの場合は、center x, center yは0.2,0.2で幅と高さは0.1, 0.1になります。

画像とアノテーションファイルを揃えたら、物体検出タスクの学習を行うことができます。

YOLOv8を使った学習については以下の記事を参考にしてください

あわせて読みたい
YOLOv8(YOLOv9)で独自データを使った学習と推論を実践(物体検出)
YOLOv8(YOLOv9)で独自データを使った学習と推論を実践(物体検出)

ショットカットキー(HotKeys)

labelImgのショットカットキーは以下になります。ショートカットを活用することで、アノテーションの効率が上がりますのでうまく活用しましょう。

linux/windosの場合macの場合説明
Ctrl + u⌘ + uディレクトリを開く
Ctrl + r⌘ + r保存先を変更
Ctrl + s⌘ + s保存
Ctrl + d⌘ + d選択した枠をコピー
Ctrl + Shift + d⌘ + shift + u現在の画像を削除
スペーススペース現在の画像に確認済みフラグをつける
ww枠を作成
dd次の画像
aa`前の画像
deldel選択した枠を削除
Ctrl + +⌘ + +拡大
Ctrl + -⌘ + -縮小
カーソルキーカーソルキー選択された枠を矢印キーで移動

まとめ

labelImgは手軽にインストール、操作ができるのでちょっとしたアノテーションに向いています。まとまった量のアノテーションを行う場合は、分担してアノテーションを行う場合などは、分担作業に向いたアノテーションツールを使う方が良いかと思いますが、個人でちょっと使うには便利です。

更新が止まりそうなので、Label Studioへ乗り換えてもよいかもしれません。こちらも、pip install label-studioでインストールできます。

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

ABOUT ME
ある/Aru
ある/Aru
IT&機械学習エンジニア/ファイナンシャルプランナー(CFP®)
専門分野は並列処理・画像処理・機械学習・ディープラーニング。プログラミング言語はC, C++, Go, Pythonを中心として色々利用。現在は、Kaggle, 競プロなどをしながら悠々自適に活動中
記事URLをコピーしました