sim2realのためには、質感予測モデルが必要になるんだろうなと思っただけのポエム

結論はタイトル。以下思った経緯をダラダラと。

sim2realという言葉があるらしい。

以下のtweetで知った

言葉は初めて聞いたけど、概念はなんとなくは知っていて、 現実のデータ集めるの大変だから、計算機上のシミュレーション環境で学習させて、 それを現実に適用させれば良いやんというアイデアらしい。

上のツイートや下のツイートにもある通り、若干筋悪の可能性があるみたい

そもそもこれは、以下のツイート に由来するもの

一旦上の議論を忘れて、現実世界をシミュレーション環境に再現する技術がどうなっているかが気になる。 画像や動画から3Dモデルとして取り込むのは検索するとめちゃくちゃ出てくる。 更に進んで、質感を予測するようなモデルが重要になるんだろうなあ(確実に先行研究が大量にあるはずだが見当たらない)。

ここでいう質感は、力学的な物性とほぼ同義で、粘性・弾性率・摩擦係数とかそういうの(物理シミュレーションで設定するやつ)

いろいろな天気の道路の画像(動画)から、道路の摩擦係数なんかを推定できると、晴れの日、雨の日、雪の日万能で運転できるとかありそう。
質感で重そうだと判断したらアームの力を強めて、軽そうだと判断できたらアームの力を弱めて壊さないようにそっと持ち上げるとかが可能になりそう。

水たまりがあると速度落とす走行データから学習されるよりも、水たまりと歩行者を再現して、歩行者に水をかけたら負の報酬を与える強化学習を計算機上で学習させたほうが効率いいとかもありそう。

Djangoメモ: ForeignKeyでmodelsを接続するときの引数について

参考

モデルフィールドリファレンス | Django ドキュメント | Django

メモ

コード例

xxxx = models.ForeginKey(User, on_delete=models.CASCADE, related_name='hogehoge')
  • models.CASCADE: 関連項目が消えたら一緒に消す。ユーザが消えたら記事も消すなど(参考
  • related_name: 複数フィールドで同じモデルを参照する場合に使用。逆参照時にここで指定したものを使用(参考, 参考2

Djangoメモ: PKとなるIDをmodelsでUUIDFieldを使って定義する話

参考

公式ドキュメント Model field reference | Django documentation | Django

メモ

以下のように使用

id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
  • 通常IDは、そのテーブルのPKにするので、primary_key=Trueを設定
  • defaultでuuidを使用するのが良い(通常DjangoではPKが連番に指定される(インサートしたときとかに被る可能性がある)
  • uuid.uuid4についてはこちら
  • editable=Falseにすると、管理者からも見れなくなる(参考

【作業ログ】2021-11-03(水)

【やったこと】

  • Dockerを使用する開発環境構築について一部整理(Dockerfile作成)
  • 個人開発用レポジトリ作った
  • Notionのボードによるタスク管理を開始
  • やりたいことの現状整理を作成(直近タスク、Output、Input)

【次にやりたいこと】

  • Dockerを使用する開発環境構築について一部整理(Dockerfile作成)
  • 個人開発のモックアップ作成
  • Vue.jsの勉強
  • クラウド系資格の勉強

dockerでPython開発環境を作るためのメモ(その1): Dockerfileの作成

概要

開発環境(Python/Django)としてremote-containersでアクセスして作業しているが、復習 & 改めて理解が怪しいところをはっきりさせるためにメモする

GitHub - yamap55/python_repository_simple

Dockerfileを作る

イメージを選択

今回はPython環境を作りたいので、PythonOfficialイメージから作っていく。 (busterやbulls-eyeはLinux (debian) のバージョン)

Docker Hub

FROM python:3.9.7-buster

環境変数の設定

apt installするときにダイアログボックスを開こうとするパッケージがあって、そのインストール時に失敗するのを避けるために入れる

この方法は、本来は避けたほうがいい

Dockerfileで思考停止的にENV DEBIAN_FRONTEND noninteractiveを書いてはいかん | てくてく無窮動

ENV DEBIAN_FRONTEND=noninteractive

timezone設定で固まらないように設定しておく

Docker Buildでタイムゾーン設定で固まる : 量子プログラミング入門→量子コンピューティングサービス構築入門

ENV TZ=Asia/Tokyo
RUN echo $TZ > /etc/timezone

以降のRUN, CMD, ENTRYPOINT, COPY, ADDの実行場所を指定

(複数回WORKDIRを指定することも可能)

Dockerfile リファレンス — Docker-docs-ja 20.10 ドキュメント

ARG WORKDIR=/xxxx/xxxx
WORKDIR ${WORKDIR}

User ID (UID), Group ID (GID)の設定

非ルートユーザで各種操作を実行するため。IDは一般に1000から。

Dockerfile のベストプラクティス — Docker-docs-ja 1.9.0b ドキュメント

ARG USERNAME=xxxx
ARG USER_UID=1000
ARG USER_GID=$USER_UID

デフォルトシェルの変更

SHELL命令で、 シェル 形式で使われるデフォルトのコマンドを上書き

Dockerfile リファレンス — Docker-docs-ja 20.10 ドキュメント

wgetコマンドが失敗した場合に、ビルドが成功しないようにするため、pipefailをつける。

Dockerfileでの|(パイプ)の扱い - Qiita

-cオプションは以下参考

https://genzouw.com/entry/2021/01/08/202800/2109/

最後にchsh -s(change shell。-sはシェル名の指定)

SHELL ["/bin/bash", "-o", "pipefail", "-c"]
RUN chsh -s /bin/bash

必要なパッケージのインストール

apt-get cleanrm -rf /var/lib/apt/lists/*で容量を小さく

Dockerのイメージビルド中でapt-getを高速化するたった1つの方法 | ゲンゾウ用ポストイット

ubuntuをdocker buildするときaptのキャッシュを削除し容量を小さくする - Qiita

apt-get installする引数の持ち方

Dockerfile のベストプラクティス — Docker-docs-ja 1.9.0b ドキュメント

RUN rm -rf /var/lib/apt/lists/* \
    && apt-get update \
    && apt-get upgrade -y \
    && apt-get -y --no-install-recommends install \
         less \
         sudo \
         tzdata \
         vim \
    && apt-get autoremove -y \
    && apt-get clean -y \
    && rm -rf /var/lib/apt/lists/*

root以外のユーザーをコンテナに追加する

Add non-root user to a container

RUN groupadd --gid $USER_GID $USERNAME \
    && useradd -s /bin/bash --uid $USER_UID --gid $USER_GID -m $USERNAME \
    # Add sudo support for non-root user
    && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
    && chmod 0440 /etc/sudoers.d/$USERNAME

ターミナルの諸々設定

gitコマンドのブランチ名の補完とか、プロンプトに各種追加情報を表示可能にする

git-completion.bash を使ってブランチ名やコマンドの補完を可能にする – 極上の人生

https://qiita.com/varmil/items/9b0aeafa85975474e9b6

プロンプトの表示

Linux のコマンドプロンプト表示を自分好みに設定する | Linux Magazine

hadolint

dockerfile用のlintツール

「hadolint」にシバかれながら美しいDockerfileを書き上げる - 憂鬱な世界にネコパンチ!

pipのキャッシュを消す

機械学習なdockerfileを書くときに気をつけとくと良いこと - nykergoto’s blog