sim2realのためには、質感予測モデルが必要になるんだろうなと思っただけのポエム
結論はタイトル。以下思った経緯をダラダラと。
sim2realという言葉があるらしい。
以下のtweetで知った
OpenAIがロボティクスでのSim2Real強化学習の路線は、現状困難であると結論付けて撤退したことの意義は大きいと思うんだよなぁ。
— HELLO CYBERNETICS (@ML_deep) 2022年1月16日
作られ固定された世界(環境乱択化も所詮有限なので)で良い方策を得られることが思っているほど実世界では有用ではないと言っているのと同じな気がしてる。
言葉は初めて聞いたけど、概念はなんとなくは知っていて、 現実のデータ集めるの大変だから、計算機上のシミュレーション環境で学習させて、 それを現実に適用させれば良いやんというアイデアらしい。
上のツイートや下のツイートにもある通り、若干筋悪の可能性があるみたい
囲碁将棋なんかの完全情報ゲームと実世界(動的未知環境)でのタスクって全く性質が違うと思ってたけど,前者が上手くいくから後者も上手くいくだろうという考えも以外と多いんだな...
— 東海林ファジィロボット研究所 所長 (@Toukairinn_FUZZ) 2022年1月16日
そもそもこれは、以下のツイート に由来するもの
この10年間コンピュータサイエンスの多くの分野で機械学習がルールベースタイプの性能を大きく上回ってきたのは事実だと思います。楽観的かもしれないですが、ルールを書いてあらゆるエッジケースを潰すより、DLの性能が上がり自然にエッジケースの問題が消える事のが現実味があると考えています。 https://t.co/1p3Qh7cfAE
— 山本一成🚙TURING創業メンバー募集🌕 (@issei_y) 2022年1月16日
一旦上の議論を忘れて、現実世界をシミュレーション環境に再現する技術がどうなっているかが気になる。 画像や動画から3Dモデルとして取り込むのは検索するとめちゃくちゃ出てくる。 更に進んで、質感を予測するようなモデルが重要になるんだろうなあ(確実に先行研究が大量にあるはずだが見当たらない)。
ここでいう質感は、力学的な物性とほぼ同義で、粘性・弾性率・摩擦係数とかそういうの(物理シミュレーションで設定するやつ)
いろいろな天気の道路の画像(動画)から、道路の摩擦係数なんかを推定できると、晴れの日、雨の日、雪の日万能で運転できるとかありそう。
質感で重そうだと判断したらアームの力を強めて、軽そうだと判断できたらアームの力を弱めて壊さないようにそっと持ち上げるとかが可能になりそう。
水たまりがあると速度落とす走行データから学習されるよりも、水たまりと歩行者を再現して、歩行者に水をかけたら負の報酬を与える強化学習を計算機上で学習させたほうが効率いいとかもありそう。
Djangoメモ: ForeignKeyでmodelsを接続するときの引数について
参考
モデルフィールドリファレンス | Django ドキュメント | Django
メモ
コード例
xxxx = models.ForeginKey(User, on_delete=models.CASCADE, related_name='hogehoge')
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についてはこちら
- uuid4がかぶらない理由はこちら
- editable=Falseにすると、管理者からも見れなくなる(参考)
django-adminコマンドがnot foundと言われる
python -m django
でdjango-admin
コマンドを代替可能
https://docs.djangoproject.com/ja/4.0/faq/troubleshooting/#command-not-found-django-admin
dockerでPython開発環境を作るためのメモ(その1): Dockerfileの作成
概要
開発環境(Python/Django)としてremote-containersでアクセスして作業しているが、復習 & 改めて理解が怪しいところをはっきりさせるためにメモする
GitHub - yamap55/python_repository_simple
Dockerfileを作る
イメージを選択
今回はPython環境を作りたいので、PythonのOfficialイメージから作っていく。 (busterやbulls-eyeはLinux (debian) のバージョン)
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をつける。
-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 clean
やrm -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を書き上げる - 憂鬱な世界にネコパンチ!