每月深度学习俱乐部第一卷“ ResNeSt”特别版(日文翻译)

月刊ディープラーニング部 vol.1 "ResNeSt"特集 by ピジョン

(原文链接)

每月深度学习俱乐部第一卷“ ResNeSt”特别版(日文翻译)

封面

原文:

【特集 1】 ResNeSt (TensorFlow2.0系) の PyPI パッケージを作りました

表紙にも散々強調してありますが、ResNeSt[1] を実装していました。
Kaggle, Colaboratory (Jupyter系全般) においては以下のコマンドで導入できます。

!pip install StealthFlow==0.0.9

これを使うことで、オンプレはもちろん、Kaggle や Colaboratory において、短いコードで簡単に ResNeSt を使用することができます。詳しい使い方を解説していきます。

さきほどの pip install が完了したら、次に ResNeStBlock クラスをインポートします。このクラスは TensorFlow 2.0 系のレイヤーで構成されており、Kaggle、Colaboratory だと一瞬で使うことができます。

from stealthflow.resnest import ResNeStBlock

TensorFlowレイヤー風に書くと、以下のような感じになります。

x = ResNeStBlock(radix=2, cardinality=2, bottleneck=64, ratio=4)(x)

ここで、x は 4-D Tensor (TF-Tensor) であり、引数には4つのパラメータが存在します。

翻译:

【特别篇 1】 给ResNeSt(TensorFlow2.0)的 PyPI 打包

封面上也特意强调过,要先把ResNeSt[1]安装好。
无论是Kaggle还是Colaboratory(只要基于Jupyter的)都可以用下面的命令导入。

!pip install StealthFlow==0.0.9

用这个的话,不仅可以在本地,而且也能在Kaggle和Colaboratory中通过简单的代码使用ResNeSt。下面来介绍详细的用法。

在pip install完成后,下面导入ResNeStBlock类。 这个类由TensorFlow 2.0的层组成,可以与Kaggle和Colaboratory一起使用。

from stealthflow.resnest import ResNeStBlock

用TensorFlow风格写层的话,如下所示:

x = ResNeStBlock(radix=2, cardinality=2, bottleneck=64, ratio=4)(x)

在这里,x代表一个4维的张量(TF-Tensor),有四个实参。


原文:

【特集 2】 各種パラメータについて

ResNeStBlock の4つのパラメータについて説明していきます。太線は論文内で説明されていたパラメータ。太線になっていないものは、独自に解釈して必要に感じたので説明しています。

  • cardinality(K): 最初のブランチ分岐の数。
  • radix(R): ブランチ内のブランチ。何個の Split-Attention モジュールに分割するか。このブランチをまたいだ r-softmax という概念がややわかりにくい(SK-Net の論文を見ると分かりやすいのでオススメ)
  • bottleneck: ボトルネック。通常の ResNet なら、256->64->256 の "64" がボトルネックの数。bottleneck//radix で最も内側のブランチのチャンネル数になる
  • ratio: Self-Attention 部分のボトルネック。これは論文中には一度も登場していないが、何度も読むと必要であることが分かった
    例を見てみたほうが分かりやすいかもしれません。

例: 入力=出力=256, radix=2, cardinality=3, bottleneck=24, ratio=4 のとき、ブロック内のチャンネルの変化を噛み砕いて表すとこんな感じになります。字が下手でごめんなさい。

radix=1 のときは、ほぼ SE-Net[2] のような形状になるのが分かると思います。(厳密には r-softmax の部分が sigmoid関数 になるので微妙に違いますが)

翻译:

【特别篇 2】 关于各种参数

这里我说明下ResNeStBlock的四个参数。加粗了的是论文里说明过的参数。 至于没有加粗的部分,我觉得有应该单独说明一下。

  • cardinality(K): 一开始的主分支数。
  • radix(R): 主分支内的分支,需要分成多少个Split-Attention模块。 这个分支的r-softmax的概念不太好理解(推荐阅读下SK-Net论文,这样很更清楚些)
  • bottleneck: 瓶颈层。通常的ResNet,256-> 64-> 256中的“ 64”就是瓶颈层的数。 bottleneck//radix 就是位于最里面的分支通道数。
  • ratio: Self-Attention 模块的瓶颈层。虽然在论文中从没出现过,但读了好几次觉得还是有必要。

