メインコンテンツまでスキップ

「Qwen」タグの記事が22件件あります

Qwen tag description

全てのタグを見る

C# WPFでQwen3を直接動かすだけ(LLamaSharp)

· 約4分
もみじーな
個人開発者

ドキュザウルス3.9へアップデートしたのでエラーがないか確認も兼ねたくそ記事です。

独立して動かせるならUnityで完全自立型のデスクトップマスコット作れそうですよね。

ヴィタちゃんデスクトップマスコットAIを作るしかないか?


LLamaSharpを使用

LLamaSharpとLLamaSharp.Backend.CpuをNugetでインストール

使用モデルと環境

C# WPF .NET8 プロジェクト名[Qwen3_Demo]
Qwen3-0.6B-GGUF
Qwen3-1.7B-GGUF
modelsフォルダを作成してダウンロードしたモデルを保存してください。(モデルは常にコピーでいいです)

ggufなのでLMStudioのモデルコピーしてきても動きました。(gemma3)

  • CPU i7-1165G7(テスト用PC)
  • メモリ 16GB
  • GPU iRISXe(ないようなもの)

特別なこともないのでソースコードは下に貼っておきます。

C# WPFでQwen3 0.6bを動かす

さすがCPUオンリーですね思考モードだとしても遅いです。
(Thinkingないモデルはそこそこ早かったですがCPUじゃたかがしれてます)

Qwen3 0.6bがいつのデータで学習されてるのかわかりませんが適当なこと書きすぎ・・・

Qwen3 1.7bの場合

やっぱり1.7bは欲しいですねこう見ると

っていうと8bそして14bほしくなるのでGPUは必須です。

おそらく14-20bがデスクトップマスコット作るなら上限ですレスポンス速度が命なので

全体的なコード

MainWindow.xaml[クリックして展開]
<Window x:Class="Qwen3_Demo.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Qwen3_Demo"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800">
<Grid>
<Grid Margin="10">
<Grid.RowDefinitions>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>

<TextBox x:Name="InputTextBox"
Grid.Row="0"
TextWrapping="Wrap"
AcceptsReturn="True"
VerticalScrollBarVisibility="Auto"/>

<Button x:Name="GenerateButton"
Grid.Row="1"
Content="生成"
Margin="0,10"
Padding="20,5"
Click="GenerateButton_Click"/>

<TextBox x:Name="OutputTextBox"
Grid.Row="2"
TextWrapping="Wrap"
IsReadOnly="True"
VerticalScrollBarVisibility="Auto"/>

<TextBlock x:Name="StatusText"
Grid.Row="3"
Margin="0,10,0,0"
Text="準備中..."/>
</Grid>
</Grid>
</Window>
MainWindow.xaml.cs[クリックして展開]
using System.IO;
using System.Text;
using System.Text.RegularExpressions;
using System.Windows;
using LLama;
using LLama.Common;

