タイトルの通り、DCGANしてtensorflow.jsを使ってWebアプリ化した
onnxjsはやっぱり全然モデル対応してないからやめた
▼ リポジトリ github.com
▼ デプロイしたやつ mygan.hayashikun.com
データセットは自分で頑張って集めたアイドルの画像を使った
モデルはこんな感じ
mygan/model.py at master · hayashikun/mygan · GitHub
Generator / Discriminator
学習したモデルをtensorflow.jsで読み込めるように変換するのは以下のようにする
tfjs.converters.save_keras_model(self.generator, self.tfjs_export_dir, quantization_dtype_map={"uint8": "*"})
mygan/trainer.py at master · hayashikun/mygan · GitHub
quantization_dtype_map
を変えると生成されるモデルのサイズが変わる
uint8
→ uint16
→ float16
の順で重くなる
Webで表示する箇所はReactで実装した
mygan/web at master · hayashikun/mygan · GitHub
mygan/IdolPage.tsx at master · hayashikun/mygan · GitHub
useEffect
でmodelを読み込んで、読み込めたら生成するようにした
入力のnoiseをいじりたかったので、noiseの最初の16要素は0にして、残りを乱数にした
setNoise([...Array(tfjs.inputs[0].shape[1] || 0)].map( (_, i) => i < 16 ? 0 : Math.random() * 8 - 4 ));
Sliderを16個入れて、noiseを変えられるようにした
<ul style={{listStyle: "none", width: "50%", margin: "auto"}}> {[...Array(16)].map( (_, i) => { return <li key={"slider-li-" + i}> <Slider min={-4} max={4} step={0.5} defaultValue={0} onChange={e => onSliderChange(e, i)}/> </li> })} </ul>
Sliderを動かすと絵も変わる
結構計算は早くてヌルヌル変わる