roboflowを用いたデータセットのアノテーションのやり方

## 概要
自分で集めたデータセットを学習させてYOLOV５で物体検知をしたい！！
と思ったのですが、アノテーションどうやったらいいの！？
となり、その際にアプリをダウンロードせずにWEB上でアノテーションができるものを見つけたので共有します。

## 目次
- roboflowについて
- roboflowを使ったアノテーション
    - プロジェクトの作成
    - データセットのアップロード
    - アノテーション
    - ダウンロード


## roboflowについて
まずそもそもroboflowってなんぞ？って方にroboflowの説明をしたいと思います。
(roboflowの使い方を見にきてるんだって方は飛ばしてください、、)

ー
roboflowは、学習用のデータアップロードからデータ整理、ラベリング、画像処理、学習、モデル配置、組み込み、アクティブラーニングまで一連で行えるAI活用を加速するためのコンピュータビジョンプラットフォームです。(roboflow公式から引用)

[roboflow公式サイト](https://www.systems.nakashima.co.jp/rf/roboflow)

https://www.systems.nakashima.co.jp/rf/roboflow

一言で言うと、データセットさえ用意すれば、ノーコードかつこのサイトひとつで機械学習を行えるというものです。
今回、自分は、ソースコードを記述しないのはつまらなかったのでroboflowでは、データセットのアノテーションのみ行っています。

さて、では本編のroboflowの使い方に入ります。

## roboflowを使ったアノテーション

### プロジェクトの作成
まず、プロジェクトを作成する前にsign upをしましょう。下記のURLからアカウントの作成とライセンスの設定をしてください。自分は無料で使っていますが特に不満はないので無料版で十分だと思います。

[roboflowホーム](https://roboflow.com/)

https://roboflow.com/

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083839/8971d01a-460d-ee8e-f6da-80744868440b.png" width=60%>

一応チュートリアルを行うこともできます。(すべて英語ですが）
左下のTutorialsからも行うことができるので後からチュートリアルを受けたくなっても安心です！

アカウントが作成できたらいよいよプロジェクトの作成です。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083839/908e4833-97f1-dc12-9252-9fa2d63ac738.png" width=60%>

画面中央のCreate New Project からプロジェクトの作成が行えます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083839/61956084-8cc2-230e-a022-e061bb269221.png" width=40%>

Project Typeにはプルダウン式で以下のようになっています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083839/8c0d3fde-32ba-d055-0eb4-eade32558bf8.png" width=40%>
~~一つのラベルを分類する場合には、Single-Label Classificationを
複数ラベルの場合はMulti-Label Classificationを選択するというように
やりたい手法のタイプを選べば良いです。~~
画像のなかに複数ラベルを入れたい場合や特定のものにラベルを貼りたい場合は
Object Detection (Bounding Box)
選びましょう。
What Are You Detectingでは、分類する名称を記入してください。
しかし、半角英数字で入力してください。表記がバグってしまいます。

Project Nameでは、その名の通りプロジェクトの名前を記入してください。
こちらも同様に半角英数字でお願いします。

Licenseについては、
作成したものを誰でも利用してよい場合であれば、CC BY 40で良いと思います。
非営利のみ使用可であればBY-NC-SA 40というように状況に合わせて使用してください。

### データセットのアップロード

プロジェクトの作成ができたら次は、データセットのアップロードをしましょう。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083839/29779d75-4fab-757b-f1f5-e3c05ec979f5.png" width=60%>

左の選択欄にあるUploadを選ぶと上の画像のようになる。
これにデータセットとなる画像をドラッグ&ドロップし、
右上に出てくるSAVEを押すことでアップロードは完了となる。

SAVEを押しアップロードが完了すると以下の画面が出る。
自分のアカウントを選択しAssign imagesを押下しアノテーションに移ります。
チームメイトと分割してアノテーションする場合は、ここでチームメイトのアカウントも選択してください。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083839/d5f19831-cde4-d6b5-3114-03cdc54dbc4e.png" width=40%> 

## アノテーション
Assign imagesを押すと自動的にアノテーションに移ります。
アップロードした画像でアノテーションされていないものがUnannotatedに分類されています。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083839/8246c572-80ea-9e80-c24d-6f52e252a3de.png" width=60%>

アノテーションされていない画像を左クリックするとアノテーションに移ります。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083839/dc03f748-7e0d-c676-22f6-45be8e1fafe5.png" width=60%>

アノテーションは画像の右にあるツール欄から選んで行います。
アノテーションで基本的に使用するものは上から二つ目の四角形のものです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083839/376d4c85-486a-47da-b148-08b22cee34c0.png" width=60%>
四角のツールを選択し左クリックで範囲を指定できます。範囲を決定するとラベル名を入力するものが出てきます。
これを画像全てに行うことでアノテーションは完了です。

## ダウンロード
アノテーションしたデータセットのダウンロードは、Genetateから行います。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083839/49aa2586-9c04-82e3-4575-ebe9d1004574.png" width=60%>

ここでモデルの設定を行います。web上での学習を行わない場合は、デフォルトの設定で十分です。
（モデルの設定を行わずにダウンロードする方法を模索しましたが見つからなかったので一度設定をしてからダウンロードします。）
Source Imagesでは使用するデータセットの設定を
Train/Test Splitでは、機械学習に欠かせない訓練用データとテスト用データを分けます。
Preprocessingでは、画像サイズのリサイズによる統一などによって学習時間の減少とパフォーマンスを上昇させるための設定を行います。
Augmentationでは、データの水増し処理を行うかどうかを設定します。
設定を終えGenarateを押すことで設定の完了とモデルの作成が行われます。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083839/ba6c4919-69cb-e86d-039e-b1765667be9b.png" width=40%>

作成されたモデルを選択し、Exportからデータセットのダウンロードを行うことができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083839/314d17f2-758d-50aa-2140-9a8e9dce4ae0.png" width=30%>

Formatは学習に使用するライブラリを選択します。ライブラリは以下から選べます。
自分はYOLO v5で学習を行うのでYOLO v5 PyTorchを選択しました。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3083839/4b415f22-2364-d050-1682-dd9da368b775.png" width=30%>
「download zip to computer」と「show download code」では、
データセットをzipファイルでダウンロードするかソースコード上でダウンロードする形式どちらかを選択することができます。
continueを押し、選択した形式でアノテーションを行ったデータセットがダウンロードすることができます。

ダウンロード後はそれぞれのライブラリに合わせたデータセットとなっているので
お好きなように扱いください。


今回はroboflowでのアノテーションのやり方を説明してきました。
アプリを購入、ダウンロードしなくても行えるのはとてもよいサービスですね！

今回の記事が初投稿なのでお見苦しい点があるかもしれませんが生温かい目で見てくれるとありがたいです。
それでは、お疲れ様でした〜。