【初心者向け】基礎&実践プログラミング

初心者がつまづきやすいところ、最短で実力が身につく方法をお伝えします。

【脳MRI画像解析ケーススタディ】超解像AIの評価 ~大脳皮質解析の観点から~

f:id:AIProgrammer:20210216172751p:plain

動かしながら学ぶ PyTorchプログラミング入門

動かしながら学ぶ PyTorchプログラミング入門

  • 作者:斎藤勇哉
  • 発売日: 2020/11/30
  • メディア: Kindle版

目次

目的

  • Deep Learningを用いた、構造MRIのSuper-resolutionを、解析した皮質厚で評価

準備

低解像度画像(LF)、高解像度画像(HF)、Deep learning Super-resolution画像(dSR)を用意。

dSR画像は、低解像度画像と高解像度画像の対応を、Deep learningで学習して実現。

f:id:AIProgrammer:20210212200846p:plain

各種画像の比較は、以下。

f:id:AIProgrammer:20210212201326p:plain

解析手法

1. 皮質厚計測

準備

FreeSurferを用いて、大脳皮質厚を計測。

3D T1WI([ID]_T1w_T1w.nii.gz)をひとつのフォルダに格納。

.
├── 0841_T1w.nii.gz
├── 0843_T1w.nii.gz
├── ...
└── 1830_T1w.nii.gz

実行

上記のディレクトリで以下のコードを実行。-P 10は、10並列実行を意味する。

\ls |cut -d _ -f1 |xargs -P 10 -i recon-all -i {}_T1w_T1w.nii.gz -subjid {} -all -sd .

IDごとにフォルダが生成され、それがFreeSurferの出力ファイルである(例:0841)。

0841
├── label
├── mri
│   ├── orig
│   └── transforms
│       └── bak
├── scripts
├── stats
├── surf
├── tmp
├── touch
└── trash

こちらの記事を参考に、左右半球ごとに大脳皮質厚を計測。実行すると左半球大脳皮質(lh.aparc.volume.csv)と右半球大脳皮質(rh.aparc.volume.csv)の解析結果が出力される。

www.aiprogrammers.net

export SUBJECTS_DIR=$PWD

# aparc
## lh
aparcstats2table --hemi lh \
--subjects $(ls -F |grep / |cut -d / -f1) \
--delimiter=comma \
--meas thickness\
--table lh.aparc.volume.csv

## rh
aparcstats2table --hemi rh \
--subjects $(ls -F |grep / |cut -d / -f1) \
--delimiter=comma \
--meas thickness\
--table rh.aparc.volume.csv

結果

左半球大脳皮質(lh.aparc.volume.csv)の中身は、次の通り。

lh.aparc.volume lh_bankssts_volume lh_caudalanteriorcingulate_volume lh_caudalmiddlefrontal_volume lh_cuneus_volume lh_entorhinal_volume lh_fusiform_volume lh_inferiorparietal_volume lh_inferiortemporal_volume lh_isthmuscingulate_volume lh_lateraloccipital_volume lh_lateralorbitofrontal_volume lh_lingual_volume lh_medialorbitofrontal_volume lh_middletemporal_volume lh_parahippocampal_volume lh_paracentral_volume lh_parsopercularis_volume lh_parsorbitalis_volume lh_parstriangularis_volume lh_pericalcarine_volume lh_postcentral_volume lh_posteriorcingulate_volume lh_precentral_volume lh_precuneus_volume lh_rostralanteriorcingulate_volume lh_rostralmiddlefrontal_volume lh_superiorfrontal_volume lh_superiorparietal_volume lh_superiortemporal_volume lh_supramarginal_volume lh_frontalpole_volume lh_temporalpole_volume lh_transversetemporal_volume lh_insula_volume BrainSegVolNotVent eTIV
0841 2049 1055 5137 2123 2217 9513 10662 10324 2386 8964 6287 4751 4940 8179 2176 3208 3628 1711 2729 1391 8981 2675 11751 8838 1716 10352 19838 11648 9512 8109 731 2194 944 6549 956338 1078269.13009
0843 1716 1079 4591 2318 2072 7497 10240 10662 2325 11027 6134 5056 4370 9657 1393 2909 3423 2103 2983 1787 6571 2528 10505 6730 1856 10396 16357 10209 11251 8072 712 2130 943 7488 967241 1208579.80012
1830 2016 1720 4813 2744 2546 9663 12916 12717 2601 12539 7261 6587 5138 9360 2065 3810 3696 2077 2515 1787 7613 3250 11962 9554 3108 13373 18738 12212 9281 8161 801 3117 799 7088 1057889 1290680.34622

