{"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":"timm_path = \"../input/timm-pytorch-image-models/pytorch-image-models-master\"\nimport sys\nsys.path.append(timm_path)\nimport timm\n\nimport numpy as np\nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport sklearn\nimport os\nfrom tqdm.notebook import tqdm\n\nimport cv2\nimport albumentations as A\nfrom albumentations.pytorch import ToTensorV2\n\nimport torch\nimport torch.nn as nn\nimport torch.nn.functional as F\nfrom torch.utils.data import Dataset,DataLoader\nfrom torch import optim\n\nimport warnings\nwarnings.filterwarnings('ignore')\n\ndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# pretrained_model from beloved timm\n# i am using effb3_ns , you can use your fav model instead\nmodel=timm.create_model('tf_efficientnet_b3_ns', pretrained=False) # set pretrained=True to use the pretrained weights\nnum_features = model.classifier.in_features\nmodel.classifier = nn.Linear(num_features, 1)","metadata":{"execution":{"iopub.status.busy":"2021-07-16T06:31:45.032164Z","iopub.execute_input":"2021-07-16T06:31:45.032678Z","iopub.status.idle":"2021-07-16T06:31:45.359622Z","shell.execute_reply.started":"2021-07-16T06:31:45.032641Z","shell.execute_reply":"2021-07-16T06:31:45.358497Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nclass Model_3d_2_2d(nn.Module):\n    def __init__(self, model , input_channels = 3):\n        super().__init__()\n        self.model = model\n        self.cnn3d = nn.Conv3d( input_channels , 1 , 3)\n        self.pool = nn.AdaptiveAvgPool3d((144))\n        self.cnn2d = nn.Conv2d(144 , 3 , 3 , stride = 1 , padding = 1)\n    \n    def forward(self , x):\n        x = self.cnn3d(x)\n        x = x.squeeze(1)\n        x = self.pool(x) #changing Depth , width , height to 144\n        x = self.cnn2d(x)\n        x = self.model(x)\n        \n        return x\n        ","metadata":{"execution":{"iopub.status.busy":"2021-07-16T06:31:45.361907Z","iopub.execute_input":"2021-07-16T06:31:45.36223Z","iopub.status.idle":"2021-07-16T06:31:45.370173Z","shell.execute_reply.started":"2021-07-16T06:31:45.3622Z","shell.execute_reply":"2021-07-16T06:31:45.368942Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# let input size be (1 , 3 , 300 ,  256 ,266)\n# where channel length is 3 , depth is 300 , height and width is 256\nm = Model_3d_2_2d(model ,3 )\nip = torch.randn(1 , 3 ,300 ,  256 ,266)\nop = m(ip)\nop.shape\n","metadata":{"execution":{"iopub.status.busy":"2021-07-16T06:31:45.372043Z","iopub.execute_input":"2021-07-16T06:31:45.372512Z","iopub.status.idle":"2021-07-16T06:31:47.666155Z","shell.execute_reply.started":"2021-07-16T06:31:45.37247Z","shell.execute_reply":"2021-07-16T06:31:47.665108Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}