【YOLOv3 データセット作成の旅①】Open Images Dataset の特定クラスの画像のみダウンロード

こちらの公開モデルでイルカを検出できるように YOLOv3 を学習させようと思いたち、データセット作成までの旅路を忘備録として。

https://github.com/eriklindernoren/PyTorch-YOLOv3

物体検出やセグメンテーションのデータセットは色々あるのですが、一番クラス数もサンプル数も大きいデータセットとなると、Google の Open Images Dataset だと思います。

例えば、イルカを検出できるモデルを作りたいな〜と思ったときに、おそらくアノテーション付きデータが豊富にあるのは、これだけな気がします。よしこれを使わせてもらおう!

ただその時問題になるのは、あまりにもデータセットが巨大なため、データのダウンロードに何日もかかることです。全体で 500 ~ 600 GB くらいの膨大なデータセットなので、個人のPCに落としてくることが困難で、そもそも数GBダウンロード時点で勝手にダウンロードキャンセルになってしまったりします。

もし、特定のクラスのデータだけダウンロードできたら便利だな。そんなふうに思ってネットサーフィンしていたら、まさにそれを実現してれる便利なライブラリを発見しました。

というわけで、OIDv4-Toolkit の紹介をしようと思います!

Point

・Open Images Dataset V4 の任意のクラスだけの画像とアノテーションデータをダウンロードすることができる

・アノテーションデータは、物体検出 のみ。セグメンテーションは対応していない。

・bbox は [name_of_the_class, left, top, right, bottom] の .txt フォーマットで得られるため、場合によっては変換が必要

 

OIDv4-Tooklit の使い方

こちらの Github となります。3 ステップでとっても簡単

https://github.com/EscVM/OIDv4_ToolKit

1, まずはレポジトリをクローン

 

2. 次に環境合わせ

 

3. コマンドラインで main.py を実行

--classes の後ろに、ダウンロードする対象のクラスを入力します。

指定できるものは、こちらから探すことができます。(リンクは Open Images Datast の検索画面)

--type_csv では、訓練データ、検証データ、テストデータのいずれかを指定することができます。 all とすることで全部まとめて取得することも可能。

他にもいくつか コマンドライン引数で指定できるものがあるようで、一覧はこちら

The annotations of the dataset has been marked with a bunch of boolean values. This attributes are reported below:

  • IsOccluded: Indicates that the object is occluded by another object in the image.
  • IsTruncated: Indicates that the object extends beyond the boundary of the image.
  • IsGroupOf: Indicates that the box spans a group of objects (e.g., a bed of flowers or a crowd of people). We asked annotators to use this tag for cases with more than 5 instances which are heavily occluding each other and are physically touching.
  • IsDepiction: Indicates that the object is a depiction (e.g., a cartoon or drawing of the object, not a real physical instance).
  • IsInside: Indicates a picture taken from the inside of the object (e.g., a car interior or inside of a building).
  • n_threads: Select how many threads you want to use. The ToolKit will take care for you to download multiple images in parallel, considerably speeding up the downloading process.
  • limit: Limit the number of images being downloaded. Useful if you want to restrict the size of your dataset.
  • y: Answer yes when have to download missing csv files.

レポジトリ から引用)

--limit 100 とかでダウンロードする枚数指定できたりするのめっちゃ便利ですね。

 

実際にダウンロードしてみた

実行すると何度か [Y/n] の選択を迫られますが、全て Y で答えるとダウンロードが完了しました。下記のようなディレクトリ構造になります。

レポジトリ から引用)

bbox は冒頭でも書いたとおり、[name_of_the_class, left, top, right, bottom]  である点に注意です。

また、座標は正規化された値ではなく、オリジナル画像サイズのスケールで得られます。0 ~ 1 のスケールでの座標情報は、OID > csv_folder > annotations-bbox.csv に格納されているため、画像名をキーにして探す必要があります。そちらを自動でやってくれるスクリプト、次の記事で書こう。

というわけで、OIDv4-Toolkit の紹介でした。

 

なんて便利なんだ。感謝。

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

 

続き

【YOLOv3 データセット作成の旅②】OIDv4_Toolkitで取得したアノテーションデータを変換する