{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"### 96 frame olunca 256lik yapacagim....segmenterlari\n## bunun icin kesme koordinatlari 2 ile carpilacak","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:48:16.284243Z","iopub.execute_input":"2022-10-27T15:48:16.2848Z","iopub.status.idle":"2022-10-27T15:48:16.309093Z","shell.execute_reply.started":"2022-10-27T15:48:16.284684Z","shell.execute_reply":"2022-10-27T15:48:16.308159Z"}},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!conda install --offline '../input/installs-gdcm/libjpeg-turbo-2.1.0-h7f98852_0.tar.bz2' -c conda-forge -y","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:48:16.314511Z","iopub.execute_input":"2022-10-27T15:48:16.316754Z","iopub.status.idle":"2022-10-27T15:48:36.839648Z","shell.execute_reply.started":"2022-10-27T15:48:16.316718Z","shell.execute_reply":"2022-10-27T15:48:36.838386Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!conda install --offline '../input/installs-gdcm/libgcc-ng-9.3.0-h2828fa1_19.tar.bz2' -c conda-forge -y\n!conda install --offline '../input/installs-gdcm/gdcm-2.8.9-py37h500ead1_1.tar.bz2' -c conda-forge -y\n!conda install --offline '../input/installs-gdcm/conda-4.10.1-py37h89c1867_0.tar.bz2' -c conda-forge -y\n!conda install --offline '../input/installs-gdcm/certifi-2020.12.5-py37h89c1867_1.tar.bz2' -c conda-forge -y\n!conda install --offline '../input/installs-gdcm/openssl-1.1.1k-h7f98852_0.tar.bz2' -c conda-forge -y","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:48:36.845407Z","iopub.execute_input":"2022-10-27T15:48:36.847815Z","iopub.status.idle":"2022-10-27T15:49:31.436158Z","shell.execute_reply.started":"2022-10-27T15:48:36.847772Z","shell.execute_reply":"2022-10-27T15:49:31.4349Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pydicom  ## bunu da yukari aldim bakalim ne oacak\nfrom pydicom.pixel_data_handlers.util import apply_voi_lut\n","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:49:31.441778Z","iopub.execute_input":"2022-10-27T15:49:31.442151Z","iopub.status.idle":"2022-10-27T15:49:31.647774Z","shell.execute_reply.started":"2022-10-27T15:49:31.442113Z","shell.execute_reply":"2022-10-27T15:49:31.646738Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip install ../input/timmso11/timm-0.6.11-py3-none-any.whl","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:49:31.653639Z","iopub.execute_input":"2022-10-27T15:49:31.655966Z","iopub.status.idle":"2022-10-27T15:50:08.763682Z","shell.execute_reply.started":"2022-10-27T15:49:31.655927Z","shell.execute_reply":"2022-10-27T15:50:08.762323Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"from fastai.basics import *\nfrom fastai.callback.all import *\nfrom fastai.vision.all import *\nfrom fastai.medical.imaging import *\n\nimport timm\n\nimport tqdm","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:08.76881Z","iopub.execute_input":"2022-10-27T15:50:08.771618Z","iopub.status.idle":"2022-10-27T15:50:13.359229Z","shell.execute_reply.started":"2022-10-27T15:50:08.771569Z","shell.execute_reply":"2022-10-27T15:50:13.357982Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pandas as pd\nfrom pathlib import Path\nimport numpy as np","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:13.364524Z","iopub.execute_input":"2022-10-27T15:50:13.367433Z","iopub.status.idle":"2022-10-27T15:50:13.375112Z","shell.execute_reply.started":"2022-10-27T15:50:13.36739Z","shell.execute_reply":"2022-10-27T15:50:13.373441Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"!pip uninstall albumentations -y","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:13.379855Z","iopub.execute_input":"2022-10-27T15:50:13.382505Z","iopub.status.idle":"2022-10-27T15:50:16.246803Z","shell.execute_reply.started":"2022-10-27T15:50:13.382412Z","shell.execute_reply":"2022-10-27T15:50:16.245488Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"pip install ../input/albumentations-1-3/albumentations-1.3.0-py3-none-any.whl","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:16.248249Z","iopub.execute_input":"2022-10-27T15:50:16.248654Z","iopub.status.idle":"2022-10-27T15:50:51.731192Z","shell.execute_reply.started":"2022-10-27T15:50:16.248616Z","shell.execute_reply":"2022-10-27T15:50:51.729947Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import albumentations as A\n","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:51.73312Z","iopub.execute_input":"2022-10-27T15:50:51.735997Z","iopub.status.idle":"2022-10-27T15:50:52.841314Z","shell.execute_reply.started":"2022-10-27T15:50:51.735954Z","shell.execute_reply":"2022-10-27T15:50:52.840167Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## this class makes it possible to use custom augmentations\nclass AlbumentationsTransform(DisplayedTransform):  #displayed transform fastai icinden galiba....\n    split_idx,order=0,2\n    def __init__(self, train_aug): store_attr()\n    \n    def encodes(self, img: PILImage):\n        aug_img = self.train_aug(image=np.array(img))['image']\n        return PILImage.create(aug_img)","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:52.849251Z","iopub.execute_input":"2022-10-27T15:50:52.851958Z","iopub.status.idle":"2022-10-27T15:50:52.861383Z","shell.execute_reply.started":"2022-10-27T15:50:52.851916Z","shell.execute_reply":"2022-10-27T15:50:52.860108Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#from torch.utils.data import Dataset, DataLoader\n#now define your augmentation\ndef get_aug_v4(p=1.0):\n    return A.Compose([\n        A.OneOf([\n            A.OpticalDistortion(p=0.3),\n            A.GridDistortion(p=.1),\n            A.PiecewiseAffine(p=0.5),\n        ], p=0.3),\n        A.OneOf([\n            A.HueSaturationValue(10,15,10),\n            A.CLAHE(clip_limit=2),\n            A.RandomBrightnessContrast(),            \n        ], p=0.5),\n        A.ElasticTransform(alpha=1, sigma=50, alpha_affine=50, \n                            interpolation=1, border_mode=4, always_apply=False, p=0.5)\n    ], p=p)\n","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:52.866277Z","iopub.execute_input":"2022-10-27T15:50:52.868922Z","iopub.status.idle":"2022-10-27T15:50:52.891816Z","shell.execute_reply.started":"2022-10-27T15:50:52.868883Z","shell.execute_reply":"2022-10-27T15:50:52.890808Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## oncelikle baseline submission sonuclarini olusturalim....\n- yeni gelen sonuclari buna ilave ederiz. patient_overall satirlarina","metadata":{}},{"cell_type":"code","source":"train_df = pd.read_csv(\"../input/rsna-2022-cervical-spine-fracture-detection/train.csv\")\nss = pd.read_csv(\"../input/rsna-2022-cervical-spine-fracture-detection/sample_submission.csv\")\ntest_df = pd.read_csv(\"../input/rsna-2022-cervical-spine-fracture-detection/test.csv\")\n## ss ile test_df study_idler tutmuyor.... bunlari ortustureyim...\nss","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:52.896896Z","iopub.execute_input":"2022-10-27T15:50:52.899515Z","iopub.status.idle":"2022-10-27T15:50:52.949143Z","shell.execute_reply.started":"2022-10-27T15:50:52.899478Z","shell.execute_reply":"2022-10-27T15:50:52.948275Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_df","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:52.9532Z","iopub.execute_input":"2022-10-27T15:50:52.955429Z","iopub.status.idle":"2022-10-27T15:50:52.970666Z","shell.execute_reply.started":"2022-10-27T15:50:52.955394Z","shell.execute_reply":"2022-10-27T15:50:52.969779Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## bunlari degistirmem lazim... cunku folder icindeki dcm'ler bu study idler degil...\n## en azindan commit sirasinda degil... submisisonda dogrular geliyro..","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:52.974729Z","iopub.execute_input":"2022-10-27T15:50:52.976963Z","iopub.status.idle":"2022-10-27T15:50:52.982354Z","shell.execute_reply.started":"2022-10-27T15:50:52.976923Z","shell.execute_reply":"2022-10-27T15:50:52.981448Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n## dedigim gibi,, sample submission row_idler ve test_idler duzgun gelmedigi icin\n## ilk submssion sirasinda bu sekilde yapabilirsin....\nif len(ss) == 3:\n    ss['row_id'] = ['1.2.826.0.1.3680043.22327_C1','1.2.826.0.1.3680043.25399_C1','1.2.826.0.1.3680043.5876_C1']\n    test_df['row_id'] = ['1.2.826.0.1.3680043.22327_C1','1.2.826.0.1.3680043.25399_C1','1.2.826.0.1.3680043.5876_C1']\n    test_df['StudyInstanceUID'] = ['1.2.826.0.1.3680043.22327','1.2.826.0.1.3680043.25399','1.2.826.0.1.3680043.5876']","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:52.987235Z","iopub.execute_input":"2022-10-27T15:50:52.988806Z","iopub.status.idle":"2022-10-27T15:50:53.000626Z","shell.execute_reply.started":"2022-10-27T15:50:52.98877Z","shell.execute_reply":"2022-10-27T15:50:52.999628Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Put more weight on positive predictions\ndef scale_up(q):\n    return 2*q/(1+q)\n\npredso = train_df.mean(numeric_only=True).map(scale_up).to_dict()\npredso","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:53.005061Z","iopub.execute_input":"2022-10-27T15:50:53.006325Z","iopub.status.idle":"2022-10-27T15:50:53.020978Z","shell.execute_reply.started":"2022-10-27T15:50:53.006289Z","shell.execute_reply":"2022-10-27T15:50:53.019915Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## yukaridakileri kabul etmedim... edebilirdim... sonuc ayni/benzer olurdu... .56 veriyor submission\n\n# predso['patient_overall'] = .65 ## .48 ile .57 verdi...\n# ## diger Cler icin de kendi oranlarini koyabilirsin... yukarida vardi\n# ## buradaki problem ...arti durumlar iki ile carpildigina gore patient overall artirdim....\n# predso['C1'] = 146/1873\n# predso['C2'] = 285/1734\n# predso['C3'] = 73/1946\n# predso['C4'] = 108/1911\n# predso['C5'] = 162/1857\n# predso['C6'] = 277/1742\n# predso['C7'] = 393/1626","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:53.024901Z","iopub.execute_input":"2022-10-27T15:50:53.027938Z","iopub.status.idle":"2022-10-27T15:50:53.03276Z","shell.execute_reply.started":"2022-10-27T15:50:53.027901Z","shell.execute_reply":"2022-10-27T15:50:53.031801Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## bu noktada submssion baseline hazir...","metadata":{}},{"cell_type":"code","source":"## tek yapacagim...patient_overall satirlarini guncellemek ve isim bitince de\n## >> ss.to_csv('submission.csv', index=False) yaparak gondermek\n## guncelleyecegim row idler: studyid_patient_overall","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:53.03432Z","iopub.execute_input":"2022-10-27T15:50:53.035608Z","iopub.status.idle":"2022-10-27T15:50:53.04552Z","shell.execute_reply.started":"2022-10-27T15:50:53.035572Z","shell.execute_reply":"2022-10-27T15:50:53.044531Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#asagida test rain yaptim.....","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:53.047071Z","iopub.execute_input":"2022-10-27T15:50:53.047769Z","iopub.status.idle":"2022-10-27T15:50:53.054994Z","shell.execute_reply.started":"2022-10-27T15:50:53.047733Z","shell.execute_reply":"2022-10-27T15:50:53.053702Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nimport pickle\nwith open ('../input/05ekim-bins/histscaled_bins_of41x9examples.pkl','rb') as handle:\n    bins = pickle.load(handle)\n\n#changes: patik changed to read from test_images from KAGGLEDIRECTORY!\ndef read_bulkdcm64(studi):   ## studi dedigim ilgili instance study id texti....\n#     patik = Path(f'../input/rsna-2022-cervical-spine-fracture-detection/train_images/{studi}')\n    patik = Path(f'../input/rsna-2022-cervical-spine-fracture-detection/test_images/{studi}')\n#     print(patik)\n    files = list(patik.glob('**/*.dcm'))\n    \n    ## MAX 64 FILE YAPTGIM YER BURASI... IS A HYPERPARAMETER ... DEGERLENDIR...\n    files = list(np.array(files)[::(len(files)//64+1)])\n    \n#     print(files)\n    dcmm =[x.dcmread() for x in files]\n    [x.zoom_to((512,512)) for x in dcmm if (x.Rows!=512 or x.Columns!=512)]\n    ## dikkat zoom yapmaaycagim... mask de zoom yapmam lazim.. bu seviyede problem....\n    ## dogrudan cikti alriim... sonra slice seviyesinde training sirasinda resize/zoom yaparim....\n    \n    \n    ## simdi bunlari pixel yapmadan once siralayayim...\n    ## sonra buna gore naming yaparim....\n    z_pos = np.array([float(d.ImagePositionPatient[-1]) for d in dcmm])#different from patients\n    \n    \n    datam= [np.array(x.windowed(*dicom_windows.spine_bone)) for x in dcmm] ## cunku tensor olarak cikariyor\n    datam_bone = np.asarray(datam)[np.argsort(-z_pos)]\n    datam_bone = (datam_bone * 255).astype(np.uint8)\n    \n    datam= [np.array(x.windowed(*dicom_windows.spine_soft)) for x in dcmm] ## cunku tensor olarak cikariyor\n    datam_soft = np.asarray(datam)[np.argsort(-z_pos)]\n    datam_soft = (datam_soft * 255).astype(np.uint8)\n    \n    datam= [np.array(x.hist_scaled(bins)) for x in dcmm]\n    datam_bins = np.asarray(datam)[np.argsort(-z_pos)]\n    datam_bins = (datam_bins * 255).astype(np.uint8)\n    \n    ## degisiklik: transpose mutlaka olmali!!!... SEGMENTATION TO PREDS BU SEKILDE TRAIN OLUR MU?\n    return [np.ascontiguousarray(np.array([x,y,z]).transpose(1,2,0)) for (x,y,z) in zip(datam_bone,datam_soft,datam_bins)]\n#     return [np.ascontiguousarray(np.array([x,y,z])) for (x,y,z) in zip(datam_bone,datam_soft,datam_bins)]\n\n    ## simdi bunlari sirala...\n","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:53.056745Z","iopub.execute_input":"2022-10-27T15:50:53.05744Z","iopub.status.idle":"2022-10-27T15:50:53.087746Z","shell.execute_reply.started":"2022-10-27T15:50:53.057405Z","shell.execute_reply":"2022-10-27T15:50:53.08681Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## burada en mantiklisi ....oncelikle study_id bazinda prediction yapmak...\n## bunun icin resimleri study id bazinda cekmek mantikli...\n# for i,study in test_df.\n# test_df = pd.read_csv('../input/rsna-2022-cervical-spine-fracture-detection/test.csv')\n# test_df['study_id'] = test_df.StudyInstanceUID.apply(lambda x: x.split('.')[-1])\n            ## study_id yapmaya gerek kalmadi.. cunku dogrudan study instance id ile girebilirim\n\n# test_ids = list(train_df.StudyInstanceUID.unique())\ntest_ids = list(test_df.StudyInstanceUID.unique())\n# print(test_ids)\n\n##bir de bir dict initiate edecegi....patient_overall sonuclarini alacak olan bir dict\np_results = {f'{x}_{y}':predso[y] for y in predso.keys() for x in test_ids}\nT_results = p_results.copy() ## bunu tree sonuclari icn kullanacagii... ve guncelleyecegim...\n# print(p_results)\n\n## bunu hardcode yaptim cunku buradaki test_images.. BUNA GEREK KALMADI CUNKU SS ICINDE DEGISTIRDIM\n# test_ids = ['1.2.826.0.1.3680043.22327','1.2.826.01.3680043.25399','1.2.826.0.1.3680043.5876'] ","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:53.09113Z","iopub.execute_input":"2022-10-27T15:50:53.092674Z","iopub.status.idle":"2022-10-27T15:50:53.104431Z","shell.execute_reply.started":"2022-10-27T15:50:53.092639Z","shell.execute_reply":"2022-10-27T15:50:53.103229Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## the models","metadata":{}},{"cell_type":"code","source":"###  this stays as a reference... nothing more...\n## but this was for classification models....\n\ndef get_xx(x):\n    return f\"../input/fork-of-22eylul-making-png-withexposure/pngfilessssssss/{x.file}.png\"\n\ndef get_yy(x):\n    return x.label","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:53.108266Z","iopub.execute_input":"2022-10-27T15:50:53.109477Z","iopub.status.idle":"2022-10-27T15:50:53.118599Z","shell.execute_reply.started":"2022-10-27T15:50:53.109427Z","shell.execute_reply":"2022-10-27T15:50:53.117641Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## segmentation learners\n\nlearn0 = load_learner('../input/22ekim-256segmetators/14ekim_kaggle_trained_01.pkl',cpu=False)\nlearn1 = load_learner('../input/22ekim-256segmetators/14ekim_kaggle_trained_02.pkl',cpu=False)\nlearn2 = load_learner('../input/22ekim-256segmetators/14ekim_kaggle_trained_03.pkl',cpu=False)","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:50:53.120215Z","iopub.execute_input":"2022-10-27T15:50:53.1209Z","iopub.status.idle":"2022-10-27T15:51:02.75903Z","shell.execute_reply.started":"2022-10-27T15:50:53.120866Z","shell.execute_reply":"2022-10-27T15:51:02.757802Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"import pickle\nwith open ('../input/27ekim-treemodellerim/modellerim.pickle', 'rb') as handle:\n    foldmodels = pickle.load(handle)","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:51:02.763879Z","iopub.execute_input":"2022-10-27T15:51:02.764489Z","iopub.status.idle":"2022-10-27T15:51:03.462723Z","shell.execute_reply.started":"2022-10-27T15:51:02.764434Z","shell.execute_reply":"2022-10-27T15:51:03.461533Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"foldmodels","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:51:03.46783Z","iopub.execute_input":"2022-10-27T15:51:03.468224Z","iopub.status.idle":"2022-10-27T15:51:03.492397Z","shell.execute_reply.started":"2022-10-27T15:51:03.468188Z","shell.execute_reply":"2022-10-27T15:51:03.491517Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## CONVNEXT dls farkli bu nedenle tek dls okuma olmuyordu....\nlearn0c = load_learner('../input/24ekim-subs1-2/24ekim_convnext_224_aug3_132remove_lossmetric1_089_finetune.pkl',cpu=False)\nlearn1c = load_learner('../input/25ekim-convnext-folds/2ekim_convnext_224_aug3_fulldata_fold1.pkl',cpu=False)\nlearn2c = load_learner('../input/27ekim-convnext-tiny-fold2/26ekim_convnext_224_fold2_std_rerun.pkl',cpu=False)\nlearn3c = load_learner('../input/25ekim-convnext-folds/2ekim_convnext_224_aug3_fulldata_fold3_loss_valid_los_finetune.pkl',cpu=False)\nlearn4c = load_learner('../input/25ekim-convnext-folds/2ekim_convnext_224_aug3_fulldata_fold4_loss_valid_los.pkl',cpu=False)\n\n# swins\nlearn0s = load_learner('../input/25ekimswin012/25ekim_swin_fold0_finetune.pkl',cpu=False)\nlearn1s = load_learner('../input/25ekimswin012/25ekim_swin_fold1_finetune.pkl',cpu=False)\nlearn2s = load_learner('../input/25ekimswin012/25ekim_swin_fold2_follow_validloss.pkl',cpu=False)\nlearn3s = load_learner('../input/26ekim-mymodels/25ekim_swin_fold3_std_finetune.pkl',cpu=False)\nlearn4s = load_learner('../input/26ekim-mymodels/25ekim_swin_fold4_std_finetune.pkl',cpu=False)\n\n##vits\nlearn0v = load_learner('../input/25ekimvit0123/25ekim_vit_fold0.pkl',cpu=False)\nlearn1v = load_learner('../input/26ekim-mymodels/25ekim_vit_fold1.pkl',cpu=False)\nlearn2v = load_learner('../input/25ekimvit0123/25ekim_vit_fold2weightedloss_finetune.pkl',cpu=False)\nlearn3v = load_learner('../input/25ekimvit0123/25ekim_vit_fold3std_finetune.pkl',cpu=False)\nlearn4v = load_learner('../input/26ekim-missingmodels/25ekim_vit_fold4std.pkl',cpu=False)\n\n# # ## larger models\n# learn0cc = load_learner('../input/26ekim-mymodels/26ekim_convnextBASE_fold0_std.pkl',cpu=False)\n\n# learn1cc = load_learner('../input/27ekim-convmodels/26ekim_convnextBASE_fold1_std_finetune.pkl',cpu=False)\n# learn2cc = load_learner('../input/26ekim-convbasexfold2/26ekim_convnextBASE_fold2_std_finetune.pkl',cpu=False)\n\n# learn3cc = load_learner('../input/26ekim-mymodels/26ekim_convnextBASE_fold3_std_finetune.pkl',cpu=False)\n# learn4cc = load_learner('../input/26ekim-mymodels/26ekim_convnextBASE_fold4_std_finetune.pkl',cpu=False)\n# learn4bb = load_learner('../input/26ekim-mymodels/26ekim_beitbase_fold4_std.pkl',cpu=False)\n\n# # ## other models\n\n# learn4reg = load_learner('../input/26ekim-lowfalse-models/26ekim_regnety_006_fold4_bline_finetune.pkl', cpu =False)\n# learn4res = load_learner('../input/26ekim-lowfalse-models/26ekim_resnetrs50_fold4_bline_finetune.pkl', cpu=False)","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:51:03.496545Z","iopub.execute_input":"2022-10-27T15:51:03.498795Z","iopub.status.idle":"2022-10-27T15:51:24.695009Z","shell.execute_reply.started":"2022-10-27T15:51:03.498757Z","shell.execute_reply":"2022-10-27T15:51:24.693821Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## YUKARIDAN ASAGIDAN YUZDE5 ATABILIRSIN HIZLANDIRMAK ICIN...\n##256 ILE SEGMENT EDIP. SONRA KESINDEXLERI 2 ILE CARPARAK RESIMLERI KESEBILIRSIN...\n\n## cikista predictionlar guncellemek icin bunlari tut...\nallfolders = []\n\n## tree modeller icin eklendi.....\nsonuclar ={}\ntree_patient_overall = []\n\nfor folder in tqdm.tqdm(test_ids):\n    array64luk = read_bulkdcm64(folder)  ## BUNU SEGMENTATION get_preds'e SOKACAGIM... TRANSPOSELU MU SUZ MU GELSIN???\n    \n    test_dl = learn0.dls.test_dl(array64luk)  # bir tanesinin test_dl i gibi tanimlasam yeter,, hepsi ayni\n#     break\n    preds0   = learn0.get_preds(dl = test_dl)\n    preds1   = learn1.get_preds(dl = test_dl)\n    preds2   = learn2.get_preds(dl = test_dl)\n    \n    preds    = preds0[0] + preds1[0] + preds2[0]\n    preds     = torch.argmax(preds,dim = 1)  ## dim 1 is class dimension\n    preds     = preds.cpu().numpy().astype(np.uint8)\n    \n    counts = [np.unique(x,return_counts=True) for x in preds]\n    counts = [list(zip(z[0],z[1])) for z in counts]\n    counts = [(x,y[1:]) for (x,y) in enumerate(counts) if len(y)!=1]\n    counts = [(m[0],m[1][np.argmax([x[1] for x in m[1]])]) for m in counts]\n    counts = [x for x in counts if (x[1][0]!=8 and x[1][1]>250)]\n\n    counts_x = []\n    maxim = 1\n    for x in counts:\n        if x[1][0]>=maxim:\n            maxim = x[1][0]\n            counts_x.append(x)\n\n    indexes = [x[0] for x in counts_x]\n    hangivertebre = [x[1][0] for x in counts_x]\n    \n    \n    \n    values = [1,2,3,4,5,6,7]\n    newlist = [[y[0] for y in counts_x if y[1][0]==x] for x in values]\n    newlist = [sorted([(y[0],y[1]) for y in counts_x if y[1][0]==x], key=lambda km:km[1][1], reverse=True) for x in values]\n    seqclsf_list = [sorted(x,key=lambda y:y[0]) for x in newlist]\n\n    predsx = preds[indexes]\n    array64lukx = np.array(array64luk)[indexes]\n    predsx[predsx==8]=0\n    predsx[predsx!=0]=1\n    \n    whereabouts = np.where(predsx==1)\n    kes_indexes = [np.where(x==1) for x in predsx]\n    to_clsf_pngs = [xx[np.min(yy[0])*2:np.max(yy[0])*2+1,np.min(yy[1])*2:np.max(yy[1])*2+1] for (xx,yy) in zip(array64lukx,kes_indexes)]\n    \n    ## 0 vit 1 swin... asagida 2 de convnext olsun... convnext192 o nedenle ayri gayri oldu\n    ## normal sartlarda tek yapsan daha iyi olur... hepsi aug2 ve 224 mesela\n    test_dl = learn0c.dls.test_dl(to_clsf_pngs)\n    \n    preds0c, _  = learn0c.get_preds(dl=test_dl)\n#     sonuclar['C_0'] = preds0c[:,1]\n    preds1c, _  = learn1c.get_preds(dl=test_dl)\n#     sonuclar['C_1'] = preds1c[:,1]\n    preds2c, _  = learn2c.get_preds(dl=test_dl)\n#     sonuclar['C_2'] = preds2c[:,1]\n    preds3c, _  = learn3c.get_preds(dl=test_dl)\n#     sonuclar['C_3'] = preds3c[:,1]\n    preds4c, _  = learn4c.get_preds(dl=test_dl)\n#     sonuclar['C_4'] = preds4c[:,1]\n    sonuclar['C_0'] = (preds0c[:,1] + preds1c[:,1] + preds2c[:,1] + preds3c[:,1] + preds4c[:,1])/5\n\n    preds0s, _  = learn0s.get_preds(dl=test_dl)\n#     sonuclar['S_0'] = preds0s[:,1]\n    preds1s, _  = learn1s.get_preds(dl=test_dl)\n#     sonuclar['S_1'] = preds1s[:,1]\n    preds2s, _  = learn2s.get_preds(dl=test_dl)\n#     sonuclar['S_2'] = preds2s[:,1]\n    preds3s, _  = learn3s.get_preds(dl=test_dl)\n#     sonuclar['S_3'] = preds3s[:,1]\n    preds4s, _  = learn4s.get_preds(dl=test_dl)\n#     sonuclar['S_4'] = preds4s[:,1]\n    sonuclar['S_0'] = (preds0s[:,1] + preds1s[:,1] + preds2s[:,1] + preds3s[:,1] + preds4s[:,1])/5\n\n    preds0v, _  = learn0v.get_preds(dl=test_dl)\n#     sonuclar['V_0'] = preds0v[:,1]\n    preds1v, _  = learn1v.get_preds(dl=test_dl)\n#     sonuclar['V_1'] = preds1v[:,1]\n    preds2v, _  = learn2v.get_preds(dl=test_dl)\n#     sonuclar['V_2'] = preds2v[:,1]\n    preds3v, _  = learn3v.get_preds(dl=test_dl)\n#     sonuclar['V_3'] = preds3v[:,1]\n    preds4v, _  = learn4v.get_preds(dl=test_dl)\n#     sonuclar['V_4'] = preds4v[:,1]\n    sonuclar['V_0'] = (preds0v[:,1] + preds1v[:,1] + preds2v[:,1] + preds3v[:,1] + preds4v[:,1])/5\n        \n    ## fold ici median...\n    preds0 = preds0c[:,1]\n    preds1 = preds1c[:,1]\n    preds2 = preds2c[:,1]\n    preds3 = preds3c[:,1]\n    preds4 = preds4c[:,1]\n\n  \n\n    ## foldlar arasi weighted mean..\n    predi = (np.mean(np.vstack((preds0,preds1,preds2,preds3,preds4)),axis=0)  + \n            np.max(np.vstack((preds0,preds1,preds2,preds3,preds4)),axis=0)) /2\n    \n    \n    predika_dict = {x[2]:x[0] for x in list(zip(predi,hangivertebre,indexes))}\n    \n    ## strateji: per vertebre ortalama,,, patientoverall is max of all vertebres...\n    per_vertebre = []\n    for vertebre in newlist:\n        if vertebre:  ## bazen bazi vertebreleri icn birsey bulamayabilir!!!! bos gecerse kalsin\n            average = np.max(list(map(lambda x: predika_dict[x[0]],vertebre )))\n            p_results[f'{folder}_C{vertebre[0][1][0]}']= average\n            per_vertebre.append(average)\n    if per_vertebre:  ## belki hic vertebre olmayacak... o zaman bos gecerim....\n        p_results[f'{folder}_patient_overall'] = max(per_vertebre)\n    \n    \n    ## tree issues now\n#     treekeys = ['C']\n    treekeys = ['C','S','V']\n    ## ilgili modelleri cek..........\n    ## C modelleri icin ciktilari bir kere yapacaksin...\n    predikasyon = []\n    xx_icin = []\n    for (j,key) in enumerate(treekeys):\n        ilgili_modeller = [y for (x,y) in foldmodels.items() if x.split('_')[0]==key]\n        ilgili_sonuclar = [(y,x) for (x,y) in sonuclar.items() if x.split('_')[0]==key]\n        ## sonuclari birbirlerinin uzeirne eklemek icin\n        for i,(predi,kama) in enumerate(ilgili_sonuclar):\n            ##kama ile 0 ise .17 1 ise .34 2 ise .51 3 ise .68 4 ise .85 inputtaki son column\n            kama = (int(kama.split('_')[1]) + 1) * .17\n            predika_dict = {x[2]:x[0] for x in list(zip(predi,hangivertebre,indexes))}\n            ## strateji: per vertebre ortalama,,, patientoverall is max of all vertebres...\n            per_vertebre = []\n            for vertebre in newlist:\n                if vertebre:  ## bazen bazi vertebreleri icn birsey bulamayabilir!!!! bos gecerse kalsin\n                    average = np.max(list(map(lambda x: predika_dict[x[0]],vertebre )))\n                    T_results[f'{folder}_C{vertebre[0][1][0]}']= average\n                    per_vertebre.append(average)\n#             if per_vertebre:  ## belki hic vertebre olmayacak... o zaman bos gecerim....\n#                 T_results[f'{folder}_patient_overall'] = max(per_vertebre)\n    \n            input_C =np.array([[T_results[f'{folder}_C1'], T_results[f'{folder}_C2'],T_results[f'{folder}_C3'],\n                      T_results[f'{folder}_C4'], T_results[f'{folder}_C5'],T_results[f'{folder}_C6'],\n                      T_results[f'{folder}_C7'],kama]]) ## ttwo d yaptim oyle istiyor..\n            ##ya da input C olarak birlestir sonra tek seferde...\n            if i == 0: sokak = input_C\n            else: sokak = np.concatenate((sokak,input_C))\n                \n        \n        if key =='C':predikasyon_C = np.max([si[1] for km in ilgili_modeller for si in km.predict_proba(sokak)])\n        \n        if key =='S':predikasyon_S = np.max([si[1] for km in ilgili_modeller for si in km.predict_proba(sokak)])\n        if key =='V':predikasyon_V = np.max([si[1] for km in ilgili_modeller for si in km.predict_proba(sokak)])\n\n        if j==0: xx_icin = sokak[:,:-1]\n        elif j==1: xx_icin = np.concatenate((xx_icin,sokak[:,:-1]),axis = 1)\n        else: xx_icin = np.concatenate((xx_icin,sokak),axis = 1)\n        \n        ## biri alaaksin yoksa olmaz....\n        \n    ilgili_modeller = [y for (x,y) in foldmodels.items() if x.split('_')[0]=='XX']\n    predikasyon_XX = np.max([si[1] for km in ilgili_modeller for si in km.predict_proba(xx_icin)])\n    #simdi predikasyon icinde bir seyler yap.. mesela mean ya da medyan\n    predikasyon = [predikasyon_C,predikasyon_S,predikasyon_V,predikasyon_XX]\n    \n    predikasyon = np.average(predikasyon, weights =[3,2,1,5]) ## sub1\n#     predikasyon = np.max(predikasyon) ## sub1\n    \n    tree_patient_overall.append(predikasyon)\n#     tree_patient_overall.append(np.mean(sorted(predikasyon,reverse=True)[:3]))\n#     tree_patient_overall.append(np.max(predikasyon))...##05\n    allfolders.append(folder)\n    \n#     break\n","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:51:24.700942Z","iopub.execute_input":"2022-10-27T15:51:24.703741Z","iopub.status.idle":"2022-10-27T15:52:30.030664Z","shell.execute_reply.started":"2022-10-27T15:51:24.703699Z","shell.execute_reply":"2022-10-27T15:52:30.028794Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"[p_results.update({f'{folder}_patient_overall':max(x,p_results[f'{folder}_patient_overall']) }) for (folder,x) in zip(allfolders,tree_patient_overall)]\n# [p_results.update({f'{folder}_patient_overall':(x+p_results[f'{folder}_patient_overall'])/2 }) for (folder,x) in zip(allfolders,tree_patient_overall)]","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:54:44.929608Z","iopub.execute_input":"2022-10-27T15:54:44.930228Z","iopub.status.idle":"2022-10-27T15:54:44.942532Z","shell.execute_reply.started":"2022-10-27T15:54:44.930184Z","shell.execute_reply":"2022-10-27T15:54:44.941279Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ss['fractured'] = ss['row_id'].map(p_results)","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:52:30.077646Z","iopub.status.idle":"2022-10-27T15:52:30.078772Z","shell.execute_reply.started":"2022-10-27T15:52:30.078516Z","shell.execute_reply":"2022-10-27T15:52:30.078541Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ss.head()","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:52:30.082431Z","iopub.status.idle":"2022-10-27T15:52:30.083617Z","shell.execute_reply.started":"2022-10-27T15:52:30.083306Z","shell.execute_reply":"2022-10-27T15:52:30.083356Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"ss.to_csv('submission.csv', index=False)\n","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:52:30.086138Z","iopub.status.idle":"2022-10-27T15:52:30.08728Z","shell.execute_reply.started":"2022-10-27T15:52:30.087015Z","shell.execute_reply":"2022-10-27T15:52:30.087041Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## submit etmeden once internet off olacak sekilde libs yuklemen lazim.. timm and fastai....","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:52:30.09034Z","iopub.status.idle":"2022-10-27T15:52:30.091496Z","shell.execute_reply.started":"2022-10-27T15:52:30.091197Z","shell.execute_reply":"2022-10-27T15:52:30.091222Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"## utulity code","metadata":{}},{"cell_type":"code","source":"# ## bunu kullanarak bir dict yapacagim....icinde tum probabilityler olacak\n# test_ids = test_df.StudyInstanceUID.unique()\n# test_ids","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:52:30.092761Z","iopub.status.idle":"2022-10-27T15:52:30.100147Z","shell.execute_reply.started":"2022-10-27T15:52:30.09986Z","shell.execute_reply":"2022-10-27T15:52:30.099886Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# {f'{x}_{y}':preds[y] for y in preds.keys() for x in test_ids}","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:52:30.101452Z","iopub.status.idle":"2022-10-27T15:52:30.102659Z","shell.execute_reply.started":"2022-10-27T15:52:30.10238Z","shell.execute_reply":"2022-10-27T15:52:30.102406Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# ss.loc[ss['row_id']=='1.2.826.0.1.3680043.10454_C1','fractured']=.23\n# # df1.loc[df1['stream'] == 2, 'feat'] = 10\n# # boyle yapmaktansa... oncelikle bu sonuclari bir dict icine at.. sonra map to ss dataframe\n# p_overall={f'{x}_patient_overall':.1 for x in test_ids}","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:52:30.103909Z","iopub.status.idle":"2022-10-27T15:52:30.10503Z","shell.execute_reply.started":"2022-10-27T15:52:30.104764Z","shell.execute_reply":"2022-10-27T15:52:30.10479Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# max(np.convolve(preds[:,1],np.ones(5),'valid')/5)","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:52:30.106314Z","iopub.status.idle":"2022-10-27T15:52:30.10766Z","shell.execute_reply.started":"2022-10-27T15:52:30.107378Z","shell.execute_reply":"2022-10-27T15:52:30.107405Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# preds[:,1] ## gercek probabilite bunlar....","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:52:30.108963Z","iopub.status.idle":"2022-10-27T15:52:30.110098Z","shell.execute_reply.started":"2022-10-27T15:52:30.10983Z","shell.execute_reply":"2022-10-27T15:52:30.109855Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"","metadata":{}},{"cell_type":"code","source":"","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## test_dl olarak dogrudan filepath de verebilirsin....\n## tabii eger filelar png olarak kaydedilmis olsaydi\n## ya da buradaki gibi dogrudan modele giren formatta da olabilir\n## daha dogrusu: file ile okudugun formatta...\n","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:52:30.118325Z","iopub.status.idle":"2022-10-27T15:52:30.119448Z","shell.execute_reply.started":"2022-10-27T15:52:30.119169Z","shell.execute_reply":"2022-10-27T15:52:30.119194Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# tta_preds,_ = fracture_learner.tta(dl=test_dl)\n# predso, _ = fracture_learner.get_preds(dl=test_dl) ## eger tta yapmak istemezsen\n# preds = [fracture_learner.predict(x) for x in allinfo] ## teker teker ve detayli almak istersen\n","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:52:30.120322Z","iopub.status.idle":"2022-10-27T15:52:30.121Z","shell.execute_reply.started":"2022-10-27T15:52:30.120738Z","shell.execute_reply":"2022-10-27T15:52:30.120762Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"## simdi ","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:52:30.122995Z","iopub.status.idle":"2022-10-27T15:52:30.124162Z","shell.execute_reply.started":"2022-10-27T15:52:30.123895Z","shell.execute_reply":"2022-10-27T15:52:30.123921Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# s = time.time()\n# preds = [fracture_learner.predict(x) for x in allinfo]\n# print(time.time()-s)\n\n## LEARN.PREDICT CIKTISI BIRAZ DAHA DETAYLI..\n#  [('False', TensorBase(0), TensorBase([0.9876, 0.0124])),\n","metadata":{"execution":{"iopub.status.busy":"2022-10-27T15:52:30.125483Z","iopub.status.idle":"2022-10-27T15:52:30.126621Z","shell.execute_reply.started":"2022-10-27T15:52:30.126342Z","shell.execute_reply":"2022-10-27T15:52:30.126367Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}