PC-DARTS가 ICLR 2020에서 스포트라이트 프레젠테이션으로 선정되었습니다!
PC-DARTS 는 DARTS를 기반으로 하는 메모리 효율적인 미분 가능 아키텍처 방법입니다. 이는 주로 one-shot NAS 방식으로 슈퍼넷의 대용량 메모리 비용을 줄이는 데 중점을 두고 있으며, 이는 ENAS 와 같은 다른 one-shot NAS 방식과 결합할 수도 있음을 의미합니다. 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 |
다트V1 | 3.3 | 3.00 | 0.4 |
다트V2 | 3.3 | 2.76 | 1.0 |
스나스 | 2.8 | 2.85 | 1.5 |
PC-다트 | 3.6 | 2.57 | 0.1 |
CIFAR-10 검색에는 단 0.1 GPU 일만 사용됩니다!
방법 | FLOP | 상위 1개 오류(%) | 상위 5개 오류(%) | 검색 비용 |
---|---|---|---|---|
NASNet-A | 564 | 26.0 | 8.4 | 1800 |
아메바넷-B | 570 | 24.3 | 7.6 | 3150 |
PNAS | 588 | 25.8 | 8.1 | 225 |
다트V2 | 574 | 26.7 | 8.7 | 1.0 |
스나스 | 522 | 27.3 | 9.3 | 1.5 |
PC-다트 | 597 | 24.2 | 7.3 | 3.8 |
DARTS( First Time! )의 검색공간을 이용하여 ImageNet에서 좋은 건축물을 검색해 보세요.
코드를 실행하려면 Nvidia 1080ti(11G 메모리) 하나만 필요합니다.
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
곧 출시됩니다!.
메인 브랜치의 코드에는 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 메모리보다 저렴합니다.
model_search_imagenet.py
를 통해 ImageNet에서 검색할 수 있습니다! ImageNet 검색을 위한 훈련 파일은 정리된 후에 업로드되거나 CIFAR10의 train_search 파일과 ImageNet의 evluate 파일에 따라 생성할 수 있습니다. 하이퍼파라미터는 우리 논문에 보고되어 있습니다! 검색 비용은 V100 GPU 8개(각각 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
파일에 있습니다. 논문에 설명된 대로 우리는 채널 샘플링을 구현하는 효율적인 방법을 사용합니다. 먼저 입력의 고정된 하위 집합을 선택하여 후보 작업에 공급한 다음 연결된 출력을 교체합니다. 채널 셔플과 채널 이동이라는 두 가지 효율적인 스왑 작업이 제공됩니다. 가장자리 정규화를 위해 원본 다트 코드의 알파 매개변수와 함께 가장자리 매개변수(코드의 베타)를 정의합니다.
무작위 샘플링 구현도 model_search_random.py
제공됩니다. 채널 셔플의 성능이 더 좋을 수도 있지만 작동합니다.
PC-DARTS는 메모리 효율성이 뛰어난 NAS 방식입니다. 이는 탐지 및 세분화와 같은 다른 작업에 구현될 가능성이 있습니다.
점진적 미분 가능 아키텍처 검색
미분 가능한 아키텍처 검색
연구에 우리 코드를 사용하는 경우 이에 따라 우리 논문을 인용해 주세요.
@진행 중{ xu2020pcdarts, 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} }