東大・松尾研の無料公開した「LLM 大規模言語モデル講座2024講義スライド」で改めて勉強してみる
こんにちは。
先日、AIといえば東大松尾研(いろいろ噂も聞きますが)からLLMの講義資料が公開されました。
私の専門はもう少し組み込みやシステムエンジニア寄りではありますが、最近LLMを使うことが増えてきたので改めて基礎から勉強できるこういった資料があるのでは非常にありがたいです。
AIは進化が早いので、現場の研究者などのリサーチャーだけではなく、エンジニア・マネージャーレベルでも最新の論文や動向を追う必要があるので、日々の勉強は重要かつ大変です。
かくいう私もCVPRの最新の論文やコードなどはチェックしてはいるのですが、専門ではないので原理的なところは浅い知識と直感で理解しています。
LLMや最新論文のDNNはツールとしてはエンジニアレベルでも非常に役立つことが多いので。
というわけで、改めてこちらの資料を現在2回講義まで習いました。
初学者(といっても一般よりは詳しいとは思いますが)でもわかりやすい資料で、非常にためになったので改めてこのオープンで望めば学習できる環境に時代がなったことへの感謝と有用な資料の共有ということで、締めさせさせていただきます。
軽量なローカルLLMも増え、HuggingFaceにも色々新しいモデルが出てきているので、引き続き色々試して共有していこうと思います。
Llama Vision をWindowsのWSLでローカルに動かしてみる
WindowsのWSLでLlama Visionをローカルで動かしてみようと思います。
意外とこの設定で行っている人がいなかったので。
まぁよっぽど良いGPU持ってないと重すぎて使い物にならないかと思いますが(笑)
環境
- Windows11
- WSL Ubuntu22.04
- Python3.12
- venv
- NVIDIA GeForce RTX 3050
- CUDA 12.7
WSLを使わなくてもできるかもしれませんが、venv下のpytorchのdllがWindowsのセキュリティで制限されて簡単に設定できなさそうだったので諦めました。
今回のリポジトリはこちら。
Hugging Faceのトークン登録
今回はHuggingFaceのモデルを使用します。
Metaのモデルはライセンスが独自ライセンスになるので、HuggingFaceで同意後にアクセストークンを登録する必要があります。
とりあえず今回はこちらのモデルを使いますので、ライセンスにこちらのページから合意します。
合意したらアクセストークンを作成します。
HuggingFaceのSettings->Access Tokensで設定します。


作ったアクセストークンを環境に登録します。
今回のリポジトリの環境でvenvでインストールすれば以下のコマンドでログイン・登録できます。
huggingface-cli login
次にコードはこちらになります。
プロンプトによって結果が大きく変わってしまうのでプロンプトは重要です。
ロールやプロンプト例はMetaのDocumentに記載があります。
Llama 3.2 | Model Cards and Prompt formats
実際に今回のリポジトリにあるサンプル画像で説明をしてもらいました。
画像はこちら。

Llama Vision 3.2に説明してもらった回答がこちら。
There is a yellow car in the middle of the road. The car is driving on the road. The car is driving on the right side of the road. The car is driving on the left side of the road. The car is driving on the right side of the road. The car is driving on the left side
なんかバグっていますが、ちゃんと説明してくれています。最後か切れてしまっているのはMAXのトークン数が64だからです。
なお、実行時に以下のようなエラーが出ますが、これはGPUのメモリが足りずにCPUのに処理が移ってしまっているからです。
Some parameters are on the meta device because they were offloaded to the cpu and disk.
一応稼働率をみるとGPUのメモリに多少はロードされているようです。