2. 皮質厚評価

次のように皮質厚の評価をする。

  • Ground truthに対する相対誤差
  • 平均二乗誤差(MSE)と平均絶対誤差(MAE)
  • Ground truthからの絶対差に対する検定

準備

「1. 皮質厚計測」で取得した、lh.aparc.volume.csvとrh.aparc.volume.csvを、次のように配置する。run_evaluation.pyは、上記の皮質厚評価を、実行するためのスクリプト。

.
├── data
│   ├── HF
│   │   ├── lh.aparc.thickness.csv
│   │   └── rh.aparc.thickness.csv
│   ├── LF
│   │   ├── lh.aparc.thickness.csv
│   │   └── rh.aparc.thickness.csv
│   └── dSR
│       ├── lh.aparc.thickness.csv
│       └── rh.aparc.thickness.csv
└── run_evaluation.py

実行

準備ができたら、以下のスクリプト(run_evaluation.py)を実行する。

具体的には、次の手順を経る。

  1. 結果を保存するための「result」フォルダを作成
  2. 大脳皮質の結果が格納されたCSVを読みこむ(関数:import_data)
  3. 左右の大脳皮質を平均して合わせ、一つの領域にする(関数:merge_thickness)
  4. 外れ値除去。平均値から3σ以上の値を持つ、データを除去。(関数:outlier)
  5. HF, LF, dSRとのサンプルサイズおよびIDを一致させる。
  6. 大脳皮質の分布を図示(関数:hist_plt)
  7. 相対誤差を算出(関数:calc_PRE、注意:第二引数をGround truthにすること)
  8. 7.をLFにおける相対誤差が小さくなる順に、脳領域を並び替える。
  9. 相対誤差を図示(関数:box_plt)
  10. 平均二乗誤差(MSE)と平均絶対誤差(MAE)を算出(関数:mse_mae)
  11. Ground truthからの絶対差に対する統計解析(関数:stats_absdiff)
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
from scipy import stats
import scikit_posthocs as sp
import statsmodels


def import_data(x1='LF', x2='HF', x3='dSR'):
    # Read CSV and merge left and right thickness
    df_LF = merge_thickness(x1)
    df_HF = merge_thickness(x2)
    df_dSR = merge_thickness(x3)
    # Remove outlier
    df_LF = outlier(df_LF, sigma=3)
    df_HF = outlier(df_HF, sigma=3)
    df_dSR = outlier(df_dSR, sigma=3)
    print("After removing outliers: \ndf_LF: {} images, df_HF: {} images, df_dSR: {} images".format(
        df_LF.shape[0], df_HF.shape[0], df_dSR.shape[0]))

    # Match sample size
    df_LF = df_LF[(df_LF['ID'].isin(df_HF['ID'].values)) &
                  (df_LF['ID'].isin(df_dSR['ID'].values))]
    df_HF = df_HF[(df_HF['ID'].isin(df_LF['ID'].values)) &
                  (df_HF['ID'].isin(df_dSR['ID'].values))]
    df_dSR = df_dSR[(df_dSR['ID'].isin(df_LF['ID'].values)) &
                    (df_dSR['ID'].isin(df_HF['ID'].values))]
    return df_LF, df_HF, df_dSR


def merge_thickness(imgtype):
    # Read CSV
    df_lh = pd.read_csv("data/{}/lh.aparc.thickness.csv".format(imgtype)
                        ).rename(columns={'lh.aparc.thickness': 'ID'})
    df_rh = pd.read_csv("data/{}/rh.aparc.thickness.csv".format(imgtype)
                        ).rename(columns={'rh.aparc.thickness': 'ID'})
    # Merge left and right
    df_lrh = df_lh.merge(
        df_rh, on=['ID', 'BrainSegVolNotVent', 'eTIV'], how='right')
    df_lrh_merge = pd.DataFrame({'ID': df_lrh['ID']})
    for key in df_lrh.keys()[df_lrh.columns.str.contains('lh_')]:
        # Average thickness
        df_lrh_merge[key[3:-10]
                     ] = (df_lrh['lh_' + key[3:]] + df_lrh['rh_'+key[3:]])/2
    return df_lrh_merge


