Comments (15)
ご連絡ありがとうございます。
>もしcodeの修正でgray-scaleを扱えるようでしたら、ぜひお教え下さい。
- Datasetクラスの定義でGrayscaleの処理を追加
- Datasetクラスの定義でNormalizeの処理を除外
- denormalizeの処理を除外
- channels = 3をchannels = 1に変更
- VGGの特徴量の抽出をする際に入力のTensorのチャンネル数を1から3に変更
VGGはgray-scaleでの学習はされておらず抽出された特徴量でうまく超解像の学習できるかは分かりませんが、これらの対応でgray-scaleでの学習自体は可能かと思います。
from gan_sample.
Hampen様
回答ありがとうございます。
まず2〜4はすでに実施しております。
Q1:
5.VGGの特徴量の抽出をする際に入力のTensorのチャンネル数を1から3に変更
ですが、私の力量では修正出来ないので、お手伝い頂けると助かります。(当方の力量不足で、pytorchを正確に理解・利用できていてません。)
本書p132とp135に特徴量抽出器の記載があるのですが、入力のテンソルのchannel数を決める部分を見つけられません。
おそらくp132の以下の部分。
vgg19.model =vgg19(pretrianed=True)
self.vgg19_54 = nn.Squential(*list(vgg19_model.features.children())[:35]
この辺りを修正するのかと思いましたが、具体的にどのようにすればよいのかわかりません。
私の推測としては
vgg19_model.features.children()[0] ?
で入力を取り出し、それを修正して再度modelを組み直すということでしょうか?
それが正しいとして、修正した入力部分と修正していない部分を結合し、入力が1channleの特徴量抽出器を作る方法がわかりません。
Q2:
- Datasetクラスの定義でGrayscaleの処理を追加
とありますが、最初からGary-scaleの場合でも何か処理が必要でしょうか。
Q3:
- Datasetクラスの定義でNormalizeの処理を除外
RGBではNormalize が必要で、Gary-scaleでは不要な理由がよくわかりません。
経験的には、gray-scaleでは Normalizeすると、うまくいかないことが多いのは理解しているのですが、理屈が不明でして。
推測としては、RGBは各channleで値の分布が異なるため、各channelの値の分布を規格化(同じ平均や分散)にしたいのでしょうか。
よろしくお願いします。
from gan_sample.
執筆者の毛利です。
感想の件、ありがとうございます。
執筆者にとってもフィードバックは励みになり、嬉しく思います。
以下の質問に回答いたします。
>2.本書に掲載されているcodeですが、商業利用は可能でしょうか。
→ 本書のコードは商用利用可能です(MITライセンス)。後日githubに更新予定ですが、取り急ぎご連絡します。
from gan_sample.
毛利様
ご連絡ありがとうございます。
本書のコードは商用利用可能です(MITライセンス)。
MITでしたら安心して利用できるので助かります。
細かいことで恐縮ですが、もし他からcodeを引用されている場合、引用先のライセンスが気になります。
今回の本に掲載されているcodeは、この点についても問題ないと考えてよろしいでしょうか。
また何か質問するかもしれませんが、よろしくお願いします。
from gan_sample.
MITの場合、引用するときの注意事項があると思います。
確認するので、お待ちくださいませ。(少し時間を要します。)
from gan_sample.
先日のvgg19の入力channle数の変更ですが、以下で試しているところです。
もしご意見があれば頂けると助かります。
originalは
nn.Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
でしたので、3を1にしました。
vgg19_model.features[0] = nn.Conv2d(1, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
これをgeneratorにいれました。
## 生成器の特徴量抽出器
class FeatureExtractor(nn.Module):
"""
Perceputual lossを計算するために特徴量を抽出するためのクラス
"""
def __init__(self):
super(FeatureExtractor, self).__init__()
vgg19_model = vgg19(pretrained=True)
## inputのchannel数を変更: RGB(3) >> Gray scale(1)
### https://qiita.com/perrying/items/857df46bb6cdc3047bd8
vgg19_model.features[0] = nn.Conv2d(1, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
self.vgg19_54 = nn.Sequential(*list(
vgg19_model.features.children())[:35])
def forward(self, img):
return self.vgg19_54(img)
また パラメーターの部分で以下を修正しています。
self.channels = 1 # for grayscale
他の注意点として、opencvでは、grayscale画像でも保存時にRGBに変更されるため、cropの部分の修正も必要です。
pngのためかもしれませんが、確認してません。
cropped_image = cv2.cvtColor(cropped_image, cv2.COLOR_BGR2GRAY)
cv2.imwrite(cropped_image_save_path, cropped_image)
上記を試してますが、loss_Dがかなり振動します。
さてどのパラメータを修正するのが良いのでしょうか?
from gan_sample.
返信が遅くなり申し訳ありません。
VGGの特徴量の抽出をする際に入力のTensorのチャンネル数を1から3に変更
こちらはVGGではなく入力するTensorのチャンネルを意図しており、グレイスケールでチャンネルを1にしたものを複製して3にしてVGGの入力に合わせるというものでした。
img = img.repeat_interleave(3,1)
こちらで複製しています。
class FeatureExtractor(nn.Module):
"""
Perceputual lossを計算するために特徴量を抽出するためのクラス
"""
def __init__(self):
super(FeatureExtractor, self).__init__()
vgg19_model = vgg19(pretrained=True)
self.vgg19_54 = nn.Sequential(*list(
vgg19_model.features.children())[:35])
def forward(self, img):
img = img.repeat_interleave(3,1)
return self.vgg19_54(img)
ただ学習は安定しなさそうです。
試したことがないので憶測ですが、グレイスケールで超解像をやるなら、やはりグレイスケールで学習させたモデルをFeatureExtractorとして使用する必要があるのではと思っています。
さてどのパラメータを修正するのが良いのでしょうか?
申し訳ありませんが、この用途においてパラメータを修正による対応へのアイディアは持ち合わせてないです。。。
from gan_sample.
Hampen様
回答ありがとうございます。
VGGではなく入力するTensorのチャンネルを意図しており、グレイスケールでチャンネルを1にしたものを複製して3にしてVGGの入力に合わせるというものでした。
img = img.repeat_interleave(3,1)
こちらの方法でしたか。明日試して見ます。
この場合、
・入力のdataはgary-scale
・ parameterのchannels数は 1
で良いでしょうか。
グレイスケールで超解像をやるなら、やはりグレイスケールで学習させたモデルをFeatureExtractorとして使用する必要があるのではと思っています。
全くおっしゃるとおりです。
手元にdataが沢山ない(100枚くらい)のすが、可能でしょうか。
その場合は、vgg19のどの層を固定して、どの層を学習させればよいのでしょうか。
from gan_sample.
Hampen様
私が修正したmodel (vgg19入力を1ch化)でうまくゆきました。
loss_Dとloss_GANは安定しませんでしたが、約14時間くらいの学習で良い画像ができました。
他の画像でうまくゆくのかもためしてみたいと思います。
ご提案の方法も試してみます。
先程はじめましたが、こちらのほうが良さそうな感触です。
...
現在180epochですが、今回のgray-scale-modelで生成されるtest画像の変化はRGBのときとよく似ており、RGBをgary-scaleに変換したような印象です。また少し立体的に見えます。
一方、先日の私が行った入力を1chにしたmodelでは、途中経過で生成される画像が少し異なります。こちらは平面的な印象の画像です。
...
先程結果を確認しましたが、今回のmodelのほうが僅かに良さそうです。
各lossの変化はRGBの変化と似ています。
from gan_sample.
手元にdataが沢山ない(100枚くらい)のすが、可能でしょうか。
100枚だと厳しいそうですね…
しかし超解像の特徴量抽出で用いるVGGの学習済みモデルは、超解像に用いる画像(本書籍だと猫の画像)で学習したわけではないので、Openに公開されているデータをGrayscaleに変換してVGGを学習させれば同じことはできるのではないかと思っています。
先程はじめましたが、こちらのほうが良さそうな感触です。
上手くいったようで何よりです!
from gan_sample.
hampenさま
Openに公開されているデータをGrayscaleに変換してVGGを学習させれば同じことはできるのではないかと思っています。
おっしゃるとおりです。
後はどれくらい時間がかかるかですね。
VGG19がどのdataを使ったのかを調べてみます。
from gan_sample.
MITライセンスのコピーライトのリンクを作成しました。
商用利用などの場合はご活用ください。
https://github.com/ayukat1016/gan_sample/blob/main/LICENSE
from gan_sample.
毛利様
ありがとうございます。
法律英語は範囲外でわからないため、念のため確認です。
wikiの記載(以下)とほぼ同等と考えて良いでしょうか。
このソフトウェアを誰でも無償で無制限に扱って良い。ただし、著作権表示および本許諾表示をソフトウェアのすべての複製または重要な部分に記載しなければならない。
作者または著作権者は、ソフトウェアに関してなんら責任を負わない。
以下の記載が見当たらないので、本program利用の際には、記載の必要はないということでしょうか。
私が見逃しているようでしたら、ごめんなさい。
著作権表示および本許諾表示をソフトウェアのすべての複製または重要な部分に記載
from gan_sample.
追加のご質問ありがとうございます。
ライセンスの件、回答します。
wikiの記載(以下)とほぼ同等と考えて良いでしょうか。
はい。同等です。
以下の記載が見当たらないので、本program利用の際には、記載の必要はないということでしょうか。
私が見逃しているようでしたら、ごめんなさい。
プログラムを利用する際は以下のように記載して、MITであることを明示すると良いと思います。
Copyright (c) 2021 Takuya Mouri, Hampen, taka, Takamitsu Omasa, Hiroki Shimada, massy103, e4exp
Released under the MIT license
https://github.com/ayukat1016/gan_sample/blob/main/LICENSE
from gan_sample.
毛利様
上記了解しました。
from gan_sample.
Related Issues (15)
- EfficientGANをgary-scaleで試してますが、画像が不鮮明で_img_from_Zの画像のコントラストが低い HOT 37
- StyleGANに必要なmoduleを教えて下さい HOT 8
- 3D-α-WGAN-GPの応用について HOT 7
- RuntimeError occurred during training HOT 8
- コード内のVariable()について HOT 4
- style_gan2_pytorch/simple_upfirdn_2d.pyについて HOT 1
- photo2portraitデータセットにアクセスできません HOT 3
- section6_3_recycleGAN_pytorch_face.ipynbのReplayBufferが誤っている? HOT 1
- AnoGAN Fruits-360 dataset をダウンロードできない? HOT 4
- 出力の名称について HOT 3
- section7_1-training.ipynb のエラーについて HOT 7
- Updating: gan_sample/chapter7/requirements.txt HOT 1
- 電子書籍 HOT 4
- Windows 10における実行時のエラー "BrokenPipeError: [Errno 32] Broken pipe" HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from gan_sample.