PC-DARTS telah diterima untuk presentasi sorotan di ICLR 2020!
PC-DARTS adalah metode arsitektur terdiferensiasi hemat memori berdasarkan DARTS . Hal ini terutama berfokus pada pengurangan biaya memori yang besar dari super-net dalam metode NAS one-shot, yang berarti bahwa metode ini juga dapat dikombinasikan dengan metode NAS one-shot lainnya, misalnya ENAS . Berbeda dari metode operasi pengambilan sampel sebelumnya, PC-DARTS mengambil sampel saluran dari super-net yang dibangun. Menariknya, meskipun kami memperkenalkan keacakan selama proses pencarian, kinerja arsitektur pencarian lebih baik dan lebih stabil daripada DARTS! Untuk penjelasan rinci tentang detail teknis dan hasil eksperimen, silakan merujuk ke makalah kami:
Koneksi Saluran Parsial untuk Pencarian Arsitektur Diferensiasi yang Efisien Memori
Yuhui Xu, Lingxi Xie, Xiaopeng Zhang, Xin Chen, Guo-Jun Qi, Qi Tian dan Hongkai Xiong.
Kode ini didasarkan pada implementasi DARTS.
Penerapan random sampling juga diunggah untuk bahan pertimbangan Anda.
File utama untuk pencarian di ImageNet telah diunggah train_search_imagenet.py
.
Metode | Param(M) | Kesalahan(%) | Biaya Pencarian |
---|---|---|---|
AmoebaNet-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-DART | 3.6 | 2.57 | 0,1 |
Hanya 0,1 hari GPU yang digunakan untuk penelusuran di CIFAR-10!
Metode | FLOP | Kesalahan 1 Teratas (%) | 5 Kesalahan Teratas (%) | Biaya Pencarian |
---|---|---|---|---|
NASNet-A | 564 | 26.0 | 8.4 | 1800 |
AmoebaNet-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-DART | 597 | 24.2 | 7.3 | 3.8 |
Cari arsitektur yang bagus di ImageNet dengan menggunakan ruang pencarian DARTS ( Pertama Kali! ).
Untuk menjalankan kode kami, Anda hanya memerlukan satu Nvidia 1080ti (memori 11G).
python train_search.py
Persiapan data: 10% dan 2,5% gambar perlu diambil sampelnya secara acak sebelum setiap kelas set pelatihan masing-masing sebagai train dan val. Data sampel disimpan ke ./imagenet_search
. Perhatikan bahwa tidak menggunakan torch.utils.data.sampler.SubsetRandomSampler untuk pengambilan sampel data karena imagenet terlalu besar.
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
Segera hadir!.
Untuk kode di cabang utama, disarankan python2 with pytorch(3.0.1)
(berjalan di Nvidia 1080ti
). Kami juga menyediakan kode di V100_python1.0
jika Anda ingin mengimplementasikan PC-DARTS di Tesla V100
dengan python3+
dan pytorch1.0+
.
Anda bahkan dapat menjalankan kode pada GPU dengan memori hanya 4G . PC-DARTS hanya berharga lebih murah dari memori 4G, jika kita menggunakan pengaturan hyper-parameter yang sama seperti DARTS (ukuran batch=64).
Anda dapat mencari di ImageNet dengan model_search_imagenet.py
! File pelatihan untuk pencarian di ImageNet akan diunggah setelah dibersihkan atau Anda dapat membuatnya sesuai dengan file train_search di CIFAR10 dan file evluate di ImageNet. Hyperparameter dilaporkan di makalah kami! Pencarian memakan waktu 11,5 jam pada 8 GPU V100 (masing-masing 16G). Jika Anda memiliki V100(32G) Anda dapat meningkatkan ukuran batch lebih lanjut.
Kami mengambil sampel acak 10% dan 2,5% dari setiap kelas kumpulan data pelatihan ImageNet. Masih ada 1000 kelas! Ganti input_search, target_search = next(iter(valid_queue))
dengan kode berikut akan jauh lebih cepat:
try: input_search, target_search = next(valid_queue_iter) except: valid_queue_iter = iter(valid_queue) input_search, target_search = next(valid_queue_iter)
Kode utama PC-DARTS ada di file model_search.py
. Seperti dijelaskan dalam makalah, kami menggunakan cara yang efisien untuk mengimplementasikan pengambilan sampel saluran. Pertama, sub-set masukan yang tetap dipilih untuk dimasukkan ke dalam operasi kandidat, kemudian keluaran gabungan ditukar. Tersedia dua operasi pertukaran yang efisien: pengacakan saluran dan peralihan saluran. Untuk normalisasi tepi, kami mendefinisikan parameter tepi (beta dalam kode kami) bersama dengan parameter alfa dalam kode dart asli.
Implementasi random sampling juga disediakan model_search_random.py
. Ini juga berfungsi meskipun pengacakan saluran mungkin memiliki kinerja yang lebih baik.
Karena PC-DARTS adalah metode NAS yang sangat hemat memori. Ini memiliki potensi untuk diterapkan pada tugas lain seperti deteksi dan segmentasi.
Pencarian Arsitektur Diferensiasi Progresif
Pencarian Arsitektur yang Dapat Dibedakan
Jika Anda menggunakan kode kami dalam penelitian Anda, harap mengutip makalah kami dengan tepat.
@dalam proses{ xu2020pcdart, title={{{}PC{}}-{{}DARTS{}}: Koneksi Saluran Parsial untuk Penelusuran Arsitektur Hemat Memori}, author={Yuhui Xu dan Lingxi Xie dan Xiaopeng Zhang dan Xin Chen dan Guo-Jun Qi dan Qi Tian dan Hongkai Xiong}, booktitle={Konferensi Internasional tentang Representasi Pembelajaran}, tahun={2020}, url={https://openreview.net/forum?id=BJlS634tPr} }