[YOLOカスタムモデルをRaspberry Piでデプロイ①]LabelImgでアノテーションをする最も簡単な方法[Windows]

# はじめに
本記事では、WindowsにおいてLabelImgでYOLO形式のアノテーションを行なう場合、最も簡単な方法を解説します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/04da67be-f2f3-49cf-8fc6-d25cddd90517.png)


最終的に、YOLOカスタムモデルをRaspberry Piでデプロイする方法を解説します。シリーズでご覧いただけると嬉しいです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/26a34ef6-be75-4ca7-8ccd-60a21cf2f9a1.png)
（目指す最終イメージ）

# 本記事で獲得できるスキル
・画像のアノテーション
・AIモデル作成のための画像のデータセットの作成

# 参考記事
次の記事を参考にしています。感謝致します。
https://axross-recipe.com/recipes/1190
「公開日：2023/08/16更新日：2023/12/26
ラズベリーパイでYOLOv8オリジナル学習モデルの小型化およびEdgeTPUを利用して推論速度を向上させる/Shu」


# LabelImgでアノテーションを行なう利点
・Datasetsの秘匿性を守れる（Label Studioではブラウザでの操作となり、Datasetsをブラウザ上にアップロードする必要がある）
・ラベル付けの操作が容易
・ローカルで作業するので、labelファイルをリアルタイムでローカルに保存できる。
等

# 環境
Windows 11 Home
LabelImg

# 手順
## 1)次のURLよりwindows_v1.8.1.zip をダウンロード
https://github.com/HumanSignal/labelImg/releases/tag/v1.8.1

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/a2719d3e-f602-4ac2-9f38-2c98b4d76af7.png)

※This repository was archived by the owner on Feb 29, 2024. It is now read-only.
との記載がありますが、ダウンロードは可能で、解凍後のアプリケーションも利用可能です。

## 2)ダウンロードしたファイルを任意のフォルダに解凍
例：今回の解凍ディレクトリパスは以下の通りです。
C:\tool\windows_v1.8.1

## 3)「labelImg」をクリック
アノテーションを行なう時は、下記の画像において赤枠で示したアイコンの「labelImg」をクリックするのみです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/1c24fe03-5ad9-41f8-9f79-35e9ed1f0044.png)

## 4)作業フォルダを作成し、画像データを格納
作業フォルダに画像データを格納すればOKです。筆者は、クラス毎に画像データを分けて保存していますが、1つのフォルダに全てのデータを格納してもアノテーションは可能です。

例：ここでは7つのクラスを定義しました。
7クラス×40枚=計280枚の画像データセットとなっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/922ad190-3ca2-4ffe-8144-896f913d1af6.png)

例：1クラス毎に40枚の画像データを格納しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/3281047b-23a4-4126-ad93-641780918a5b.png)

※尚、様々なやり方があると思いますが、画像データは全体で1～整数の連番を付与したファイル名で保存することをオススメします。

つまり、筆者の場合は全280枚の画像データに対し、それぞれ1～280のファイル名で保存しています。これにより、データセットのボリュームが一目で分かり、データの抜け漏れも発見しやすくなります。

## 5)アノテーションのためのセッティング
・View＞Auto Save modeを有効化
・出力形式をYOLOに変更
※デフォルトで [PascalVOC] となっているボタンをクリックすることで変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/2cd2e22e-86e5-49bb-82a1-f9d6d1fb5cc9.png)

・ショートカットの確認
　枠の作成を開始する：w
　次の画像へ（Next Image）：d
　前の画像へ（Prev Image）：a

・ディレクトリの指定
Open Dir：アノテーションをする画像データが格納されてるディレクトリを指定する。
Change Save Dir：アノテーションによって生成されるラベルデータの保存先ディレクトリを指定する。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/646b3d9e-3735-45a3-981e-91945681bf60.png)
※ラベルデータの格納先について
筆者は、のちに正しくアノテーションできているか、ラベルデータの内容（画像に付与したクラスID）を確認してから次の作業を行なっています。そのため、クラス毎にラベルデータを保管していますが、例えば、"All_labels"というフォルダを作成し、そこに全てのラベルデータを格納してもOKです。

