- 投稿日:
ChromeからEdgeに乗り換えて一年半くらい経ったので、個人的にEdgeとChromeに思うところの比較をしてみた。これは別に優劣をつけるものではなく単なる感想。
項目 | Edge | Chrome |
---|---|---|
Ad Block | ✅ | ❌ |
ダウンロード結果の保持 | ✅ | ❌ |
マウスジェスチャ | ✅ | ❌ |
UIがころころ変わらない | ✅ | ❌ |
クライアント領域の広さ | ✅ | ❌ |
Chrome Webストアから消えた拡張の維持 | ✅ | ❌ |
他端末とのタブ共有 | ✅ | ✅ |
閉じたウィンドウを開き直す | ✅ | ⚠️ |
垂直タブバー | ✅ | ⚠️ |
設定同期 | ⚠️ | ✅ |
設定の単純さ | ❌ | ✅ |
ブラウザベンダーの広告 | ❌ | ✅ |
Ad Block
Edgeには標準でAd Blockが導入されており、Chromeのようにサードパーティ製の胡散臭い拡張機能に依存する必要がない。
参考として個人的にはChromeの場合、uBlock Originを広告ブロッカーとして利用していた。これはAd Blockよりも強力だと思う。
ダウンロード結果の保持
Edgeではダウンロード結果を保持することができる。以下の画像の右側で「ダウンロード」と出ている垂直バーだ。
これが出ているとzipなどの書庫をダウンロードしたときに展開してフォルダに遷移がスムーズにできて便利だし、ダウンロード完了直後にアクション出来なかった場合も対応しやすいので非常に助かる。
Chromeにはこの機能がないのでダウンロードが完了した直後にクリックしようとしてもできないことがあるし、仮にできても展開先を開くには再表示しないとならず手間だ。ダウンロード中にクリックしておくとアクションの予約もできるが、上手く動かないことも多い。これは多分タイムアウトがかかってるのだと思う。
マウスジェスチャ
Edgeには標準でマウスジェスチャが導入されており、サードパーティ製の拡張機能に依存する必要がない。
ChromeのマウスジェスチャといえばcrxMouse Chrome™ Gesturesが有名だと思うが、この拡張機能は過去に公開停止されており、個人的にあまり信頼していない。
Edge標準のマウスジェスチャはcrxMouseと比べると貧弱だが、一般的なパターンと、必要最低限の割り当てができ、特定Webサイトでは機能しないようにするブロックリストもあるため、十分使える。何よりファーストパーティなので安心しやすい。
UIがころころ変わらない
Chromeはコンテキストメニューがスクロール方式になったり、ブックマークバーや各種メニューのボタンがある日突如、肥大化したり、ユーザーを使って大胆なABテストをしてくるので使いづらく感じることがしばしばあった。
Edgeを使っていて、このような破壊的変更を感じることはなく、全体的に落ち着いている印象だ。これは質実剛健なマイクロソフトと、柔軟に対応するGoogleとの会社文化の差としてみることもできそうだ。
クライアント領域の広さ
下図は左がEdge、右がChromeの画面上部のUI部分だが、Edgeのほうが少しだけUIが狭い分、クライアント領域が広い。
Chrome Webストアから消えた拡張の維持
EdgeではChrome Webストアから拡張機能が消えても維持されるが、Chromeだと強制的に削除される。強制的に削除されると設定ごと吹き飛ぶため、Tampermonkeyのようにユーザー定義が大きな拡張はバックアップがないとマニュアルで再導入するのも厳しい。
但しEdgeであってもインストール元が消えているため、ブラウザの再インストール時には消えると思われる。
他端末とのタブ共有
Edgeを利用している他の端末が現在開いているタブを共有できる。これは最後に開いていた状態を持っているため、電源が落ちている端末のタブも見れる。
この機能は端末を多く持っている人ほど恩恵があるだろう。Chromeにも同様の機能があるようだが、内容は確認していない。
閉じたウィンドウを開き直す
Edgeでは誤ってウィンドウを閉じたときでも、閉じたウィンドウを復元できる機能がある。
最近閉じた項目にウィンドウが閉じた履歴が出るので、ここから復帰できる。
もちろん閉じたウィンドウの中身は展開でき、何を閉じたかも確認できる。
Chromeにもあるが、履歴に存在せずショートカットキーで出しづらいのと、何を閉じたのかが一目でわからないのが微妙に感じる。
垂直タブバー
Edgeには垂直タブバーがあり、多数のタブを開いているときに便利なケースがある。しかし個人的にはChromeのタブリストの方が必要な時にだけ画面上に被さるように出てくるため使いやすいと感じている。Edgeのは画面が狭くなるし、タブバーを開いている間は本来のタブが消えてしまうので操作性が悪い。
Edgeの垂直タブバー
垂直タブバーを表示すると元々のタブが消え操作性が変わってしまう上、能動的に非表示にしないと画面を占有して邪魔なので私はあまり好きではない。
タブバーを出す前 | タブバーを出した後 |
---|---|
![]() |
![]() |
Chromeの同等機能
Edgeと比べてUIに破壊的変化がなく、フォーカスを失えば勝手に消えるので便利だ。
設定同期
Edgeの設定同期には問題がある。それは設定の大半が同期されないことだ。Edgeにはマイクロソフトによるお節介機能が多くあり、これを無効化するための設定が多くあるのだが、これらは全く同期されない。無数に設定がある割に不親切だ。マイクロソフトの広告系の機能ならまだしも、マウスジェスチャすら同期されないのはいくら何でも酷いと思う。
一方でChromeは、設定画面にあるものであれば、ほとんどすべての設定が同期される。標準ダウンロード方式以外恐らくすべて同期されているのではなかろうか?
設定の単純さ
Edgeにはマイクロソフトの利益に繋がる広告機能や、Copilotなどの本質的にブラウザとして不要な機能が山のようにあり、これらの有効無効を切り替える設定が数多くある。これは多くの人間にとっては複雑なことだと思う。
一方でChromeの設定も多いとはいえ、Edgeと比べると単純だ。設定することもさほどないので導入が圧倒的に楽である。
ブラウザベンダーの広告
Edgeはひたすらマイクロソフトのサービスに誘導するように色々と邪魔くさく仕向けてくるが、Chromeではそんなことはない。
- 投稿日:
SDXLでキャラクターLoraをいい感じに作る方法。学習には教師画像のみを用いる。
必要なもの
- AUTOMATIC1111/stable-diffusion-webui
- Kohya_LoRA_param_GUI
- ベースとなるSDXLチェックポイントモデル
やり方
1. 学習用の素材となる画像を集める
学習画像の枚数・パターン
多ければ多いほどいいが、多すぎると学習に時間がかかりすぎるので、ある程度選別する。
例えば3Dキャラクターを学習する場合は、1ポーズ当たり正面・斜め前・横・斜め後ろ・真後ろの流れで一周八面の画像をいくつかのポーズ分作っておくと再現性が高くなる。
奇麗な画像があまりとれない場合は、極力そのキャラクターの特徴が出ている画像を数枚集める。4枚とかでもいい。1枚は試したことないのでどうなるのか不明。
学習素材となる画像の選定
学習元画像には背景が入っていてもいいが、そのキャラクターだけが映り込んでいるものを選ぶ。ほかのキャラクターが入っていたらトリミングするなどで消したほうが良い。
2. 学習用の素材画像にタグを打つ
- AUTOMATIC1111を起動し、Tagger→Batch from directoryを開く
- Additional tagsにキャラクターを出すためのトリガーワードを設定
- 既存のタグと衝突するとぶれるはずなので、一意な名前にする。例えば今井リサなら
imls
みたいに、とりあえず自分で識別できそうな適当な文字列を当てておく
- 既存のタグと衝突するとぶれるはずなので、一意な名前にする。例えば今井リサなら
3. タグファイルを整理する
前項で1画像ファイルに対して1タグファイルができているので、このファイルの内容を整理していく。
まずはゴミワードを探して取り除く。大抵複数ファイルに跨っているので一括置換するのがいい。
次に固定要素を取り除く。例えば髪型や髪の色、瞳の色、アクセサリーの特徴みたいな、何があっても変わらない部分は消す。例えば紫目のキャラクターならpurple eyes
を、ヘアアクセサリが特徴的なキャラクターであればhair ornament
を消すといった感じだ。残したい特徴をタグから取り除くことで、その特徴が固定化されやすくなる。
逆に変動させたい部分、逆に服装やポーズ、体の向き、メガネの有無など、変動しうる場所は残しておく。そうすると、いい感じに特徴をとらえたキャラクターが出やすくなる上、プロンプトにそれらを含めなくても出るようになるためトークンの節約にもなる。
但し、この細工は教師画像が少ないとあまり効果がない気がしている。
参考:LoRA/学習方法 - としあきdiffusion Wiki*
4. 学習とモデルの作成
以下のコードをNew Preset.xmlora
とか適当な名前で保存し、Kohya_LoRA_param_GUIで読み込み、チェックポイントモデルと教師画像、モデルの出力先を適当に指定して実行するとモデルが生成される。
体感ではponyDiffusionV6XL_v6StartWithThisOne.safetensorsが無難な気がしている。
<?xml version="1.0" encoding="utf-8"?>
<TrainParams xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<ModelPath></ModelPath>
<TrainImagePath></TrainImagePath>
<OutputPath></OutputPath>
<TensorBoardLogPath />
<LoraModelPath />
<LearningRate>0.0001</LearningRate>
<Resolution>1024</Resolution>
<BatchSize>2</BatchSize>
<Epochs>8</Epochs>
<NetworkDim>8</NetworkDim>
<NetworkAlpha>3</NetworkAlpha>
<RegImagePath />
<ShuffleCaptions>true</ShuffleCaptions>
<KeepTokenCount>0</KeepTokenCount>
<SaveEveryNEpochs>0</SaveEveryNEpochs>
<OptimizerType>AdamW8bit</OptimizerType>
<WarmupSteps>250</WarmupSteps>
<OutputName></OutputName>
<Comment />
<CpuThreads>1</CpuThreads>
<NoBucketUpscaling>false</NoBucketUpscaling>
<UseWarmupInit>false</UseWarmupInit>
<ClipSkip>2</ClipSkip>
<Seed>42</Seed>
<SavePrecision>fp16</SavePrecision>
<SchedulerType>cosine_with_restarts</SchedulerType>
<MinBucketResolution>320</MinBucketResolution>
<MaxBucketResolution>1536</MaxBucketResolution>
<CaptionFileExtension>.txt</CaptionFileExtension>
<VAEPath />
<UnetLR>-1</UnetLR>
<TextEncoderLR>-1</TextEncoderLR>
<NoiseOffset>0</NoiseOffset>
<Momentum>0.9</Momentum>
<advancedTrainType>UNetOnly</advancedTrainType>
<CrossAttenType>xformers</CrossAttenType>
<UseGradient>true</UseGradient>
<UseWeightedCaptions>false</UseWeightedCaptions>
<AdaptiveNoiseScale>0</AdaptiveNoiseScale>
<MinSNRGamma>0</MinSNRGamma>
<MultiresNoiseIterations>0</MultiresNoiseIterations>
<MultiresNoiseDiscount>0</MultiresNoiseDiscount>
<NetworkDropout>0</NetworkDropout>
<RankDropout>0</RankDropout>
<ModuleDropout>0</ModuleDropout>
<MaxNormReg>0</MaxNormReg>
<CaptionDropout>0</CaptionDropout>
<IpNoiseGamma>0</IpNoiseGamma>
<ModuleType>LoRA</ModuleType>
<AlgoType>lora</AlgoType>
<ConvDim>4</ConvDim>
<ConvAlpha>1</ConvAlpha>
<UseConv2dExtend>true</UseConv2dExtend>
<DyLoRAUnit>4</DyLoRAUnit>
<DatasetConfigPath />
<TrainNorm>false</TrainNorm>
<RescaledOFT>false</RescaledOFT>
<ConstrainedOFT>false</ConstrainedOFT>
<UseScalar>false</UseScalar>
<UseTucker>false</UseTucker>
<WeightDocomposition>false</WeightDocomposition>
<UseBlockWeight>false</UseBlockWeight>
<BlockWeightIn>
<int>20</int>
<int>20</int>
<int>20</int>
<int>20</int>
<int>20</int>
<int>0</int>
<int>0</int>
<int>0</int>
<int>0</int>
<int>0</int>
<int>0</int>
<int>0</int>
</BlockWeightIn>
<BlockWeightMid>0</BlockWeightMid>
<BlockWeightMid01>20</BlockWeightMid01>
<BlockWeightMid02>20</BlockWeightMid02>
<BlockWeightOut>
<int>0</int>
<int>0</int>
<int>0</int>
<int>0</int>
<int>0</int>
<int>0</int>
<int>0</int>
<int>20</int>
<int>20</int>
<int>20</int>
<int>20</int>
<int>20</int>
</BlockWeightOut>
<BlockWeightOffsetIn>0</BlockWeightOffsetIn>
<BlockWeightOffsetOut>0</BlockWeightOffsetOut>
<BlockWeightPresetTypeIn>none</BlockWeightPresetTypeIn>
<BlockWeightPresetTypeOut>none</BlockWeightPresetTypeOut>
<BlockWeightZeroThreshold>0</BlockWeightZeroThreshold>
<UseBlockDim>false</UseBlockDim>
<BlockDimIn>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
</BlockDimIn>
<BlockDimMid>32</BlockDimMid>
<BlockDimMid01>4</BlockDimMid01>
<BlockDimMid02>4</BlockDimMid02>
<BlockDimBase>4</BlockDimBase>
<BlockDimOutSDXL>4</BlockDimOutSDXL>
<BlockDimOut>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
<int>64</int>
</BlockDimOut>
<BlockAlphaIn />
<BlockAlphaMid>-1</BlockAlphaMid>
<BlockAlphaOut />
<BlockAlphaInM>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
</BlockAlphaInM>
<BlockAlphaMidM>32</BlockAlphaMidM>
<BlockAlphaMid01>4</BlockAlphaMid01>
<BlockAlphaMid02>4</BlockAlphaMid02>
<BlockAlphaBase>4</BlockAlphaBase>
<BlockAlphaOutSDXL>4</BlockAlphaOutSDXL>
<BlockAlphaOutM>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
<decimal>64</decimal>
</BlockAlphaOutM>
<UseColorAug>false</UseColorAug>
<UseFastLoading>true</UseFastLoading>
<DontSaveMetadata>false</DontSaveMetadata>
<UseFlipAug>false</UseFlipAug>
<CropRandomly>false</CropRandomly>
<CacheLatents>true</CacheLatents>
<CacheLatentsToDisk>true</CacheLatentsToDisk>
<HighVRAM>false</HighVRAM>
<UseAdditionalOptArgs>false</UseAdditionalOptArgs>
<LRSchedulerCycle>4</LRSchedulerCycle>
<GradAccSteps>1</GradAccSteps>
<DataLoaderThreads>1</DataLoaderThreads>
<MaxTokens>75</MaxTokens>
<mixedPrecisionType>fp16</mixedPrecisionType>
<WeightDecay>0</WeightDecay>
<Eps>1E-06</Eps>
<D0>1E-06</D0>
<GrowthRate>0</GrowthRate>
<Betas0>0.9</Betas0>
<Betas1>0.999</Betas1>
<Betas2>0.999</Betas2>
<DAdaptMomentum>0.9</DAdaptMomentum>
<ProdigyBeta3>0</ProdigyBeta3>
<DCoef>1</DCoef>
<Decouple>false</Decouple>
<NoProx>false</NoProx>
<SafeguardWarmup>false</SafeguardWarmup>
<UseBiasCorrection>false</UseBiasCorrection>
<StableDiffusionType>XL</StableDiffusionType>
<NoHalfVAE>false</NoHalfVAE>
<CacheTextencoder>false</CacheTextencoder>
<CacheTextencoderToDisk>false</CacheTextencoderToDisk>
<IsEpoch>true</IsEpoch>
<UseFullFP16>false</UseFullFP16>
<UseFP8Base>false</UseFP8Base>
<RelativeStep>true</RelativeStep>
<ScaleParameter>true</ScaleParameter>
<SaveState>false</SaveState>
<MaskLoss>false</MaskLoss>
<RandomNoiseOffset>false</RandomNoiseOffset>
<RandomIpNoiseGamma>false</RandomIpNoiseGamma>
<TokensSeparator />
<LossType>LTwo</LossType>
<HuberScheduleType>SNR</HuberScheduleType>
<HuberC>0.1</HuberC>
<LoRAPlusLRRatio>0</LoRAPlusLRRatio>
<LoRAPlusUnetLRRatio>0</LoRAPlusUnetLRRatio>
<LoRAPlusTELRRatio>0</LoRAPlusTELRRatio>
</TrainParams>
- 投稿日:
AviUtlを使って動画の一部にモザイクをかける方法。勿論シーンに応じてモザイクは動かす。
確認環境
Env | Ver |
---|---|
AviUtl | 1.10 |
拡張編集(exedit) | 0.92 |
やり方
補足説明
Pキーを押すことで中間点を作成でき、ここを区切りにしてオブジェクトを移動できるようになる。区切りはレイヤーに表示されているオブジェクトのバーの上に表示されているのでそこでわかる。
複数のモザイクをかける場合は別のレイヤーに同様の手順で部分フィルタオブジェクトを設置すればよい。中間点の作成や移動操作などは対象のオブジェクトを選択していないと機能しないので注意が必要。
あとがき
モーショントラッキング系のプラグインを使うと多少楽ができるが、今回は敢えてマニュアルで作業してみた。
謝辞
今回動画にモザイクをかける方法について調べた際に、以下のサイトを参考にさせて頂いた。
- 投稿日:
基本はこのコマンドを流せば行けるはず
sudo apt update
sudo apt upgrade
sudo apt full-upgrade
sudo do-release-upgrade
トラブルシュート
「There is no development version of an LTS available.」というエラーが出る
sudo do-release-upgrade
の実行時に-d
オプションを外す
サービスをstop出来ないみたいなエラーが出る
自動起動していない場合、PowerShellなどからWSLを殺せば解決する
wsl --shutdown
サードパーティのリポジトリ周りでこける
コケてるリポジトリを消せばよい。以下は一例
ls -la /etc/apt/sources.list.d
sudo rm -Rf /etc/apt/sources.list.d/grafana.list*
「Some third party entries in your sources.list were disabled. You can re-enable them after the upgrade with the 'software-properties' tool or your package manager.」というエラーが出る
無視してよい