<jupyter_start><jupyter_text>Computer vision part 1[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/m12sl/dl-hse-2021/blob/master/05-computer-vision-1/seminar.ipynb)- тонкости препроцессинга (читать, ресайзить, вот это вот все)- CAM (class activation map) из предобученной сетки<jupyter_code>%matplotlib inline
import matplotlib.pyplot as plt

import cv2
import numpy as np
import torch
import torch.nn as nn
import torch.nn.functional as F
import torchvision
import json

from tqdm.auto import tqdm

with open("imagenet_1k.json") as fin:
    clsidx = json.load(fin)<jupyter_output><empty_output><jupyter_text>Готовые сетки`torchvision.models`Возьмите любую картинку и попробуйте прогнать ее через сеть.Например из картиночной выдачи![из картиночной выдачи](https://sobakibalabaki.com/wp-content/uploads/2017/06/dog-and-horsejpg.jpg)<jupyter_code>! wget https://sobakibalabaki.com/wp-content/uploads/2017/06/dog-and-horsejpg.jpg -O doge-and-horsy.jpg<jupyter_output><empty_output><jupyter_text>Предобработка картинокЗагрузите картинку и предобработайте ее для подачи в сеть<jupyter_code>def load(path):
    return cv2.imread(path)

img = load("./doge-and-horsy.jpg")

plt.imshow(img)
net = torchvision.models.resnet50(pretrained=True)
net<jupyter_output><empty_output><jupyter_text>InferenceРазберитесь с ошибками и получите предикт :)Проверьте правильность по `clsidx`.<jupyter_code>with torch.no_grad():
    x = np.transpose(img, [2, 0, 1])[None, ...]
    out = net(torch.tensor(x))
    print(out.argmax(dim=-1))<jupyter_output><empty_output><jupyter_text>**NB: все сетки в torchvision проучены нормализацией входных картинок:**```mean = [0.485, 0.456, 0.406]std = [0.229, 0.224, 0.225]```  Здесь делаем CAM из готовой сеткиНадо достать тензор перед GAP, обработать его с помощью финального FC-слоя и получить карту классов :)<jupyter_code>net = torchvision.models.resnet50(pretrained=True)

def hook_fn(module, inp, out):
    pass

net._modules.get("avgpool").register_forward_hook(cam_hook)
net.eval()
out = net(torch.tensor(x)).detach().numpy()

<your code><jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12725590004627488, 'fraction_numerical': 0.026376677464136973, 'mean_word_length': 6.206666666666667, 'pattern_counts': {'":': 0, '<': 22, '<?xml version=': 0, '>': 22, 'https://': 4, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '664243', 'license': 'Apache-2.0', 'n_tokens_mistral': 913, 'n_tokens_neox': 912, 'n_words': 157, 'path': '05-computer-vision-1/seminar.ipynb', 'repo_name': 'georbuz/dl-hse-2021', 'size': '2161'}