ただ、これがGPUに乗り切らないと死ぬほど遅くなるのがLLM。
今回の処理時間は
Inference time: 1104.90 seconds
20分近くかかっています。
Text Image to TextモデルはMeta公式からは量子化モデル等の軽量モデルは提供されていません。
有名なCNN系のエンコーダーをNetronで可視化してみる
こんにちは。
何か書きたいと思いましたが実装する気分ではないので、今回は実装しないでできることをやってみようと思います。
有名なCNN系のエンコーダーをNetronで可視化してみました。
NetronというのはONNX形式という汎用的なDNNモデルの保存形式で保存されたモデルを可視化することができます。
ローカルでもインストールして使えるし、オンラインでブラウザ上でも使うことができます。
今回実際に見てみるのは代表的なCNNのエンコーダーになります。
クラス分類タスクで作られたものではありますが、最新の認識モデルにもエンコーダーとしてはしっかりと使われているものです。
1. VGG (Visual Geometry Group)
2. ResNet (Residual Network)
3. DenseNet (Densely Connected Convolutional Network)
4. Inception (GoogLeNet)
5. MobileNet
ONNX形式のモデル自体は以下のONNXモデルZooからとってきます。
(なんでモデル集めてる場所をModel Zooと呼ぶようになったんですかね?)
可視化
ということで実際に可視化してみましょう。
1. VGG (Visual Geometry Group)
- モデル: VGG16, VGG19
- 特徴: シンプルな構造で、3×3畳み込みフィルタと2×2プーリングを繰り返す
- 用途: 画像分類・特徴抽出
- 欠点: 計算コストが高く、パラメータ数が多い
VGG16-12というモデルを可視化してみました。


特徴通りひたすらに3x3カーネルの畳み込み層(Conv)とMaxPoolingを一直線に繰り返しているのが特徴です。
2. ResNet (Residual Network)
- モデル: ResNet18, ResNet34, ResNet50, ResNet101, ResNet152
- 特徴: 残差ブロック (Residual Block) により勾配消失問題を緩和
- 用途: 画像分類・物体検出・セグメンテーション・特徴抽出
- 長所: 深いネットワークでも学習可能


残差ブロックで直接次の層につなげてAddしてる構造が特徴的に見えます。
3. DenseNet (Densely Connected Convolutional Network)
- モデル: DenseNet121, DenseNet169, DenseNet201
- 特徴: 各層がすべての前の層と接続されている(特徴の再利用が可能)
- 用途: 画像分類・特徴抽出
- 長所: 計算効率が良く、少ないパラメータで高精度


確かに今まで見たことがないぐらい深いモデル。
concatでskipconnectionしているから確かに全部の特徴量がいることになっている。
4. Inception (GoogLeNet)
- モデル: InceptionV1 (GoogLeNet), InceptionV3, InceptionV4
- 特徴: 異なるサイズの畳み込みフィルタを並列適用し、多様な特徴を抽出
- 用途: 画像分類・特徴抽出
- 長所: 効率的な計算と高精度


異なるカーネルサイズのConv層が並列につながっているのがよく分かりますね。
5. MobileNet
- モデル: MobileNetV1, MobileNetV2, MobileNetV3
- 特徴: 深層畳み込み (Depthwise Separable Convolution) を使用し軽量化
- 用途: モバイル・組み込み機器向けの特徴抽出
- 長所: 軽量でリアルタイム処理に適している


ResNetっぽい接続ではあるけど違う。
以上、有名CNNエンコーダーの可視化でした。
Windowsでroop-unleashedを使って画像1枚からディープフェイク動画を作る
今回はWindowsのNvidia搭載環境でのroop-unleashedを使ってディープフェイク動画をつく方法を環境構築から説明していこうと思います。
非常に良くできたディープフェイク動画が作れるので、悪用厳禁でお願いいたします。

