アノテーションツール(正解入力ツール)が進化している。

この記事はとても古くなっています。

CVAT, COCO-Annotatorについて調査してください。
- yolox などのようにCOCO-Json形式のアノテーションを必要とする物体検出のプログラムもあります。
- アノテーションツールは、アノテーションを利用する学習・評価プログラムが対応しているデータ形式の出力に対応していることが重要な要因です。アノテーションファイルを読み込んで、アノテーションを修正できることが必須です。
- また、検出枠が重なっているときに、目的の検出枠を選んで修正するのがしやすいユーザーインタフェースを実現しているかどうかです。
- アノテーション実施者と、アノテーションの確認者とで状況を共有して確認しやすいことも大事です。

---------------------------------
注意！

この文章はアノテーションツールについて調査中の人が書いています。

あなたが行おうとする機械学習ライブラリは、ライブラリごとに入力のアノテーションのデータのフォーマットが異なります.
はじめからそのフォーマットで出力してくれるツールを使うのがよいと思います。


「アノテーションツール(正解入力ツール)が進化している。 2」の記事を、この記事に連結しました。

### 比較

| tool  |YOLO | SSD | dlib |
|-------|-----|-----|------|
| Format  |YOLO | PASCAL VOC Format (XML) |  |
| imglab  |  |  | o |
| labelImg  | o | o | |
| BBox-Label-Tool |変換ツール使用| | |

 

---

オブジェクト検出器を作るときは、正解データを入力する作業がある。そういった作業をアノテーションと呼ばれている。

## 昔のアノテーションの状況
この作業が実に面倒だった。

- マウスで領域の指定をして結果を保存するツールを部署ごとに自作していた。
- 入力結果を保存するファイル形式が標準化されていない。
- ツールの中で途中で作業の打ち切りや再開が難しい。
- 入力作業中に間違えたときの取り消し、やり直しがきかない。
- 最終結果ファイルが意図した内容になっているのかの確認がむずかしい。

## **dlibのアノテーションツール imgLab**
そのような状況が変わっていることをdlibのオブジェクト検出器の学習用のツールで実感した。


dib/tools/imgLab https://github.com/davisking/dlib/tree/master/tools/imglab

- dlibの中でオブジェクト検出器の学習用に必要なアノテーションツールが提供されている。
- dlibのオブジェクト検出器の学習に使えるファイル構造としてxmlを標準化している。
- そのアノテーションツールでは、作業をするファイルを任意の場所から選べる。
- また、間違えた部分があったときに、エディタでそのXMLファイルを修正がしやすい。
- 結果のXMLファイルを表示させると、画像にアノテーションされた矩形が表示される。
    - XMLファイルに画像自体とその上に矩形を表示させる枠組みとしてimage_metadata_stylesheet.xslが用意されている。


その実際の使い勝手は、dlibでのsimple_object_detectorの学習手順を示している次の記事が参考になるだろう。