def outlier(df, sigma=2):
    mean = df.drop('ID', axis=1).mean()
    std = df.drop('ID', axis=1).std()
    # 外れ値の基準点
    outlier_min = mean - std * sigma
    outlier_max = mean + std * sigma
    # 範囲から外れている値を除く
    df[(df < outlier_min) | (df > outlier_max)] = None
    return df.dropna()


def calc_PRE(df1, df2):  # d1 = Target image, d2 = HF
    PRE = pd.DataFrame({'ID': df2.index}).set_index('ID')
    PRE = abs(df2.set_index('ID') - df1.set_index('ID')) * \
        100 / df2.set_index('ID')
    return PRE.reset_index()


def hist_plt(df1, df2, df3):
    for i, df in enumerate([df1, df2, df3]):
        df.drop('ID', axis=1).plot(kind='hist', bins=100, subplots=True)
        # plt.show()
        plt.savefig("./result/data_hist{}.png".format(i),
                    dpi=300)
        plt.close()


def box_plt(df):
    # Plot
    fig = plt.figure()
    ax = fig.add_subplot(1, 1, 1)
    sns.boxplot(x='region', y='value', data=df, hue='label',
                showfliers=False, palette="Set1", width=0.8)
    # Config
    # fig.subplots_adjust(bottom=0.3)
    handles, labels = ax.get_legend_handles_labels()
    ax.legend(handles[0:2], labels[0:2])
    fig.autofmt_xdate(rotation=45)
    plt.gca().spines['right'].set_visible(False)
    plt.gca().spines['top'].set_visible(False)
    ax.set(xlabel='', ylabel='Relative error in cortical thickness (%)')
    # plt.tick_params(pad=10)
    # plt.show()
    # Save Figure
    plt.savefig('./result/Relative_error_in_cortical_thickness.png',
                dpi=300, bbox_inches="tight")
    plt.close()


def error_plt(df):
    # df = pd.read_csv('./result/MSE_MAE.csv')
    # Sort regions by "MAE_HFvsLF"
    sorted_regions = df[df['Region'] != 'MeanThickness'].sort_values('MAE_HFvsLF')[
        'Region'].tolist()
    sorted_regions.insert(0, 'MeanThickness')
    df = df.set_index('Region').reindex(index=sorted_regions)
    # Plot error
    df.loc[:, ['MSE_HFvsLF', 'MSE_HFvsdSR']].plot.bar()
    plt.savefig('result/MSE_result.png', dpi=300, bbox_inches="tight")
    plt.close()
    df.loc[:, ['MAE_HFvsLF', 'MAE_HFvsdSR']].plot.bar()
    plt.savefig('result/MAE_result.png', dpi=300, bbox_inches="tight")
    plt.close()


def mse_mae(x1, x2, regions):
    mse_list, mae_list = [], []
    for region in regions:
        mse = mean_squared_error(x1[region], x2[region])  # MSE計算
        mae = mean_absolute_error(x1[region], x2[region])  # MAE計算
        mse_list.append(mse), mae_list.append(mae)
    return mse_list, mae_list


def statistical_test(group0, group1, test_type):
    # Kolmogorov-Smirnov test
    kstest_group0, kstest_group1 = stats.kstest(
        group0, 'norm'), stats.kstest(group1, 'norm')
    # Shapiro-Wilk test
    shapiro_group0, shapiro_group1 = stats.shapiro(
        group0), stats.shapiro(group1)
    if test_type == 'independent':
        # Independent test
        para = stats.ttest_ind(group0, group1)  # Independent Student's t-test
        nonpara = stats.mannwhitneyu(
            group0, group1, alternative='two-sided')  # Mann–Whitney U test
    else:
        # Paired test
        para = stats.ttest_rel(group0, group1)  # Paired Student's t-test
        nonpara = stats.wilcoxon(group0, group1)  # Wilcoxon signed-rank test
    return kstest_group0.pvalue, kstest_group1.pvalue, shapiro_group0[1], shapiro_group1[1], para.statistic, para.pvalue, nonpara.pvalue