基本環境
私が使った環境は以下です。
- Windows11
- NVIDIA GeForce RTX 3050 6GB Laptop GPU
まず、大きな環境として以下が必要になります。
簡単に説明すると、Pythonは3.12とかの高いバージョンだとパッケージで互換性がないので、3.9であれば問題ありません。
CUDAとcuDNNは互換性のあるバージョンがCUDAの12系で組み合わせで上記は問題なく作動しました。
一応公式の推奨環境はこちらに記載があります。
Installation · C0untFloyd/roop-unleashed Wiki · GitHub
公式だとCUDAのバージョン12.6って書いてありましたけど11.8でも動作は問題ありませんでした。
(はじめFolk元のリポジトリの環境で進めていたので、こうなっています。)
Dockerファイルもあるので、そちらでも対応できますが、GPU周りは自分で設定をしないといけないので、今回はWindows環境に直接入れました。
https://github.com/C0untFloyd/roop-unleashed/blob/main/Dockerfile
Python
Python3.9は普通にWindows Storeから入れて大丈夫です。
他のVersionのPythonが入っていても指定できるので大丈夫です。
Python3.9 --version
で3.9系のバージョンが表示されれば大丈夫です。
公式のDockerに従うなら3.11を入れていいと思います。
(3.12はダメでした。)
CUDA
CUDAは公式だと12.6系です。
私は11.8系入れてしましましたが動作したので、すでに環境があるようであれば流用、なければ最新の12.6系入れていいと思います。
(cuDNNとの組み合わせ互換性に注意してください。)
以下がインストーラーの場所です。
CUDA Toolkit Archive | NVIDIA Developer
インストーラーがPATH設定までやってくれます。
nvcc --version
でインストールしたバージョンが表示されれば問題ありません。
cuDNN
cuDNNはCUDAと互換性のあるバージョンを選んでください。
以下は互換表になります。
ダウンロードは以下から行います。
cuDNN Archive | NVIDIA Developer
ZIPをダウンロードしたら、
以下にlib, include, binのディレクトリを中身ごとコピーします。
C:\Program Files\NVIDIA\CUDNN\v8.9\
(バージョンのフォルダ名はバージョンに合わせてください。ここの場合はv8.9)
そしたら、次に追加したbinディレクトリをPATHに追加します。
特に正しくPATHが通っているかはDLLへのパスなので確認できないと思います。
公式のインストール方法はこちら
Installing cuDNN on Windows — NVIDIA cuDNN
ffmpeg
次はffmpegのインストールです。
特にバージョンの指定はありません。
(エンコードや切り出し等の簡単なビデオ処理に使用しているだけだと思います。)
ダウンロードは以下から行います。
ダウンロードしたらbinフォルダを任意の場所に置いて、PATHを通します。
私はUbuntu流にC://opt/ffmpeg配下に置いています。
コマンドプロンプトやパワーシェル上で
と打ってバージョンやヘルプが表示されたら問題なくインストールされています。
以上で基本環境のセットアップは完了です。
Pythonの仮想環境セットアップとパッケージインストール
リポジトリのクローン
次にPythonの仮想環境をセットアップしていきます。
まず、今更ですがroop-unleashedのリポジトリをクローンしてきます。
git clone https://github.com/C0untFloyd/roop-unleashed.git
git苦手な方はとりあえずダウンロードでも大丈夫です。
Python仮想環境venvのセットアップ
そしたらroop-unleashedのディレクトリに入ってすぐのプロジェクトルートでコマンドプロンプトかPowerShell上で以下のコマンドを打ちます。
python3.9 -m venv venv
これでvenvというフォルダが作成されて仮想環境ができます。
仮想環境を起動するために以下のコマンドを打ちます。
venv/Scripts/Activate.ps1
コマンドプロンプトの場合はActivate.batの方ですね。
もしかしたらPowerShellの権限がデフォルト設定のままだとエラーが出るかもしれませんが、ググればすぐ解決法が出ると思います。
仮想環境に無事には入れればコマンド上に(venv)が付いています。

ここでpython --versionで確実に意図したバージョンになっているか確認すると次の工程でミスしずらいです。
Python依存パッケージのインストール
次に仮想環境上で依存パッケージをインストールします。
プロジェクトルートで以下のコマンドでインストールします。
python -m pip install -r requirements.txt
多少時間はかかりますが、待つだけです。
インストールが完了すれば準備完了です。
実行
次に実行をしていきます。
実行にはプロジェクトルートで以下のコマンドで実行します。
python run.py
実行すると、勝手にブラウザが立ち上がってアプリが起動します。
起動時のターミナル上に載っているNvidia系のGPUが表示されていればGPUの使用も問題ないかと思います。

