Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

integrate SAM (segment anything) encoder with Unet #757

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
Rusteam wants to merge 26 commits into qubvel-org:main
base: main
Choose a base branch
Loading
from Rusteam:sam

Conversation

Copy link

@Rusteam Rusteam commented May 3, 2023
edited
Loading

Closes #756

Added:

  • SAM to models
  • 3 SAM backbones (vit_h, vit_b and vit_l) to encoders
  • unittests and docs for SAM

Changed:

  • flake8 pre-commit repo to github (current) and version to latest

attashe, csaroff, TezRomacH, tabikhm, jaminryu, and adamjstewart reacted with thumbs up emoji
@Rusteam Rusteam changed the title (削除) integrate SAM (segment anything) model and encoders (削除ここまで) (追記) Draft: integrate SAM (segment anything) model and encoders (追記ここまで) May 3, 2023
@Rusteam Rusteam changed the title (削除) Draft: integrate SAM (segment anything) model and encoders (削除ここまで) (追記) integrate SAM (segment anything) model and encoders (追記ここまで) May 5, 2023
Copy link
Author

Rusteam commented May 5, 2023

hi @qubvel is there any update on this?
I've just trained a model using this branch and it worked.

wm-mask reacted with thumbs up emoji

Copy link
Author

Rusteam commented May 14, 2023

@Rusteam is the code merged into the main repo??i want to use this model to fine-tune my data?

It's not. Not sure if @qubvel has had a chance to look into this PR. You could use my fork in the meanwhile. And do let me know how your fine-Tuning goes because I haven't had much success so far.

Copy link
Author

Rusteam commented May 15, 2023

@Rusteam how to train a model ,can u give some outlines?as author is not responding pls help me to train a model.. I have sent u an mail pls give a look

make sure you install this package from my fork pip instal git+https://github.com/Rusteam/segmentation_models.pytorch.git@sam and then initialize your model as usual create_model("SAM", "sam-vit_b", encoder_weights=None, **kwargs) and run your training. You could pass weights="sa-1b" in kwargs if you want to fine-tune from pre-trained weights.

So far I have been able to train the model, but I can't say it's learning. I'm still struggling there. Also I cannot fit more than 1 sample per batch on a 32gb gpu with a 512 input size.

Copy link

Copy link
Author

Rusteam commented May 16, 2023

thanks for sharing, I'll try it if my current approach does not work. I've able to get some learning with this transformers notebook

Copy link
Collaborator

qubvel commented May 17, 2023

Hi @Rusteam, thanks a lot for your contribution and sorry for the delay, I am going to review the request and will let you know

Copy link
Author

Rusteam commented May 17, 2023

Hey hey hey. While this solution worked I can't say the model was able to learn on my data. We might need to use the version before my ddp adjustments or make the model handle points and boxes as inputs, or use Sam image encoder with unet or other architectures.

from typing import Optional, Union, List, Tuple

import torch
from segment_anything.modeling import MaskDecoder, TwoWayTransformer, PromptEncoder
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is it a pip package? probably need to add to reqs

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

just added it to reqs, or should we make it optional?

Copy link
Collaborator

qubvel commented May 17, 2023

Yes, I was actually thinking about just pre-trained encoder integration, did you test it?

Copy link
Author

Rusteam commented May 18, 2023

can we use this model to train on custom data??

@qubvel It didn't work with Unet yet, but I can make it work. Which models would be essential to integrate?

Copy link
Author

Rusteam commented May 18, 2023
edited
Loading

@Rusteam @qubvel can we use this model to train on custom data??

that was my intention as well, but I was unable to make it learn without passing box/point prompts. However, when passing a prompt along with input image, it does learn. We might need to integrate multiple inputs to forward() call for it to work, or just use sam's image encoder with other arches like Unet

Copy link

siddpiku commented Jul 5, 2023

The following worked for me:
-git clone the sam branch,
-modify the sam.py file like below to get rid of the errors:
-change def forward(self, x: torch.Tensor) -> list[torch.Tensor]: to def forward(self, x: torch.Tensor):

  • import segmentation_models_pytorch as smp (python file in same folder as git clone branch)
  • smp.create_model("Unet", "sam-vit_b", encoder_weights="sa-1b", encoder_depth=4, decoder_channels=[256, 128, 64, 32])
  • Try training
    What did not work -
  • For me, I tried fine tuning with 2 RTX A6000 GPU with batch size of 2 on the ACDC data (https://www.creatis.insa-lyon.fr/Challenge/acdc/databases.html) but my Dice loss did not improve after 700 epochs. (Maybe some other setting works, but I did not have time to recreate it)

Copy link
Author

Rusteam commented Jul 13, 2023

@qubvel hey any updates?

iwaitu, RGring, frkangul, semaphore-egg, Rusab, agentdr1, murdav, csaroff, and WalidGharianiEAGLE reacted with thumbs up emoji

Copy link

Rusab commented Sep 6, 2023

Please add this, this library hasn't have new features for a long time

Copy link

github-actions bot commented Nov 6, 2023

This PR is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 15 days.

Copy link

csaroff commented Nov 17, 2023

Is this PR ready?

Copy link
Author

Rusteam commented Nov 18, 2023

It's ready.

Copy link

17SIM commented Nov 21, 2023

The current PR seems to work with image with the size of 1024x1024 only.

Copy link
Author

Rusteam commented Nov 21, 2023

Yes, as the original Sam model

Copy link

This PR is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 15 days.

Copy link

Any progress on this?

Copy link

Rusab commented Jan 29, 2024

Why is the library dying? no new updates in a long time

Copy link

This PR is stale because it has been open 60 days with no activity. Remove stale label or comment or this will be closed in 15 days.

Copy link
Author

Rusteam commented Mar 30, 2024

@qubvel can you merge this? It did work

Copy link

@Rusteam Consider contributing this to TorchSeg

Copy link
Collaborator

@qubvel should we revive this PR? @giswqs may be interested in this.

Copy link

giswqs commented Jan 18, 2025

Copy link

isaaccorley commented Jan 18, 2025
edited
Loading

I think you can already do this because timm supports the SAM ViT weights like:

Unet("tu-samvit_base_patch16.sa1b")

adamjstewart reacted with hooray emoji

Copy link
Collaborator

But I'm not sure how well SAM works with U-Net instead of their own custom decoder.

Copy link

Agreed, it's likely highly dependent on the prompt embeddings as well.

Copy link

I don't think SAM works out of the box like this.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Reviewers

@qubvel qubvel qubvel requested changes

Requested changes must be addressed to merge this pull request.

Assignees
No one assigned
Labels
None yet
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

SAM backbone integration

AltStyle によって変換されたページ (->オリジナル) /