namespace Qwen3_Demo
{
public partial class MainWindow : Window
{
private string _modelPath = "models/Qwen3-0.6B-Q8_0.gguf";
private CancellationTokenSource? _cts;

public MainWindow()
{
InitializeComponent();
CheckModel();
}

private void CheckModel()
{
if (File.Exists(_modelPath))
{
StatusText.Text = "準備完了";
GenerateButton.IsEnabled = true;
}
else
{
StatusText.Text = "モデルファイルが見つかりません";
MessageBox.Show($"モデルファイルが見つかりません: {_modelPath}");
}
}

private async void GenerateButton_Click(object sender, RoutedEventArgs e)
{
if (string.IsNullOrWhiteSpace(InputTextBox.Text))
{
MessageBox.Show("入力テキストを入力してください");
return;
}

_cts?.Cancel();
_cts = new CancellationTokenSource();

GenerateButton.IsEnabled = false;
StatusText.Text = "生成中...";
OutputTextBox.Text = "";

try
{
var userInput = InputTextBox.Text;
await GenerateTextAsync(userInput, _cts.Token);
StatusText.Text = "生成完了";
}
catch (OperationCanceledException)
{
StatusText.Text = "キャンセルされました";
}
catch (Exception ex)
{
MessageBox.Show($"エラー: {ex.Message}");
StatusText.Text = "エラー";
}
finally
{
GenerateButton.IsEnabled = true;
}
}

private async Task GenerateTextAsync(string userInput, CancellationToken cancellationToken)
{
var parameters = new ModelParams(_modelPath)
{
ContextSize = 4048,
GpuLayerCount = 0,
BatchSize = 512
};

using var model = LLamaWeights.LoadFromFile(parameters);
using var context = model.CreateContext(parameters);
var executor = new InteractiveExecutor(context);

var chatPrompt = BuildQwenPrompt(userInput);

var settings = new InferenceParams
{
MaxTokens = 1024,
AntiPrompts = new List<string> { "<|im_end|>", "<|im_start|>" }
};

var fullText = new StringBuilder();
int tokenNum = 0;

await foreach (string text in executor.InferAsync(chatPrompt, settings, cancellationToken))
{
if (cancellationToken.IsCancellationRequested)
break;

fullText.Append(text);
tokenNum++;

// テキストを分離
var (thinkPart, answerPart) = SeparateThinkAndAnswer(fullText.ToString());

await Dispatcher.InvokeAsync(() =>
{
// 回答部分のみを表示
OutputTextBox.Text = answerPart.Trim();

// デバッグ用:think部分をステータスに表示
if (!string.IsNullOrEmpty(thinkPart))
{
StatusText.Text = $"生成中... ({tokenNum} tokens) [思考中]";
}
else
{
StatusText.Text = $"生成中... ({tokenNum} tokens)";
}
});

if (tokenNum >= 1024)
break;
}
}

private (string thinkPart, string answerPart) SeparateThinkAndAnswer(string fullText)
{
// <think>...</think> を抽出
var thinkMatch = Regex.Match(fullText, @"<think>(.*?)</think>", RegexOptions.Singleline);
var thinkPart = thinkMatch.Success ? thinkMatch.Groups[1].Value.Trim() : "";

// <think>タグを除去した部分を回答とする
var answerPart = Regex.Replace(fullText, @"<think>.*?</think>", "", RegexOptions.Singleline);

// 未完了の<think>タグも除去
answerPart = Regex.Replace(answerPart, @"<think>.*", "", RegexOptions.Singleline);

return (thinkPart, answerPart.Trim());
}

private string BuildQwenPrompt(string userMessage)
{
//thinkタグを消すため(要調性)
return $"<|im_start|>system\nあなたは親切なAIアシスタントです。<think>タグは使わずに、直接答えてください。<|im_end|>\n<|im_start|>user\n{userMessage}<|im_end|>\n<|im_start|>assistant\n";
}
}
}

Qwen-ImageのLightningに誤解があったみたい

· 約2分
もみじーな
個人開発者

Qwen-ImageのLightningに誤解があったみたいです。(申し訳・・・)

心なしか同じステップ数で変化があるように見えたのは本当にそう見えただけですねやっぱ

さっき8stepにしても4stepにしても本当にこれ変わってるのかって思って気づきました・・・

20ステップ固定にしているので私の環境だといらなそう・・

Lightningを8stepにして8stepにしても20のほうがやっぱり少し塗り方がきれいになります。

Lightningの4stepで 4stepで画像作ると微妙なのはLoraのせいなのか解像度が高すぎるのか?

4stepの4stepです(使い方が悪いんですかね)

そもそも、Lightningをつけなくても速度が変わらない気がします。
1920x1088の20ステップで48秒くらいです。

Lightningは必要性が不明の為,消してみました。

消しても生成に影響はなさそうです・・・

結局、Lightningの必要性はわからないです。
情報が増えるのを待ちます・・

