サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
体力トレーニング
qiita.com/koshian2
前処理の改良でここまで伸びる! 実世界での画像劣化とのギャップに注目した超解像モデル「Real-ESRGAN」紹介機械学習DeepLearning論文読み超解像ICCV2021 2021年のディープラーニング論文を1人で読むAdvent Calendar24日目の記事です。今日読むのは「超解像技術」の論文です。 この論文はESRGANという、2018年の論文のリファインなのですが、訓練時の低解像度データの作成方法(訓練時の前処理)を大きく変えて、モデルはそれほど変わっていないという面白い改善です。通常この手のリファインはモデル構造側を工夫することが多いのですが、「前処理を実際の画像劣化に合わせることで、現場で通用するような超解像モデルを作りましょうね」というのがコンセプトです。前処理を変えるとこんなに変わるというのをぜひ体感してほしいです。 ICCV2021のWorkshopに採択されてい
※2019年8月時点の情報です。今後の機材アップデートやColabの方針次第では、この情報は変わる可能性があります。 きっかけ 条件を変えて別々のランタイムで訓練させると、1個は150エポックぐらい進んでいるのに、もう1個は50エポックぐらいしか進んでいないという現象がありました。 ほぼ同じ計算量なのに、条件によって2~3倍ぐらい計算時間が違う、これはおかしい――ということで調査してみました。 nvidia-smiしてみる どのGPUが割り当てられているかは「nvidia-smi」で確認できます。 1回目、Tesla K80が割り当てられています。これまで通りですね。ここでランタイムをリセットしてみます。 2回目、Tesla T4が割り当てられました。こちらは最新のGPUです。訓練が速かったケースは、このGPUを引けたときだったようです。 このように、2019年8月現在のColabにはラン
クラスAは5%下がってしまいましたが、クラスBは+10%、クラスCは+15%になりました。実は先程のmicro averageによる精度を計算すると、 5000×90% + 100×80% + 25×65% ÷ (5000+100+25) = 89.7% 5%近く下がっています。全体の精度が下がったほうが嬉しい、ちょっとおかしいですよね。 microとmacro この感覚のズレを解消するために、macro averageによる精度を計算します。macro averageとはクラス単位の精度を単純平均で求めます1。 前者:(95% + 70% + 50%) ÷ 3 = 71.7% 後者:(90% + 80% + 65%) ÷ 3 = 78.3% 直感と一致しました。microを使うか、macroを使うかは問題によりけりです。macro averageで集計するコンペもあります。不均衡データ対
2021年のディープラーニング論文を1人で読むAdvent Calendar4日目の記事です。今回紹介するのはData Augmentationの回転と物体検出です。画像の回転はData Augmentationでは一般的な方法ですが、物体検出では思わぬ副作用があります。物体検出におけるBounding Boxの回転について、問題点を指摘しより正確な回転方法や損失関数を提案、ICCV2021にアクセプトされた論文です。 タイトル:Towards Rotation Invariance in Object Detection URL:https://openaccess.thecvf.com/content/ICCV2021/html/Kalra_Towards_Rotation_Invariance_in_Object_Detection_ICCV_2021_paper.html 出典:A
1~2ヶ月ぐらいかけてNumPyの基礎~実装力をつけるための本を書きました。問題演習形式で221問収録してあります。 着想 以前この本を書いたのですが、ディープラーニングに行く前のNumPyでつまずいている方が結構多かったのです。例えば「np.meanのaxisってどうするの?」や「shapeが何だかわからない」というケース。そこをどうにかケアしようというのが今回の目的です。 NumPyの問題演習は昔からありまして、100 numpy exercisesが有名です。昔初心者の頃自分もやったことがあります。最初の方は良いのですが、あとの方が「これイマイチ何に使うんだろう」という疑問があったのです。今振り返ってみても「NumPyの問題としてはよくても、そこまで実践的ではないな」と多少不満点はありました。「それならもう自分で作ってしまおう」ということで本を書きました。 大事にしたところ 本書を書
TensorFlow Advent Calendar 2020 10日目の記事です。空いてたので当日飛び入りで参加しました。 この記事では、TensorFlowの関連ライブラリである「JAX」について初歩的な使い方、ハマりどころ、GPU・TPUでの使い方や、画像処理への応用について解説します。 JAXとは https://github.com/google/jax Google製のライブラリで、AutogradとXLAからなる、機械学習のための数値計算ライブラリ。簡単に言うと「自動微分に特化した、GPUやTPUに対応した高速なNumPy」。NumPyとほとんど同じ感覚で書くことができます。自動微分については解説が多いので、この記事では単なる高速なNumPyの部分を中心に書いていきます。 関連記事 JAX Quickstart JAXで始めるディープラーニング JAX : Tutorials
最近になって論文でたびたび目にする学習率のWarmupについて、CIFAR-10で実験してみました。その結果、Warmupを使うとバッチサイズの増加にともなう精度の急落を、ある程度緩和できることがわかりました。大きいバッチサイズで訓練したり、訓練を高速化したい場合は、このWarmupが非常に有効となるでしょう。 きっかけ Google I/O'19の講演を聞いていたら、学習率のウォームアップについて話していました。RetinaNetをTPUで訓練する話です。 曰く、「このケースではResNet50の訓練済みモデルを初期値として使い、レイヤーを固定せず、全てのレイヤーを訓練させる。大きいバッチサイズを使っているので、訓練済み係数が壊れてしまう可能性がある。学習の最初は低い学習率を使い、徐々にあげていくという学習率のコントロールを行う」(ビデオ39分付近)とのことです。 このアイディアはこの講
自分が技術書典応援祭+技術書典8(+α)で買った技術系同人誌のなかでおすすめのものを書いていきたいと思います。データサイエンス、機械学習系が多めです。 買ったもの全部は書けなかったので、ここに書いていないのがおすすめではないというわけではないです。(最後以外は)全て自分で購入したものです。 A Primer on Adversarial Examples タイトル:A Primer on Adversarial Examples サークル:原理的には可能 著者:菊田遥平 ページ数:99ページ 電子版 https://techbookfest.org/product/5483924549533696 個人的にはめちゃめちゃおすすめの本です。「技術書典 応援祭」に出ている本では一番これがおすすめです。 いきなり「Adversarial Examples」と言っても何のことだかわからないですよね
3~4ヶ月かけてA4・195ページの薄くない薄い本を書きました。タイトルは『モザイク除去から学ぶ 最先端のディープラーニング』です。TensorFlow2.0全対応です。 Inpaintingとは 画像の一部を塗りつぶしてもっともらしく画像を復元するタスク。画像全体ではなく、白く塗りつぶした部分の生成を目標とします。 画像:https://github.com/JiahuiYu/generative_inpaintingより 関連: * GLCICで無かったことにしたいアレコレ(GANを使った画像生成を Globally and Locally Consistent Image Completion で理解してみる) * 【論文読み】Image Inpainting for Irregular Holes Using Partial Convolutions ※Inpaintingという言
TensorFlow2.0とGoogle Colaboratoryの無料TPUを使って、DCGANを実装しました。 訓練経過の様子 pic.twitter.com/2qXowYMk6t — しこあん@『モザイク除去本』好評通販中 (@koshian2) October 21, 2019 何をやったか Google ColabのTPU+TF2.0でCelebA(約20万枚)をDCGANで生成 TF1.X系のTPUでは、同時に実行可能なグラフは1個の制約があったため、GANの訓練が容易ではなかった(こちらの記事にある通り、不可能であったわけではない。しかし、低レベルAPIが必須で決して容易ではなかった)。TF2.X系のTPUでは、もっと容易にGANを実装できた。 DCGANの論文通りのモデル(パラメーター数:G=12.7M, D=11.0M)で。64x64の画像20万枚を、1エポックを40秒程
TensorFlowのいろいろな書き方「Keras API」「Custom train loop」「Custom layer」についてMNISTの例を解説します。また、TF2.0+KerasでColab TPUを使った訓練方法も解説していきます1。 TensorFlow2.0での書き方 TensorFlow2.0の書き方は何種類かあります。Kerasの作者によるColab Notebookによると、 縦軸に注目してください。上に行くほど高レベルAPI、下に行くほど低レベルAPIとなります。各項目が何を表すかと言うと、 Built in training/eval loops : Kerasのfit()やevaluate()といった関数を使うものです。TF1.X時代のKerasとほぼ同じです。 Customized step-by-step loops : Kerasのfit()などを使わず
特徴量エンジニアリングとしてのOne-Hotベクトルの必要性と、PandasでSparseな行列を使うときのGroupbyの†闇†の話Python機械学習pandasPython3 PandasでOne-HotベクトルをメモリケチるためにSparse行列(疎行列)として記録してGroupbyしたら値が消えて、1日分の処理丸々無駄にしまいました。疎行列のGroupbyで悲しい思いをする人が出ないように書いておきます。 環境:Pandas 0.23.4 Final 前置きが若干長いので、†闇†の部分だけ読みたい方は、「PandasのGroupbyとSparse行列の†闇†」まで飛んでください。 One-Hotベクトルとは あるカラムだけ1で他のカラムは0な行列の表現。カテゴリー変数でよく使います。古典的な統計の教科書では「ダミー変数」という言い方もします。PandasのOneHotベクトルを作
あらまし TensorFlow1.14以降、KerasでのTPUの扱い方が少し変わります。 Google I/O'19の資料より 変更点 1.13以前 Google ColabのTPUでは以前はこのような書き方でした。 import tensorflow as tf from tensorflow.contrib.tpu.python.tpu import keras_support import os # model = create_network() # 何らかのネットワークを作るメソッド # model.compile(...) tpu_grpc_url = "grpc://"+os.environ["COLAB_TPU_ADDR"] tpu_cluster_resolver = tf.contrib.cluster_resolver.TPUClusterResolver(tpu_
with Image.open("karen.jpg") as img: img = img.resize((img.width//2, img.height//2), Image.BICUBIC) # 1/2にリサイズ(メモリ対策) original = np.asarray(img, np.float32) / 255.0 # [0, 1]のNumpy配列に 後で使うのでNumpy配列としても保持しておきましょう。 2. エッジ検出 最終的にはこの画像を0,1に変換したいのです(二値化)。これは画像の内容にもよりますが、アニメ画像の場合は軸を求める際に、塗りつぶされた領域よりも輪郭線を見てほしいので、エッジ検出を行ってみました。特徴量を抽出しているイメージです。エッジ検出の前には一度グレースケール化をします。エッジ検出はPILの場合はImageFilter.FIND_EDGESでできま
ディープラーニングのフレームワークを使って、アニメ本編から線画を生成します。ただし、一切訓練や訓練データを与えていません。アニメ1話分全4.3万フレームの線画化を1時間程度で終わらせることができました。 あらまし このようにアニメ本編から自動的に線画が生成できます。ディープラーニングのフレームワークを使うとできます。ただし、一切訓練をしていません。 OP https://t.co/52t0dFZNZL pic.twitter.com/7aCEJ9SkTc — しこあん@『モザイク除去本』(技術書典6)好評通販中 (@koshian2) 2019年7月1日 本編1 https://t.co/52t0dFZNZL pic.twitter.com/oicU8UPopS — しこあん@『モザイク除去本』(技術書典6)好評通販中 (@koshian2) 2019年7月1日 本編2 https://t
RTX 2080Tiを2枚使って頑張ってGPUの訓練を高速化する記事の続きです。TensorFlowでは複数GPU時に訓練が高速化しないという現象がありましたが、PyTorchを使うとRTX 2080Tiでもちゃんと高速化できることを確認できました。これにより、2GPU時はTensorFlowよりも大幅に高速化できることがわかりました。 前回までの記事 対決!RTX 2080Ti SLI vs Google Colab TPU ~Keras編~ TensorFlow/Kerasでchannels_firstにするとGPUの訓練が少し速くなる話 ハードウェアスペック GPU : RTX 2080Ti 11GB Manli製×2 SLI構成 CPU : Core i9-9900K メモリ : DDR4-2666 64GB CUDA : 10.0 cuDNN : 7.5.1 PyTorch :
RTX 2080Tiを2枚買ったので、どれぐらいの性能が出るかColabのTPUと対決させてみました。さすがにRTX 2080Tiを2枚ならTPU相手に勝てると思っていましたが、意外な結果になりました。 スペック GPU側 GPU : RTX 2080Ti 11GB Manli製×2 SLI構成 CPU : Core i9-9900K メモリ : DDR4-2666 64GB CUDA : 10.0 cuDNN : 7.5.1 TensorFlow : 1.13.1 GPUだけで30万円以上はします。2019年5月現在、ディープラーニングの環境構成としては相当強い部類です。GPUは1個250Wなので、GPU2枚をフルに動かしただけで500W近い電力消費が加算されます。 GPUの場合は、「ELSA GPU Monitor」を使って、GPUのロードや消費電力をモニタリングします(5秒ごとCSV
多クラス(Multi-class)分類は、複数のクラスに対して、各画像が1つのクラスに属する問題です。各画像が1つずつのクラスに属するのではなく、いくつかのクラスに属する場合を考えます。これを多ラベル(Multi-label)分類といいます。 多クラス分類の記事は多くあっても、多ラベル分類の記事はかなり少ないのでこれを見ていきます。 多クラス分類 vs 多ラベル分類 まずは多クラス分類から。これは単純で、クラスが複数(下の例の場合は4)あり、サンプルに対してどれかのクラス1つに対して割り当てるように最適化しなさいという問題。MNISTやCIFARなどはこれにあたります。 次は多ラベル問題ですが、クラスが複数あるというのは変わりないのですが、多クラス問題から「サンプルに対してクラスは1つ」という制約を取り除きます。つまり、サンプルに対してクラスを何個も割り当てて良いということになります。 今
Goodfellow先生が紹介していた面白い手法。シンプルかつ強力なCNNの計算コストの削減手法。精度も上がるらしい。サクッと実装できちゃったので試してみました。 OctConv is a simple replacement for the traditional convolution operation that gets better accuracy with fewer FLOPs https://t.co/5CSylHVdA2 pic.twitter.com/kTK96gNj1i — Ian Goodfellow (@goodfellow_ian) April 15, 2019 元の論文 Y. Chen, H. Fang, B. Xu, Z. Yan, Y. Kalantidis, M. Rohrbach, S. Yan, J. Feng. Drop an Octave: R
登録不要、インストール不要、フリーなブラウザ上でSQLの練習問題を解ける「SQL Bolt」を試してみようSQL初心者向けSQLBolt SQL初心者向けです。わかりそうでわからなかったSQL文を実戦形式で勉強できる素材を探していました。Paizaの記事(下記参照)で紹介されていたSQL Boltを試してみました。 初心者向け・SQLの練習問題をたくさん解ける学習サイトと本7選 http://paiza.hatenablog.com/entry/2018/01/22/%E5%88%9D%E5%BF%83%E8%80%85%E5%90%91%E3%81%91%E3%83%BBSQL%E3%81%AE%E7%B7%B4%E7%BF%92%E5%95%8F%E9%A1%8C%E3%82%92%E3%81%9F%E3%81%8F%E3%81%95%E3%82%93%E8%A7%A3%E3%81%9
ちょっとぉ!1ms切っちゃうの??? 多分こんなの機械側が追いつかないと思います。自分で書いてて言うのもあれだけどありえねぇ…… ワイ「これ製造業に売り込みに行こうかな」 ちなみにこれ、訓練も結構速いです。普通に54000枚画像回しているだけですが、20エポック目ぐらいにはほぼ損失が収束します。50エポックも回せば十分です。ColabのGPUで2時間もかかりませんでした。 まとめ Triplet lossのオンラインTriple選択を使うとえらく高速な異常検知ができるということが確認できました。面白い論文を紹介してくださった@shinmura0さんどうもありがとうございました。 コード import tensorflow as tf from keras import layers from keras.models import Model import keras.backend as
ざっくりいうと 学習率$B$とバッチサイズ$\epsilon$、モメンタムの係数$m$の間には関係があり、以下の2つの法則が成り立つ。 バッチサイズ$B$と学習率$\epsilon$は比例する($B\propto\epsilon$) バッチサイズ$B$とモメンタム係数$m$を1から引いた値は反比例する$B\propto \frac{1}{1-m}$ この式を元に異なるバッチサイズに対して効果的な学習率を決めたり、学習率を落とすのではなくバッチサイズを増やして学習の高速化ができるよというのが論文の主張。 元ネタ Samuel L. Smith, Pieter-Jan Kindermans, Chris Ying, Quoc V. Le. Don't Decay the Learning Rate, Increase the Batch Size. 2017. ICLR 2018 https:
アフィン変換の真価を知ったら実はかなり強かった、という話。我々はアフィン変換の本当のすごさを知らない。 サンプル 非常に複雑な変換に見えますが、たった1回のアフィン変換でやっています。この記事の処理を組み合わせていけばこの処理が実装できます。 平面のアフィン変換とは三角形の移動(写像)を与えることで決まる変換のこと(証明は末尾参照)。 画像の回転処理にアフィン変換がよく用いられますが、アフィン変換≠回転です。アフィン変換はもっと広く処理ができますし、回転処理はその一部です。最初に回転を考えると理解しにくくなります。 OpenCVでの実装 今回は数学的にあまり突っ込まずに「PythonのOpenCVで自分で実装できればOK」レベルを目指します。OpenCVでは次のようにアフィン変換を行います。 import cv2 af = cv2.getAffineTransform(src, dest)
陰性のデータは1万件近く集めることができましたが、陽性のデータは100件しか集められませんでした。このように、陽性・陰性というクラス間でデータ数に明らかな偏りがあるケースを不均衡データ(inbalanced data)といいます。 不均衡データの問題点 評価上の問題 これは教科書的な問題で、「精度(Accuracy)が機能しない」という点です。例えば先程の例で陰性がデータ全体の99%なら、ありとあらゆるデータに対して陰性と判定($y=0$)する分類器を作れば、その時点で精度99%を達成してしまいます。 こんなイメージです。機械学習なんていらないですね。笑っちゃうかもしれませんが、実は機械学習を使っても「return 0」みたいな状態に最適化が向かうことがあります(後述)。 今最適化での解の問題はおいておくとして、あくまで評価上の問題なら、Precision, Recall, ROC曲線、F
またLightGBMはモデルをPickleとして書き出すことで、モデルの保存/読み込みができます。書き出し方は普通のPickleと同じです。詳しくはLightGBMの公式Exampleにあります。 具体例 BrestCancerをLightGBMで分類してみました。結局Optuna公式のLightGBMの例とほとんど同じになってしまって、パラメーターの範囲はかなり参考にしました。ただ、UUIDを張ったり、モデルを保存したりするのは公式例では書かれていません。 import lightgbm as lgb import optuna, os, uuid, pickle from sklearn.datasets import load_breast_cancer from sklearn.model_selection import train_test_split from sklearn
2つの画像を混ぜるData Augmentation:「Between-class Learning(BC-Learning)」の効果をKerasで確かめるPython機械学習DeepLearningディープラーニングKeras 画像や音声分類の汎化性能を向上させる目的で開発されたBetween-class Learning(BC-learning)というData Augmentationの効果をKerasで確かめます。「2つの画像を混ぜる」というアプローチを取るData Augmentationです。10層CNNでCIFAR-10に対して94.59%という素晴らしい性能を確認することができました。 BC-Learningとは? 2つの画像を混ぜるというData Augmetation。これにより、決定境界がより平滑化され、オーバーフィッティングが解消され、ValidationやTestで
「FaceNet: A Unified Embedding for Face Recognition and Clustering」の解説と実装Python機械学習MachineLearningDeepLearningディープラーニング Siamese Network+Triplet lossの論文として名高い「FaceNet」の論文を読んだのでその解説と実装を書いていきます。Train with 1000を使って実験もしてみました。 TL;DR FaceNetはある画像に対して、同一のクラス(人物)の画像、異なるクラスの画像の合計3枚の「Triplet」を作り、画像間の距離を学習する。 画像を特徴量のベクトルに変換し、プロットする一方で、k-Nearest Neighbor法の要領で未知の画像に対するクラスの推定もできる。またクラス数が後から追加されたり削除されたりするようなパターンでも
GoogleがPerfumeのライブに技術提供した「Reframe Visualization」をKeras/Scikit-learnで再現するPython機械学習scikit-learnKerasNK-POP Perfumeが紅白歌合戦でディープラーニングについて言及して話題になりましたが、それに関連する技術がGoogleのブログで公開されていたので再現してみました1。本来はColud Vision APIを使ったとのことですが、精度や速度を犠牲にすれば、普通のPCかつ1人でも実装できてしまいます。その方法を書いていきます。 訂正:Googleが使ったではなく、正しくはライゾマティクスに使っていただいただとのことです。失礼いたしました2。タイトルも訂正いたしました。 元ネタ こちらのブログに詳しく書かれています。 Perfume とライゾマティクスの新たな試みを支える Google の機
Google Colab(Colaboratory)をタブレットやスマホで試したらどうなるんだろう?と思って試してみました。結果、いけました。既出気味ではあるものの、スマホやタブレットで環境構築不要でプログラミングができてしまいます。 環境:iPad Air2 Colabの本来のサポート環境は、PC版のChromeとFirefoxなのでSafariだとうまく動かないこともあるかもしれませんが、ぱっとやった限りでは確認できませんでした。 こんな感じ 手書き数字画像(MNIST)の分類をしてみました。 iPadでディープラーニングできてる もちろんPC版同様、無料GPU使えます。 iPadで頑張って入力したコードはこちらです。 from keras.datasets import mnist from keras.layers import Dense, Input from keras.mo
次のページ
このページを最初にブックマークしてみませんか?
『@koshian2のマイページ - Qiita』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く