【Docker-compose】Label Studioとは:機械学習ラベリングのための開発プラットフォーム

AI

はじめに

機械学習を行うにあたり,ラベリングとは非常に重要なプロセスです.ラベリングとは,データセットを人間が理解できる形式に変換することで,機械学習アルゴリズムが正しく学習するために必要なアノテーション付きデータを提供することです. Label Studioは,このような機械学習ラベリングをより効率的に行うことができるオープンソースのラベリングフレームワークです.

機械学習とは

機械学習とは,人工知能の一種で,コンピューターにデータを与え,そのデータからパターンやルールを学習させることにより,未知のデータに対して予測や分類を行う技術です.機械学習は,データマイニング,統計学,最適化理論,確率論などの手法を組み合わせて,コンピューターに自律的に学習する能力を与えます.例えば,ある商品の売り上げデータを機械学習アルゴリズムに与えることで,その商品の需要予測を行うことができます.機械学習は,ビジネスや医療,自動運転などの分野で広く利用され,今後ますます重要な技術となっていくことが予想されます.

ラベリングとは

機械学習のラベリングとは,機械学習モデルにデータセットのラベルを付ける作業です.機械学習モデルは,データセットのラベルを参照して,新しいデータを分類,予測,または識別することができます.ラベリングには,画像,音声,テキストなどのデータタイプをラベル付けすることが含まれます.ラベリングは,高品質のデータセットを作成するために非常に重要であり,機械学習モデルの正確性や汎化能力に影響を与えます.Label Studioは,多様なデータタイプをサポートし,高品質のデータセットを効率的に作成することができるため,機械学習のラベリングに最適なツールです.

Dockerとは?

Dockerは,アプリケーションをコンテナと呼ばれる独立した環境で実行するためのプラットフォームです.通常,アプリケーションを実行するためには,複数の要素(OS,ライブラリ,フレームワークなど)をインストールする必要がありますが,Dockerを使うことでこれらの要素をコンテナにまとめ,簡単に環境を構築することができます.

例えば,Webアプリケーションを開発する場合,ローカル環境でアプリケーションを実行するためには,Webサーバー,データベース,フレームワークなどをインストールする必要があります.しかし,Dockerを使うと,これらの要素をコンテナにまとめ,簡単にアプリケーションを実行することができます.また,コンテナは環境が独立しているため,他のアプリケーションや環境に影響を与えることがないというメリットもあります.

Docker-composeとは?

Docker-composeは,Dockerを使って複数のコンテナをまとめて管理するためのツールです.複数のコンテナを使ってアプリケーションを構成する場合,コンテナの起動順序や依存関係を考慮する必要がありますが,Docker-composeを使うことでこれらの管理を簡単に行うことができます.

例えば,Webアプリケーションを構成する場合,データベース,Webサーバー,バッチ処理など,複数のコンテナが必要になります.Docker-composeを使うと,これらのコンテナを一括で起動したり,停止したりすることができます.また,コンテナ間の通信設定なども,Docker-composeの設定ファイルで簡単に行うことができます.

DOCKER_BUILDKITとは?

DOCKER_BUILDKITは,Dockerイメージをビルドするためのツールキットです.これにより,より高速で効率的なビルドが可能になります.

通常のDockerビルドでは,Dockerfileで指定されたコマンドが1つずつ実行されます.そのため,各コマンドの実行中にビルドキャッシュが失われる可能性があり,ビルドの速度が低下する場合があります.しかし,DOCKER_BUILDKITを使用すると,ビルドプロセス全体が並列化され,ビルドキャッシュの再利用が最適化されます.その結果,高速かつ効率的なDockerイメージのビルドが可能になります.

また,DOCKER_BUILDKITには,BuildKitと呼ばれる高度なビルドエンジンも含まれています.BuildKitには,Dockerfileの記述方法を拡張する機能が備わっており,より高度なビルドプロセスを実現することができます.さらに,BuildKitは,Docker Hubや他のレジストリから直接ビルドすることも可能です.

総じて,DOCKER_BUILDKITは,高速かつ効率的なDockerイメージのビルドを実現するための重要なツールキットであり,現代のコンテナ化において不可欠な技術の1つです.