Qwen-ImageのLora作成方法

· 約3分
もみじーな
個人開発者

一応,メモです。

必要なものと手順

ai-toolkitを使います。
基本的なインストールはGithubを確認してください。
一応以下で問題はないです。

git clone https://github.com/ostris/ai-toolkit.git
cd ai-toolkit
python -m venv venv
.\venv\Scripts\activate
pip install --no-cache-dir torch==2.7.0 torchvision==0.22.0 torchaudio==2.7.0 --index-url https://download.pytorch.org/whl/cu126
pip install -r requirements.txt

RTX50シリーズの場合はtorchは以下に置き換えてください(私はRTX5090ですが問題なかったです)

pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu128

Lora作成

初回起動

cd ui
npm run build_and_start

一回,buildしたら以下のほうが起動が早いです。

cd ui
npm run start

New Jobでだいたい以下の設定にしてもらえれば動きます(ai-toolkit公式からのおすすめです。)
Cache Text Embeddingsも囲ってないですがオンを推奨です。

おそらくここら辺は詳しいこと書いてくれている方のを見たほうがいいですが
datasetにはai-toolkit内にdatasetsというフォルダがあるのでそこに画像を入れればここに表示されます。
(途中でいれて表示されない場合はブラウザ更新ボタン)

上みたいな感じでフォルダの追加と学習させたい画像を入れておけば問題はないです。
キャプションも必要がない限りは不要です。

Cache Text Embeddingsについて

こちらは公式的にはオン推奨です。

ですがこれをつけるとTrigger Wordなどを入れるとエラーが出るので設定したい人はオフ必須です。
つけないと生成に少し追加で時間がかかります。(2倍くらいになるかも)

学習開始

上記の設定がおわればあとは右上のCreate Jobを押して開始ボタンを押すだけです。
初回は学習に必要なものを自動でダウンロードしますのでかなり時間がかかります。
20から30GBくらいダウンロードしたはず?

ダウンロード後,特に問題がなければ学習が始まります。
3000ステップとして

5090で3時間から4時間(長くても6時間)程度で終了します。

終了後にはOutputに保存されるのであとはいつものLoraファイルと同じでConfyなりにコピーしてもらえれば終了です。

エラーが出る場合

GPUメモリが24あればとりあえずは動くらしいので4090などで1回エラーで終了しても何度か再開すると動いてくれたりします。

最後に

色々学習させてみましたが今のところ問題はなさそうです。
学習できない場合は何か設定が間違っている可能性があります。
夜,寝る前に学習させれば仕事に行く前には絶対おわっています。(RTX5090なら)

Qwen-Imageにおけるステップ数とLightningのstep数の違いの差

· 約3分
もみじーな
個人開発者

求める画像を出すための検証を実施しました。
今回,自作の崩壊3rd ヴィタのLora(Kサンプラーはテスト版)を使ってます。
結論だけここに書いておきますKサンプラーは最低20Step,lightningは8 Stepがやっぱりいいです。
lightningに関しては見る人によって好みがわかれそう?

KサンプラーでのStep数の検証

プロンプト(水族館,女性がこちらに向かって両手でピースしている,白いTシャツ)
以下はまったく同じシードとプロンプトを使っています。
5 Step(生成16秒 論外です) 10 Step(生成28秒 初期10だったので最低ラインです) 20 Step(生成49秒) 30 Step(生成73秒) 40 Step(生成94秒) 50 Step(生成時間メモリ忘れました)

最低20 Stepあれば品質は問題なさそうです。
Step数で水槽が出たり消えたりは画像生成に詳しくないのでよくわからないです。


Lightning 8 Stepと4 Step

プロンプト(水着の女性がトロピカルジュースを飲んでいる,海辺,サングラスをかけている)
Loraの調整をした後にテストしたのでKサンプラーとキャラが少し変わってます。
4 Stepと8 Stepにおける生成時間の差はほぼなかったように思えますがどうなんですかね
同じシード,同じプロントでの差です。

