機械学習のための画像へのラベル付け

画像に境界ボックスを描画して、データベースに保存します

私たちは自動運転車企業であり、大量のイメージにラベルを付ける必要があります。イメージのURLのリストを取得するツールを作成します。これによって、エンドユーザーは各イメージに境界ボックスを描画して、結果をAPIに保存できるようになります。ツールの作成にかかる時間は、全部で5分です。


Retoolアカウントがまだない場合は、まずアカウントを作成します。
アカウントの作成

1. イメージのリストの取得

事前に読み込まれたデータを用意してあるので、最初にonboarding_db (readonly)に切り替えましょう。

次に、すべてのイメージを取得するSQLクエリーを作成します。

select * from images order by id;

これをプレビューしましょう。問題がなければ、保存します。クエリー・エディターが以下のように表示されます。

`Image`をすべて取得するクエリー`Image`をすべて取得するクエリー

Imageをすべて取得するクエリー

では、右側からTableをドラッグしましょう。最後のクエリーからデータが自動的に移入されます(この場合、イメージです)。Tableにラベルを付けるイメージの準備ができました。現在、アプリは以下のようになっています。

すべての`Image`が含まれた`Table`すべての`Image`が含まれた`Table`

すべてのImageが含まれたTable

2. レンダリングおよびラベル付け

各イメージをタグ付け用キャンバスにレンダリングしましょう。右側からBoundingBoxコンポーネントをドラッグしましょう。これは下の方にあるので、上部の検索ボックスを使用すると便利です。

右側で`BoundingBox`コンポーネントを検索します右側で`BoundingBox`コンポーネントを検索します

右側でBoundingBoxコンポーネントを検索します

コンポーネントをドラッグして、現在テーブルで選択されているものを参照するようにimage_urlを変更しましょう。これは{{table1.selectedRow.data.image_url}}になります。

現在、BoundingBoxには、Tableで選択されたイメージが表示されています。Tableで別の行を選択すると、BoundingBoxにはタグ付け用に別のイメージが表示されます。

現在、データに境界ボックスがなくても、データベースに存在すれば、境界ボックスを表示することが必要になることがあります。右側に「Initial Bounding Boxes」が表示されていますか。
これを{{JSON.parse(table1.selectedRow.data.labels)}}に変更しましょう。境界ボックスがないので、何も起きませんが、後で使用できるようになります。

作業中の`BoundingBox`コンポーネント。`Table`で選択した行が変更されると、`BoundingBox`のイメージも変更されます作業中の`BoundingBox`コンポーネント。`Table`で選択した行が変更されると、`BoundingBox`のイメージも変更されます

作業中のBoundingBoxコンポーネント。Tableで選択した行が変更されると、BoundingBoxのイメージも変更されます

次のステップに進む前に、いくつかのボックスにラベルを付けてみましょう。BoundingBoxでは、Commandキー(Macの場合)またはControlキー(Windows / Linuxの場合)を押すと、パンとズームを使用できるようになります。

3. ラベルの保存

ここで、タグをデータベースに保存する必要があります。Buttonをドラッグして、これに「save tags」というラベルを付けましょう。アクションがrun a queryであることを確認し、新規クエリーを作成します。

ラベルを保存する新規クエリーを作成しますラベルを保存する新規クエリーを作成します

ラベルを保存する新規クエリーを作成します

データをPUTする必要があるため、作成したクエリーのリソースをonboarding_apiに変更しましょう。次に、以下の値を入力してPUTクエリーを作成します。id{{table1.selectedRow.data.id}}の選択したイメージをPUTします。

本文では、キーはlabelsになり、値は以下のようになります。

{{ JSON.stringify(boundingbox1.boundingBoxes) }}
`PUT`に値を入力します`PUT`に値を入力します

PUTに値を入力します

クエリーが正常に実行された後、新しい境界ボックスを表示できるように、元のクエリーをリフレッシュする必要があります。下にスクロールして、「on success, trigger these queries」を、元のクエリー(query1)を含めるように変更します。

`PUT`が成功した後に`query1`をリフレッシュします`PUT`が成功した後に`query1`をリフレッシュします

PUTが成功した後にquery1をリフレッシュします

これで終了です。クエリーを保存して実行しましょう。境界ボックスを描画して、Buttonを押します。境界ボックスがデータベースに保存され、Tableがリフレッシュされます。境界ボックスができました。

BoundingBoxが存在する場合にボックスをレンダリングするように設定したので、Tableの別の行をクリックします。戻ると、境界ボックスがまだ表示されています。ボックスをいくつか追加できます。その後、saveを押すと、データが失われることはありません。

4. 実際の使用

このツールの本番での稼働の準備が完了しました。リンクを同僚に送信すると、同僚はこのツールを使用してすぐにデータをタグ付けできるようになります。必要であれば、承認ワークフローを作成し(管理者がラベル付けされたイメージを承認する必要があります)、ラベル付けされていないイメージや、特定のユーザー(current_user変数を使ってみます)に割り当てられたイメージのみを取得するようにSQLクエリーを変更することもできます。

オペレーターに特定の権限を付与している場合、オペレーターはツールの編集やクエリーの変更を行うことはできません。実行できるのは、作成したツールを使用することだけです。

イメージにタグを付けるツールの作成にかかった時間は、全部で5分です。


独自のML用ツールを作成しますか?
アカウントの作成