他のアノテーションツール

VATICは,ユーザーインターフェースがシンプルで直感的なため,非常に人気があります.

https://hamaruki.com/quick-start-with-docker-compose-vatic/

https://hamaruki.com/convert-vatic-to-ava-dataset/

Label Studioの特徴

Label Studioは,以下のような特徴を持っています.

多様なデータタイプのサポート

Label Studioは,画像,テキスト,音声,および動画など,多様なデータタイプをサポートしています.さらに,カスタムのデータタイプを簡単に作成できるため,データセットの種類に制限されることはありません.

プラットフォームの拡張性

Label Studioは,コンポーネントベースのアーキテクチャを採用しているため,拡張性が高く,カスタマイズが容易です.新しいタスク,アノテーションの種類,および機能を簡単に追加できます.

豊富なアノテーションツール

Label Studioには,多様なアノテーションツールがあり,データをより正確にラベリングできます.また,ツールの拡張も容易であるため,必要に応じてカスタマイズできます.

Label Studioのインストール

https://github.com/heartexlabs/label-studio/releases/tag/1.7.2

上記のリポジトリをダウンロードして,一部シェルスクリプトを変更します.

dockerfileの変更


maki@maki-lab3060V3:~/prj/label-studio-1.7.2$ docker-compose up
label-studio-172_db_1 is up-to-date
Starting label-studio-172_app_1 ... error

ERROR: for label-studio-172_app_1  Cannot start service app: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "./deploy/docker-entrypoint.sh": permission denied: unknown

ERROR: for app  Cannot start service app: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "./deploy/docker-entrypoint.sh": permission denied: unknown
ERROR: Encountered errors while bringing up the project.
maki@maki-lab3060V3:~/prj/label-studio-1.7.2$

ダウンロードしたまま起動すると上記のようにパーミッションで怒られます.そこでパーミッションの変更をします.


# syntax=docker/dockerfile:1.3
FROM node:14 AS frontend-builder

ENV NPM_CACHE_LOCATION=$HOME/.npm \
    PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=true

WORKDIR /label-studio/label_studio/frontend

COPY --chown=1001:0 label_studio/frontend .
COPY --chown=1001:0 label_studio/__init__.py /label-studio/label_studio/__init__.py

RUN --mount=type=cache,target=$NPM_CACHE_LOCATION,uid=1001,gid=0 \
    npm ci \
 && npm run build:production

FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive \
    LS_DIR=/label-studio \
    PIP_CACHE_DIR=$HOME/.cache \
    DJANGO_SETTINGS_MODULE=core.settings.label_studio \
    LABEL_STUDIO_BASE_DATA_DIR=/label-studio/data \
    OPT_DIR=/opt/heartex/instance-data/etc \
    SETUPTOOLS_USE_DISTUTILS=stdlib

WORKDIR $LS_DIR