シード1

4step 8step

シード2

4step 8step

シード3

4step 8step

8 stepのほうが個人的にはLoraに忠実にでています。
4 stepは心なしか顔が丸い?

結論

最低20stepでLightningは可能なら8 Step(4 Stepでもあまり差はなし)
私的には8stepのほうがよく感じる程度です。

最後に

ここ最近,適当に検証だけしたのを張ってたので少し改善します。
あとNano-Bananaが流行ってますが解像度1024x1024とかですよQwenのほうが高解像度で絶対いいですよ。
エ〇画像とかつく・・・なんでもないですがQwen Imageが私的にはおすすめです。

Qwen-Imageようの僕の考えた最強のスタイルLoraが完成したぽん

· 約2分
もみじーな
個人開発者

求めていた画像が出せるスタイルLoraを完成させることができたぽん(前回の続きなので)

↑プロンプト(白いワンピースの女性がひまわり畑に一人,麦わら帽子をかぶっている,る,momijiina_style,vita20250824)

若干前と違いますがこれは女性、女の子,お姉さんなどでQwen Imageではだいぶ変わるからみたいです。(loraの強度も)

プロンプトを調整すればおそらく近づけることができると思うのでこれでStable Diffusionを最悪捨ててQwen Imageへ移行することができます・・・・

この結果からアニメ特化のモデルは不要そうです。

これで次はヴィタちゃん、セナディアちゃんに続く,セルマやアカリなどのQwen Image用のLoraを作り始めることができそうです。

学習用に500枚も画像を用意した甲斐がありました。

このスタイルLoraの配布は現状,考えてないですが需要がありそうならCivitaiとかにアップロードしときます・・・

Qwen ImageのいいところはStable Diffusionでキャラが遠い場合に目や顔が崩れることでしたがこれで克服できそうです。

こんな感じのが生成できました。

水族館の表現もだいぶいい感じじゃないですか?
(服装を指定しなかったせいか防弾チョッキみたいなのきてる?なにこれ)

Qwen-Imageように目的のLoraを作ったけどなんか違う

· 約1分
もみじーな
個人開発者

Qwen-Imageように崩壊3rdのヴィタちゃんのLoraを作成しましたが求めた結果はまだ得られませんでした。

(プロンプトなど色々試していくうちに生成時間は平均50秒くらいになりました。)

上のように問題なくloraを作り生成できましたが違う・・・・

私が求めている画像はこんな感じです↓

(Stable Diffusionで作りました)

チェックポイントの関係もあると思うのでアニメ系のモデルがでるまで待つしかなさそう・・

スタイルloraをつくるしかないか独自モデルを作るしかないか・・・

私の出す解は既に収束してしまったのでもっと情報が増えたら再開します。

もうダメだぽん

Qwen-Imageで作成した画像(プロンプトはすべて若干違います)↓

Qwen-Image-EditはAIイラストレーターの救世主?

· 約1分
もみじーな
個人開発者

Qwen-ImageようにヴィタちゃんのLoraを作成するための素材を作成中にふと思ったのですが
生成した画像がどうしても手の数が不自然だったりして同じシードにして再生成しても絵が変わったり・・・

そこでQwen-Image-Editで確認した画像を修正できるようにワークフローを作成したのですがこれは革命でした。

これは画像の例ですが

こうなることがあります。

こうなると見た目はすごくいいのに再生成してみるか削除することになります。

しかし,ワークフローでやる必要はないですが生成した画像をQwen-Image-Editで修正すればさっきの画像がこうなります。

これはだいぶ助かります。

これで画像の再生成や削除がいらなくなり品質の高い画像が・・・

こまったらQwen-Image-Editです。

Qwen-Imageは安定性が最高かもLoraも作ってみた

· 約3分
もみじーな
個人開発者

Qwen-Imageの安定性がすごいという話を聞いたので試して見ました。

