■ はじめに
強化学習用にでPythonコードをまとめ始めました。前回はグラフをまとめました。
今回は、グラフと双璧を出す動画をやっていきます。
動画で学習結果を出すととっても分かりやすくなります。
動画によるデータの可視化は、強化学習でよく出てくるので知っていると便利です😊
ちなみに、以下のコードはColabで動かす事を前提にしています。
■学習済みモデルの動画作成(mp4)
① 必要ライブラリのインストール
何はなくとも、環境をインストールします
!pip install imageio opencv-python gymnasium minigrid stable-baselines3
② 動画保存用コード(MiniGrid対応)
import gymnasium as gym
import imageio
from stable_baselines3 import PPO
# --- 環境作成 ---
env = gym.make(
"MiniGrid-Empty-5x5-v0",
render_mode="rgb_array"
)
# --- 学習済みモデル読込 ---
model = PPO.load("model.zip")
obs, _ = env.reset()
frames = []
for step in range(300):
frame = env.render()
frames.append(frame)
action, _ = model.predict(obs, deterministic=True)
obs, reward, terminated, truncated, _ = env.step(action)
if terminated or truncated:
obs, _ = env.reset()
env.close()
# --- mp4 保存 ---
imageio.mimsave(
"minigrid_play.mp4",
frames,
fps=10
)
print("🎬 動画保存完了: minigrid_play.mp4")
📌 ポイント
render_mode="rgb_array" が必須
env.render() の戻り値がそのままフレーム
fps=10 は MiniGrid にちょうど良い
■動画の再生(Colab / Jupyter)
僕は、
!ls
をやってファイルが存在する事を確認してから下記を実行します。
from IPython.display import Video
Video("minigrid_play.mp4", embed=True)
ノートブック内に直接再生されます。
■メモ用チェックリスト(重要)
☑ env.reset() は (obs, info)
☑ render_mode="rgb_array" を忘れない
☑ frames.append(env.render())
☑ terminated or truncated の両方を見る
■ついでに:GIF 版(軽く確認したい時)
imageio.mimsave(
"minigrid_play.gif",
frames,
fps=10
)
■扱いのむづかしいOpenCV
よく、
「OpenCVとColabは、相性悪いから避けた方がいい」
と言われて避けられたりします。
これはある意味正論です。
OpenCVがColabで避けられるのは、
cv2.imshow() がGUIを必要とするためです。
つまり
「OpenCVがダメ」なのではなく
**「ColabにGUIが無い」**のが原因です。
OpenCVは
・フレーム生成
・描画
・mp4保存
では非常に強力で、再生だけを HTML / IPython.display に任せる構成にすると
Colabでも問題なく使えます。
・Colabで再生 → OpenCVは使わない
・Colabで動画生成 → OpenCVを使う
・再生は HTML / IPython.display
→OpenCVも選択肢になる
僕の場合は、Colabで動画再生もしてるから、OpenCVは選べないですが、
「再生は、htmlでいいや」
と言う方には、OpenCVをお勧めします。
■ 結果:
今回は、強化学習の学習結果の確認で出て来る動画用コードを勉強しました。
学習結果を動画が欲しくなったら、このページをコピペして下さい。
■ 今回の学び:
今回、強化学習の結果確認でよく出て来る
「Pythonコードの再確認、動画編」
をやってみました。
初心者が陥りやすいミスとして、環境が壊れたのに気が付かない事があります。
エラーを見たら環境の破壊を疑って下さい😊
■ まとめ
別企画の「SLAM使った配送問題」でも、動画でハマってます。
動画は簡単なようで、奥が深いですね。
動画もイロイロなパターンがあり、やればやるほど、知らない事が出てきます。
ブログ化して溜まっているコードを吐き出しているのですが、減らすスピードより溜まるのが早い気がします。
消化スピードをちょっと上げないと辛いですね。