# install packages
RUN set -eux \
 && apt-get update \
 && apt-get install --no-install-recommends --no-install-suggests -y \
    build-essential postgresql-client libmysqlclient-dev mysql-client python3-pip python3-dev \
    git libxml2-dev libxslt-dev zlib1g-dev gnupg curl lsb-release libpq-dev dnsutils vim && \
    apt-get purge --assume-yes --auto-remove --option APT::AutoRemove::RecommendsImportant=false \
     --option APT::AutoRemove::SuggestsImportant=false && rm -rf /var/lib/apt/lists/* /tmp/*

RUN --mount=type=cache,target=$PIP_CACHE_DIR,uid=1001,gid=0 \
    pip3 install --upgrade pip setuptools && pip3 install uwsgi uwsgitop

# incapsulate nginx install & configure to a single layer
RUN set -eux; \
    curl -sSL https://nginx.org/keys/nginx_signing.key | apt-key add - && \
    echo "deb https://nginx.org/packages/mainline/ubuntu/ $(lsb_release -cs) nginx" >> /etc/apt/sources.list && \
    apt-get update && apt-get install -y nginx && \
    apt-get purge --assume-yes --auto-remove --option APT::AutoRemove::RecommendsImportant=false \
     --option APT::AutoRemove::SuggestsImportant=false && rm -rf /var/lib/apt/lists/* /tmp/* && \
    nginx -v

COPY --chown=1001:0 deploy/default.conf /etc/nginx/nginx.conf

RUN set -eux; \
    mkdir -p $OPT_DIR /var/log/nginx /var/cache/nginx /etc/nginx && \
    chown -R 1001:0 $OPT_DIR /var/log/nginx /var/cache/nginx /etc/nginx

# Copy and install middleware dependencies
COPY --chown=1001:0 deploy/requirements-mw.txt .
RUN --mount=type=cache,target=$PIP_CACHE_DIR,uid=1001,gid=0 \
    pip3 install -r requirements-mw.txt

# Copy and install requirements.txt first for caching
COPY --chown=1001:0 deploy/requirements.txt .
RUN --mount=type=cache,target=$PIP_CACHE_DIR,uid=1001,gid=0 \
    pip3 install -r requirements.txt

COPY --chown=1001:0 . .
RUN --mount=type=cache,target=$PIP_CACHE_DIR,uid=1001,gid=0 \
    pip3 install -e . && \
    chown -R 1001:0 $LS_DIR && \
    chmod -R g=u $LS_DIR

RUN rm -rf ./label_studio/frontend
COPY --chown=1001:0 --from=frontend-builder /label-studio/label_studio/frontend/dist ./label_studio/frontend/dist

RUN python3 label_studio/manage.py collectstatic --no-input && \
    chown -R 1001:0 $LS_DIR && \
    chmod -R g=u $LS_DIR

ENV HOME=/label-studio

EXPOSE 8080

COPY ./deploy/docker-entrypoint.sh ./deploy/docker-entrypoint.sh
RUN chmod +x ./deploy/docker-entrypoint.sh

USER 1001

ENTRYPOINT ["./deploy/docker-entrypoint.sh"]
CMD ["label-studio"]

下記の個所を追加しました.


COPY ./deploy/docker-entrypoint.sh ./deploy/docker-entrypoint.sh
RUN chmod +x ./deploy/docker-entrypoint.sh

.shファイルの変更

パスにファイルがないと怒られるので絶対パスに変更します.


Attaching to label-studio-172-app-1, label-studio-172-db-1, label-studio-172-nginx-1
label-studio-172-db-1     | 2023-04-17 05:51:13.832 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
label-studio-172-db-1     | 2023-04-17 05:51:13.832 UTC [1] LOG:  listening on IPv6 address "::", port 5432
label-studio-172-db-1     | 2023-04-17 05:51:13.841 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
label-studio-172-db-1     | 2023-04-17 05:51:13.871 UTC [25] LOG:  database system was shut down at 2023-04-17 05:51:12 UTC
label-studio-172-db-1     | 2023-04-17 05:51:13.880 UTC [1] LOG:  database system is ready to accept connections
label-studio-172-app-1    | ./deploy/docker-entrypoint.sh: Looking for init scripts in /label-studio/deploy/docker-entrypoint.d/app/
label-studio-172-app-1    | ./deploy/docker-entrypoint.sh: Launching /label-studio/deploy/docker-entrypoint.d/app/20-wait-for-db.sh
label-studio-172-app-1    | /label-studio/deploy/docker-entrypoint.d/app/20-wait-for-db.sh: line 1: ../common/20-wait-for-db.sh: No such file or directory
label-studio-172-app-1 exited with code 127
label-studio-172-nginx-1  | ./deploy/docker-entrypoint.sh: Looking for init scripts in /label-studio/deploy/docker-entrypoint.d/nginx/
label-studio-172-nginx-1  | ./deploy/docker-entrypoint.sh: Launching /label-studio/deploy/docker-entrypoint.d/nginx/10-configure-nginx.sh
label-studio-172-nginx-1  | /label-studio/deploy/docker-entrypoint.d/nginx/10-configure-nginx.sh: line 1: ../common/10-configure-nginx.sh: No such file or directory
label-studio-172-nginx-1 exited with code 127

eploy\docker-entrypoint.d\app\30-run-db-migrations.sh
の中身を以下のように絶対パスで指定します.


/label-studio/deploy/docker-entrypoint.d/common/30-run-db-migrations.sh

エラーが発生したファイルすべてにこれを実施します.

Label Studioの起動

DOCKER_BUILDKITを使用してdocker-composeで起動します.


DOCKER_BUILDKIT=1 docker-compose up --build

Label Studioの使い方

プロジェクトの作成

Label Studioを使用するには,まず,プロジェクトを作成する必要があります.プロジェクトを作成すると,データセット,アノテーションツール,およびラベリングジョブを管理できます.データセットをアップロードするか,外部システムと接続してデータを取り込むことができます.

ラベリングジョブの作成

プロジェクトを作成したら,ラベリングジョブを作成します.ラベリングジョブは,データセットからサンプルを選択し,アノテーションタスクを作成するための基本的なユニットです.アノテーションタスクは,アノテーションツールを使用して,選択したデータをラベリングするためのものです.

Label Studioには,多数のアノテーションツールが用意されており,必要に応じてカスタマイズすることができます.画像に対するバウンディングボックス,キャプション,セグメンテーション,音声に対するトランスクリプション,テキストに対する分類,および固有表現認識など,多数のアノテーションタイプがあります.

デーエのエクスポート

ラベリングジョブが完了したら,Label Studioは,機械学習モデルに入力するためのアノテーション付きデータを生成します.データは,多数のフォーマットでエクスポートでき,多数の機械学習フレームワークに統合することができます.

Label Studioのメリット

Label Studioは,以下のようなメリットがあります.

高い拡張性

Label Studioは,コンポーネントベースのアーキテクチャを採用しているため,必要に応じてカスタマイズできます.これにより,様々なニーズに応じて拡張することができ,ラベリングの生産性を向上させることができます.

豊富なアノテーションツール

Label Studioには,多数のアノテーションツールが用意されており,データをより正確にラベリングすることができます.また,ツールの拡張も容易であるため,必要に応じてカスタマイズすることができます.

多様なデータタイプのサポート

Label Studioは,画像,テキスト,音声,および動画など,多様なデータタイプをサポートしています.これにより,多様なデータセットに対応できます.

オープンソース

Label Studioは,オープンソースであり,誰でも自由に使用することができます.また,コミュニティによる開発が進んでおり,機能の拡張やバグの修正など,積極的に改善されています.

Label Studioの自動アノテート

機械学習アルゴリズムを使用して,データセットの自動アノテーションを行う機能です.自動アノテーションを行うには,Label Studioは機械学習モデルをトレーニングします.トレーニング済みのモデルは,未知のデータを受け取り,それを正確にラベル付けすることができます.この機能により,ラベル付けにかかる時間を大幅に削減し,データの量と品質を向上させることができます.ただし,自動アノテーションは完全ではないため,確認作業が必要です.

まとめ

Label Studioは,高い拡張性,豊富なアノテーションツール,多様なデータタイプのサポート,そしてオープンソースというメリットがあります.これにより,データラベリングの生産性を向上させ,機械学習モデルの精度向上につなげることができます.

FAQs

Q1: Label Studioは,どのようなデータタイプに対応していますか?

A1: Label Studioは,画像,テキスト,音声,および動画など,多様なデータタイプに対応しています.

Q2: Label Studioは,どのようなメリットがありますか?

A2: Label Studioは,高い拡張性,豊富なアノテーションツール,多様なデータタイプのサポート,プラグインのサポート,そしてオープンソースというメリットがあります.

Q3: Label Studioは,どのようなシステムと接続することができますか?

A3: Label Studioは,外部システムと接続してデータを取り込むことができます.

Q4: Label Studioは,誰でも自由に使用することができますか?

A4: はい,Label Studioは,オープンソースであり,誰でも自由に使用することができます.

Q5: Label Studioは,どのようなアノテーションタイプがありますか?

A5: Label Studioには,画像に対するバウンディングボックス,キャプション,セグメンテーション,音声に対するトランスクリプション,テキストに対する分類,および固有表現認識など,多数のアノテーションタイプがあります.

コメント

タイトルとURLをコピーしました