PC-DARTSがICLR 2020のスポットライトプレゼンテーションに採択されました!
PC-DARTS は、 DARTSに基づくメモリ効率の高い微分可能アーキテクチャ手法です。これは、ワンショット NAS 方式でスーパーネットの大量のメモリ コストを削減することに主に焦点を当てています。つまり、他のワンショット NAS 方式 ( ENASなど) と組み合わせることもできます。 PC-DARTSはこれまでのサンプリング方式とは異なり、構築されたスーパーネットのチャネルをサンプリングします。興味深いことに、検索プロセス中にランダム性を導入しましたが、検索されたアーキテクチャのパフォーマンスはDARTS よりも優れており、安定しています。技術的な詳細と実験結果の詳細については、次の論文を参照してください。
メモリ効率の高い微分可能アーキテクチャ検索のための部分チャネル接続
Yuhui Xu、Lingxi Xie、Xiaopeng Zhang、Xin Chen、Guo-Jun Qi、Qi Tian、Hongkai Xiong。
このコードは DARTS の実装に基づいています。
ランダム サンプリングの実装もアップロードされていますので、ご検討ください。
ImageNet の検索用のメイン ファイルはtrain_search_imagenet.py
としてアップロードされました。
方法 | パラムス(M) | エラー(%) | 検索コスト |
---|---|---|---|
アメーバネット-B | 2.8 | 2.55 | 3150 |
DARTSV1 | 3.3 | 3.00 | 0.4 |
DARTSV2 | 3.3 | 2.76 | 1.0 |
SNAS | 2.8 | 2.85 | 1.5 |
PCダーツ | 3.6 | 2.57 | 0.1 |
CIFAR-10 での検索には、わずか0.1 GPU 日が使用されます。
方法 | フロップス | トップ 1 エラー (%) | トップ 5 エラー (%) | 検索コスト |
---|---|---|---|---|
NASNet-A | 564 | 26.0 | 8.4 | 1800 |
アメーバネット-B | 570 | 24.3 | 7.6 | 3150 |
PNAS | 588 | 25.8 | 8.1 | 225 |
DARTSV2 | 574 | 26.7 | 8.7 | 1.0 |
SNAS | 522 | 27.3 | 9.3 | 1.5 |
PCダーツ | 597 | 24.2 | 7.3 | 3.8 |
DARTS の検索空間を利用して、ImageNet 上で良いアーキテクチャを検索します(初めて! )。
コードを実行するには、Nvidia 1080ti (11G メモリ) が 1 台だけ必要です。
python train_search.py
データの準備: 10% と 2.5% の画像は、それぞれ train と val としてトレーニングセットの各クラスから事前にランダムにサンプリングする必要があります。サンプリングされたデータは./imagenet_search
に保存されます。 imagenet が大きすぎるため、データ サンプリングに torch.utils.data.sampler.SubsetRandomSampler を使用しないことに注意してください。
python train_search_imagenet.py --tmp_data_dir /path/to/your/sampled/data --save log_path
python train.py --auxiliary --cutout
python train_imagenet.py --tmp_data_dir /path/to/your/data --save log_path --auxiliary --note note_of_this_run
近日公開!。
main ブランチのコードについては、 python2 with pytorch(3.0.1)
推奨します( Nvidia 1080ti
で実行)。 python3+
およびpytorch1.0+
を使用してTesla V100
に PC-DARTS を実装する場合は、 V100_python1.0
のコードも提供しました。
メモリが4Gのみの GPU でコードを実行することもできます。 PC-DARTS は、DARTS と同じハイパーパラメータ設定 (batch-size=64) を使用した場合、メモリのコストが 4G 未満で済みます。
imageNet では、 model_search_imagenet.py
で検索できます。 ImageNet 上の検索用トレーニング ファイルは、クリーンアップされた後にアップロードされるか、CIFAR10 上の train_search ファイルおよび ImageNet 上の evluate ファイルに従って生成できます。ハイパーパラメータについては論文で報告されています。検索には 8 つの V100 GPU (それぞれ 16G) で 11.5 時間かかりました。 V100(32G) をお持ちの場合は、バッチサイズをさらに増やすことができます。
ImageNet のトレーニング データセットの各クラスから 10% と 2.5% をランダムにサンプリングします。まだ1000クラスあります! input_search, target_search = next(iter(valid_queue))
次のコードに置き換えると、はるかに高速になります。
try: input_search, target_search = next(valid_queue_iter) except: valid_queue_iter = iter(valid_queue) input_search, target_search = next(valid_queue_iter)
PC-DARTS の主要なコードはファイルmodel_search.py
にあります。論文で説明されているように、チャネル サンプリングを実装する効率的な方法を使用します。まず、入力の固定サブセットが選択されて候補演算に入力され、次に連結された出力が交換されます。チャネル シャッフルとチャネル シフトという 2 つの効率的なスワップ操作が提供されます。エッジの正規化では、元のダーツ コードのアルファ パラメータとともにエッジ パラメータ(コードではベータ)を定義します。
ランダム サンプリングの実装も、 model_search_random.py
で提供されます。チャネル シャッフルのパフォーマンスが向上する場合にも機能します。
PC-DARTS は非常にメモリ効率の高い NAS 方式です。検出やセグメンテーションなどの他のタスクにも実装できる可能性があります。
漸進的微分可能アーキテクチャの検索
微分可能なアーキテクチャの検索
研究で私たちのコードを使用する場合は、それに応じて論文を引用してください。
@進行中{ xu2020pcダーツ、 title={{{}PC{}}-{{}DARTS{}}: メモリ効率の高いアーキテクチャ検索のための部分チャネル接続}, 著者={Yuhui Xu、Lingxi Xie、Xiaopeng Zhang、Xin Chen、Guo-Jun Qi、Qi Tian、Hongkai Xiong}、 booktitle={学習表現に関する国際会議}, 年={2020}、 url={https://openreview.net/forum?id=BJlS634tPr} }