あきらぼ

テック系ブログ

Llama Vision をWindowsのWSLでローカルに動かしてみる

WindowsのWSLでLlama Visionをローカルで動かしてみようと思います。

 

意外とこの設定で行っている人がいなかったので。

まぁよっぽど良いGPU持ってないと重すぎて使い物にならないかと思いますが(笑)

環境

WSLを使わなくてもできるかもしれませんが、venv下のpytorchのdllがWindowsのセキュリティで制限されて簡単に設定できなさそうだったので諦めました。

 

今回のリポジトリはこちら。

github.com

 

Hugging Faceのトークン登録

今回はHuggingFaceのモデルを使用します。

Metaのモデルはライセンスが独自ライセンスになるので、HuggingFaceで同意後にアクセストークンを登録する必要があります。

とりあえず今回はこちらのモデルを使いますので、ライセンスにこちらのページから合意します。

huggingface.co

 

合意したらアクセストークンを作成します。

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公式からは量子化モデル等の軽量モデルは提供されていません。

 

さすがにゴミGPUVision LLMは難しいようです。

 

 

有名なCNN系のエンコーダーをNetronで可視化してみる

こんにちは。

何か書きたいと思いましたが実装する気分ではないので、今回は実装しないでできることをやってみようと思います。

 

有名なCNN系のエンコーダーをNetronで可視化してみました。

 

NetronというのはONNX形式という汎用的なDNNモデルの保存形式で保存されたモデルを可視化することができます。

ローカルでもインストールして使えるし、オンラインでブラウザ上でも使うことができます。

netron.app

 

今回実際に見てみるのは代表的な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と呼ぶようになったんですかね?)

github.com

 

可視化

ということで実際に可視化してみましょう。

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枚からディープフェイク動画を作る

今回はWindowsNvidia搭載環境でのroop-unleashedを使ってディープフェイク動画をつく方法を環境構築から説明していこうと思います。

非常に良くできたディープフェイク動画が作れるので、悪用厳禁でお願いいたします。

 

 

 

 

 

基本環境

私が使った環境は以下です。

まず、大きな環境として以下が必要になります。

簡単に説明すると、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が入っていても指定できるので大丈夫です。

コマンドプロンプトPowershellから

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と互換性のあるバージョンを選んでください。

以下は互換表になります。

Support Matrix — NVIDIA cuDNN

ダウンロードは以下から行います。

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のインストールです。

特にバージョンの指定はありません。

エンコードや切り出し等の簡単なビデオ処理に使用しているだけだと思います。)

ダウンロードは以下から行います。

Download FFmpeg

 

ダウンロードしたらbinフォルダを任意の場所に置いて、PATHを通します。

私はUbuntu流にC://opt/ffmpeg配下に置いています。

コマンドプロンプトやパワーシェル上で

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のところからダウンロードができます。

 

結果

結果をこちらに載せています。

youtu.be

 

元動画:

https://www.youtube.com/watch?v=7VUaw8ooqBY


元画像:

バキ童チャンネル【ぐんぴぃ】 - YouTube

 

画像1枚からなかなかのクオリティの高い動画が作れてしまいます。

 

以上roop-unleasehdの使い方でした。

 

以下、広告

ディープフェイク ニセ情報の拡散者たち

 

 

 

【yt_dlp】2025年最新 PythonでYouTubeダウンロード方法

今回は2025年1月時点でのPythonによるYouTubeダウンロード方法を紹介します。

 

以前はpytybe等のパッケージを使っている人もいたかと思うのですが、メインテナンスが行われておらず、YouTubeの仕様変更に伴って使えなくなってしまったので今回はyt-dlpというパッケージを使用します。

 

あくまでもYouTubePythonのダウンロード方法を紹介するもので、実際にダウンロード等を行う場合はYouTubeの利用規定を確認したうえでご自身で行ってください。

 

 

 

 

GitHub

GitHubのリンクは以下です。

github.com

詳細はこちらの記事で解説します。

環境

環境は

となっています。

前準備

今回は以下のpythonパッケージを使います。

ということでインストールします。


python -m pip install ffmpeg-python yt_dlp

 

また、こちらのyt_dltだとmp4等の使いやすいフォーマットではダウンロードできないのでffmpegを使用してmp4へ変換(エンコード)します。

なので以下のページからffmepgをダウンロードしてPathを通しておく必要があります。

ffmpeg.org

コマンドラインPowerShell等のターミナル上で

ffmpeg

と打って、バージョン情報や使い方が表示されたら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のリモコンを作ってみました。

 

実際の動作はこちら。

youtu.be

ESP32の購入はこちらから

 

 

 

HW作成

まずはリモコンのハードウェアを作っていきます。

スイッチはサイズ感と押し感がよさそうなボタンスイッチを秋葉原千石電商で買っておきました。

せんごくネット通販

 

今回はESP32のボードをそのまま使おうと思うのでユニバーサル基盤を使って取り付けていきます。

ESP32に合わせてバンドソーで切って四隅の穴をM3のボルトで固定できるように穴をボール盤で拡張します。

 

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

今回使用した3Dプリンタのメーカーモデル例

 

ユニバーサル基盤の取り付けはユニバーサル基盤のピッチ2.54mmに合わせてCADを作っています。

 

あとはユニバーサル基盤へのはんだ付けを行います。

ESP32には内蔵プルアップ抵抗があったりするんで、スイッチは直接接続します。

(プルアップがないGPIOもあるので注意です。私は一度配線しなおしました。)

 

 

