İntegral Sinir Ağları (INN'ler), bir kez eğitilen, herhangi bir ince ayar gerektirmeden isteğe bağlı kullanıcı tanımlı boyuta dönüştürülebilen esnek mimarilerdir. Ses dalgaları (müzik) istenilen herhangi bir örnekleme oranında (ses kalitesi) örneklenebildiğinden, INN'ler veri ve parametrelerin şeklini (DNN kalitesi) dinamik olarak değiştirebilir.
TheStage.ai ekibi, "İntegral Sinir Ağları" başlıklı makalelerini IEEE/CVF CVPR 2023 konferansında sundu. Bu çalışma, etkinlikte yer alan yalnızca 12 'Ödül Adayı' makalesinden biri olarak kabul edildi. INN'ler, temel katmanları temsil etmek için sürekli parametreleri ve integral operatörleri birleştiren yeni bir sinir ağları sınıfıdır. Çıkarım aşamasında, INN'ler sürekli ağırlıklardan ayrık örnekleme yoluyla sıradan bir DNN temsiline dönüştürülür. Bu tür ağların parametreleri, filtre ve kanal boyutları boyunca süreklidir ve bu, yalnızca bu boyutlar boyunca yeniden ayrıklaştırma yoluyla ince ayar yapmadan yapılandırılmış budamaya yol açar.
Bu makalede, 4x görüntü süper çözünürlüklü EDSR modelini bir INN'ye dönüştürme sürecinde size rehberlik edeceğiz, ardından modelin yapılandırılmış budamasının nasıl elde edileceğini göstereceğiz. Son olarak INN'yi tekrar ayrı bir DNN'ye dönüştüreceğiz ve verimli çıkarım için onu bir Nvidia GPU'ya yerleştireceğiz. Bu makale şu şekilde ilerleyecektir:
Daha fazla bilgi ve güncelleme için lütfen aşağıdaki kaynakları kontrol edin:
INN'lerdeki katmanların yerini integral operatörleri alır, ancak integral operatörlerinin pratik değerlendirmesi, sayısal entegrasyon yöntemlerinin kullanımı için giriş sinyallerinin ayrıklaştırılmasını gerektirir. INN'lerdeki katmanların, ayrıklaştırma sonrasında klasik DNN katmanlarıyla (tamamen bağlantılı, evrişimler) örtüşecek şekilde tasarlandığı ortaya çıktı.
Görüntü süper çözünürlüğü, bir görüntünün bilinen veya bilinmeyen bir bozulma operatörüyle geliştirilmesi gereken, iyi bilinen bir bilgisayarlı görme görevidir. Bir bozunma operatörü olarak bikübik alt örneklemeyi kullanan klasik süper çözünürlüklü formu göz önünde bulunduruyoruz.
Süper çözünürlüklü görüntü görevleri için, difüzyon modellerine ve transformatörlere dayalı üst düzey sinir ağları da dahil olmak üzere pek çok mimari kullanılabilir. Bu belgede 4x EDSR mimarisine odaklanacağız. EDSR mimarisi, ResNet'i (birçok derin öğrenme probleminde yaygın olarak kullanılan) ve sonunda 4x örnekleme bloğunu içerdiğinden gösterimimiz için çok uygundur. EDSR'nin şematik bir açıklaması aşağıdaki şekillerde bulunabilir.
Filtrelerin veya kanalların tamamının silinmesini içeren yapılandırılmış budamanın, EDSR'de birincil yapı taşları olarak hizmet veren artık bloklar üzerinde benzersiz etkileri vardır. Her durum girişe Conv -> ReLU -> Conv bloğu eklenerek güncellendiğinden, giriş ve çıkış sinyallerinin aynı sayıda parametreye sahip olması gerekir. Bu, bir budama bağımlılık grafiği oluşturularak TorchIntegral'de verimli bir şekilde yönetilebilir. Aşağıdaki şekil, her bir artık bloğun ikinci evrişiminin tek bir grup oluşturduğunu göstermektedir.
Bir artık bloktaki ikinci evrişimi budamak için, her bir artık bloktaki tüm ikinci evrişimleri budamak gerekir. Bununla birlikte, daha esnek bir kurulum için, tüm kalan bloklarda birinci evrişimlerin filtrelerini ve dolayısıyla ikinci evrişimin kanallarını budayız.
Önceden eğitilmiş DNN'lerden dönüşümler için, daha düzgün enterpolasyonla özel filtre kanalları permütasyon algoritmamızı kullanırız. Permütasyon algoritması, DNN'lerin ağırlıklarının sürekli işlevlerden örneklenmiş gibi görünmesini sağlarken model kalitesini korur.
import torch import torchintegral as inn from super_image import EdsrModel # creating 4x EDSR model model = EdsrModel.from_pretrained("eugenesiow/edsr", scale=4).cuda() # Transform model layers to integral. # continous_dims and discrete dims define which dimensions # of parameters tensors should be parametrized continuously # or stay fixed size as in discrete networks. # In our case we make all filter and channel dimensions # to be continuous excluding convolutions of the upsample block. model = inn.IntegralWrapper(init_from_discrete=True)( model, example_input, continuous_dims, discrete_dims ).cuda()
Entegrasyon ızgara ayarı, filtrelerinin kullanıcı tanımlı sayılar için örneklenmesi gereken parametre tensörlerini (SGD optimizasyonu altında) sorunsuz bir şekilde seçen işlemdir. Filtre/kanal silme yöntemlerinden farklı olarak INN'ler, enterpolasyon işlemi nedeniyle birkaç ayrı filtreyi birleştirebilen filtreler üretir.
INN'ler, filtre ve kanal boyutları boyunca parametrelerin tensörü üzerinde yumuşak indekse göre seçim işlemi sunar.
# Set trainable gird for each integral layer # Each group should have the same grid # During the sum of continuous signals # We need to sample it using the same set of points for group in model.groups: new_size = 224 if 'operator' in group.operations else 128 group.reset_grid(inn.TrainableGrid1D(new_size)) # Prepare model for tuning of integration grid model.grid_tuning() # Start training train(model, train_data, test_data)
Entegrasyon ızgarası ayarı, küçük bir kalibrasyon seti üzerinde gerçekleştirilebilen hızlı bir optimizasyon işlemidir . Bu optimizasyonun sonucu yapısal olarak sıkıştırılmış bir DNN'dir. Tek bir Nvidia A4000 üzerinde yapılan testler, Div2k veri kümesinin tamamında entegrasyon ızgarası ayarının 4 dakika gerektirdiğini gösteriyor. 4x A4000'deki dağıtılmış kurulum, neredeyse 4 kat hızlanma sağlayarak yalnızca 1 dakikalık bir optimizasyon süresi sağlar.
Deneylerimiz sırasında, 500 görüntünün, 4000 görüntüden oluşan tam bir Div2k tren seti ile aynı sonucu verdiğini gördük.
Ortaya çıkan INN modeli kolaylıkla ayrı bir modele dönüştürülebilir ve herhangi bir NVIDIA GPU'ya yerleştirilebilir. RTX A4000'de 64x64 giriş çözünürlüğüyle saniye başına kare (FPS) sağlıyoruz. Sıkıştırılmış model neredeyse 2 kat hızlanma sağlıyor. Budanmış INN modelini ayrık bir modele dönüştürmek için aşağıdaki kod satırı kullanılabilir:
model = model.transform_to_discrete() # then model can be compiled, for instance # compilation can add an additional 1.4x speedup for inference model = torch.compile(model, backend='cudagraphs')
Modeli | Boyut FP16 | FPS RTX A4000 | PSNR |
---|---|---|---|
EDSR orij. | 75MB | 170 | 30.65 |
INN EDSR %30 | 52 MB | 230 | 30.43 |
INN EDSR %40 | 45MB | 270 | 30.34 |
INN EDSR 50% | 37MB | 320 | 30.25 |
Bu makalede CVPR2023 ödül adayı makalesi “İntegral Sinir Ağları”na genel bir bakış sunduk. 4x EDSR modelinin eğitim sonrası budaması için uygulandı ve tek satır kodla neredeyse 2 kat hızlanma ve entegrasyon ızgarasında 1 dakikalık ince ayar elde edildi.
Gelecek makalelerimizde INN'lerin daha fazla uygulamasını sunacağız ve verimli model dağıtımına ilişkin daha fazla ayrıntıyı ele alacağız. Bizi izlemeye devam edin:
İlginiz için teşekkür ederiz!
Burada da yayınlandı.