From fdbb02564457206ad2b5ca5431294f5704d7a921 Mon Sep 17 00:00:00 2001 From: Sunflower7788 Date: Mon, 17 Apr 2023 20:16:20 +0800 Subject: [PATCH] [feature] text_to_sam_clip (#3187) --- contrib/SegmentAnything/README.md | 55 +-- contrib/SegmentAnything/examples/dog.jpg | Bin 0 -> 99846 bytes .../SegmentAnything/examples/zixingche.jpeg | Bin 0 -> 50083 bytes .../SegmentAnything/scripts/promt_predict.py | 11 +- .../scripts/text_to_sam_clip.py | 239 +++++++++++++ .../segment_anything/build_sam.py | 4 +- .../segment_anything/modeling/__init__.py | 1 + .../segment_anything/modeling/clip_paddle.py | 318 ++++++++++++++++++ .../segment_anything/utils/__init__.py | 1 + .../utils/sample_tokenizer.py | 205 +++++++++++ 10 files changed, 798 insertions(+), 36 deletions(-) create mode 100644 contrib/SegmentAnything/examples/dog.jpg create mode 100644 contrib/SegmentAnything/examples/zixingche.jpeg create mode 100644 contrib/SegmentAnything/scripts/text_to_sam_clip.py create mode 100644 contrib/SegmentAnything/segment_anything/modeling/clip_paddle.py create mode 100644 contrib/SegmentAnything/segment_anything/utils/sample_tokenizer.py diff --git a/contrib/SegmentAnything/README.md b/contrib/SegmentAnything/README.md index 7513f937b4..786d05ed3a 100644 --- a/contrib/SegmentAnything/README.md +++ b/contrib/SegmentAnything/README.md @@ -1,25 +1,24 @@ # Segment Anything with PaddleSeg -## Reference - -> Alexander Kirillov, Eric Mintun, Nikhila Ravi, Hanzi Mao, Chloe Rolland, Laura Gustafson, Tete Xiao, Spencer Whitehead, Alexander C. Berg, Wan-Yen Lo, Piotr Dollár, Ross Girshick. [Segment Anything](https://ai.facebook.com/research/publications/segment-anything/). - ## Contents 1. Overview 2. Performance 3. Try it by yourself with one line of code +4. Reference + ## Overview -We implemente the segment anything with the PaddlePaddle framework. **Segment Anything Model (SAM)** is a new task, model, and dataset for image segmentation. It can produce high quality object masks from different types of prompts including points, boxes, masks and text. Further, SAM can generate masks for all objects in whole image. It built a largest segmentation [dataset](https://segment-anything.com/dataset/index.html) to date (by far), with over 1 billion masks on 11M licensed and privacy respecting images. SAM has impressive zero-shot performance on a variety of tasks, even often competitive with or even superior to prior fully supervised results. +We implemente the segment anything with the PaddlePaddle framework. **Segment Anything Model (SAM)** is a new task, model, and dataset for image segmentation. It built a largest segmentation [dataset](https://segment-anything.com/dataset/index.html) to date (by far), with over 1 billion masks on 11M licensed and privacy respecting images. Further, SAM can produce high quality object masks from different types of prompts including points, boxes, masks and text. SAM has impressive zero-shot performance on a variety of tasks, even often competitive with or even superior to prior fully supervised results. However, the SAM model based on text prompt is not released at the moment. Therefore, we use a combination of **SAM** and **CLIP** to calculate the similarity between the output masks and text prompt. In this way, you can use **text prompt** to segment anything. In addition, we also implement SAM that can generate masks for all objects in whole image. + -We provide the pretrained model parameters of PaddlePaddle format, including [vit_b](https://bj.bcebos.com/paddleseg/dygraph/paddlesegAnything/vit_b/model.pdparams), [vit_l](https://bj.bcebos.com/paddleseg/dygraph/paddlesegAnything/vit_l/model.pdparams) and [vit_h](https://bj.bcebos.com/paddleseg/dygraph/paddlesegAnything/vit_h/model.pdparams). +We provide the pretrained model parameters of PaddlePaddle format, including [vit_b](https://bj.bcebos.com/paddleseg/dygraph/paddlesegAnything/vit_b/model.pdparams), [vit_l](https://bj.bcebos.com/paddleseg/dygraph/paddlesegAnything/vit_l/model.pdparams) and [vit_h](https://bj.bcebos.com/paddleseg/dygraph/paddlesegAnything/vit_h/model.pdparams). For text prompt, we also provide the [CLIP_ViT_B](https://bj.bcebos.com/paddleseg/dygraph/clip/vit_b_32_pretrain/clip_vit_b_32.pdparams) model parameters of PaddlePaddle format. ## Performance
- +
@@ -33,11 +32,15 @@ We provide the pretrained model parameters of PaddlePaddle format, including [vi git clone https://github.com/PaddlePaddle/PaddleSeg.git cd PaddleSeg pip install -r requirements.txt + pip install ftfy regex + cd contrib/SegmentAnything/ ``` -* Download the example image to ```contrib/SegmentAnything/examples```, and the file structure is as following: +* Download the example image to ```contrib/SegmentAnything/examples``` and the vocab to ```contrib/SegmentAnything/``` ```bash wget https://paddleseg.bj.bcebos.com/dygraph/demo/cityscapes_demo.png + wget https://bj.bcebos.com/paddleseg/dygraph/bpe_vocab_16e6/bpe_simple_vocab_16e6.txt.gz ``` + Then, the file structure is as following: ``` PaddleSeg/contrib @@ -45,32 +48,35 @@ We provide the pretrained model parameters of PaddlePaddle format, including [vi │ ├── examples │ │ └── cityscapes_demo.png │ ├── segment_anything - │ └── scripts + │ ├── scripts + │ └── bpe_simple_vocab_16e6.txt.gz ``` +### 2. Segment Anything on webpage. -### 2. Segment the whole image on webpage. In this step, we start a gradio service with the following scrip on local machine and you can try out our project with your own images. +Based on this service, You can experience the ability to **segment the whole image** and **segment the object based on text prompts**. 1. Run the following script: ```bash - python scripts/amg_paddle.py --model-type [vit_l/vit_b/vit_h] # default is vit_h - + python scripts/text_to_sam_clip.py --model-type [vit_l/vit_b/vit_h] # default is vit_h ``` Note: - * There are three model options for you, vit_b, vit_l and vit_h, represent vit_base, vit_large and vit_huge. Large model is more accurate and also slower. You can choose the model size based on your device. - * The test result shows that vit_h needs 16G video memory and needs around 10s to infer an image on V100. - -2. Open the webpage on your localhost: ```http://0.0.0.0:8017``` + * There are three SAM model options for you, `vit_b`, `vit_l` and `vit_h`, represent vit_base, vit_large and vit_huge. Large model is more accurate but slower. You can choose the suitable model size based on your device. + * We support `CLIP Vit-B` model for extracting text and image features. + * `SAM vit_h` needs 16G memory and costs around 10s to infer an image on V100. +2. Open the webpage on your localhost: ```http://0.0.0.0:8078``` 3. Try it out by clear and upload the test image! Our example looks like:
- +
-### 3. Segment the object with prompts -You can run the following commands to produce masks from different types of prompts including points, boxes, and masks, as follow: + +### 3. Segment the object with point or box prompts + +You can run the following commands to produce masks from different types of prompts including points and boxes, as follow: 1. Box prompt @@ -84,10 +90,9 @@ python scripts/promt_predict.py --input_path xxx.png --box_prompt 1050 370 1500 python scripts/promt_predict.py --input_path xxx.png --point_prompt 1200 450 --model-type [vit_l/vit_b/vit_h] # default is vit_h ``` -3. Mask prompt -```bash -python scripts/promt_predict.py --input_path xxx.png --mask_prompt xxx.png --model-type [vit_l/vit_b/vit_h] # default is vit_h -``` -Note: -* mask_prompt is the path of a binary image. +## Reference + +> Alexander Kirillov, Eric Mintun, Nikhila Ravi, Hanzi Mao, Chloe Rolland, Laura Gustafson, Tete Xiao, Spencer Whitehead, Alexander C. Berg, Wan-Yen Lo, Piotr Dollár, Ross Girshick. [Segment Anything](https://ai.facebook.com/research/publications/segment-anything/). + +> Alec Radford, Jong Wook Kim, Chris Hallacy, Aditya Ramesh, Gabriel Goh, Sandhini Agarwal, Girish Sastry, Amanda Askell, Pamela Mishkin, Jack Clark, Gretchen Krueger, Ilya Sutskever Proceedings of the 38th International Conference on Machine Learning, PMLR 139:8748-8763, 2021. [CLIP](https://github.com/openai/CLIP) diff --git a/contrib/SegmentAnything/examples/dog.jpg b/contrib/SegmentAnything/examples/dog.jpg new file mode 100644 index 0000000000000000000000000000000000000000..26d6454d626bfd71b386ca1ba032836ea12f8a35 GIT binary patch literal 99846 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 literal 0 HcmV?d00001 diff --git a/contrib/SegmentAnything/examples/zixingche.jpeg b/contrib/SegmentAnything/examples/zixingche.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..9956f252c4f856ca9464309965042cf7eb5dadb2 GIT binary patch literal 50083 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 U6pR3)0~Jlwan_D?*j%Uo**6*e_5c6? literal 0 HcmV?d00001 diff --git a/contrib/SegmentAnything/scripts/promt_predict.py b/contrib/SegmentAnything/scripts/promt_predict.py index ee90ff48b5..3588e63e90 100644 --- a/contrib/SegmentAnything/scripts/promt_predict.py +++ b/contrib/SegmentAnything/scripts/promt_predict.py @@ -39,7 +39,7 @@ def get_args(): parser = argparse.ArgumentParser( - description='Segment image with point promp, box or mask') + description='Segment image with point promp or box') # Parameters parser.add_argument( '--input_path', type=str, required=True, help='The directory of image.') @@ -61,8 +61,6 @@ def get_args(): nargs='+', default=None, help='box promt format as xyxy.') - parser.add_argument( - '--mask_prompt', type=str, default=None, help='The path of mask.') parser.add_argument( '--output_path', type=str, @@ -88,7 +86,7 @@ def main(args): paddle.set_device("cpu") input_path = args.input_path output_path = args.output_path - point, box, mask_path = args.point_prompt, args.box_prompt, args.mask_prompt + point, box = args.point_prompt, args.box_prompt if point is not None: point = np.array([point]) input_label = np.array([1]) @@ -96,10 +94,6 @@ def main(args): input_label = None if box is not None: box = np.array([[box[0], box[1]], [box[2], box[3]]]) - if mask_path is not None: - mask = cv2.imread(mask_path, -1) - else: - mask = None image = cv2.imread(input_path) image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) @@ -112,7 +106,6 @@ def main(args): point_coords=point, point_labels=input_label, box=box, - mask_input=mask, multimask_output=True, ) plt.figure(figsize=(10, 10)) diff --git a/contrib/SegmentAnything/scripts/text_to_sam_clip.py b/contrib/SegmentAnything/scripts/text_to_sam_clip.py new file mode 100644 index 0000000000..914ed56dac --- /dev/null +++ b/contrib/SegmentAnything/scripts/text_to_sam_clip.py @@ -0,0 +1,239 @@ +# Copyright (c) 2023 PaddlePaddle Authors. 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. + +import os +import cv2 +import time +import sys +import argparse +sys.path.append(os.path.join(os.path.dirname(os.path.realpath(__file__)), "..")) + +import paddle +import paddle.nn.functional as F +import numpy as np +from PIL import Image, ImageDraw +import matplotlib.pyplot as plt + +from segment_anything import sam_model_registry, SamAutomaticMaskGenerator +from segment_anything.modeling.clip_paddle import build_clip_model, _transform +from segment_anything.utils.sample_tokenizer import tokenize +from paddleseg.utils.visualize import get_pseudo_color_map, get_color_map_list + +ID_PHOTO_IMAGE_DEMO = "./examples/cityscapes_demo.png" +CACHE_DIR = ".temp" +model_link = { + 'vit_h': + "https://bj.bcebos.com/paddleseg/dygraph/paddlesegAnything/vit_h/model.pdparams", + 'vit_l': + "https://bj.bcebos.com/paddleseg/dygraph/paddlesegAnything/vit_l/model.pdparams", + 'vit_b': + "https://bj.bcebos.com/paddleseg/dygraph/paddlesegAnything/vit_b/model.pdparams", + 'clip_b_32': + "https://bj.bcebos.com/paddleseg/dygraph/clip/vit_b_32_pretrain/clip_vit_b_32.pdparams" +} + +parser = argparse.ArgumentParser(description=( + "Runs automatic mask generation on an input image or directory of images, " + "and outputs masks as either PNGs or COCO-style RLEs. Requires open-cv, " + "as well as pycocotools if saving in RLE format.")) + +parser.add_argument( + "--model-type", + type=str, + default="vit_h", + required=True, + help="The type of model to load, in ['vit_h', 'vit_l', 'vit_b']", ) + + +def download(img): + if not os.path.exists(CACHE_DIR): + os.makedirs(CACHE_DIR) + while True: + name = str(int(time.time())) + tmp_name = os.path.join(CACHE_DIR, name + '.jpg') + if not os.path.exists(tmp_name): + break + else: + time.sleep(1) + img.save(tmp_name, 'png') + return tmp_name + + +def segment_image(image, segment_mask): + image_array = np.array(image) + gray_image = Image.new("RGB", image.size, (128, 128, 128)) + segmented_image_array = np.zeros_like(image_array) + segmented_image_array[segment_mask] = image_array[segment_mask] + segmented_image = Image.fromarray(segmented_image_array) + transparency = np.zeros_like(segment_mask, dtype=np.uint8) + transparency[segment_mask] = 255 + transparency_image = Image.fromarray(transparency, mode='L') + gray_image.paste(segmented_image, mask=transparency_image) + return gray_image + + +def image_text_match(cropped_objects, text_query): + transformed_images = [transform(image) for image in cropped_objects] + tokenized_text = tokenize([text_query]) + batch_images = paddle.stack(transformed_images) + image_features = model.encode_image(batch_images) + print("encode_image done!") + text_features = model.encode_text(tokenized_text) + print("encode_text done!") + image_features /= image_features.norm(axis=-1, keepdim=True) + text_features /= text_features.norm(axis=-1, keepdim=True) + probs = 100. * image_features @text_features.T + return F.softmax(probs[:, 0], axis=0) + + +def masks2pseudomap(masks): + result = np.ones(masks[0]["segmentation"].shape, dtype=np.uint8) * 255 + for i, mask_data in enumerate(masks): + result[mask_data["segmentation"] == 1] = i + 1 + pred_result = result + result = get_pseudo_color_map(result) + return pred_result, result + + +def visualize(image, result, color_map, weight=0.6): + """ + Convert predict result to color image, and save added image. + + Args: + image (str): The path of origin image. + result (np.ndarray): The predict result of image. + color_map (list): The color used to save the prediction results. + save_dir (str): The directory for saving visual image. Default: None. + weight (float): The image weight of visual image, and the result weight is (1 - weight). Default: 0.6 + + Returns: + vis_result (np.ndarray): If `save_dir` is None, return the visualized result. + """ + + color_map = [color_map[i:i + 3] for i in range(0, len(color_map), 3)] + color_map = np.array(color_map).astype("uint8") + # Use OpenCV LUT for color mapping + c1 = cv2.LUT(result, color_map[:, 0]) + c2 = cv2.LUT(result, color_map[:, 1]) + c3 = cv2.LUT(result, color_map[:, 2]) + pseudo_img = np.dstack((c3, c2, c1)) + + vis_result = cv2.addWeighted(image, weight, pseudo_img, 1 - weight, 0) + return vis_result + + +def get_id_photo_output(image, text): + """ + Get the special size and background photo. + + Args: + img(numpy:ndarray): The image array. + size(str): The size user specified. + bg(str): The background color user specified. + download_size(str): The size for image saving. + + """ + image_ori = image.copy() + image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) + masks = mask_generator.generate(image) + pred_result, pseudo_map = masks2pseudomap(masks) # PIL Image + added_pseudo_map = visualize( + image, pred_result, color_map=get_color_map_list(256)) + cropped_objects = [] + image_pil = Image.fromarray(image) + for mask in masks: + bbox = [ + mask["bbox"][0], mask["bbox"][1], mask["bbox"][0] + mask["bbox"][2], + mask["bbox"][1] + mask["bbox"][3] + ] + cropped_objects.append( + segment_image(image_pil, mask["segmentation"]).crop(bbox)) + + scores = image_text_match(cropped_objects, str(text)) + text_matching_masks = [] + for idx, score in enumerate(scores): + if score < 0.05: + continue + text_matching_mask = Image.fromarray( + masks[idx]["segmentation"].astype('uint8') * 255) + text_matching_masks.append(text_matching_mask) + + image_pil_ori = Image.fromarray(image_ori) + alpha_image = Image.new('RGBA', image_pil_ori.size, (0, 0, 0, 0)) + alpha_color = (255, 0, 0, 180) + + draw = ImageDraw.Draw(alpha_image) + for text_matching_mask in text_matching_masks: + draw.bitmap((0, 0), text_matching_mask, fill=alpha_color) + + result_image = Image.alpha_composite( + image_pil_ori.convert('RGBA'), alpha_image) + res_download = download(result_image) + return result_image, added_pseudo_map, res_download + + +def gradio_display(): + import gradio as gr + examples_sam = [["./examples/cityscapes_demo.png", "a photo of car"], + ["examples/dog.jpg", "dog"], + ["examples/zixingche.jpeg", "kid"]] + + demo_mask_sam = gr.Interface( + fn=get_id_photo_output, + inputs=[ + gr.Image( + value=ID_PHOTO_IMAGE_DEMO, + label="Input image").style(height=400), gr.inputs.Textbox( + lines=3, + placeholder=None, + default="a photo of car", + label='🔥 Input text prompt 🔥', + optional=False) + ], + outputs=[ + gr.Image( + label="Output based on text", + interactive=False).style(height=300), gr.Image( + label="Output mask", interactive=False).style(height=300) + ], + examples=examples_sam, + description="

\ + SAM+CLIP: Text prompt for segmentation.
\ + Choose an example below; Or, upload by yourself:
\ + 1. Upload images to be tested to 'input image'. 2. Input a text prompt to 'input text prompt' and click 'submit'.
\ +

", + cache_examples=False, + allow_flagging="never", ) + + demo = gr.TabbedInterface( + [demo_mask_sam, ], ['SAM+CLIP(Text to Segment)'], + title=" 🔥 Text to Segment Anything with PaddleSeg 🔥") + demo.launch( + server_name="0.0.0.0", enable_queue=False, server_port=8078, share=True) + + +args = parser.parse_args() +print("Loading model...") + +if paddle.is_compiled_with_cuda(): + paddle.set_device("gpu") +else: + paddle.set_device("cpu") + +sam = sam_model_registry[args.model_type]( + checkpoint=model_link[args.model_type]) +mask_generator = SamAutomaticMaskGenerator(sam) + +model, transform = build_clip_model(model_link["clip_b_32"]) +gradio_display() diff --git a/contrib/SegmentAnything/segment_anything/build_sam.py b/contrib/SegmentAnything/segment_anything/build_sam.py index f19d033eb8..039c61e6dd 100644 --- a/contrib/SegmentAnything/segment_anything/build_sam.py +++ b/contrib/SegmentAnything/segment_anything/build_sam.py @@ -17,7 +17,7 @@ from functools import partial -from paddleseg import utils +from paddleseg.utils import load_entire_model from .modeling import ImageEncoderViT, MaskDecoder, PromptEncoder, Sam, TwoWayTransformer @@ -104,5 +104,5 @@ def _build_sam( pixel_std=[58.395, 57.12, 57.375], ) sam.eval() if checkpoint is not None: - utils.load_entire_model(sam, checkpoint) + load_entire_model(sam, checkpoint) return sam diff --git a/contrib/SegmentAnything/segment_anything/modeling/__init__.py b/contrib/SegmentAnything/segment_anything/modeling/__init__.py index fe9172c737..f68b25daab 100644 --- a/contrib/SegmentAnything/segment_anything/modeling/__init__.py +++ b/contrib/SegmentAnything/segment_anything/modeling/__init__.py @@ -15,6 +15,7 @@ # This implementation refers to: https://github.com/facebookresearch/segment-anything from .sam import Sam +from .clip_paddle import * from .image_encoder import ImageEncoderViT from .mask_decoder import MaskDecoder from .prompt_encoder import PromptEncoder diff --git a/contrib/SegmentAnything/segment_anything/modeling/clip_paddle.py b/contrib/SegmentAnything/segment_anything/modeling/clip_paddle.py new file mode 100644 index 0000000000..2984ce6ac6 --- /dev/null +++ b/contrib/SegmentAnything/segment_anything/modeling/clip_paddle.py @@ -0,0 +1,318 @@ +# Copyright (c) 2023 PaddlePaddle Authors. 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. + +# This implementation refers to: https://github.com/openai/CLIP + +from collections import OrderedDict +from typing import Tuple, Union + +import numpy as np +import paddle +from paddle.nn.initializer import Constant +from paddle.vision.transforms import Compose, Resize, CenterCrop, ToTensor, Normalize + +zeros_ = Constant(value=0.) + + +class QuickGELU(paddle.nn.Layer): + def forward(self, x: paddle.Tensor): + return x * paddle.nn.functional.sigmoid(x=1.702 * x) + + +class ResidualAttentionBlock(paddle.nn.Layer): + def __init__(self, d_model: int, n_head: int, + attn_mask: paddle.Tensor=None): + super().__init__() + self.attn = paddle.nn.MultiHeadAttention( + d_model, + n_head, + need_weights=False, ) + self.ln_1 = paddle.nn.LayerNorm(d_model) + self.mlp = paddle.nn.Sequential(*[('c_fc', paddle.nn.Linear( + in_features=d_model, out_features=d_model * + 4)), ('gelu', QuickGELU()), ('c_proj', paddle.nn.Linear( + in_features=d_model * 4, out_features=d_model))]) + self.ln_2 = paddle.nn.LayerNorm(d_model) + self.attn_mask = attn_mask + + def attention(self, x: paddle.Tensor): + """Class Method: *.to, not convert, please check whether it is torch.Tensor.*/Optimizer.*/nn.Module.*, and convert manually""" + self.attn_mask = self.attn_mask.astype( + x.dtype) if self.attn_mask is not None else None + x = x.transpose([1, 0, 2]) + x = self.attn(x, x, x, attn_mask=self.attn_mask) + return x.transpose([1, 0, 2]) + + def forward(self, x: paddle.Tensor): + x = x + self.attention(self.ln_1(x)) + x = x + self.mlp(self.ln_2(x)) + return x + + +class Transformer(paddle.nn.Layer): + def __init__(self, + width: int, + layers: int, + heads: int, + attn_mask: paddle.Tensor=None): + super().__init__() + self.width = width + self.layers = layers + self.resblocks = paddle.nn.Sequential(*[ + ResidualAttentionBlock(width, heads, attn_mask) + for _ in range(layers) + ]) + + def forward(self, x: paddle.Tensor): + return self.resblocks(x) + + +class VisionTransformer(paddle.nn.Layer): + def __init__(self, + input_resolution: int, + patch_size: int, + width: int, + layers: int, + heads: int, + output_dim: int): + super().__init__() + self.input_resolution = input_resolution + self.output_dim = output_dim + self.conv1 = paddle.nn.Conv2D( + in_channels=3, + out_channels=width, + kernel_size=patch_size, + stride=patch_size, + bias_attr=False) + scale = width**-0.5 + self.class_embedding = self.create_parameter( + shape=(width, ), default_initializer=zeros_) + self.add_parameter("class_embedding", self.class_embedding) + + self.positional_embedding = self.create_parameter( + shape=((input_resolution // patch_size)**2 + 1, width), + default_initializer=zeros_) + self.add_parameter("positional_embedding", self.positional_embedding) + self.ln_pre = paddle.nn.LayerNorm(width) + self.transformer = Transformer(width, layers, heads) + self.ln_post = paddle.nn.LayerNorm(width) + self.proj = self.create_parameter( + shape=(width, output_dim), default_initializer=zeros_) + self.add_parameter("proj", self.proj) + + def forward(self, x: paddle.Tensor): + + x = self.conv1(x) + x = x.flatten(2).transpose((0, 2, 1)) + + x = paddle.concat( + [ + self.class_embedding.astype(x.dtype) + paddle.zeros( + shape=[x.shape[0], 1, x.shape[-1]], dtype=x.dtype), x + ], + axis=1) + + x = x + self.positional_embedding.astype(x.dtype) + x = self.ln_pre(x) + x = x.transpose(perm=[1, 0, 2]) + x = self.transformer(x) + x = x.transpose(perm=[1, 0, 2]) + x = self.ln_post(x[:, 0, :]) + + if self.proj is not None: + x = x @self.proj + return x + + +class CLIP(paddle.nn.Layer): + def __init__(self, + embed_dim: int, + image_resolution: int, + vision_layers: Union[Tuple[int, int, int, int], int], + vision_width: int, + vision_patch_size: int, + context_length: int, + vocab_size: int, + transformer_width: int, + transformer_heads: int, + transformer_layers: int): + super().__init__() + self.context_length = context_length + + vision_heads = vision_width // 64 + self.visual = VisionTransformer( + input_resolution=image_resolution, + patch_size=vision_patch_size, + width=vision_width, + layers=vision_layers, + heads=vision_heads, + output_dim=embed_dim) + self.transformer = Transformer( + width=transformer_width, + layers=transformer_layers, + heads=transformer_heads, + attn_mask=self.build_attention_mask()) + self.vocab_size = vocab_size + self.token_embedding = paddle.nn.Embedding(vocab_size, + transformer_width) + + self.positional_embedding = self.create_parameter( + shape=(self.context_length, transformer_width), + default_initializer=zeros_) + self.add_parameter("positional_embedding", self.positional_embedding) + + self.ln_final = paddle.nn.LayerNorm(transformer_width) + + self.text_projection = self.create_parameter( + shape=(transformer_width, embed_dim), default_initializer=zeros_) + self.add_parameter("text_projection", self.text_projection) + + def build_attention_mask(self): + mask = paddle.empty(shape=[self.context_length, self.context_length]) + mask.fill_(value=float('-inf')) + mask = paddle.tensor.triu(mask, diagonal=1) + return mask + + @property + def dtype(self): + return self.visual.conv1.weight.dtype + + def encode_image(self, image): + return self.visual(image.astype(self.dtype)) + + def encode_text(self, text): + x = self.token_embedding(text).astype(self.dtype) + x = x + self.positional_embedding.astype(self.dtype) + x = x.transpose(perm=[1, 0, 2]) + x = self.transformer(x) + x = x.transpose(perm=[1, 0, 2]) + x = self.ln_final(x).astype(self.dtype) + x = x[paddle.arange(start=x.shape[0]), text.argmax( + axis=-1)] @self.text_projection + return x[None, :] + + def forward(self, image, text): + text_features = self.encode_text(text)[None, :] + image_features = self.encode_image(image) + + image_features = image_features / image_features.norm( + axis=1, keepdim=True) + text_features = text_features / text_features.norm(axis=1, keepdim=True) + # cosine similarity as logits + logits_per_image = image_features @text_features.t() + logits_per_text = logits_per_image.t() + return logits_per_image, logits_per_text + + +def convert_weights(model: paddle.nn.Layer): + """Convert applicable model parameters to fp16""" + + def _convert_weights_to_fp16(param): + if isinstance(param, + (paddle.nn.Conv1D, paddle.nn.Conv2D, paddle.nn.Linear)): + param.weight.data = param.weight.astype('float16') + if param.bias is not None: + param.bias.data = param.bias.astype('float16') + if isinstance(param, paddle.nn.MultiHeadAttention): + for attr in [ + * [f'{s}_proj_weight' for s in ['in', 'q', 'k', 'v']], + 'in_proj_bias', 'bias_k', 'bias_v' + ]: + tensor_l = getattr(param, attr) + if tensor_l is not None: + tensor_l.data = tensor_l.astype('float16') + for name in ['text_projection', 'proj']: + if hasattr(param, name): + attr = getattr(param, name) + if attr is not None: + attr.data = attr.astype('float16') + + model.apply(fn=_convert_weights_to_fp16) + + +def load_pretrain_clip(pretrained_model): + from urllib.parse import urlparse + from paddleseg.utils import download_pretrained_model + if urlparse(pretrained_model).netloc: + pretrained_model = download_pretrained_model(pretrained_model) + state = paddle.load(pretrained_model) + return state + + +def build_clip_model(pretrained_model): + state_dict = load_pretrain_clip(pretrained_model) + vit = 'visual.proj' in state_dict + if vit: + vision_width = state_dict['visual.conv1.weight'].shape[0] + vision_layers = len([ + k for k in state_dict.keys() + if k.startswith('visual.') and k.endswith('.attn.q_proj.weight') + ]) + vision_patch_size = state_dict['visual.conv1.weight'].shape[-1] + grid_size = round((state_dict['visual.positional_embedding'].shape[0] - + 1)**0.5) + image_resolution = vision_patch_size * grid_size + else: + """Class Method: *.split, not convert, please check whether it is torch.Tensor.*/Optimizer.*/nn.Module.*, and convert manually""" + counts: list = [ + len( + set( + k.split('.')[2] for k in state_dict + if k.startswith(f'visual.layer{b}'))) + for b in [1, 2, 3, 4] + ] + vision_layers = tuple(counts) + vision_width = state_dict['visual.layer1.0.conv1.weight'].shape[0] + output_width = round((state_dict['visual.attnpool.positional_embedding'] + .shape[0] - 1)**0.5) + vision_patch_size = None + assert output_width**2 + 1 == state_dict[ + 'visual.attnpool.positional_embedding'].shape[0] + image_resolution = output_width * 32 + embed_dim = state_dict['text_projection'].shape[1] + context_length = state_dict['positional_embedding'].shape[0] + vocab_size = state_dict['token_embedding.weight'].shape[0] + transformer_width = state_dict['ln_final.weight'].shape[0] + transformer_heads = transformer_width // 64 + """Class Method: *.split, not convert, please check whether it is torch.Tensor.*/Optimizer.*/nn.Module.*, and convert manually""" + transformer_layers = len( + set( + k.split('.')[2] for k in state_dict + if k.startswith('transformer.resblocks'))) + model = CLIP(embed_dim, image_resolution, vision_layers, vision_width, + vision_patch_size, context_length, vocab_size, + transformer_width, transformer_heads, transformer_layers) + for key in ['input_resolution', 'context_length', 'vocab_size']: + if key in state_dict: + del state_dict[key] + #convert_weights(model) + model.eval() + model.set_state_dict(state_dict=state_dict) + return model, _transform(model.visual.input_resolution) + + +def _convert_image_to_rgb(image): + return image.convert("RGB") + + +def _transform(n_px): + + return Compose([ + Resize(n_px), + CenterCrop(n_px), + _convert_image_to_rgb, + ToTensor(), + Normalize((0.48145466, 0.4578275, 0.40821073), + (0.26862954, 0.26130258, 0.27577711)), + ]) diff --git a/contrib/SegmentAnything/segment_anything/utils/__init__.py b/contrib/SegmentAnything/segment_anything/utils/__init__.py index e69de29bb2..98f12e9b35 100644 --- a/contrib/SegmentAnything/segment_anything/utils/__init__.py +++ b/contrib/SegmentAnything/segment_anything/utils/__init__.py @@ -0,0 +1 @@ +from .sample_tokenizer import tokenize diff --git a/contrib/SegmentAnything/segment_anything/utils/sample_tokenizer.py b/contrib/SegmentAnything/segment_anything/utils/sample_tokenizer.py new file mode 100644 index 0000000000..2dbcacc93c --- /dev/null +++ b/contrib/SegmentAnything/segment_anything/utils/sample_tokenizer.py @@ -0,0 +1,205 @@ +# Copyright (c) 2023 PaddlePaddle Authors. 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. + +# This implementation refers to: https://github.com/openai/CLIP + +import gzip +import html +import os +from functools import lru_cache + +import ftfy +import regex as re +import paddle + + +@lru_cache() +def default_bpe(): + return os.path.join( + os.path.dirname(os.path.abspath(__file__)), *(['..'] * 2), + "bpe_simple_vocab_16e6.txt.gz") + + +@lru_cache() +def bytes_to_unicode(): + """ + Returns list of utf-8 byte and a corresponding list of unicode strings. + The reversible bpe codes work on unicode strings. + This means you need a large # of unicode characters in your vocab if you want to avoid UNKs. + When you're at something like a 10B token dataset you end up needing around 5K for decent coverage. + This is a signficant percentage of your normal, say, 32K bpe vocab. + To avoid that, we want lookup tables between utf-8 bytes and unicode strings. + And avoids mapping to whitespace/control characters the bpe code barfs on. + """ + bs = list(range(ord("!"), ord("~") + 1)) + list( + range(ord("¡"), ord("¬") + 1)) + list(range(ord("®"), ord("ÿ") + 1)) + cs = bs[:] + n = 0 + for b in range(2**8): + if b not in bs: + bs.append(b) + cs.append(2**8 + n) + n += 1 + cs = [chr(n) for n in cs] + return dict(zip(bs, cs)) + + +def get_pairs(word): + """Return set of symbol pairs in a word. + Word is represented as tuple of symbols (symbols being variable-length strings). + """ + pairs = set() + prev_char = word[0] + for char in word[1:]: + pairs.add((prev_char, char)) + prev_char = char + return pairs + + +def basic_clean(text): + text = ftfy.fix_text(text) + text = html.unescape(html.unescape(text)) + return text.strip() + + +def whitespace_clean(text): + text = re.sub(r'\s+', ' ', text) + text = text.strip() + return text + + +class SimpleTokenizer(object): + def __init__(self, bpe_path: str=default_bpe()): + self.byte_encoder = bytes_to_unicode() + self.byte_decoder = {v: k for k, v in self.byte_encoder.items()} + merges = gzip.open(bpe_path).read().decode("utf-8").split('\n') + merges = merges[1:49152 - 256 - 2 + 1] + merges = [tuple(merge.split()) for merge in merges] + vocab = list(bytes_to_unicode().values()) + vocab = vocab + [v + '
' for v in vocab] + for merge in merges: + vocab.append(''.join(merge)) + vocab.extend(['<|startoftext|>', '<|endoftext|>']) + self.encoder = dict(zip(vocab, range(len(vocab)))) + self.decoder = {v: k for k, v in self.encoder.items()} + self.bpe_ranks = dict(zip(merges, range(len(merges)))) + self.cache = { + '<|startoftext|>': '<|startoftext|>', + '<|endoftext|>': '<|endoftext|>' + } + self.pat = re.compile( + r"""<\|startoftext\|>|<\|endoftext\|>|'s|'t|'re|'ve|'m|'ll|'d|[\p{L}]+|[\p{N}]|[^\s\p{L}\p{N}]+""", + re.IGNORECASE) + + def bpe(self, token): + if token in self.cache: + return self.cache[token] + word = tuple(token[:-1]) + (token[-1] + '
', ) + pairs = get_pairs(word) + + if not pairs: + return token + '
' + + while True: + bigram = min( + pairs, key=lambda pair: self.bpe_ranks.get(pair, float('inf'))) + if bigram not in self.bpe_ranks: + break + first, second = bigram + new_word = [] + i = 0 + while i < len(word): + try: + j = word.index(first, i) + new_word.extend(word[i:j]) + i = j + except: + new_word.extend(word[i:]) + break + + if word[i] == first and i < len(word) - 1 and word[i + + 1] == second: + new_word.append(first + second) + i += 2 + else: + new_word.append(word[i]) + i += 1 + new_word = tuple(new_word) + word = new_word + if len(word) == 1: + break + else: + pairs = get_pairs(word) + word = ' '.join(word) + self.cache[token] = word + return word + + def encode(self, text): + bpe_tokens = [] + text = whitespace_clean(basic_clean(text)).lower() + for token in re.findall(self.pat, text): + token = ''.join(self.byte_encoder[b] for b in token.encode('utf-8')) + bpe_tokens.extend(self.encoder[bpe_token] + for bpe_token in self.bpe(token).split(' ')) + return bpe_tokens + + def decode(self, tokens): + text = ''.join([self.decoder[token] for token in tokens]) + text = bytearray([self.byte_decoder[c] for c in text]).decode( + 'utf-8', errors="replace").replace('', ' ') + return text + + +def tokenize(texts, context_length=77, truncate=False): + """ + Returns the tokenized representation of given input string(s) + + Parameters + ---------- + texts : Union[str, List[str]] + An input string or a list of input strings to tokenize + + context_length : int + The context length to use; all CLIP models use 77 as the context length + + truncate: bool + Whether to truncate the text in case its encoding is longer than the context length + + Returns + ------- + A two-dimensional tensor containing the resulting tokens, shape = [number of input strings, context_length]. + We return LongTensor when torch version is <1.8.0, since older index_select requires indices to be long. + """ + if isinstance(texts, str): + texts = [texts] + _tokenizer = SimpleTokenizer() + sot_token = _tokenizer.encoder["<|startoftext|>"] + eot_token = _tokenizer.encoder["<|endoftext|>"] + all_tokens = [[sot_token] + _tokenizer.encode(text) + [eot_token] + for text in texts] + + result = paddle.zeros((len(all_tokens), context_length), dtype='int64') + + for i, tokens in enumerate(all_tokens): + if len(tokens) > context_length: + if truncate: + tokens = tokens[:context_length] + tokens[-1] = eot_token + else: + raise RuntimeError( + f"Input {texts[i]} is too long for context length {context_length}" + ) + result[i, :len(tokens)] = paddle.to_tensor(tokens) + + return result