自動で起動しない場合はlocal URLのところに記載されているアドレスをブラウザ上でアクセスすれば起動すると思います。
起動すると以下のような画面になります。

この画面の以下のSourceFaceに入れ替えた先の顔(写真)を入れます。
Target Fileに入れ替えたい元の動画・画像を入れます。

今回はYouTuberのぐんぴぃさんの画像を入れ替える先の顔、Hikakinの動画を元動画として入力しました。
動画の方は100フレームちょっとまでしか処理できないので長い動画は処理できません。
やり方はなにかあると思うのですが、まだ調べていません。
以下のような表示になります。

デフォルトの設定では最初の顔を入れ替え対象にしますが、細かく設定することも可能です。
今回は説明は省略します。
Preview画面のFaceSwapのチェックを入れると処理時間はかかりますが、どんな感じに顔を入れ替えるか確認することができます。

大分雰囲気が出ていますね。
動画として出力するには更に下の方にあるStartを押すと動画の顔入れ替えが始まります。

途中経過はターミナル上に表示されます。
![]()
私の環境だと1,2秒で1フレームの処理が行われています。
完了すると、Processed Fileのところからダウンロードができます。

結果
結果をこちらに載せています。
元動画:
https://www.youtube.com/watch?v=7VUaw8ooqBY
元画像:
画像1枚からなかなかのクオリティの高い動画が作れてしまいます。
以上roop-unleasehdの使い方でした。
以下、広告
【yt_dlp】2025年最新 PythonでYouTubeダウンロード方法
今回は2025年1月時点でのPythonによるYouTubeダウンロード方法を紹介します。
以前はpytybe等のパッケージを使っている人もいたかと思うのですが、メインテナンスが行われておらず、YouTubeの仕様変更に伴って使えなくなってしまったので今回はyt-dlpというパッケージを使用します。
あくまでもYouTubeのPythonのダウンロード方法を紹介するもので、実際にダウンロード等を行う場合はYouTubeの利用規定を確認したうえでご自身で行ってください。
GitHub
GitHubのリンクは以下です。
詳細はこちらの記事で解説します。
環境
環境は
となっています。
前準備
今回は以下のpythonパッケージを使います。
ということでインストールします。
python -m pip install ffmpeg-python yt_dlp
また、こちらのyt_dltだとmp4等の使いやすいフォーマットではダウンロードできないのでffmpegを使用してmp4へ変換(エンコード)します。
なので以下のページからffmepgをダウンロードしてPathを通しておく必要があります。
コマンドラインやPowerShell等のターミナル上で
と打って、バージョン情報や使い方が表示されたらPathが問題なく通っています。
使い方
使い方は以下のようにurlとoutput_dirの引数を指定して実行します。
python youtube_download.py --url <YouTubeの動画URL> --output-dir <出力先ディレクトリ>
ソースコード
ソースコードは以下になります。
内容を解説します。
まず、パス操作ではpathlibを使用しています。
Pathlibを使うとLinux/Windows間でのパスの違いを意識しないでもどちらでも使えるので使用しています。
あとは10~15行目でYoutubeの動画をyt_dlpでダウンロードします。
webmというフォーマットで保存されるので、これを21、22行目でffmpegを使用してmp4とmp3に変換しています。
ここのmp4への変換処理が結構重いので、Nvidia系のGPUを積んでいる人であればnvencのエンコーダーを使うと高速化できます。
今回のコードはlibx264というCPUのエンコーダーを使用しています。
出力ディレクトリに過去に出力されたファイルがあると上手く動かないので、そこだけ暇なときに直します。
以上、最新のPythonでのYouTubeダウンロード方法でした。
ESP32でYoutubeリモコンを作ってみた
今回はESP32を使ってYoutubeのリモコンを作ってみました。
実際の動作はこちら。
HW作成
まずはリモコンのハードウェアを作っていきます。
スイッチはサイズ感と押し感がよさそうなボタンスイッチを秋葉原の千石電商で買っておきました。
今回はESP32のボードをそのまま使おうと思うのでユニバーサル基盤を使って取り付けていきます。
ESP32に合わせてバンドソーで切って四隅の穴をM3のボルトで固定できるように穴をボール盤で拡張します。