def correct_pval(pval):
    bonferroni = statsmodels.stats.multitest.multipletests(
        pval, alpha=0.05, method='bonferroni', is_sorted=False, returnsorted=False)  # Bonferroni
    fdr_bh = statsmodels.stats.multitest.multipletests(
        pval, alpha=0.05, method='fdr_bh', is_sorted=False, returnsorted=False)  # Benjamini/Hochberg (non-negative)
    return bonferroni[1], fdr_bh[1]


def stats_absdiff(df1, df2):
    # Define
    test_type = 'paired'  # independent or paired
    kstest_group0 = []
    kstest_group1 = []
    shapiro_group0 = []
    shapiro_group1 = []
    para_pval = []
    para_tval = []
    nonpara_pval = []
    # Test
    print("Test type: {}metric".format(test_type))
    for col in df1.columns:
        data1, data2 = df1[col], df2[col]
        temp_kstest_group0_pval, temp_kstest_group1_pval, temp_shapiro_group0_pval, temp_shapiro_group1_pval, temp_para_tval, temp_para_pval, temp_nonpara_pval = statistical_test(
            data1, data2, test_type)
        # Save temporal result
        kstest_group0.append(temp_kstest_group0_pval)
        kstest_group1.append(temp_kstest_group1_pval)
        shapiro_group0.append(temp_shapiro_group0_pval)
        shapiro_group1.append(temp_shapiro_group1_pval)
        para_tval.append(temp_para_tval)
        para_pval.append(temp_para_pval)
        nonpara_pval.append(temp_nonpara_pval)
    # Correct pval
    para_bonferoni_pval, para_fdr_bh_pval = correct_pval(para_pval)
    nonpara_bonferoni_pval, nonpara_fdr_bh_pval = correct_pval(nonpara_pval)
    # Save result
    result_df = pd.DataFrame(
        {"Variable": df1.columns,
         'KS group0': kstest_group0,
         'KS group1': kstest_group1,
         'SW group0': shapiro_group0,
         'SW group1': shapiro_group1,
         'para tval': para_tval,
         'para uncorrected': para_pval,
         'para Bonferroni': para_bonferoni_pval,
         'para FDR BH': para_fdr_bh_pval,
         'nonpara uncorrected': nonpara_pval,
         'nonpara Bonferroni': nonpara_bonferoni_pval,
         'nonpara FDR BH': nonpara_fdr_bh_pval})
    result_df.to_csv("result/{}_result.csv".format(test_type), index=False)


def main():
    # Make directory
    if not os.path.isdir('result'):
        os.makedirs('result')
    # 1. Import data
    df_LF, df_HF, df_dSR = import_data(x1='LF', x2='HF', x3='dSR')
    print("After matching sample size: \ndf_LF: {} images, df_HF: {} images, df_dSR: {} images".format(
        df_LF.shape[0], df_HF.shape[0], df_dSR.shape[0]))

    # Check outliers
    hist_plt(df_LF, df_HF, df_dSR)
    # 2. Percent relative error (PRE) (=(HF - LF)*100 / HF)
    PRE_HFvsLF = calc_PRE(df_LF, df_HF)
    PRE_HFvsdSR = calc_PRE(df_dSR, df_HF)
    # Add label
    PRE_HFvsLF['label'] = 'LF'
    PRE_HFvsdSR['label'] = 'dSR'
    # Merge PRE
    PRE_merge = PRE_HFvsLF.merge(PRE_HFvsdSR, how='outer')
    # Sort columns by values
    sorted_regions = PRE_HFvsLF.mean(
    )[1:-1].sort_values().index.values.tolist()
    sorted_regions.insert(0, 'ID')
    sorted_regions.insert(1, 'MeanThickness')
    sorted_regions.append('label')
    PRE_merge = PRE_merge.reindex(columns=sorted_regions)
    # Melt
    PRE_merge_melt = pd.melt(
        PRE_merge, id_vars=['ID', 'label'], var_name='region')
    # 3. Box plot
    box_plt(PRE_merge_melt)
    # 4. MSE & MAE
    mse_HFvsLF, mae_HFvsLF = mse_mae(df_HF, df_LF, df_HF.columns[1:])
    mse_HFvsdSR, mae_HFvsdSR = mse_mae(df_HF, df_dSR, df_HF.columns[1:])
    df_error = pd.DataFrame({'Region': df_HF.columns[1:], 'MSE_HFvsLF': mse_HFvsLF, 'MSE_HFvsdSR': mse_HFvsdSR,
                             'MAE_HFvsLF': mae_HFvsLF, 'MAE_HFvsdSR': mae_HFvsdSR})
    df_error.to_csv('./result/MSE_MAE.csv', index=False)  # Save to CSV
    error_plt(df_error)  # Plot error
    # 5. Stats
    # Absolute difference
    abs_HFvsLF = abs(df_HF.set_index('ID') - df_LF.set_index('ID'))
    abs_HFvsdSR = abs(df_HF.set_index('ID') - df_dSR.set_index('ID'))
    # Stats for absolute difference
    stats_absdiff(abs_HFvsLF, abs_HFvsdSR)


