VISTA-2D, NVIDIA’nın hücre görüntüleme ve mekansal omik iş akışlarında tüm alt akış görevlerinin doğruluğu açısından kritik öneme sahip temel bir görev olan hücre segmentasyonunu hızlı ve doğru bir şekilde gerçekleştirebilen yeni bir temel modelidir.
VISTA-2D modeli, görüntü yerleştirmeleri oluşturmak için bir görüntü kodlayıcı kullanır ve bunları daha sonra segmentasyon maskelerine dönüştürebilir (Şekil 1). Yerleştirmeler, her hücrenin morfolojileri hakkında bilgi içermelidir.
Her hücre segmentasyonu için bir yerleştirme oluşturulabilseydi, o zaman tüm yerleştirmelerde kümelemeyi çalıştırabilir ve benzer morfolojilere sahip hücreleri otomatik olarak gruplandırma yöntemi olarak kullanabilirsiniz.
Bu yazıda, bu araçların önce hücreleri segmentlemek ve VISTA-2D kullanarak mekansal özelliklerini çıkarmak, ardından bu hücre özelliklerini RAPIDS kullanarak kümelemek için nasıl kullanılabileceğini göstermek için eşlik eden bir Jupyter not defterinde derinlemesine size yol gösteriyorum. Bu, hücre tiplerini hızla sınıflandırmak için otomatik bir işlem hattı oluşturur.
Ön koşullar
Bu eğitimi takip edebilmek için aşağıdaki kaynaklara ihtiyacınız olacak:
- Python, Jupyter ve Docker ile ilgili temel bilgilere sahip olmak
- Docker sürüm 19.03+
Defteri başlatma
Bu Jupyter not defterinin kodu şu şekildedir: /clara-parabricks-workflows/vista2d_rapids_kümeleme GitHub deposu ve içinde çalışır NGC’den PyTorch Docker konteyneri. Dizüstü bilgisayar, aşağıdakiler kullanılarak oluşturuldu: 24:03-py3
Bu kapsayıcı için etiket. Aşağıdaki komutu kullanarak kapsayıcıyı çalıştırın:
docker run --rm -it \
-v /path/to/this/repo/:/workspace \
-p 8888:8888 \
--gpus all \
nvcr.io/nvidia/pytorch:24.03-py3 \
/bin/bash
Bu komut aşağıdaki eylemleri başlatır:
- Docker konteynerini başlatır.
- Depo klasörünü konteynera bağlar.
- Ana makinedeki 8888 portunu Docker içindeki 8888 portuna eşler.
- Konteynera kullanılabilir tüm GPU’ları atar.
- PyTorch konteynerini başlatır.
- Bir terminal döndürür.
Daha sonra, şu adreste bulunabilen birkaç ek Python paketine ihtiyacınız olacak: requirements.txt
.
fastremap
tifffile
monai
plotly
Bu paketler çoğunlukla yardımcı işlevler ve çizim içindir, bu yazının ilerleyen kısımlarında daha da belirginleşecektir. Şimdilik, Docker konteynerinin üstüne kurulabilirler:
pip install -r requirements.txt
Daha sonra not defterini başlatın:
Artık notebook sunucusu çalışıyor ve notebook’a, sunucunun çalıştığı makinede veya ayrı bir makinede web tarayıcısı kullanılarak erişilebilir.
Bir tarayıcıda, sunucunun çalıştığı makinenin IP adresini ve ardından 8888 portunu girin:
Artık dizüstü bilgisayar çalışmaya hazır. Daha fazla bilgi için bkz. [REPO LINK?] GitHub deposu.
VISTA-2D ile hücre segmentasyonu ve özellik çıkarma
Bu not defterinin ilk yarısı şu verileri kullanır: Canlı Hücre VISTA-2D ile birlikte görüntüdeki hücreleri segmentlere ayırmak ve VISTA-2D modelinin kendisinden kodlama katmanını kullanarak özellikleri çıkarmak.
Öncelikle bir VISTA-2D model kontrol noktası yükleyin, çünkü bu not defteri modeli eğitmeye değil, özellik çıkarma amacıyla kullanmaya odaklanıyor.
model_ckpt = "cell_vista_segmentation/results/model.pt"
Daha sonra ana not defterinin çok uzun olmamasını sağlayacak yardımcı fonksiyonları yükleyin.
from segmentation import segment_cells, plot_segmentation, feature_extract
Sonraki bölümler bu yardımcı işlevlerin ne işe yaradığı hakkında daha fazla bilgi sunar. Hepsi şurada bulunabilir: segmentation.py
.
segment_hücreleri
Bu fonksiyon hücre görüntüsünü alır ve baştan sona VISTA-2D’de çalıştırır. Bu, biri tam segmentasyon için ve biri de her hücrenin 1’den görüntüde bulunan hücre sayısına kadar etiketlendiği iki ek görüntüyle sonuçlanır (not defterinde şu şekilde anılır: pred_mask
). Bu, hücrelerin ileride özellik çıkarımı için ayrı ayrı indekslenmesini sağlar.
img_path="example_livecell_image.tif"
patch, segmentation, pred_mask = segment_cells(img_path, model_ckpt)
plot_segmentation
Bu fonksiyon şu çıktıyı alır: segment_cells
ve görüntüleri görüntüler, böylece segmentasyon ve tahmin maskelerinde doğruluk açısından görsel olarak doğrulanabilirler. Şekil 2, not defterinde sağlanan hücre görüntüsünü kullanarak çıktının nasıl görünmesi gerektiğine dair bir örnek gösterir.
plot_segmentation(patch, segmentation, pred_mask)
Alt: Üç görüntü VISTA-2D segmentasyonunun sonucunu göstermektedir: orijinal hücre görüntüsü, arka plandan tüm hücrelerin segmentasyonu ve her hücre için ayrı maskeler.
Bu fonksiyon her bir hücre segmentasyonunu alır ve bir özellik vektörü oluşturur. Her hücre, yalnızca bir hücreye ve çevresindeki herhangi bir arka plana uyacak şekilde kırpılmış kare bir maskede bulunur. Bu özellik vektörlerini oluşturmak için VISTA-2D modelinin ilk yarısını bir kodlayıcı olarak kullanır.
Fikir, ortaya çıkan vektörün hücre segmentasyonu için gereken tüm bilgileri içermesi ve dolayısıyla her hücrenin morfolojisi hakkında bilgi içermesi gerektiğidir. Bu bilgi, bir vektör olarak, kolayca bir kümeleme algoritmasına takılabilir. Benzer morfolojilere sahip hücreler benzer özellik vektörlerine sahip olmalı ve benzer kümelere atanmalıdır.
cell_features = feature_extract(pred_mask, patch, model_ckpt)
Bu, şu matrisle sonuçlanır: num_cells
satırlar ve 1024
sütunlar, her hücre için kodlama vektörünün uzunluğudur.
Artık her hücre için özellik vektörlerine sahip olduğunuza göre, bunları RAPIDS kullanarak bir kümeleme algoritmasından geçirmenin zamanı geldi.
RAPIDS ile Kümeleme
RAPIDS, pandas ve sci-kit learn gibi yaygın olarak kullanılan Python veri bilimi kütüphaneleri için eşleşen API’lere sahip GPU hızlandırmalı bir makine öğrenme kütüphanesidir. Bu not defterinde, RAPIDS’in yalnızca özellik azaltma ve kümeleme bölümlerini kullanırsınız, ancak çok daha fazla teklif mevcuttur.
from cuml import TruncatedSVD, DBSCAN
KesilmişSVD
VISTA-2D’den elde ettiğiniz özellik vektörleri uzunlukları 1024
Ancak, görüntüde yalnızca yaklaşık 80 hücre bulunduğundan, bu kadar çok özelliğe sahip kümeler oluşturmanın bir anlamı yok.
Bu yerleştirmelerin uzunluğunu azaltırken kaybolan bilgileri en aza indirmek için boyut azaltma algoritmalarını kullanabilirsiniz. Bu not defterinde, Kesilmiş SVD boyutları azaltmak için algoritma 1024
ile 3
Ayrıca kümeleri 3 boyutlu uzayda görselleştirebildiğiniz için kümeleri çizmeniz de kolaylaşır.
dim_red_model = TruncatedSVD(n_components=3)
X = dim_red_model.fit_transform(cell_features)
Bu, özellik vektörlerinin yeni matrisiyle sonuçlanır, X
artık boyutu [num_cells, 3]
orijinal vektörler yerine cell_features
boyutları [num_cells, 1024]
.
DBSCAN
RAPIDS’te birçok kümeleme algoritması mevcuttur. Bu not defteri için şunu seçtim: DBSCANBurada eps’yi (iki nokta arasındaki maksimum mesafe) ayarlayın 0.003
ve bir kümeyi oluşturmaya izin verilen minimum örnek sayısını şu şekilde ayarlayın: 2
.
model = DBSCAN(eps=0.003, min_samples=2)
labels = model.fit_predict(X)
Koşma fit_predict
artık görüntüdeki her hücre için bir küme etiketi üretir. Etiket listesini bir etiket sözlüğüne dönüştürürseniz, hangi hücrelerin hangi kümelere atandığını görmek daha kolaydır.
# Background is 0, so cell IDs start at 1
labels_dict = {x:np.add(np.where(labels==x),1) for x in np.unique(labels)}
# Label -1 means "data was too noisy" so we remove it
labels_dict.pop(-1)
labels_dict
Son olarak, her hücrenin nerede kümelendiğini göstermek için Plotly’yi kullanarak 3 boyutlu etkileşimli bir çizim yapılandırabilirsiniz.
import plotly
data = []
for l in labels_dict.keys():
cluster_indices = labels_dict[l][0]-1
# Configure the trace
trace = go.Scatter3d(
x=X[cluster_indices,0],
y=X[cluster_indices,1],
z=X[cluster_indices,2],
name="Cluster "+str(l),
mode='markers',
marker={
'size': 10,
'opacity': 0.8,
}
)
data.append(trace)
# Configure the layout
layout = go.Layout(
margin={'l': 0, 'r': 0, 'b': 0, 't': 0}
)
plot_figure = go.Figure(data=data, layout=layout)
# Render the plot
plotly.offline.iplot(plot_figure)
Çözüm
Bu yazıda, VISTA-2D modelini kullanarak bir görüntüdeki hücreleri nasıl bölebileceğinizi ve bu bölütlenmiş hücrelerin her birinden özellik vektörlerini nasıl çıkarabileceğinizi gösterdim. Ayrıca, bu vektörlerde kümelemeyi çalıştırmak için RAPIDS’in nasıl kullanılacağını da gösterdim.
Daha fazla bilgi için aşağıdaki kaynaklara bakın: