<jupyter_start><jupyter_text>VGG-16学習済みモデルのDL<jupyter_code># 学習済みモデルのDL
use_pretrained = True
net = models.vgg16(pretrained=use_pretrained)
# 推論モードに設定
net.eval()
print(net)<jupyter_output>VGG(
  (features): Sequential(
    (0): Conv2d(3, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (1): ReLU(inplace=True)
    (2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (3): ReLU(inplace=True)
    (4): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (5): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (6): ReLU(inplace=True)
    (7): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (8): ReLU(inplace=True)
    (9): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False)
    (10): Conv2d(128, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (11): ReLU(inplace=True)
    (12): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (13): ReLU(inplace=True)
    (14): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))
    (15): ReLU(inplace=True)
    (16): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1[...]<jupyter_text>入力画像の前処理クラス作成（OpenCV）<jupyter_code>class BaseTransform:
    def __init__(self, resize, mean, std):
        self.base_transform = transforms.Compose([
            transforms.ToPILImage(),  # OpenCVで読み込んだnumpy配列をPILに変換
            transforms.Resize(resize),  # 短辺の長さ
            transforms.CenterCrop(resize),  # 画像の中央を resie x resizeで切り取り
            transforms.ToTensor(),  # Torchテンソルに変
            transforms.Normalize(mean, std)  # 色情報の標準化
        ])
    
    def __call__(self, img):
        return self.base_transform(img)
# 前処理の動確

# 画像読み込み
image_file_path = base_dir + './data/goldenretriever-3724972_640.jpg'
# img = Image.open(image_file_path)
img = cv2.cvtColor(cv2.imread(image_file_path), cv2.COLOR_BGR2RGB)
# 2. 元の画像の表示
plt.imshow(img)
plt.show()
# 3. 画像の前処理と処理済み画像の表示
resize = 224
mean = (0.485, 0.456, 0.406)
std = (0.229, 0.224, 0.225)
transform = BaseTransform(resize, mean, std)
img_transformed = transform(img)  # torch.Size([3, 224, 224])

# (色、高さ、幅)を (高さ、幅、色)に変換し、0-1に値を制限して表示
img_transformed = img_transformed.numpy().transpose((1, 2, 0))
img_transformed = np.clip(img_transformed, 0, 1)
plt.imshow(img_transformed)
plt.show()
# ILSVRCのラベル情報をロードし辞意書型変数を生成します
ILSVRC_class_index = json.load(open(base_dir + './data/imagenet_class_index.json', 'r'))
ILSVRC_class_index
# 出力結果からラベルを予測する後処理クラス
class ILSVRCPredictor():

    def __init__(self, class_index):
        self.class_index = class_index

    def predict_max(self, out):
        """
        確率最大のILSVRCのラベル名を取得する。

        Parameters
        ----------
        out : torch.Size([1, 1000])
            Netからの出力。

        Returns
        -------
        predicted_label_name : str
            最も予測確率が高いラベルの名前
        """
        maxid = np.argmax(out.detach().numpy())
        predicted_label_name = self.class_index[str(maxid)][1]

        return predicted_label_name

# ILSVRCPredictorのインスタンスを生成します
predictor = ILSVRCPredictor(ILSVRC_class_index)
# 入力画像を読み込む
img = cv2.cvtColor(cv2.imread(image_file_path), cv2.COLOR_BGR2RGB)

# 前処理の後、バッチサイズの次元を追加する
transform = BaseTransform(resize, mean, std)  # 前処理クラス作成
img_transformed = transform(img)  # torch.Size([3, 224, 224])
inputs = img_transformed.unsqueeze_(0)  # torch.Size([1, 3, 224, 224])
# モデルに入力し、モデル出力をラベルに変換する
out = net(inputs)  # torch.Size([1, 1000])
result = predictor.predict_max(out)

# 予測結果を出力する
print("入力画像の予測結果：", result)<jupyter_output>入力画像の予測結果： golden_retriever
{'fraction_non_alphanumeric': 0.15734072022160664, 'fraction_numerical': 0.059833795013850416, 'mean_word_length': 4.1365576102418204, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 0, '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': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '547302', 'license': 'MIT', 'n_tokens_mistral': 1766, 'n_tokens_neox': 1639, 'n_words': 247, 'path': '1_image_classification/_1-1_load_vgg.ipynb', 'repo_name': 'TakeshiKishita/pytorch_advanced', 'size': '3610'}