4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Amazon Mechanical Turk で課題を作成・発行する方法(画像分類課題)

Last updated at Posted at 2021-07-12

はじめに

先日、研究で画像分類タスクの人間データを集める際に、Amazon Mechanical Turk (以下AMT)を使用したのですが、一つにまとまった情報がなかったので、この記事でまとめて共有します。(AMT自体の説明や詳細については、少し古いですがこちらのスライドが参考になるかと思います。)

今回は、AMT側で用意されているテンプレートとCrowdHTMLというAMT用のタグを使用してシンプルな画像分類課題を作成しました。他の課題もテンプレが用意されているので、適宜自分の目的に合わせて作成してください。

また、より複雑な課題をオンラインで実施したい場合は、他のサービスなどを組み合わせる必要があると思います。詳しくは #より複雑な課題を提出したい場合は?で考察しています。

目次

  1. 事前準備
  2. AWSのS3に課題用の画像をアップする
  3. AMTで課題を作成
  4. 課題をバッチごとに提出
  5. 結果の確認
  6. より複雑な課題を提出したい場合は?

事前準備

  • AMTのRequesterアカウントを作成

    AMTでは課題に取り組むWorkerと、課題を出すRequesterが存在します。今回は課題を提出することが目的なのでここからRequesterアカウントを作成してください。

    また、Workerへの報酬を払うために、プリペイドへの入金、もしくはクレジットカードの登録が必要になります。この辺の設定は課題の提出前でも大丈夫です。
  • AWSのアカウントを作成

    S3の利用のために必要になります。ここでもクレジットカード等の料金支払い登録が必要です。

AWSのS3に課題用の画像をアップする

AWSのファイルストレージシステムであるS3に、課題に必要な画像をアップロードします。

まず、AMT用のバケットを作成します。
s3_console.png

その際、Workerが画像にアクセスできるように、"Block all public access"をオフにします。
s3_public_access.png

また、"Amazon S3" → "[作成したバケット]" → "Permissions"のCORS設定を以下のように編集します。(参照: CORS configuration requirement)
s3_permissions.png

CORS
[
    {
        "AllowedHeaders": [],
        "AllowedMethods": [
            "GET"
        ],
        "AllowedOrigins": [
            "*"
        ],
        "ExposeHeaders": []
    }
]

以上でバケットの設定は完了です。

次に、S3に画像をアップロードしていきます。まず、本課題用のフォルダを作成します。
s3_create_folder.png

作成したフォルダに画像をアップロードします。画像のフォルダを一括でアップロードすることもできます。
s3_upload.png

この際、public-readアクセスの設定を忘れないようにしましょう。
s3_upload_public_access.png

これで画像をアップロードできました。画像のページにいくと、URLが確認できます。別アカウントか、ログインしていない状態でもそのURLにアクセスできるか確認しておきましょう。
s3_object_url.png

課題を提出する際には、画像のURLのリストを作成する必要があります。その手順は #課題をバッチごとに提出 で説明しています。

AMTで課題を作成

AMTで"New Project"を作成します。今回は"Image Classification"のテンプレートを選択しました。
amt_new_project.png

課題の設定を行います。特に重要なのは報酬などについての設定だと思います。以下でいくつかの項目についてまとめています。
amt_project_settings.png

  • Reward per assignment

    assignment毎の報酬額。"assignment"とは、提出されたタスク1つのことを指し、ここでは「1つの画像を分類する作業」を意味します。
  • Number of assignments per task

    あるタスクを何人のワーカーに行ってもらうか。今回の例では、「1画像あたり何人のワーカーに分類してもらうか」という意味です。
  • Time allotted per assignment

    1タスクにかかる最大時間。
  • Task expires in

    タスクの有効期限。
  • Auto-approve and pay Workers in

    RequesterはWorkerが提出したタスクを承認(または拒否)することで報酬が発生(または拒否)するのですが、ここで指定した時間を経過すると自動で承認されます。