if __name__ == '__main__':
    main()

結果

各大脳皮質の分布:data_hist?.png

各解像度画像ごとに、大脳皮質の分布を図示。以下は、高解像度画像(HF)における大脳皮質の分布。

  • data_hist0.png:低解像度画像(LF)
  • data_hist1.png:高解像度画像(HF)
  • data_hist2.png:Deep learning Super-resolution画像(dSR)

f:id:AIProgrammer:20210216173820p:plain

Ground truthに対する相対誤差:Relative_error_in_cortical_thickness.png

高解像度画像(HF)に対する相対誤差を計算し、図示する。横軸の領域名は、低解像度画像(LF)における相対誤差が小さい順に、左から並べている。

f:id:AIProgrammer:20210216174032p:plain

平均二乗誤差(MSE)と平均絶対誤差(MAE):MSE_MAE.csv, MAE_result.png, MSE_result.png

高解像度画像(HF)の大脳皮質に対する、平均二乗誤差(MSE)と平均絶対誤差(MAE)を算出し、表にまとめて出力する(MSE_MAE.csv)。

Region MSE_HFvsLF MSE_HFvsdSR MAE_HFvsLF MAE_HFvsdSR
bankssts 0.244802 0.295253 0.459221 0.494247
caudalanteriorcingulate 0.142681 0.135529 0.299961 0.288065
caudalmiddlefrontal 0.313371 0.387714 0.533312 0.58026
cuneus 0.144116 0.09651 0.340688 0.274922
entorhinal 0.26574 0.331278 0.424974 0.451286
fusiform 0.208328 0.516682 0.414221 0.645844
inferiorparietal 0.275027 0.225984 0.499208 0.428948
inferiortemporal 0.04504 0.111953 0.169468 0.243675
isthmuscingulate 0.072279 0.214378 0.205182 0.385753
lateraloccipital 0.074369 0.038898 0.231701 0.148455
lateralorbitofrontal 0.089801 0.106103 0.231091 0.260701
lingual 0.072756 0.227049 0.240091 0.453753
medialorbitofrontal 0.066421 0.088463 0.208688 0.23239
middletemporal 0.111311 0.136595 0.301351 0.285221
parahippocampal 0.312511 0.386331 0.516494 0.541844
paracentral 1.006661 0.857552 0.978844 0.890234
parsopercularis 0.365581 0.434355 0.576623 0.63413
parsorbitalis 0.08849 0.099883 0.233364 0.241623
parstriangularis 0.127218 0.140853 0.322299 0.327013
pericalcarine 0.127756 0.206733 0.322701 0.422377
postcentral 0.316283 0.234818 0.54874 0.454416
posteriorcingulate 0.125857 0.082589 0.301571 0.223909
precentral 1.233383 1.303344 1.092792 1.120779
precuneus 0.342956 0.438946 0.573195 0.646091
rostralanteriorcingulate 0.092562 0.147664 0.245221 0.290091
rostralmiddlefrontal 0.043896 0.038039 0.179091 0.165143
superiorfrontal 0.054509 0.098192 0.188208 0.263922
superiorparietal 0.289399 0.234981 0.522883 0.453727
superiortemporal 0.545184 0.391194 0.717636 0.590364
supramarginal 0.333283 0.279641 0.559766 0.498961
frontalpole 0.163801 0.252735 0.310909 0.400662
temporalpole 0.208039 0.402331 0.374961 0.482909
transversetemporal 0.948924 1.436528 0.929364 1.14926
insula 0.077178 0.182621 0.216571 0.359039
MeanThickness 0.16863 0.174673 0.400265 0.399018