看示例的话可能更容易理解。
示例:当Input = output = 256,ratio= 2,cardinality= 3,bottleneck= 24,ratio= 4时,要将块内的通道变化情况简明地表示出来,如下图所示( 很抱歉画得不是太好)

而当radix=1时,图的大致形状和SE-Net [2]相同。(严格来说,r-softmax的部分是sigmoid函数,还是略有不同。)

原文:

【特集 3】 すぐに使える文字認識コード

せっかくなので、実践で使えるのを確かめるため、Kaggle の notebook 上でコーディングしたのでこれを公開しておきます。

ResNeSt_for_MNIST

↑ の notebook をコピーすればそのまま使えるはずです!
もうちょっと使いやすくしてからアップしたかったのですが、時間がなかったので今回はここまで。だいたいコードを読めば何をしているか分かるはずです。精度は微妙ですが、ちゃんとやると 99.65% くらいまではデータ拡張なしで行きます。

  • ResNeSt[1] の文献内にある label smoothing などのテクニックは実装してません。
  • TPU で使える! というのは TensorFlow 2.0 で書いた…というだけであり、TPU用にしたわけではないですごめんなさい。

翻译:

【特别篇3】 即刻用在字符识别上的代码

为了确保能实际使用,我已经在Kaggle的notebook进行了编码,同时也发布了版本。

ResNeSt_for_MNIST
↑ 复制到notebook中,就可以马上运行!

我想提高代码的易用性,可惜没太多时间,所以这次只能这样了。我想只要读了大部分代码就能知道应该怎么做了。预测的准确度也比较微妙,在未进行数据扩展的情况下它能提高到大约99.65%。

  • ResNeSt[1]论文中提到的label smoothing等技术未在这里实现。
  • 也能在TPU上用哦!但由于是用TensorFlow 2.0编写的,它不适用于TPU。

原文:

注意書き

この記事は、個人で作成したものであり、ResNeSt[1] の論文を読んで不明瞭だった部分は ResNeXt[3] や SK-Net[4] などの論文で補っています…もしかしたら高確率で間違いがあるかもないかもしれないので、気付いた方は教えて頂けると本当に有り難いです…間違いがないように頑張ってはいますが。

ここに書ききれなかったことは沢山あるので、ResNeSt に興味を持ったらぜひ元論文を読んでみて下さい!

探した限り、ResNeSt の TensorFlow 実装はまだ見つからなかったのですが、もしかしたら見つかりにくいところで誰か作っていたかもしれない。表紙のキャッチはあくまでキャッチということで許して下さいお願いします…

あと、宣伝のつもりではなかったのですが、Keggle notebook って別の SNS とかにリンク貼って問題ないですよね…?(初心者)

翻译:

注意点

由于本文是个人编写,是在阅读了ResNeSt [1]论文后又通过ResNeXt [3]和SK-Net[4]论文补充了不够清楚的部分。因此很有可能出现某些错误,如果您发现了请告诉我将不胜感激,我会努力减少出错的地方。

有很多东西在这里写不完,如果您对ResNeSt感兴趣,请阅读原始论文!

据我所知,尚未有ResNeSt的TensorFlow实现,但也许有人正在努力探索这些难题。(另外封面人物只是为了吸引人请不要过度在意哦)

另外,倒不是打算要宣传它,可以把Keggle notebook链接在别的SNS上吗? (初学者)

论文

[1] https://arxiv.org/abs/2004.08955
[2] https://arxiv.org/abs/1709.01507
[3] https://arxiv.org/abs/1611.05431
[4] https://arxiv.org/abs/1903.06586

链接

Kaggle notebook: https://www.kaggle.com/stealthflow/resnest-for-mnist
PyPI リポジトリ: https://pypi.org/project/StealthFlow/
GitHub: p-geon/StealthFlow
GitHub中ResNeSt代码: https://github.com/p-geon/StealthFlow/blob/master/stealthflow/resnest.py

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,332评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,508评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,812评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,607评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,728评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,919评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,071评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,802评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,256评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,576评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,712评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,389评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,032评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,026评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,473评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,606评论 2 350