【機械学習】YouTube-8Mデータセットをダウンロードする


# はじめに
機械学習分野では無料で使える様々なデータセットが公開されていますが、YouTube-8Mデータセットもその中の一つとなります。
その名の通りYouTube動画にアノテーションが付与されたものとなり、最低再生回数や最低の動画長など、いくつかのサンプリング基準が設けられた高品質なデータセットとなっています。
今回、筆者がラベリングツールの調査のためにこちらのデータセットをダウンロードしようとしたさいにエラーが出てしまったので、その解決方法も含めてダウンロード手順を残しておこうと記事を執筆いたしました。


 # 目標
 YouTube-8Mデータセットをダウンロードする。

 # 環境
 M1 Mac (Ventura 13.5)

 # 手順
何種類かのデータセットがありますが、今回は`YouTube-8M`のフレームレベルのデータセットをダウンロードを試みたいと思います。

ダウンロード手順は公式サイトの以下URLに記載されています。

https://research.google.com/youtube8m/download.html

紹介されている手順に従ってダウンロードを行なっていきます。


## 手順１：環境構築

データセットダウンロードのために叩くコマンドの一例を確認すると以下です。

```bash:データセットダウンロードのためのコマンド
curl data.yt8m.org/download.py | partition=2/frame/train mirror=us python
```

ここからわかる通り、`curl`コマンドと`python`が利用できる環境な必要があります。
いずれかが欠けている場合はインストールしましょう。

`curl`は以下のコマンドをターミナルで実行してインストールしましょう。
`brew`を使用可能にしておく必要があります。

```bash:curlのインストール
brew install curl
```
pythonに関しては好みのバージョン管理ツールを使用して入れるのがいいでしょう。
筆者はasdfを使用しているため次のコマンドを実行しました。
asdfにインストールのコマンドも一応記載しておきます。

```bash:asdfのインストール
brew install asdf
echo -e "\n. $(brew --prefix asdf)/libexec/asdf.sh" >> ${ZDOTDIR:-~}/.zshrc
```

```bash:プラグインの追加
asdf plugin add python
```

```bash:インストール可能なバージョンの一覧表示
asdf list all python
```

```bash:pythonのインストールとグローバルへのセット
asdf install python <バージョン>
asdf global python <バージョン>
```

上記コマンドは必要に応じて`global`を`local`としてください。

```bash:pythonのインストールを確認
python --version
```

バージョン情報が表示されれば成功です。


## 手順２：コマンドの修正

公式サイトで案内されているコマンドは次の通りです。

```bash:データセットダウンロードのためのコマンド
curl data.yt8m.org/download.py | partition=2/frame/train mirror=us python
```

このコマンドを必要に応じて修正します。
まず、地域がアジアであれば`mirror`を`asia`に修正します。
また必要なデータセットに応じてパスも変更します。
`partition=2/frame/train`の部分を、学習データであれば`train`、バリデーションデータであれば`validate`、テストデータであれば`test`に変更します。

また、`shard`オプションを指定することでダウンロードする数量を調整することも可能です。

以上を反映させたコマンド（shard=1:100, 地域=asia, 種類=train）は次の通りとなります。


```bash:データセットダウンロードのためのコマンド(修正後)
curl data.yt8m.org/download.py | shard=1,100 partition=2/frame/train mirror=asia python
```

データをダウンロードしたいディレクトリに移動し、上記コマンドを実行すればデータがダウンロードされるはずですが、このままだと恐らくエラーが起きるものと思います。
エラーを解消するには次の手順が必要です。

## 手順３：必要なモジュールのインストール

上記コマンドを実行すると次のような実行結果となり、エラーが表示されることと思います。

```bash:実行結果
 % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  4450  100  4450    0     0  11095      0 --:--:-- --:--:-- --:--:-- 11237
Traceback (most recent call last):
  File "<stdin>", line 17, in <module>
ModuleNotFoundError: No module named 'six'
```

`six`というモジュールがないと怒られています。

従って以下のpip installコマンドを実行しましょう。

```bash:sixのインストール
pip install six
```

その後再度ダウンロードコマンドを実行すると、次のように成功のログが表示されます。

```bash:データセットダウンロードの成功
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  4450  100  4450    0     0  10043      0 --:--:-- --:--:-- --:--:-- 10159
Starting fresh download in this directory. Please make sure you have >2TB of free disk space!
>> Downloading http://data.yt8m.org/2/download_plans/frame_train.json 102.7%Succesfully downloaded 2_frame_train_download_plan.json 215275 bytes.
Files remaining 3844
Downloading: train0255.tfrecord
>> Downloading http://asia.data.yt8m.org/2/frame/train/traineh.tfrecord 18.2%^CTraceback (most recent call last):
```
コマンドを実行したディレクトリを確認すると、データセットがダウンロードされていることと思います。

# おわりに

機械学習のラベリングツールについて調査する機会があり、テストデータとしてYouTube-8Mデータセットをダウンロードしようとしたらエラーで引っかかったので解消方法を残したく、記事を書きました。お役に立てましたら幸いです。