箱ひげ図で図示したものは、以下。

  • 平均二乗誤差(MSE) f:id:AIProgrammer:20210216181904p:plain

  • 平均絶対誤差(MAE) f:id:AIProgrammer:20210216181913p:plain

Ground truthからの絶対差に対する検定:independent_result.csv or paired_result.csv

高解像度画像(HF)の大脳皮質に対する絶対差が、絶対差が有意に異なるかを検定。正規性の検定、パラメトリック検定、ノンパラメトリック検定、対応あり・対応無し検定が可能であり、多重比較の補正も実装している。

詳しくは、こちらの記事。

www.aiprogrammers.net

各列の情報は、次の通り。

Variable : 検定した変数

KS group0 : label=0にけるKolmogorov-Smirnov testのP値

KS group1 : label=1にけるKolmogorov-Smirnov testのP値

SW group0 : label=0にけるShapiro-Wilk testのP値

SW group1 : label=1にけるShapiro-Wilk testのP値

para tval : パラメトリック検定のT値

para uncorrected : パラメトリック検定のP値

para Bonferroni : Bonferroni補正したP値 (FWE補正)

para FDR BH : Benjamini/Hochberg補正したP値 (FDR補正)

nonpara uncorrected : ノンパラメトリック検定のP値

nonpara Bonferroni : Bonferroni補正したP値 (FWE補正)

nonpara FDR BH : Benjamini/Hochberg補正したP値 (FDR補正)

