MobileSAM
MobileSAM은 SAM의 ViT-H 이미지 인코더를 증류된 TinyViT 인코더로 대체하여 같은 프롬프트 기반 포인트 및 바운딩 박스 워크플로를 더 가벼운 하드웨어에서 실행합니다. LibreYOLO는 LibreYOLO() 탐지기 팩토리와 별도의 전용 LibreSAM 팩토리를 통해 네이티브 포트를 제공합니다.
- 작업
- instance segmentation
- 크기
- tiny at 1024 px
- 설치
pip install libreyolo- 지원 티어
- 별도 티어, v부터 지원. 자체 팩토리와 계약을 갖춘 별도의 제품 영역입니다.
- 라이선스
- 코드 Apache-2.0, 가중치 Apache-2.0. 상업적 사용
설치
MobileSAM에는 sam extra가 필요합니다. 추론은 네이티브 비 transformers
디코더에서 실행하지만 LibreYOLO 자체 가중치 내려받기는 여전히 transformers의
Hugging Face 스냅샷 도구를 사용합니다.
pip install "libreyolo[sam]"예측
LibreSAM(...) 또는 계열별 LibreMobileSAM(...)은 LibreYOLO(...)와 별도의
진입점입니다. 여기서는 공간 프롬프트 없이는 순전파가 의미 없으므로 탐지기가 아니라
프롬프트 가능 분할기를 반환합니다. 이 계열에는 libreyolo predict CLI 명령이
없으므로 Python API를 사용합니다.
from libreyolo import LibreSAM, SAMPLE_IMAGE # MobileSAM은 "tiny" 한 크기만 있으므로 다른 별칭이 필요하지 않습니다.model = LibreSAM("mobilesam") # 포인트 프롬프트: 픽셀 좌표 [x, y], 레이블 1은 전경입니다.result = model.predict(SAMPLE_IMAGE, points=[640, 420], labels=[1])print(result.masks.xy) # 마스크별 폴리곤print(result.boxes.xyxy) # 마스크에서 파생된 꼭 맞는 바운딩 박스 # 포인트 대신 바운딩 박스 프롬프트를 사용합니다.result = model.predict(SAMPLE_IMAGE, bboxes=[300, 200, 900, 700]) # 프롬프트가 없으면 전체 이미지를 분할합니다. 단순화된 자동# 마스크 생성기이며 전체 기능을 갖춘 참조 구현은 아닙니다.result = model.predict(SAMPLE_IMAGE)from libreyolo import LibreMobileSAM, SAMPLE_IMAGE model = LibreMobileSAM() # 이미지 인코더의 비용이 큽니다. set_image()로 한 번 실행하면# 이후 모든 predict() 호출이 캐시된 임베딩을 재사용합니다.model.set_image(SAMPLE_IMAGE)a = model.predict(points=[640, 420], labels=[1])b = model.predict(bboxes=[300, 200, 900, 700])model.reset_image()포인트 프롬프트는 객체 하나에 [x, y], 여러 객체에 [[x, y], ...] 또는 NumPy
배열을 허용합니다. labels는 각 포인트를 1(전경) 또는 0(배경)으로 표시하며
기본값은 모두 전경입니다. 바운딩 박스 프롬프트는 [x1, y1, x2, y2] 또는 바운딩
박스 목록을 받으며 바운딩 박스마다 마스크 하나를 생성합니다. 두 프롬프트를 모두
생략하면 밀집 그리드로 프롬프트하고 신뢰할 수 있으며 겹치지 않는 마스크를 유지하여
전체 이미지를 분할합니다. 이 "모두 분할" 모드는 참조 자동 마스크 생성기보다
단순화되어 혼잡한 장면을 충분히 분할하지 못할 수 있으므로 실제 포인트 또는 바운딩
박스 프롬프트가 정확한 경로입니다. conf는 탐지 신뢰도가 아니라 예측한 마스크
품질(IoU)을 기준으로 필터링합니다. 모든 후보를 유지하려면 0.0을 전달합니다.
multimask=True는 가장 좋은 하나 대신 프롬프트마다 SAM의 전체 객체와 부분 객체
모호성 마스크 3개를 모두 반환합니다. device=는 모델을 이동하며 set_image()
세션이 활성 상태이면 캐시된 임베딩도 이동합니다. 프롬프트 가능 마스크에는 고정
클래스 집합이 없으므로 모든 마스크에는 이름이 "object"인 클래스 ID 0이
지정됩니다. 이 계열에서 train(), val(), export(), track()은 모두
NotImplementedError를 일으킵니다. LibreYOLO에서 MobileSAM은 예측 전용입니다.
소스 유형은 예측을 참조합니다.
변형
고정 1024 px 입력을 사용하는 tiny 한 크기만 있습니다. MobileSAM은 SAM-1의 base, large, huge 단계 대신 단일 TinyViT 인코더를 제공합니다.
체크포인트
이 계열에서 공개된 모든 가중치 파일입니다.
| 파일 | 입력(px) | 가중치 라이선스 |
|---|---|---|
| Instance segmentation | ||
| LibreMobileSAM.pt | apache-2.0 | |
위의 모든 파일은 현재 LibreYOLO 조직에 있으며 처음 사용할 때 내려받습니다.
라이선스
내려받는 특정 가중치의 Hugging Face 저장소에서 라이선스를 확인하십시오. LibreYOLO 조직의 모든 체크포인트에는 라이선스가 있으며 한 계열 안에서도 항상 같지는 않습니다. 해당 저장소가 신뢰할 수 있는 기준입니다. 아래 요약은 이 페이지를 마지막으로 검증했을 때 적용된 내용을 설명합니다.
관련 라이선스에 관한 설명이며 법률 자문이 아닙니다. 상업적으로 중요한 사안이라면 라이선스를 직접 읽고 별도의 법률 자문을 받으십시오.
- 원작
- MobileSAM, Kyung Hee University
- 업스트림 라이선스
- Apache-2.0
- LibreYOLO 코드
- MIT
- 가중치
- Apache-2.0, huggingface.co/LibreYOLO에 다시 게시됨
- 해석
- Apache-2.0 is a permissive license, so this code and these weights can be used in commercial and closed-source products. It asks you to keep the license text and attribution notices with any copy you redistribute, and it grants a patent license. LibreYOLO carries a native port of the TinyViT image encoder, prompt encoder, two-way transformer and mask decoder rather than vendoring upstream files unmodified, checked for bit-exact parity against the original Apache-2.0 implementation, with a NOTICE recording that provenance. The converted checkpoint is hosted as LibreMobileSAM.pt on the LibreYOLO Hugging Face org, tagged Apache-2.0 there as well.
인용
@article{mobile_sam,
title={Faster Segment Anything: Towards Lightweight SAM for Mobile Applications},
author={Zhang, Chaoning and Han, Dongshen and Qiao, Yu and Kim, Jung Uk and Bae, Sung-Ho and Lee, Seungkyu and Hong, Choong Seon},
journal={arXiv preprint arXiv:2306.14289},
year={2023}
}github.com/ChaoningZhang/MobileSAM#bibtex-of-our-mobilesam에 있는 저자의 인용 블록에서 복사했습니다.