资源简介
火火火火的waifu2x,运行环境win7+vs2013+opencv2.4.12,你值得拥有,可以直接点击sln运行。
代码片段和文件信息
# -*- coding: utf-8 -*-
# waifu2x.py by @marcan42 based on https://github.com/nagadomi/waifu2x
# MIT license see https://github.com/nagadomi/waifu2x/blob/master/LICENSE
# 必要なモジュールのインポート
import json sys numpy as np # jsonサポート、システム、数値ユーティリティ(と思われる)
from scipy import misc signal # scipyより、その他処理、信号処理
from PIL import Image # 画像ファイル取り扱いユーティリティ
# Model export script: https://mrcn.st/t/export_model.lua (needs a working waifu2x install)
#infile outfile
modelpath = sys.argv[1:] # コマンドライン引数読み込み(入力ファイル、出力ファイル、モデルjsonファイルへのパス)
model = json.load(open(modelpath)) # jsonファイルのロード(jsonファイルに記述された構造をそのままメモリ上に展開していると思われる)
# モデルの1階層が持つ情報:
# * nInputPlane : このモデルに入力するべき平面の数
# * nOutputPlane : このモデルから出力されるべき平面の数
# * weight : 入力平面に対して畳み込み演算を行う重み行列の集合
# - nInputPlane個の重み行列をパックしたものがnOutputPlane個入っている。行列の要素は全てfloat値。
# - 例えば、初回は1個の重み行列をパックしたものが32個、2階層目は32個の重み行列をパックしたものが32個(つまり行列の数は1024個)入っている。
# - 1つの重み行列は全て3x3行列となっている。従って、1回畳み込みを行う度に平面の大きさは上下左右1要素ずつ小さくなる。
# - 計算時のアンカー(畳み込みの中心とする行列の位置)はおそらく(22)であると思われる(そうでないと、出力平面が変な方向に移動してしまうため)。
# * bias : 出力平面一つに対して(全要素に加算することにより)掛けるバイアス値
# - float値がnOutputPlaneの数だけ用意されている。
# * kWkH : 未使用値(重み行列1つの大きさであると思われる。配布されているモデルの場合は全て3x3である)
im = Image.open(infile).convert(“YCbCr“) # 入力ファイルの読み込み -> YCbCr色空間への変換
im = misc.fromimage(im.resize((2*im.size[0] 2*im.size[1]) resample=Image.NEAREST)).astype(“float32“)
# 入力画像を2倍の幅・高さにNearestNeighbor法でリサイズした後、それをscipyで取り扱い可能な行列表現にし、
# その要素の型を32bit-floatにする
planes = [np.pad(im[::0] len(model) “edge“) / 255.0]
# 画像データの周りに、画像の端をコピーする形で、モデルの大きさ(核の行列の大きさ)分だけパッドを入れ、0~1の間でクリップする
# このplanesは輝度情報のみを取り出している(!)
# オリジナルのwaifu2xも、reconstruct時に入力をYUV色空間に変換した後、Yのみを取り出して処理している
count = sum(step[“nInputPlane“] * step[“nOutputPlane“] for step in model)# 畳み込み演算の必要回数を計算
# つまり、countの数だけ入力平面に対する重み行列の畳み込みが行われる。
progress = 0
for step in model: # ループ:ステップ(1つのモデル階層) 始め
assert step[“nInputPlane“] == len(planes)
# このステップのモデルに定義された入力平面の数と実際の入力平面の数は一致していなければならない
assert step[“nOutputPlane“] == len(step[“weight“]) == len(step[“bias“])
# モデルの出力平面はモデルの重み行列集合の数とそのバイアスの数と一致していなければならない
# つまり、各ステップの重み行列集合の数とそのバイアスの数だけ、そのステップによって平面が出力される
o_planes = [] # 出力平面の格納場所を初期化
for bias weights in zip(step[“bias“] step[“weight“]): # ループ:バイアス&重み行列集合 始め
partial = None # partialをNone(null値)に初期化
for ip kernel in zip(planes weights): # ループ:入力平面&核(重み行列) 始め
p = signal.fftconvolve(ip np.float32(kernel) “valid“) # 入力平面に対して核を畳み込み演算
if partial is None:
partial = p # 最初の畳み込み演算の結果を代入
else:
partial += p # 畳み込み演算の結果を加算したものを代入
# したがって、partialにはこのステップにおける全ての入力平面に対する重み行列の畳み込み演算の結果の総和が入る
progress += 1
sys.stderr.write(“\r%.1f%%...“ % (100 * progress / float(count)))
# ループ:入力平面&核 終わり
partial += np.float32(bias) # 計算したpartialにバイアスを加算(バイアスは1つの数値なので、partial全体にバイアスがかかる)
# ここまでが
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2016-11-22 11:02 waifu2x-converter-cpp\
文件 6058 2016-11-22 09:27 waifu2x-converter-cpp\LICENSE
文件 2573 2016-11-22 09:27 waifu2x-converter-cpp\README.md
目录 0 2016-11-22 11:01 waifu2x-converter-cpp\waifu2X\
目录 0 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\
文件 178 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\allconv.sed
文件 6082 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\hints-jp.md
文件 3276 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\README-jp.md
文件 5953 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\waifu2x-commented.py
目录 0 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\waifu2x-nocuda\
文件 670 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\waifu2x-nocuda\export_model_nocuda.lua
目录 0 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\waifu2x-nocuda\lib\
文件 1897 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\waifu2x-nocuda\lib\image_loader.lua
文件 1178 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\waifu2x-nocuda\lib\iproc.lua
文件 924 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\waifu2x-nocuda\lib\LeakyReLU.lua
文件 1830 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\waifu2x-nocuda\lib\minibatch_adam.lua
文件 5714 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\waifu2x-nocuda\lib\pairwise_transform.lua
文件 2051 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\waifu2x-nocuda\lib\reconstruct.lua
文件 1903 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\waifu2x-nocuda\lib\settings.lua
文件 1202 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\waifu2x-nocuda\lib\srcnn.lua
文件 2333 2016-11-22 09:27 waifu2x-converter-cpp\waifu2X\appendix\waifu2x-nocuda\waifu2x.lua
目录 0 2016-11-22 10:38 waifu2x-converter-cpp\waifu2X\cfgmgr32.pdb\
目录 0 2016-11-22 10:38 waifu2x-converter-cpp\waifu2X\cfgmgr32.pdb\E4C73E93B825413F99E80BA656C483172\
文件 0 2016-11-22 10:38 waifu2x-converter-cpp\waifu2X\cfgmgr32.pdb\E4C73E93B825413F99E80BA656C483172\cfgmgr32.pd_
目录 0 2016-11-22 10:01 waifu2x-converter-cpp\waifu2X\Debug\
文件 334848 2016-11-22 10:59 waifu2x-converter-cpp\waifu2X\Debug\waifu2X.exe
文件 2396152 2016-11-22 10:59 waifu2x-converter-cpp\waifu2X\Debug\waifu2X.ilk
文件 3427328 2016-11-22 10:59 waifu2x-converter-cpp\waifu2X\Debug\waifu2X.pdb
目录 0 2016-11-22 10:34 waifu2x-converter-cpp\waifu2X\iertutil.pdb\
目录 0 2016-11-22 10:34 waifu2x-converter-cpp\waifu2X\iertutil.pdb\29A68B8FC1B641BDA6D6F68F78CA98162\
文件 0 2016-11-22 10:34 waifu2x-converter-cpp\waifu2X\iertutil.pdb\29A68B8FC1B641BDA6D6F68F78CA98162\iertutil.pd_
............此处省略76个文件信息
- 上一篇:最新鼎捷鼎新T100ERP软件技转开发视频教程样片.zip
- 下一篇:安卓基础相机1
评论
共有 条评论