Variable KS group0 KS group1 SW group0 SW group1 para tval para uncorrected para Bonferroni para FDR BH nonpara uncorrected nonpara Bonferroni nonpara FDR BH
bankssts 3.60E-21 9.08E-19 0.798367 0.534279 -1.04801 0.296297 1 0.4321 0.30138 1 0.432666
caudalanteriorcingulate 1.90E-18 2.35E-18 0.000115 3.73E-05 0.319667 0.74966 1 0.81994 0.689673 1 0.783177
caudalmiddlefrontal 3.35E-24 2.27E-23 0.855657 0.122101 -1.44738 0.14985 1 0.238398 0.291351 1 0.432666
cuneus 5.68E-19 1.24E-18 0.012248 0.016803 2.590723 0.01051 0.36784 0.026274 0.006332 0.221633 0.018469
entorhinal 1.43E-18 1.77E-18 0.006883 1.80E-05 -0.4973 0.619699 1 0.699661 0.932326 1 0.988831
fusiform 7.77E-20 1.49E-22 0.544978 0.027617 -5.46907 1.82E-07 6.37E-06 3.18E-06 2.63E-06 9.21E-05 3.07E-05
inferiorparietal 5.22E-22 1.90E-18 0.0859 0.36649 2.352236 0.019943 0.697999 0.041059 0.025537 0.893791 0.059586
inferiortemporal 1.16E-18 2.35E-18 0.000121 1.07E-07 -2.46466 0.014828 0.518977 0.034598 0.095381 1 0.175702
isthmuscingulate 2.19E-18 9.36E-19 2.45E-06 0.000557 -5.08723 1.06E-06 3.70E-05 1.23E-05 2.32E-06 8.14E-05 3.07E-05
lateraloccipital 1.54E-18 2.04E-18 0.014384 4.82E-07 3.745478 0.000255 0.008926 0.000992 0.000127 0.004445 0.000556
lateralorbitofrontal 2.35E-18 1.24E-18 1.37E-05 3.89E-05 -0.94552 0.345894 1 0.484252 0.309047 1 0.432666
lingual 1.54E-18 8.94E-24 0.241974 0.927015 -9.78053 7.94E-18 2.78E-16 2.78E-16 7.36E-15 2.57E-13 2.57E-13
medialorbitofrontal 2.35E-18 2.35E-18 0.000356 8.89E-05 -0.86297 0.389515 1 0.524347 0.676409 1 0.783177
middletemporal 2.04E-18 2.04E-18 0.62768 2.11E-06 0.510935 0.610138 1 0.699661 0.128635 1 0.225111
parahippocampal 1.08E-19 1.33E-19 0.720576 0.005658 -0.59388 0.553473 1 0.667985 0.693671 1 0.783177
paracentral 2.90E-39 6.45E-32 0.554953 0.658993 2.292325 0.023259 0.814069 0.045226 0.041545 1 0.085534
parsopercularis 4.20E-25 1.71E-28 0.899598 0.056466 -1.96155 0.051642 1 0.090659 0.166912 1 0.278187
parsorbitalis 2.35E-18 1.77E-18 4.90E-05 6.71E-06 -0.262 0.793674 1 0.841776 0.972615 1 0.991351
parstriangularis 5.29E-19 1.65E-18 0.337444 0.20214 -0.17175 0.863859 1 0.889267 0.991351 1 0.991351
pericalcarine 1.16E-18 3.11E-20 0.203129 0.918244 -3.81238 0.0002 0.006984 0.000873 0.000152 0.005336 0.000593
postcentral 4.92E-29 1.58E-23 0.272559 0.410499 3.943037 0.000122 0.004286 0.000612 4.58E-05 0.001603 0.000312
posteriorcingulate 2.52E-18 2.19E-18 0.037862 2.02E-05 2.608543 0.01 0.350017 0.026274 0.007575 0.265128 0.020394
precentral 1.16E-44 8.00E-47 0.314328 0.172361 -0.83012 0.407773 1 0.524697 0.439342 1 0.549178
precuneus 3.06E-29 1.39E-29 0.761626 0.797676 -3.35326 0.001008 0.035286 0.003529 0.001283 0.044915 0.004492
rostralanteriorcingulate 2.19E-18 2.35E-18 0.000232 3.33E-08 -1.26289 0.208563 1 0.317378 0.413087 1 0.536816
rostralmiddlefrontal 1.90E-18 1.65E-18 0.091498 0.028894 0.809038 0.419758 1 0.524697 0.414115 1 0.536816
superiorfrontal 2.19E-18 1.90E-18 0.000982 0.008313 -3.02463 0.002923 0.102321 0.009302 0.005928 0.207477 0.018469
superiorparietal 1.21E-26 1.46E-21 0.724717 0.531806 2.838733 0.005149 0.180212 0.015018 0.008209 0.287331 0.020524
superiortemporal 7.29E-30 1.27E-24 0.68389 0.412868 4.110912 6.43E-05 0.00225 0.000375 5.35E-05 0.001871 0.000312
supramarginal 1.21E-26 2.41E-21 0.691779 0.102402 2.355959 0.019751 0.691292 0.041059 0.03483 1 0.076191
frontalpole 1.90E-18 2.19E-18 1.61E-05 0.000132 -1.96017 0.051805 1 0.090659 0.07337 1 0.142663
temporalpole 1.77E-18 1.65E-18 0.000628 3.18E-06 -1.93481 0.05487 1 0.091451 0.271188 1 0.431436
transversetemporal 4.42E-32 3.10E-38 0.174253 0.543007 -4.27656 3.34E-05 0.001169 0.000234 3.95E-05 0.001382 0.000312
insula 2.35E-18 2.35E-18 5.23E-05 0.033391 -4.28565 3.22E-05 0.001127 0.000234 0.000115 0.004039 0.000556
MeanThickness 5.49E-25 2.88E-22 0.6423 0.350888 0.07034 0.944015 1 0.944015 0.725953 1 0.794011


頑張れ!喝!!の代わりにB!ブックマークを押していただけるとただただうれしいです(^^)! ↓

動かしながら学ぶ PyTorchプログラミング入門

動かしながら学ぶ PyTorchプログラミング入門

  • 作者:斎藤勇哉
  • 発売日: 2020/11/30
  • メディア: Kindle版