## 6) アノテーションを行なう
Creat¥nRectBoxをクリックし、オブジェクトを囲う。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/8a4ae181-cde7-4435-85e8-4175c4d253b2.png)


## 7)ラベルを記述あるいは選択
新規のラベルの場合は、赤枠の箇所でラベルを記述し、OKで進む。
既出のラベルの場合は、黄色枠の項目より該当のラベルを選択し、OKで進む。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/f49d9d61-4844-46c0-a0c0-9a20828bbb9a.png)

クラスIDがラベルを登録した順に0より始まる整数の連番で付与されます。

## あらかじめ、ラベルを定義することも可能
LabelImgを解凍したディレクトリに戻り、「data」ファルダを開くと、「predefined_classes」というファイルがあり、このファイルを訂正します。
例：predefined_classes.txtの格納されているパス
C:\tool\windows_v1.8.1\data\predefined_classes.txt
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/93bd490f-68f6-4d6e-9257-57fd53da355a.png)

次の様に、テキストファイルを変更します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/6c4052f5-9d13-4e5b-8022-32068db35a1f.png)

クラスIDが上から順に0より始まる整数の連番で付与されます。

## 8)アノテーションによって生成されたラベルデータ内容を確認
アノテーションによって生成されるラベルテキストデータは次の通りです。
```
<class_id> <x_center> <y_center> <width> <height>
```

チェックすべきポイント
・自身で定義したクラスIDが正しく付与されているか
・バウンディングボックスの座標が正しいか


例：
▼ファイル名「241」の画像データ
![241.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/55149d03-51c0-4135-a515-317f772a1438.jpeg)

▼ファイル名「241」のラベルテキストデータ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/da91c925-1de4-4cb7-9b98-6477e2cb9631.png)

全てのアノテーションが完了すると、次の様なイメージになります。
▼例：クラスID:5（ラベル：stop）の画像データとラベルテキストデータ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/ef7e3d20-99c1-41eb-aecc-e2c2fabd5134.png)

# おわりに
WindowsにおいてLabelImgでYOLO形式のアノテーションを行なう最も簡単な方法は以上の通りです。最初は、Ubuntu LinuxにおいてPython 3 + Qt5のインストールしたり、WindowsでPython、PyQt5、lxmlをインストールする方法等を実行しましたが、全ての依存関係をクリアするのが手間でした。様々な方法を試し、最も簡単なLabelImgの始め方は本記事の方法でした。

ちなみに、"LabelImg"は、現在開発が中止され、"Label Studio"コミュニティに統合されています。ですが、私は"Label Studio"よりも"LabelImg"の方が直感的に利用でき、自由でシンプルなので好きです。

Ultralytics社もデータラベリングはLabelImgの利用を推奨しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/c2ed6857-eed7-4de2-bbe1-93413ed589dd.png)
※https://www.ultralytics.com/ja/blog/exploring-data-labeling-for-computer-vision-projects
（Ultralytics社公開ドキュメント2025年5月8日閲覧）



アノテーションをするということは、自身でモデルを作成することに繋がります。よって、アノテーションツールに求めることはアノテーションのみで、ラベル管理やファイル操作、様々な管理はこちらで自由にやりたいのです。

しかし、度々LabelImgでアノテーションを行なう際に不具合が起こるため、備忘録として本記事を残します。

最後までご覧いただきありがとうございました。

# 次回
少ないデータセットでも何倍にもデータの拡張が可能です。次回は例として、10倍のデータセット拡張の方法とモデルの学習方法をご紹介します。お楽しみに❣


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3665553/db43fc17-1ec0-4fd2-b0b9-32972f14cf31.png)


[YOLOカスタムモデルをRaspberry Piでデプロイ②]データセットをデータ拡張（Albumentation）する方法[超簡単]
https://qiita.com/LatanKee/items/58c3d5db1a601c513146