今回、試すにあたり崩壊3rdのセナディアLoraをQwen-Imageように作成してみました。

学習に使用したツールはAI-Toolkitです。(5090なら4090のたぶん2倍程度の速度で学習できます。)

学習完了画面(3-4時間くらいかかりました) 学習完了画面

学習に使用した画像はStableDiffusionで作成しました。(学習素材は1080x1920メインです)

Qwen-Imageのフローは公式フローを使っています。(高速化loraを使い忘れてますがきにしないでください。)

使ったプロンプト(女の子が一人,senadia,前に向かってピースしている)

すごいです日本語で入力できます。
さらに背景を追加してみます。

使ったプロンプト(女の子が一人,senadia,前に向かってピースしている,背景は日本の街並み)

服装も変えてみる

使ったプロンプト(女の子が一人,senadia,前に向かってピースしている,背景は日本の街並み,服装はメイド服)

これはさようならStable Diffusionでは・・・
最後に画像サイズを大きくして水彩画にしています。
高速化loraを使わなくても30秒かからなかったです。(1920x1088で少しミスってますが問題なし)

日本語が使えるのはでかすぎます現状、LoraやCheckpointが出たばっかでほぼないですがこれから増えるならいい選択肢です。

Lora作ればこれでよさそう。

Fluxみたいに1枚の画像からLoraつくっても安定するのかも気になります。

最終生成画像だけ貼っておきます。(これはクリックできます) 崩壊3rd セナディア 崩壊3rdのセナディアちゃんですぜひプレイしてみてください。

AIアートのページで崩壊3rdのキャラで色々テストしてましたがキャラが遠くなったりすると安定性が悪かったので代替を探していたのですが安定性がよさそうならヴィタちゃんもLoraつくろうかな

Qwen-Image-Editはだいぶよさそう

· 約2分
もみじーな
個人開発者

Qwen-Image-Editが出てたので試して見ましたがすごくよかったです。

試してみるだけだったので今回はNoteに公開されていたフローを使っています。

参考にしたNote(ComfyUIでQwen-Image-Editを試す(FP8版、Lightning使用) )

上の画像の通り白背景の女の子の画像だけで背景から服装まで日本語で指定できてしまいました。(画像のキャラクターは崩壊3rdのセナディアというキャラです。)

画像生成は始めたばっかなので詳しくないですがこれならloraを作る必要が今後なくなりそうです。

1枚画像があれば好きなキャラを好きなポーズに変更できそうです。

Fluxように崩壊3rd用のLoraを作ろうかと思ってたけど時間がかかりすぎるので止まってたのでこれは使えそうです。

RTX 5090で1枚あたり30秒かからないくらいで生成できるのでこれは主流になりそう。

本当に最近の中国のオープンソースAIはすごいです。

それにAIが進みすぎて今後、どうAIを見分けるべきなのか・・・・

クラウド版のAIは確かに透かしが最近はあったりと規制はありますがローカルは規制がほぼないのでやりたい放題です。

これがローカルでみんながやりたい理由でもありますがね・・・

最後にFluxで試しに作成した赤いハトをはっておきます。

一瞬みたらAIだとわからないレベルですよね・・・

Qwen3-Coder-30bで作成したアルバムの修正版

· 約1分
もみじーな
個人開発者

昨日、LM StudioとQwen3-Coder-30bで作成したものを修正しました。

アップロード後,1ページ目が挿入されていないバグを確認しましたが別にプログラムをGithubに保存するとかもないので修正はしないです。

無理やり表示されるようにしたので新しいページを確認してください。

https://momijiina.com/other/20250803

今回の修正内容は画像の周りに枠ができる問題の修正と裏表紙を作成しました。

とりあえずここまでできれば満足なのでまた別のものをつくります。

あと黒猫かわいいです。 

ホームとアイコンがドキュザウルスのデフォルトのままなので黒猫に変えようかな?

変わってたらそういうことです