あとは蓋をつければ完成です。

バッテリーは使えるものがなかったので外部給電式のリモコンになります。

 

 

SW作成

SWはこちらです。

github.com

 

基本的にはBLE KeyBoradのライブラリを使ってキー操作しています。

GitHub - T-vK/ESP32-BLE-Keyboard: Bluetooth LE Keyboard library for the ESP32 (Arduino IDE compatible)

 

Youtubeのパソコン(ブラウザ)版にはショートカットキーが設定されています。

そのショートカットはこちらです。

YouTube のキーボード ショートカット - YouTube ヘルプ

 

これらのショートカットを組み合わせてリモコンとしています。

4つのボタンそれぞれにショートカットキーを割り当てています。

 

更に、各ボタンには短押し、長押しで別のショートカットキーが割り当てられています。

 

以上でリモコン完成です。

完成した姿は最初の動画になります。

 

以上、ESP32でのYouTubeリモコン作成でした。

 

TEMUで激安のTypeC充電式の半田ごてを買ってみた

先日、TEMUで激安のTypeC充電式の半田ごてを買ってみたのでそのレビューになります。

 

今回購入したのはこちらの商品

商品広告が過大なのはTEMUの仕様なのでご理解を。

https://temu.to/k/uicp39a0yp0

 

 

TEMUとは

TEMUとは中国の商業グループである拼多多(ピンドゥオドゥオ)が運営する通販サイトになります。

中国国内の通販サイトといえばタオバオ(淘宝)が大手で台頭していますが、中国人の友人曰く、こちらのグループは「少しでも安く」が会社の方針らしく、品質でいうと劣っているようです。

そのグループが海外向けに展開するサービスがTEMUになります。

temu.to

価格

私が購入したタイミングでは2644円になります。

 

注文・発送

TEMUは結局オフにならないクーポン獲得ルーレットなどめんどくさいところもありますが、中国の安い商品を購入することができます。

実際今回の商品も充電式の半田ごてを探す中でなかなか見つからずにTEMUにたどり着きました。

 

注文自体は謎クーポン獲得ゲーム等を無視していけば問題なく行えました。

注文から配達までの時間は6日間でした。

送料は無料です。

 

特に損傷等なく空輸されて手元に届きました。

 

商品内容

  • 半田ごて本体
  • はんだ吸い取りき(すっぽん吸引式)
  • こて台
  • はんだ
  • フラックス
  • TypeC充電ケーブル
  • 数タイプのこて先

が内容されています。

 

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

こて自体はとてもコンパクトです。

 

インプレ

はんだごては300~450℃に設定できます。(ほんとかどうかは不明だが設定はできます。)

 

実際に過熱させてみました。

youtu.be

 

常温から420℃までの時間は48秒でした。

ヤニ入りはんだも問題なく溶かすことかできました。

 

まだ、実際に基板実装では使用できていませんが、熱的には問題ないかなと。

どのぐらい時間持つかは不明ですが、ホビーユースでは問題ないかと。

 

また、こて先が小さいので実装部品を温めてはんだ付けするような大きな端子等は向いていないかもしれません。

 

次に良かった点ですが、

めちゃくちゃ軽いです。

実測はしていませんが、普通の半田ごてよりもかなり軽いです。

 

あとは机にそのまま置けるのが地味に便利です。フラットな形状で電源線がないので、そのまま机に横においてもこて先が空中に浮いてくれます。

これが地味に便利だと思いました。

 

最後に

一応中国の安い商品にはなるので、品質がどの程度かは不明です。

(もちろん安くていい商品もたくさんありますが)

なので、充電しっぱなしで長時間放置して目を離したり、電源を入れっぱなしで長時間放置したりと発火の原因になりそうなことは注意したほうがいいと思います。

(よく工事現場で安い中国製代替バッテリーを工具につかって発火したことがあると聞くことがあるので。)

 

以上、充電式はんだごてのインプレでした。

ESP32 Arduino Library V2.X.X -> V3.X.Xでの仕様変更による不具合

久々に昔のESP32プロジェクトをアップデートしようと思ったら、コンパイルが通らない。

 

エラーを解消しても次から次へとエラーが出るので、いろいろと確認してみるとESP32 for Arduino のライブラリのバージョンがV2からV3に変わったことで、よく使う関数の引数仕様が変わったり、そもそも関数自体がなくなったりしている。

 

結論としては戻すがよいです。

 

以下詳細

エラー内容

まずはTimer系でエラーが出ていました。(私の場合は10msタスクを作っていたところ。)

Compilation error: too many arguments to function 'hw_timer_t* timerBegin(uint32_t)'

これはそもそも、引数の仕様が変わっていました。

Timer系は大きく変わっていたので、完全に作り直したほうが早そうでした。

直している人もいましたので参考までに。

Won't Compile (using ESP32 Feather with RFM69HCW wing) · Issue #79 · adafruit/RadioHead · GitHub

 

他にはBLE系のライブラリでBLEKeyboardという外部ライブラリを使用していたのですが、

BLEDevice::init(deviceName);

このライブラリ内のBLEのInitializeの引数がstd::stringからStringに変更になっていてエラーを発生していました。

 

なので、全部直すのは大変なのでバージョンをダウングレードしようと思います。

 

ESP32 for Arduinoライブラリのダウングレード方法

インストールと逆の手順で行います。

Tools -> Board -> Boards Managerを選択します。

 

esp32で検索するとインストール済みのものも出てくると思います。

V2.0.17を選択してInstallすれば完了です。