HTML/CSSを使ってタスクをデザインしていきます。テンプレの場合は、Crowd HTMLという要素を使ってタスクをデザインすることができます。詳しくはドキュメントを参照してください。
ここで大事なのは画像の指定方法です。<crowd-image-classifier>タグの要素srcにURLを指定することで画像を表示します。ここではsrc="${image_url}"と変数を置いています。これは、課題を提出する際に、URLをCSVファイルでまとめて提出するのですが、そのときにURLが格納される変数です。
amt_task_design.png
タスクのデザインをして、プレビューを見て問題なさそうであれば"Finish"を押して完成です。画像は課題の提出の際に確認できます。また、タスクの設定やデザイン等は後で編集できます。
amt_task_design_preview.png

課題をバッチごとに提出

課題を提出する際は、対象となる画像のURLをCSVファイルにまとめて提出します。このURLをいくつかに分割して提出することも可能です。
CSVファイルの中身について説明します。タスクをデザインした時、src="${image_url}"というように変数を置きました。この変数名をCSVファイルの先頭に置き、その後urlの一覧を1列に並べます。

file_list.csv
image_url
https://amt-backet.s3.ap-northeast-1.amazonaws.com/mturk-images/airplane_test_000.jpg
https://amt-backet.s3.ap-northeast-1.amazonaws.com/mturk-images/airplane_test_001.jpg
https://amt-backet.s3.ap-northeast-1.amazonaws.com/mturk-images/airplane_test_002.jpg
**URL変数とCSVファイルについてのtips**
CSVファイルにURLを並べるのは煩雑なので、URLの共通部分がある場合は、HTMLの要素に先に記述しておけば、CSVファイルの中身が綺麗になります。

== 記述例 ==

task-design.html
<crowd-image-classifier 
    src="https://amt-backet.s3-ap-northeast-1.amazonaws.com/mturk-images/${image_url}"
    ...
>
file_list.csv
image_url
airplane_test_000.jpg
airplane_test_001.jpg
airplane_test_002.jpg
**CSVファイル作成コマンド例**
例1 URL一覧をCSVファイルに書き出す
images$ ls -1 > file_list.csv
例2 ソートして書き出す
images$ find . -name "*.jpg" | sort > file_list.csv

課題を提出します。AMTのRequesterページから"New Batch with an Existing Project"を選択すると、作成したタスク一覧が表示されるので、該当タスクの"Publish Batch"をクリックします。
amt_projects.png

そして、先ほど作成した画像URL一覧のCSVファイルをアップロードします。
amt_publich_batch.png

プレビューで画像が表示されるかなどを確認し、報酬額等の設定を再度確認した後、"Publish"を押せば課題が提出されます。
amt_publish_batch_preview.png
amt_publish_batch_confirm.png

結果の確認

AMTのRequesterページから"Manage"を選択すると提出したバッチの一覧を確認できます。タスクがどのくらい進んでいるかも確認できますね。タスクにもよりますが、かなり素早くデータを集めることができると思います。(筆者は数時間程度で4800枚もの画像分類データを集めることができました!)
amt_batch_list.png

バッチをクリックするとそのバッチに関する情報が表示され、"Results"を押すと結果が確認できます。
amt_batch_details.png

結果のページでは、提出されたタスク(assignment)の承認や結果のフィルターを行うことができます。CSVファイルとして結果をダウンロードすることも可能です。
amt_batch_results.png

より複雑な課題を提出したい場合は?

今回は、AMT側で用意されているテンプレートを使用してシンプルな画像分類課題を作成しました。
ただ、このテンプレートやCrowdHTMLは制約も多く、単純な課題しか作成できません。より複雑な課題の人間データを集めたい場合は、サーバーをホストして自分で課題を作るか、他のサービスを使って課題を作成する必要があります。
例えば、PsycoPyで作った課題をオンライン実験用に変換するとか。この手順はラボの後輩@Tiger-0512が記事にしてくれています。(PsycoPyを使用してオンライン実験を始めるまで)

別のサイト等で課題を作成した場合は、その課題のURLをAMTの画面に貼り、Workerに課題のリンクに飛んでもらい、リンク先で課題を解いてもらった後、AMTのページに戻ってsubmitを押してもらうという流れが考えられます。
つまり、AMTで被験者の募集と報酬の支払いを行い、別のページで課題を解いてもらうという方法です。その際、課題のページでWorkerIDを入力してもらえば、AMT側での報酬等のやり取りもスムーズになるかと思います。

尚、筆者はここまでは実践していないので、もしこのような方法を試した方がいれば、共有していただけると幸いです!

参考文献

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?