ケースは3Dプリンタで作ります。

ユニバーサル基盤の取り付けはユニバーサル基盤のピッチ2.54mmに合わせてCADを作っています。
あとはユニバーサル基盤へのはんだ付けを行います。
ESP32には内蔵プルアップ抵抗があったりするんで、スイッチは直接接続します。
(プルアップがないGPIOもあるので注意です。私は一度配線しなおしました。)

あとは蓋をつければ完成です。
バッテリーは使えるものがなかったので外部給電式のリモコンになります。

SW作成
SWはこちらです。
基本的にはBLE KeyBoradのライブラリを使ってキー操作しています。
Youtubeのパソコン(ブラウザ)版にはショートカットキーが設定されています。
そのショートカットはこちらです。
YouTube のキーボード ショートカット - YouTube ヘルプ
これらのショートカットを組み合わせてリモコンとしています。
4つのボタンそれぞれにショートカットキーを割り当てています。
更に、各ボタンには短押し、長押しで別のショートカットキーが割り当てられています。
以上でリモコン完成です。
完成した姿は最初の動画になります。
以上、ESP32でのYouTubeリモコン作成でした。
TEMUで激安のTypeC充電式の半田ごてを買ってみた
先日、TEMUで激安のTypeC充電式の半田ごてを買ってみたのでそのレビューになります。
今回購入したのはこちらの商品
(商品広告が過大なのはTEMUの仕様なのでご理解を。)
![]()
TEMUとは
TEMUとは中国の商業グループである拼多多(ピンドゥオドゥオ)が運営する通販サイトになります。
中国国内の通販サイトといえばタオバオ(淘宝)が大手で台頭していますが、中国人の友人曰く、こちらのグループは「少しでも安く」が会社の方針らしく、品質でいうと劣っているようです。
そのグループが海外向けに展開するサービスがTEMUになります。
価格
私が購入したタイミングでは2644円になります。
注文・発送
TEMUは結局オフにならないクーポン獲得ルーレットなどめんどくさいところもありますが、中国の安い商品を購入することができます。
実際今回の商品も充電式の半田ごてを探す中でなかなか見つからずにTEMUにたどり着きました。
注文自体は謎クーポン獲得ゲーム等を無視していけば問題なく行えました。
注文から配達までの時間は6日間でした。
送料は無料です。
特に損傷等なく空輸されて手元に届きました。

商品内容
- 半田ごて本体
- はんだ吸い取りき(すっぽん吸引式)
- こて台
- はんだ
- フラックス
- TypeC充電ケーブル
- 数タイプのこて先
が内容されています。

コンパクトなケースに入っていて使い勝手は良さそうです。
こて自体はとてもコンパクトです。

インプレ
はんだごては300~450℃に設定できます。(ほんとかどうかは不明だが設定はできます。)
実際に過熱させてみました。
常温から420℃までの時間は48秒でした。
ヤニ入りはんだも問題なく溶かすことかできました。
まだ、実際に基板実装では使用できていませんが、熱的には問題ないかなと。
どのぐらい時間持つかは不明ですが、ホビーユースでは問題ないかと。
また、こて先が小さいので実装部品を温めてはんだ付けするような大きな端子等は向いていないかもしれません。
次に良かった点ですが、
めちゃくちゃ軽いです。
実測はしていませんが、普通の半田ごてよりもかなり軽いです。
あとは机にそのまま置けるのが地味に便利です。フラットな形状で電源線がないので、そのまま机に横においてもこて先が空中に浮いてくれます。
これが地味に便利だと思いました。
最後に
一応中国の安い商品にはなるので、品質がどの程度かは不明です。
(もちろん安くていい商品もたくさんありますが)
なので、充電しっぱなしで長時間放置して目を離したり、電源を入れっぱなしで長時間放置したりと発火の原因になりそうなことは注意したほうがいいと思います。
(よく工事現場で安い中国製代替バッテリーを工具につかって発火したことがあると聞くことがあるので。)
以上、充電式はんだごてのインプレでした。