[HOG特徴とSVMによる物体検出](http://ishi.main.jp/ros/ros_obj_detection.html)



### imglabを使ってよいと思った点
- XＭＬファイルに書き込んだ結果を元にしたオブジェクトの枠を
ブラウザ上で表示できる。
- この枠を重ね書きした画像をファイルとして一時的に作成する必要がない。
- このため、ディスクスペースを無駄に使うことがない。
- また、ファイルがあれば整合性がとれているのかバージョン管理などの問題を生じるが、その都度ＸＭＬファイルから読み込んで枠を表示させるのだから、そのような問題を生じない。



検出結果の表示にしても同じようにＸＭＬファイルで結果を表示すれば、
検出結果をＸＭＬファイルでだけ保存すればよく、検出結果を重ね書きした画像ファイルを別途保存する必要がなくなる。


## **アノテーションツールにほしいこと**

- ツールの動作時の入力画像が表示画面よりも大きい時にストレスなく入力できること。
- アノテーション済みの結果を修正しやすこと。
- 操作性が簡単であること。
- ツールの再配布が簡単であること。
- OSの種類によらず使いやすいこと。
- 動画中のオブジェクトのアノテーションが楽であること


## **labelImg**
labelImg https://github.com/tzutalin/labelImg

- LabelImgは、PascalVOC形式、Yolo形式のアノテーション形式を選んでアノテーションをすることができる。
- 透過型pngファイルに対してアノテーションをすることもできる。

### qiita [labelImgとChainerCVを使ってアノテーション作業を楽にする](https://qiita.com/wakaba130/items/e86109b3cbd1b0dde902)

### [Yolo学習用データセットの作成ツール：labelImg](http://demura.net/misc/14350.html)

### [labelImg – 🤘画像の注釈ツール](https://githubja.com/tzutalin/labelimg)
### [LabelImg - GUIで写真をラベリング](https://www.moongift.jp/2017/02/labelimg-gui%E3%81%A7%E5%86%99%E7%9C%9F%E3%82%92%E3%83%A9%E3%83%99%E3%83%AA%E3%83%B3%E3%82%B0/)

### [物体検出用の画像アノテーション正解データ生成に便利なツール](http://segafreder.hatenablog.com/entry/2016/11/27/101541)

### [labelImg · PyPI](https://pypi.org/project/labelImg/)

### https://github.com/tzutalin/ImageNet_Utils
 これも　labelImg.py　というツール。


labelImg のインストールに失敗する場合
docker を利用するとよいようだ。


## **BBox-Label-Tool**

### BBox-Label-Tool　https://github.com/puzzledqs/BBox-Label-Tool

### [YOLO-VOCでのカスタムオブジェクトの作成の仕方](https://qiita.com/lnkusu/items/0073cb428bb1950d1e0c)

### [ご注文はYOLOですか！？（Windows10でYOLOを学習して動かすまで）](https://qiita.com/chimamedia/items/85259c5587171ad407a0)

### [BBoX-Label-ToolをPython3で使用する](http://weekendproject9.hatenablog.com/entry/2017/11/05/213328)


## OpenCV にあるopencv_annotation

https://github.com/opencv/opencv/blob/master/apps/annotation/opencv_annotation.cpp


## [VoTT: Visual Object Tagging Tool 1.5](https://github.com/Microsoft/VoTT/)
動画にアノテーションをつけられるのはよい点です。
Camshift tracking algorithm を使って次のフレームの枠を描画してくれるので、それを使って初期値として、枠を修正しない、修正するを選べます。


VoTTのバージョンは、VoTT　1.03ならば、追跡後の枠位置がほぼ妥当なものになっています。
1.5.0のバージョンでは、残念なことに、枠位置が不自然に系統的にずれています。

ビルド済みのバイナリファイルを[githubのリリース](https://github.com/Microsoft/VoTT/releases)
から、各種OS用がダウンロードできます。




次の記事は、VoTTのGithubに書いてあるREADME.mdを書いてある内容を日本語で読みやすく書いてあります。

- [VoTTを使って超お手軽に画像のタグ付け～ChainerCVのデータセット変換まで](https://qiita.com/yoshizaki_kkgk/items/20d4061529471c3f06c8)

その次の記事は、VoTTを使ってタグ付けをして、SSDを使ってオブジェクト検出をしている例です。SSDは以下のリポジトリを用いています。アノテーション作業から、実際の検出の実装・利用までの手順を理解するのに役に立つ記事です。

```
$ git clone https://github.com/karaage0703/ssd_keras
```


- [ディープラーニングで動画に自動でモザイクをかける「ディープモザイク」作ってみました](https://karaage.hatenadiary.jp/entry/2018/06/04/070000)



## その他のアノテーションツール
以下のツールがあるが使ったことがないので、コメントができない。

sloth https://github.com/cvhciKIT/sloth
LEAR
labelMe http://labelme.csail.mit.edu/Release3.0/





qiita [Annotationツール比較](https://qiita.com/shu-yusa/items/d19ea57e3cf9c4dbdce2)


qiita [物体認識用データセット作成支援ツール（Faster R-CNNとかSSDとか）](https://qiita.com/slowsingle/items/9006383145a650c84cb0#_reference-38321b33f8ee17c8f1bb)





### **目位置の入力ツール Eye-Picker**

Windows 版のexe もある。
https://github.com/bolme/pyvision/wiki/Eye-Picker


(Non)verbal Annotator
https://github.com/hcmlab/nova



---

顔の正解データの与え方にしても最近は変わってきている。
それによって、必要なアノテーションツールや評価用の集計プログラムも変わってきている。

```
Here, each face is denoted by:
<major_axis_radius minor_axis_radius angle center_x center_y 1>.
```

http://vis-www.cs.umass.edu/fddb/README.txt

----
## 注意

機械学習の時代は、手動のアノテーション時代ではなく、機械学習によって機械学習を強化する時代になっている。

SlideShare [SSII2018TS: 大規模深層学習](https://www.slideshare.net/SSII_Slides/ss-101275110) 
⼤規模深層学習 〜分散学習の基礎、動向、実例〜 株式会社デンソーアイティーラボラトリ 佐藤 育郎 
p.13 - p.26 の部分で、どのように学習データを作成しているのかが述べられている。


# アノテーションツール(正解入力ツール)が進化している。 2

### Image annotation tool in OpenCV
YouTube [Image annotation tool in OpenCV(python)](https://www.youtube.com/watch?v=-0QIr6Nv1Yo)

https://github.com/opencv/opencv/tree/master/apps/annotation

https://github.com/opencv/opencv/blob/master/apps/annotation/opencv_annotation.cpp

上記のソースコードを読むかぎり、PASCAL VOC のXMLフォーマットやjsonフォーマットではなく、スペース区切りテキストとして保存するものです。
ですから、アノテーションツールのサンプルとしてみれば良さそうです。

機械学習の中で使われる標準的なデータ形式をサポートしているものを最初から使えば十分でしょう。


---


### [Computer Vision Annotation Tool (CVAT)](https://github.com/opencv/cvat#computer-vision-annotation-tool-cvat)

OpenCVがCVATというアノテーションツールを配布している。

Youtube [CVAT 0.2.0 - annotation mode](https://www.youtube.com/watch?v=6h7HxGL6Ct4&feature=youtu.be)

アノテーションは、長方形で指定する場合と、折れ線で領域を指定するのを選べます。
従来の検出では、対象物と背景とをまとめて長方形で領域指定していましたが、それだとどこまでが、対象物なのかを指定できていません。このモードでは、折れ線で領域を指定することで、対象物を指定することができます。


[CVAT 0.2.0 - interpolation mode](https://www.youtube.com/watch?v=U3MYDhESHo4&feature=youtu.be)

動画に対してアノテーションする際に、全部のフレームに正解枠をつけるの大変です。このツールでは、あるフレームで正解枠をつけたら、数フレーム後の画像で正解枠を移動してつけます。それをさらに数フレーム後の画像で正解枠を移動してつけます。それらを繰り返します。そうすると、そのあとで、一連のフレームに対して、正解枠の補間をしてくれるとのことです。

こういった作業を、対象のオブジェクトごとに繰り返します。そうすることで、正解枠のアノテーションの作業を楽にする。


[CVAT 0.2.0 - attribute mode](https://www.youtube.com/watch?v=UPNfWl8Egd8&feature=youtu.be)
年齢、性別、メガネの有無などを画像にアノテーションをつけることができます。



[CVAT 0.2.0 - segmentation mode](https://www.youtube.com/watch?v=6IJ0QN7PBKo&feature=youtu.be)

アノテーションをセグメンテーションでつけることができるモードです。セグメンテーションとは、領域をpixel単位に指定するやり方です。空・森林・道路・芝生・建築物を指定することができます。




-----

最近にアノテーションでは、
セマンティックセグメンテーションのアノテーションになってきています。


[セマンティックセグメンテーションのアノテーションツールlabelme](https://qiita.com/kouki_outstand/items/7b7597f271beca0051e5)


## [VoTT（Visual Object Tagging Tool）の紹介記事](https://www.softbanktech.jp/service/list/ms-azure_blog/ms-azure_blog_0086/)


Githubによれば、出力データ形式は以下のものがサポートされている。
> Exporting tags and assets to Custom Vision Service CNTK , Tensorflow (PascalVOC) or YOLO format for training an object detection model.

Camshift tracking algorithm. を使って追跡をするので、追跡した結果の枠を修正すれば済むのが利点です。


### VoTTの利用記事

- [VoTTで鬼畜作業](https://qiita.com/mokoenator/items/4d106d682f1b4bc7d0e3#vott%E3%81%A7%E9%AC%BC%E7%95%9C%E4%BD%9C%E6%A5%AD)

- [VoTTを使って超お手軽に画像のタグ付け～ChainerCVのデータセット変換まで](https://qiita.com/yoshizaki_kkgk/items/20d4061529471c3f06c8)

- [VoTTでのタグ付け作業の簡単化](https://teratail.com/questions/143925)
- [VoTTでラベル付けしたJSONをAWS SageMaker用に変換する](http://thr3a.hatenablog.com/entry/20180903/1535978036)
- 

---

- [Annotationツール比較](https://qiita.com/shu-yusa/items/d19ea57e3cf9c4dbdce2)

---

github.com/AlexeyAB/Yolo_mark
https://github.com/AlexeyAB/Yolo_mark


## 付記：手動アノテーションよりも半教師あり学習を(2022年6月追記)
ある程度のモデルが機械学習によってできた場合には、半教師あり学習に取り組むことも視野に入れた方がいい。
なんといっても全数に対して手作業でラベリングをするのは苦痛だ。
学習結果を元に自動でアノテーションファイルを生成させてみよう。
それを学習データに追加していくことで、学習データの広がりを増やした学習が可能になる。
ポジティブサンプルを増やすことができる。
Darknet でも疑似ラベルを作成する方法が用意されている。

https://github.com/AlexeyAB/darknet

> Pseudo-labelling - to process a list of images data/new_train.txt and save results of detection in Yolo training format for each image as label <image_name>.txt (in this way you can increase the amount of training data) use: ./darknet detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights -thresh 0.25 -dont_show -save_labels < data/new_train.txt