Membuat Jaringan Konvolusional Bergeser-Invarian Lagi
Richard Zhang. Di ICML, 2019.
Jalankan pip install antialiased-cnns
import antialiased_cnns
model = antialiased_cnns . resnet50 ( pretrained = True )
Jika Anda sudah memiliki model dan ingin melakukan antialias serta melanjutkan pelatihan, salin bobot lama Anda ke:
import torchvision . models as models
old_model = models . resnet50 ( pretrained = True ) # old (aliased) model
antialiased_cnns . copy_params_buffers ( old_model , model ) # copy the weights over
Jika Anda ingin memodifikasi model Anda sendiri, gunakan lapisan BlurPool. Informasi lebih lanjut tentang model yang kami sediakan dan cara menggunakan BlurPool ada di bawah.
C = 10 # example feature channel size
blurpool = antialiased_cnns . BlurPool ( C , stride = 2 ) # BlurPool layer; use to downsample a feature map
ex_tens = torch . Tensor ( 1 , C , 128 , 128 )
print ( blurpool ( ex_tens ). shape ) # 1xCx64x64 tensor
Pembaruan
pip install antialiased-cnns
dan memuat model dengan flag pretrained=True
.BlurPool
Pip instal paket ini
pip install antialiased-cnns
Atau kloning repositori ini dan instal persyaratannya (terutama, PyTorch)
https://github.com/adobe/antialiased-cnns.git
cd antialiased-cnns
pip install -r requirements.txt
Berikut ini memuat model antialias yang telah dilatih sebelumnya, mungkin sebagai tulang punggung aplikasi Anda.
import antialiased_cnns
model = antialiased_cnns . resnet50 ( pretrained = True , filter_size = 4 )
Kami juga menyediakan bobot untuk AlexNet
, VGG16(bn)
antialias, Resnet18,34,50,101
, Densenet121
, dan MobileNetv2
(lihat example_usage.py).
Modul antialiased_cnns
berisi kelas BlurPool
, yang melakukan blur+subsampling. Jalankan pip install antialiased-cnns
atau salin subdirektori antialiased_cnns
.
Metodologi Metodologinya sederhana -- pertama evaluasi dengan langkah 1, lalu gunakan lapisan BlurPool
untuk melakukan downsampling antialias. Lakukan perubahan arsitektur berikut.
import antialiased_cnns
# MaxPool --> MaxBlurPool
baseline = nn . MaxPool2d ( kernel_size = 2 , stride = 2 )
antialiased = [ nn . MaxPool2d ( kernel_size = 2 , stride = 1 ),
antialiased_cnns . BlurPool ( C , stride = 2 )]
# Conv --> ConvBlurPool
baseline = [ nn . Conv2d ( Cin , C , kernel_size = 3 , stride = 2 , padding = 1 ),
nn . ReLU ( inplace = True )]
antialiased = [ nn . Conv2d ( Cin , C , kernel_size = 3 , stride = 1 , padding = 1 ),
nn . ReLU ( inplace = True ),
antialiased_cnns . BlurPool ( C , stride = 2 )]
# AvgPool --> BlurPool
baseline = nn . AvgPool2d ( kernel_size = 2 , stride = 2 )
antialiased = antialiased_cnns . BlurPool ( C , stride = 2 )
Kami berasumsi tensor masuk memiliki saluran C
Menghitung lapisan pada langkah 1 dan bukan pada langkah 2 menambah memori dan waktu proses. Oleh karena itu, kami biasanya melewatkan antialiasing pada resolusi tertinggi (di awal jaringan), untuk mencegah peningkatan yang besar.
Tambahkan antialiasing lalu lanjutkan pelatihan Jika Anda sudah melatih model, lalu menambahkan antialiasing, Anda dapat menyempurnakan model lama tersebut:
antialiased_cnns . copy_params_buffers ( old_model , antialiased_model )
Jika ini tidak berhasil, Anda cukup menyalin parameternya (dan bukan buffernya). Menambahkan antialiasing tidak menambahkan parameter apa pun, sehingga daftar parameternya identik. (Itu memang menambahkan buffer, jadi beberapa heuristik digunakan untuk mencocokkan buffer, yang mungkin menimbulkan kesalahan.)
antialiased_cnns . copy_params ( old_model , antialiased_model )
Kami mengamati peningkatan dalam akurasi (seberapa sering gambar diklasifikasikan dengan benar) dan konsistensi (seberapa sering dua pergeseran gambar yang sama diklasifikasikan sama).
KETEPATAN | Dasar | Antialias | Delta |
---|---|---|---|
alexnet | 56.55 | 56.94 | +0,39 |
vgg11 | 69.02 | 70.51 | +1.49 |
vgg13 | 69,93 | 71.52 | +1,59 |
vgg16 | 71.59 | 72,96 | +1.37 |
vgg19 | 72.38 | 73.54 | +1.16 |
vgg11_bn | 70.38 | 72.63 | +2.25 |
vgg13_bn | 71,55 | 73.61 | +2.06 |
vgg16_bn | 73.36 | 75.13 | +1,77 |
vgg19_bn | 74.24 | 75.68 | +1.44 |
resnet18 | 69,74 | 71.67 | +1,93 |
resnet34 | 73.30 | 74.60 | +1.30 |
jaringan ulang50 | 76.16 | 77.41 | +1.25 |
resnet101 | 77.37 | 78.38 | +1.01 |
resnet152 | 78.31 | 79.07 | +0,76 |
resnext50_32x4d | 77.62 | 77.93 | +0,31 |
resnext101_32x8d | 79.31 | 79.33 | +0,02 |
lebar_resnet50_2 | 78.47 | 78,70 | +0,23 |
lebar_resnet101_2 | 78,85 | 78,99 | +0,14 |
padatnet121 | 74.43 | 75,79 | +1.36 |
padatnet169 | 75.60 | 76.73 | +1.13 |
padatnet201 | 76,90 | 77.31 | +0,41 |
padatnet161 | 77.14 | 77,88 | +0,74 |
mobilenet_v2 | 71.88 | 72.72 | +0,84 |
KONSISTENSI | Dasar | Antialias | Delta |
---|---|---|---|
alexnet | 78.18 | 83.31 | +5.13 |
vgg11 | 86.58 | 90.09 | +3.51 |
vgg13 | 86,92 | 90.31 | +3.39 |
vgg16 | 88.52 | 90,91 | +2.39 |
vgg19 | 89.17 | 91.08 | +1,91 |
vgg11_bn | 87.16 | 90,67 | +3.51 |
vgg13_bn | 88.03 | 91.09 | +3.06 |
vgg16_bn | 89.24 | 91.58 | +2.34 |
vgg19_bn | 89,59 | 91.60 | +2.01 |
resnet18 | 85.11 | 88.36 | +3.25 |
resnet34 | 87.56 | 89,77 | +2.21 |
jaringan ulang50 | 89.20 | 91.32 | +2.12 |
resnet101 | 89.81 | 91,97 | +2.16 |
resnet152 | 90,92 | 92.42 | +1,50 |
resnext50_32x4d | 90.17 | 91.48 | +1.31 |
resnext101_32x8d | 91.33 | 92.67 | +1.34 |
lebar_resnet50_2 | 90,77 | 92.46 | +1,69 |
lebar_resnet101_2 | 90,93 | 92.10 | +1.17 |
padatnet121 | 88.81 | 90,35 | +1,54 |
padatnet169 | 89,68 | 90.61 | +0,93 |
padatnet201 | 90.36 | 91.32 | +0,96 |
padatnet161 | 90,82 | 91.66 | +0,84 |
mobilenet_v2 | 86,50 | 87.73 | +1.23 |
Untuk mengurangi kekacauan, hasil yang diperluas (ukuran filter berbeda) ada di sini. Bantu tingkatkan hasilnya!
Karya ini dilisensikan di bawah Lisensi Internasional Creative Commons Attribution-NonCommercial-ShareAlike 4.0.
Semua materi tersedia di bawah lisensi Creative Commons BY-NC-SA 4.0 oleh Adobe Inc. Anda dapat menggunakan, mendistribusikan ulang, dan mengadaptasi materi untuk tujuan non-komersial , selama Anda memberikan kredit yang sesuai dengan mengutip makalah kami dan menunjukkan perubahan apa pun yang telah kamu buat.
Repositori ini dibangun dari repositori contoh PyTorch dan repositori model torchvision. Ini adalah lisensi gaya BSD.
Jika menurut Anda ini berguna untuk penelitian Anda, mohon pertimbangkan untuk mengutip bibtex ini. Silakan hubungi Richard Zhang <rizhang di adobe dot com> jika ada komentar atau masukan.