From 75e875544d2b59f626b9ece69c329bf230ce2939 Mon Sep 17 00:00:00 2001 From: Jael Gu Date: Thu, 16 Jun 2022 18:30:20 +0800 Subject: [PATCH] Add SWAG Signed-off-by: Jael Gu --- README.md | 98 ++++++++++++++++++++++++- __init__.py | 19 +++++ requirements.txt | 5 ++ result1.png | Bin 0 -> 4014 bytes result2.png | Bin 0 -> 83277 bytes swag.py | 181 +++++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 302 insertions(+), 1 deletion(-) create mode 100644 __init__.py create mode 100644 requirements.txt create mode 100644 result1.png create mode 100644 result2.png create mode 100644 swag.py diff --git a/README.md b/README.md index c6aff13..afdb943 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,98 @@ -# swag +# Image Embedding with SWAG + +*author: [Jael Gu](https://github.com/jaelgu* + +
+ +## Description + +An image embedding operator generates a vector given an image. +This operator extracts features for image with pretrained [SWAG](https://github.com/facebookresearch/SWAG) models from [Torch Hub](https://pytorch.org/docs/stable/hub.html). +SWAG implements models from the paper [Revisiting Weakly Supervised Pre-Training of Visual Perception Models](https://arxiv.org/abs/2201.08371). +To achieve higher accuracy in image classification, SWAG uses hashtags to perform weakly supervised learning instead of fully supervised pretraining with image class labels. + +
+ +## Code Example + +Load an image from path './towhee.jpg' +and use the pretrained SWAG model 'vit_b16_in1k' to generate an image embedding. + + *Write the pipeline in simplified style:* + +```python +import towhee + +( + towhee.glob('./towhee.jpg') + .image_decode() + .image_embedding.swag(model_name='vit_b16_in1k') + .show() +) +``` + + +*Write a same pipeline with explicit inputs/outputs name specifications:* + +```python +import towhee + +( + towhee.glob['path']('./towhee.jpg') + .image_decode['path', 'img']() + .image_embedding.swag['img', 'vec'](model_name='vit_b16_in1k') + .select['img', 'vec']() + .show() +) +``` + + +
+ +## Factory Constructor + +Create the operator via the following factory method + +***image_embedding.swag(model_name='vit_b16_in1k', skip_preprocess=False)*** + +**Parameters:** + +***model_name:*** *str* + +The model name in string. The default value is "vit_b16_in1k". +Supported model names: +- vit_b16_in1k +- vit_l16_in1k +- vit_h14_in1k +- regnety_16gf_in1k +- regnety_32gf_in1k +- regnety_128gf_in1k + +***skip_preprocess:*** *bool* + +The flag to control whether to skip image preprocess. +The default value is False. +If set to True, it will skip image preprocessing steps (transforms). +In this case, input image data must be prepared in advance in order to properly fit the model. + +
+ +## Interface + +An image embedding operator takes a towhee image as input. +It uses the pre-trained model specified by model name to generate an image embedding in ndarray. + +**Parameters:** + +***img:*** *towhee.types.Image (a sub-class of numpy.ndarray)* + +The decoded image data in numpy.ndarray. + + + +**Returns:** *numpy.ndarray* + +The image embedding extracted by model. + + diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..2308f3b --- /dev/null +++ b/__init__.py @@ -0,0 +1,19 @@ +# Copyright 2021 Zilliz. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +from .swag import Swag + + +def swag(**kwargs): + return Swag(**kwargs) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e56a6e2 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,5 @@ +numpy +pillow +towhee>=0.6.1 +torch>=1.8.0 +torchvision>=0.9.0 diff --git a/result1.png b/result1.png new file mode 100644 index 0000000000000000000000000000000000000000..78d05c6bcd6247201e5d74c8383891e9290a3e3d GIT binary patch literal 4014 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 UFC@c7!TbZH{JNRi%qQ3;_bAiV|w=^_FG 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 z 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 None: + super().__init__() + self.device = 'cuda' if torch.cuda.is_available() else 'cpu' + + self.skip_tfms = skip_preprocess + self.tfms = self.get_transforms(model_name) + + self.model_name = model_name + self.model = torch.hub.load("facebookresearch/swag", model=model_name) + self.model.to(self.device) + self.model.eval() + self.extract_features = FeatureExtractor(self.model) + + @arg(1, to_image_color('RGB')) + def __call__(self, img: towhee._types.Image) -> numpy.ndarray: + img = PILImage.fromarray(img.astype('uint8'), 'RGB') + if not self.skip_tfms: + img = self.tfms(img).unsqueeze(0) + img = img.to(self.device) + features, _ = self.extract_features(img) + if features.dim() == 4: + global_pool = nn.AdaptiveAvgPool2d(1) + features = global_pool(features) + + features = features.to('cpu') + vec = features.flatten().detach().numpy() + return vec + + def save_model(self, format: str = 'pytorch', path: str = 'default'): + if path == 'default': + path = str(Path(__file__).parent) + name = self.model_name.replace('/', '-') + path = os.path.join(path, name) + inputs = torch.ones(1, 3, 224, 224) + if format == 'pytorch': + torch.save(self.model, path) + elif format == 'torchscript': + path = path + '.pt' + try: + try: + jit_model = torch.jit.script(self.model) + except Exception: + jit_model = torch.jit.trace(self.model, inputs, strict=False) + torch.jit.save(jit_model, path) + except Exception as e: + log.error(f'Fail to save as torchscript: {e}.') + raise RuntimeError(f'Fail to save as torchscript: {e}.') + elif format == 'onxx': + pass # todo + else: + log.error(f'Save model: unsupported format "{format}".') + + @staticmethod + def supported_model_names(format: str = None): + full_list = [ + 'vit_h14_in1k', + 'vit_l16_in1k', + 'vit_b16_in1k', + 'regnety_16gf_in1k', + 'regnety_32gf_in1k', + 'regnety_128gf_in1k', + ] + full_list.sort() + if format is None: + model_list = full_list + elif format == 'pytorch': + to_remove = [] + assert set(to_remove).issubset(set(full_list)) + model_list = list(set(full_list) - set(to_remove)) + else: # todo: format in {'torchscript', 'onnx', 'tensorrt'} + log.error(f'Invalid format "{format}". Currently supported formats: "pytorch".') + return model_list + + @staticmethod + def get_transforms(model_name): + model_resolution = { + 'vit_h14_in1k': 518, + 'vit_l16_in1k': 512, + 'vit_b16_in1k': 384, + 'regnety_16gf_in1k': 384, + 'regnety_32gf_in1k': 384, + 'regnety_128gf_in1k': 384 + } + if model_name not in model_resolution.keys(): + log.warning('No transforms specified for model "%s", using resolution 384.', model_name) + resolution = 384 + else: + resolution = model_resolution[model_name] + transform = transforms.Compose([ + transforms.Resize( + resolution, + interpolation=transforms.InterpolationMode.BICUBIC, + ), + transforms.CenterCrop(resolution), + transforms.ToTensor(), + transforms.Normalize( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ), + ]) + return transform + + +class FeatureExtractor(nn.Module): + def __init__(self, model: nn.Module): + super().__init__() + self.model = model + self.features = None + + for name, child in self.model.named_children(): + if name == 'trunk_output': + self.handler = child.register_forward_hook(self.save_outputs_hook()) + + def save_outputs_hook(self): + def fn(_, __, output): + self.features = output + return fn + + def forward(self, x): + outs = self.model(x) + self.handler.remove() + return self.features, outs + + +if __name__ == '__main__': + from towhee import ops + + path = '/Users/mengjiagu/Desktop/models/data/image/animals10/bird.jpg' + + decoder = ops.image_decode.cv2() + img = decoder(path) + op = Swag('vit_b16_in1k') + # op = Swag('regnety_16gf_in1k') + out = op(img) + print(out.shape)