旅行好きなソフトエンジニアの備忘録

プログラミングや技術関連のメモを始めました

Deep Learning

【PyTorch】Macro Soft F1 Lossを実装する

マルチラベル問題の評価指標の一つにMacro F1というものがあります。 Macro F1はそのままでは微分できないのでロス関数には適さないのですが、評価指標を微分可能にしてロス関数にしてしまおうという考えもあるようです。 towardsdatascience.com リンクでは…

【PyTorch】安物GPUだけどバッチサイズ大きくしたい

諸事情によりバッチサイズを大きく取らないといけなくなったのですが、そんな時はoptimizerのstep等のタイミングを変更することで同等のことができそうです。 例えば下記の疑似コードでバッチサイズ16, accumulation=2であればバッチサイズ32で実行している…

【PyTorch】マルチラベル問題で使われているFocalLossを見つけたのでメモ

マルチラベル+不均衡データを扱うのでマルチラベル問題で利用されているFocalLossの実装を探したのですが見つけました。感謝! import torch.nn as nn import torch.nn.functional as F class FocalLoss(nn.Module): def __init__(self, gamma=2): super(Fo…

【Python】データ拡張ライブラリAlbumentationsの設定保存・復元

ディープラーニングで実験するときにどんなデータ拡張を利用したのかファイルとして保存しておきたかったのですが、 データ拡張ライブラリAlbumentationsの最新版には既にその機能があったのでメモします。 from albumentations import Compose from albumen…

【Python】データ拡張手法Mixupの擬似コード

PyTorchのカスタムデータセットにmixupをどう入れ込むかの擬似コードメモです。 # これをDatasetの__get_item__に入れ込めば良い def _apply_mixup(self, image1, label1, idx1, image_size): # mixする画像のインデックスを拾ってくる idx2 = self._get_pai…

【Keras】ArcFaceとUmapを使って特徴量を可視化する

ディープラーニングを用いたMetric Learningの一手法であるArcFaceで特徴抽出を行い、その特徴量をUmapを使って2次元に落とし込み可視化しました。KerasでArcFaceを用いる例としてメモしておきます。 qiita.com qiita.com 実装は以下を引っ張ってきました。…

【Keras】EfficientNetのファインチューニング例

EfficientNetはAutoMLで作成された、パラメータ数の少なさに対して精度が非常に高いモデルです。 OfficialのTensorflowの実装だけでなく、PyTorchやKerasの実装も早速公開されており、使い方を知っておきたく試してみました。 実施内容 EfficientNetをファイ…

【Keras】fit_generatorに使うgeneratorの雛形メモ

クラス分類用のfit_generatorに使うgeneratorの雛形をメモします。 画像が格納されているフォルダが以下のような構造であることを前提とします。 トップフォルダ class1フォルダ class1に属する画像ファイル class2フォルダ class2に属する画像ファイル 以下…

【Python】Siamese NetworkでMNISTの少量データ学習を試す

ディープラーニングは一般的に多くの学習データが必要とされますが、少量しかない場合にどれ位精度が落ちるのか気になり 実験してみようと思いました。そうは言っても普通にCNNに少量のデータを学習させても簡単に過学習しそうに思えるので、 少量のデータで…

【Python】画像データ拡張ライブラリAlbumentationsを使ってみる

PyTorch版のYOLO v3を作っている人がいたので試してみようと思っています。 github.com ただ、Trainにデータ拡張が入っていないのでデータ拡張ロジックを追加したいと思ったところ、 Albumentationsというライブラリを見つけました。 github.com 物体検出や…

【異常検知】GANを用いた画像の異常検知

ANOGAN, ADGAN, Efficient GANといったGANを用いて異常検知する手法が下記にまとめられています。 habakan6.hatenablog.com ADGANとEfficient GANはANOGANを改良した手法になるようです。そのため手法の概念を学ぶには ANOGANを勉強すれば良さげです。初め解…

【異常検知】オートエンコーダーを用いた画像の異常検知

以下のサイトで画像の異常検知をやっていて面白そうなので自分でも試してみました。 qiita.com --- 試した環境 --- Windows10 Python 3.6 Keras 2.1.4 Tensorflow-gpu 1.5.0 使うデータセットは9クラスに分類されたキュウリの画像です。 github.com 以下の写…

【Python】PCANetを試してみる

教師なし学習で画像の特徴量抽出を行う方法を調べていて以下を見つけたのでMNISTで試してみました。以下記事にgithubへのリンクがあるので、そこのpcanet.pyを写します。 qiita.com 写したpcanet.pyを使い、以下のmain.pyを書いて動作させれば特徴抽出⇒分類…

【PyTorch】モデルがevalモードの時にout of memoryが発生する事への対処法

PyTorchでモデルがtrainモードの時には発生しないのですが、evalモードの時にGPUのメモリが解放されないまま消費されていきout of memoryが発生していました。調べたところ、Variableにvolatileという引数があって、これをTrueにすれば良いよというアドバイ…

【Python】不均衡な2クラスセグメンテーション問題に適用するロス関数のメモ

この論文で不均衡な2クラスセグメンテーション問題に適用するロス関数が提案されていたのでメモします。ディープラーニングを使ったセグメンテーションでデータが極端に不均衡(例えば画像のほとんどが0で、1はちょっとだけ)の場合、工夫をしないと学習が上…

【Python】KerasでMobileNetのモデルファイルを読み込む方法

KerasでMobileNetのモデルファイルを読み込もうとすると"Unknown activation function:relu6"といったエラーが出ます。このエラーへの対処はここに書かれており、以下のようにすれば大丈夫でした。 from keras.utils.generic_utils import CustomObjectScope…

【Python】 VAE(Variational Auto Encoder)の写経

書籍「Deep Learning with Python」にMNISTを用いたVAEの実装があったので写経します(書籍では一つのファイルに全部書くスタイルだったので、VAEクラスを作ったりしました)。 VAEの解説は以下が詳しいです。 qiita.com 実装ですが、まずは以下をvae.pyに書…

【Python】 KerasでConditional DCGANを実装する

前回DCGANを実装しましたが、今回はConditional DCGAN([1411.1784] Conditional Generative Adversarial Nets)を実装します。 DCGANの例は入力からどのような数字が生成されるかコントロールできませんでしたが、Conditional DCGANは付加情報を足すことで…

【Python】 KerasでDCGANを試す

DCGANでMNISTの手書き数字画像を生成する、ということを今更ながらやりました。元々は"Deep Learning with Python"という書籍にDCGANでCIFAR10のカエル画像を生成させる例があり、それを試してみたのですが、32×32の画像を見ても結果が良く分からなかったの…

【Python】 Keras開発者の著書

Keras開発者による著書「Deep Learning with Python」が発売されています。今はクーポンコード"CTWNIPS17"で40%オフなのでお得です。 www.manning.com

【Python】 Kerasのエラー:'rawunicodeescape' codec can't decode bytes in position xx-xx: truncated \uXXXXの対処法

表題のエラーに出くわしたのですが、StackOverflowの情報ではPython3、Windowsで発生するようです。自分の場合はチェックマークが付いている回答ではなく、二番目の人の回答で解決しました。 stackoverflow.com keras/utils/generic_utils.pyの code = marsh…

【Python】 フレームワークによるBatchNormalizationのmomentumの違いについて

KerasのBatchNormalizationの引数momentumはデフォルト値が0.99です。一方でTorchのBatchNormalizationの引数momentumはデフォルト値が0.1のようです。 いくらフレームワークが違うといっても、ここまで初期値が違うものかと調べてみると、Kerasは下記式のα…

【ディープラーニング】 "37 Reasons why your Neural Network is not working"のまとめ

下記の記事がためになったため、まとめてみました。 blog.slavv.com まず調べる事 上手くいくことが分かっている事から始める。例えば画像であればVGGを使ってみる等。ロスも独自の定義ではなく標準のものを使う 正則化やデータ拡張等のオプションを全て止め…

【ディープラーニング】 セマンティックセグメンテーション手法のまとめ

ディープラーニングを利用したセマンティックセグメンテーションについてまとめてあるページを見つけたのでメモします(A 2017 Guide to Semantic Segmentation with Deep Learning)。 2017年12月10日追記 上記リンクを日本語訳した記事があったため、下記リ…

【Python】 KerasでU-Net構造ネットワークによるセグメンテーションをする

ここ(Daimler Pedestrian Segmentation Benchmark)から取得できるデータセットを使って、写真から人を抽出するセグメンテーション問題を解いてみます。U-Netはここ( U-Net: Convolutional Networks for Biomedical Image Segmentation )で初めて発表され…

【Python】 LSTMによる時系列データの予測

前回SimpleRNNによる時系列データの予測を行いましたが、今回はLSTMを用いて時系列データの予測を行ってみます。 ni4muraano.hatenablog.com LSTMはSimpleRNNと比較すると長期依存性の高いデータに有効とのことなので、50回に一回パルスが発生する信号に対す…

【Python】 SimpleRNNで月平均気温を予測する

画像だけでなく時系列データにも手を出してみたい、ということで書籍「詳解ディープラーニング」を購入しました。書籍第5章から時系列データを扱っているのですが、そこで紹介されているSimpleRNNの例を写経します。書籍ではノイズの入ったサイン波の予測を…

【ディープラーニング】 不均衡データへの対処法

ディープラーニングというより、機械学習全般で起こりうる問題として不均衡データ問題があります。例えばラベル0のデータが99個あり、ラベル1のデータが1個しかない、といったように教師データのバランスが悪い場合、モデルは「とりあえず0と回答すれば99%の…

【Python】 KerasでResNet等のショートカット構造を実装する

Kerasでは学習済みのResNetが利用できるため、ResNetを自分で作ることは無いと思います。ただ、ResNet以外にも下の写真のようなショートカット構造を持つネットワークがあり、これらを実装したい時にどのように作成するかをメモします。 単純なネットワーク…

【Python】 Kerasで中間層を可視化する

Kerasを利用してネットワーク中間層を可視化する方法をメモします。プログラムでは学習済みのモデルと重みがある事を想定し、それらを読み取って一層目の中間層であるConvolution2Dの重みを可視化しています。 import numpy as np from keras.models import …