Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
af9f3c6
docs: mkdocs 전용 정의목록을 GitHub 이 읽는 문법으로 (26곳)
Aug 21, 2026
f5b5de7
fix(run_frcnn): SparseR-CNN 이 마지막 단계 박스 정제를 건너뛰고 있었다
Aug 24, 2026
4e157d0
fix(frcnn_wrap): groie 거절 사유를 실제 남은 한계로 바꾼다
Aug 24, 2026
67ae1aa
docs(frcnn_wrap): groie 거절 사유 갱신 — 남은 벽은 6D energy 하나
Aug 24, 2026
106d175
fix(frcnn_wrap): groie 거절 삭제 — 컴파일 게이트가 이유를 말한다
Aug 24, 2026
752103b
feat(verify): 마스크 로짓 축 — 코드는 공통, 게이트는 groie 하나
Aug 25, 2026
0ca1bdb
feat(verify): box_all.py — one-stage 박스 전수 드라이버를 저장소에 둔다
Aug 25, 2026
44a5657
fix(frcnn_wrap): FastRCNN 은 rpn_head 가 없다 — 한 줄이 그걸 직접 읽고 있었다
Aug 25, 2026
7aae19d
fix(append_head_weights): head 가중치도 GTX_GGUF_F32 를 따른다 — 섞이면 세그폴트
Aug 25, 2026
e77467f
fix(verify_postproc): 러너와 기준값에 **같은 픽셀**을 준다 — 각자 jpg 를 열고 있었다
Aug 25, 2026
3a1ded8
feat(verify_postproc_roi): --workers — 가용 메모리를 읽어 스스로 낮춘다
Aug 25, 2026
5eb6eab
feat(frontend): GLIP 을 이미지 하나만 받는 모듈로 감싼다 — 융합헤드까지 한 그래프로
Aug 27, 2026
94b95e0
feat(mmseg): 세그멘테이션 계열을 잴 수 있게 한다 — 래퍼 + 하네스, depthwise dilation 수정
Aug 27, 2026
a3a1465
feat(mmpose): 포즈 계열을 잴 수 있게 한다 — 래퍼 + 하네스, 러너가 비정방 입력을 받는다
Aug 27, 2026
74f65c2
fix(verify): 계열별 입력 크기를 쓰고, 메모리 가드를 넣는다 + GLIP 박스 디코드 참조 구현
Aug 27, 2026
8d05551
fix(nn): conv 을 축별로 받게 넓힌다 — 비대칭 conv 이 조용히 대칭으로 돌고 있었다
Aug 27, 2026
af6c66b
refactor(verify): 하네스를 생태계 축으로 재편한다 — frontend/ 와 같은 축으로
Aug 27, 2026
e67ee1e
feat(verify): 층별 프로브를 저장소로 들인다 — 어디서 값이 벌어지는지 가른다
Aug 27, 2026
6ec6bb5
fix(nn): PReLU 를 정확히 낸다 — 0.25 근사는 랜덤 가중치에서만 맞았다
Aug 27, 2026
7f52009
fix(frontend): cascade decode head 를 부른다 — 「범위 밖」이 아니라 하네스가 못 부른 것이었다
Aug 28, 2026
fc069b4
perf(verify): mmseg 스윕을 병렬로 돌린다 — 계열당 52초 중 추론은 6초뿐이다
Aug 28, 2026
61b9763
feat(verify): MaskFormer 계열 프론트엔드 글루 + 층별 프로브
Aug 28, 2026
0a57698
feat(verify): 계열 무관 프로브(bb/neck) + mmpose 메모리 게이트에 락
Aug 28, 2026
1c1b19a
mmseg 하네스: emanet metafile 오타 예외·san 멀티모달·point_rend cascade predict
Aug 31, 2026
9dfef8b
feat(frontend/runtime): as_f32 헬퍼 · PointRend/SAN 프론트엔드 shim · 하네스 단계 표시
Aug 31, 2026
363278f
feat(nn): conv_2d_wt_dw — 동적 weight 의 depthwise conv (DMNet DCM)
Aug 31, 2026
e447522
feat(nn): conv_2d_depthwise_ex — 축별 strip conv (MSCAN 1x7/7x1)
Aug 31, 2026
eb772bb
verify: 못 잰 것을 실패로 적던 자리 셋을 고친다
Sep 1, 2026
727dfd4
verify: 계열별 입력 크기 표를 만들고 dense_head 경로를 고친다
Sep 1, 2026
c2ff2ea
runner: vision-cli 가 비정사각 입력을 받게 한다
Sep 1, 2026
7f611da
frontend: 세그·포즈 래퍼가 mmdet 규약을 따르게 한다
Sep 1, 2026
b135765
install_arch: 클래스 수 자동판별이 한 번도 동작한 적 없었다
Sep 1, 2026
0700eb5
tools: add_model.sh — 컴파일·등록·재빌드를 한 번에
Sep 2, 2026
2eccc05
install_arch: g2c 가 남긴 meta.json 을 기본값으로 읽는다
Sep 2, 2026
d9125f9
Revert "install_arch: g2c 가 남긴 meta.json 을 기본값으로 읽는다"
Sep 2, 2026
ae3a325
Revert "tools: add_model.sh — 컴파일·등록·재빌드를 한 번에"
Sep 2, 2026
787f090
cli: v8~v12 의 붙은 출력(4+nc)을 잘라 쓴다
Sep 2, 2026
aeda36e
preprocess: YOLO 계열에 letterbox 를 넣는다
Sep 2, 2026
a92ee70
tools: vision-install 을 넣고 arch 선택 빌드를 연다
Sep 4, 2026
2416a9f
install: 설치본이 자기 위치에서 라이브러리를 찾게 한다
Sep 4, 2026
788e9e3
cli: NPU 실행에 CPU 폴백을 넣는다
Sep 7, 2026
c6f9598
visp: mmdet 실행 경로를 라이브러리로 들인다
Sep 7, 2026
aca2323
cli: 손코딩 arch 다섯 경로에도 CPU 폴백을 적용한다
Sep 7, 2026
49ca4c1
cli: op 종류를 CPU 로 못박는 G2C_NPU_PIN_OPS 를 넣는다
Sep 9, 2026
d480fb2
cli: 그래프 op 분포를 찍는 G2C_NPU_OP_CENSUS 를 넣는다
Sep 9, 2026
6a84399
cli: conv 텐서 stride 덤프와 노드 번호 핀을 넣는다
Sep 9, 2026
d257b5b
nn: conv 를 im2col+mul_mat 로 쪼개는 VISP_CONV_IM2COL 를 넣는다
Sep 9, 2026
177401b
gtx_smoke: relu 단계를 넣고 장치가 맡은 op 을 찍는다
Sep 9, 2026
fb6c639
gtx_smoke: --limits 로 커널별 크기 한계표를 낸다
Sep 9, 2026
9b583bf
fix(pose): preserve nested outputs and non-image verification paths
Oct 6, 2026
0929235
feat: execute MMLab graph recipes with a shared vision runtime
Oct 7, 2026
7a33a26
feat: build MMLab architectures from GGUF module configuration
Oct 7, 2026
11b65ae
chore: remove Ultralytics YOLO paths (license)
Oct 19, 2026
1dab192
fix: keep MMDetection aspect ratio, channel order and ResNet example …
Oct 20, 2026
b76d4bd
feat: assemble native GLIP fixed-text fusion heads
Oct 7, 2026
f797170
fix(nn): build reflect padding from two-input concats
Oct 22, 2026
04c60e4
build: move the GTX NPU backend out of depend/llama
Oct 26, 2026
8cf9f49
fix(gtx): freeze wire op ids instead of deriving them from the ggml enum
Oct 26, 2026
6609a8c
fix(mmlab): label MMLab detections with class names and draw only sco…
Oct 29, 2026
c2dafcd
fix(cli): write drawn MMLab detections to <output>.json
Oct 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
build
build-*/
install
.vscode
.vtune
Expand Down
24 changes: 21 additions & 3 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ option(VISP_INSTALL_MODELS "Download and install default models" ${VISP_PACKAGE}
option(VISP_FMT_LIB "Use external fmt library instead of standard C++ <format>" OFF)
option(VISP_STATIC_GGML "Force static build of ggml" OFF)
option(VISP_ASAN "Enable AddressSanitizer" OFF)
option(GGML_GTX "Build the GTX NPU ggml backend (depend/ggml-gtx)" OFF)

include(GNUInstallDirs)
set(VISP_INCLUDE_INSTALL_DIR ${CMAKE_INSTALL_INCLUDEDIR} CACHE PATH "Location of header files")
Expand Down Expand Up @@ -102,6 +103,13 @@ else()
set(VISP_NO_WARNINGS -w)
endif()

# 설치본은 자기 위치 기준으로 라이브러리를 찾는다. ggml 을 포함한 모든 공유 라이브러리가
# 같은 디렉터리에 설치되므로 $ORIGIN 하나면 되고, 이 값이 없으면 <prefix>/lib 가 로더
# 검색 경로가 아닌 환경에서 실행이 `cannot open shared object file` 로 실패한다.
if(NOT APPLE AND NOT WIN32)
set(CMAKE_INSTALL_RPATH "\$ORIGIN")
endif()

# Dependencies

add_subdirectory(depend/stb)
Expand Down Expand Up @@ -143,6 +151,11 @@ endif()
# 갈린다(`char name[GGML_MAX_NAME]` 이 구조체 레이아웃이다).

add_subdirectory(depend/llama/ggml)
# GTX NPU 백엔드는 depend/llama 밖(depend/ggml-gtx)에 둔다. depend/llama 가 upstream 태그를
# 그대로 가리켜야 클론한 사람이 서브모듈을 받을 수 있다(g2c DECISIONS.md 「GGML_MAX_NAME」).
if(GGML_GTX)
add_subdirectory(depend/ggml-gtx)
endif()
set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_SAVED})

# Vision.cpp libraries and executables
Expand All @@ -166,6 +179,10 @@ install(TARGETS visioncpp
RUNTIME DESTINATION ${VISP_BIN_INSTALL_DIR}
LIBRARY DESTINATION ${VISP_LIB_INSTALL_DIR}
ARCHIVE DESTINATION ${VISP_LIB_INSTALL_DIR})

# libvisioncpp 는 ggml 라이브러리와 같은 디렉터리에 설치된다. 그 자리를 자기 기준으로 찾게
# 해야 <prefix>/lib 가 로더 검색 경로에 없는 환경에서도 열린다.
set_target_properties(visioncpp PROPERTIES INSTALL_RPATH "\$ORIGIN")
install(DIRECTORY include/ DESTINATION ${VISP_INCLUDE_INSTALL_DIR})
if(PROJECT_IS_TOP_LEVEL)
install(FILES README.md LICENSE DESTINATION .)
Expand All @@ -176,9 +193,10 @@ endif()

install(TARGETS vision-cli RUNTIME DESTINATION ${VISP_BIN_INSTALL_DIR})

if(VISP_CI OR VISP_DEV)
set_target_properties(vision-cli PROPERTIES INSTALL_RPATH "\$ORIGIN/../${VISP_LIB_INSTALL_DIR}")
endif()
# 설치본은 자기 위치 기준으로 라이브러리를 찾는다. 이 값이 없으면 CMake 가 RPATH 를 비워
# 설치하고, <prefix>/lib 가 로더 검색 경로가 아닌 환경에서 실행이
# `libvisioncpp.so.0: cannot open shared object file` 로 실패한다.
set_target_properties(vision-cli PROPERTIES INSTALL_RPATH "\$ORIGIN/../${VISP_LIB_INSTALL_DIR}")

install(DIRECTORY bindings/python DESTINATION . PATTERN "__pycache__" EXCLUDE)

Expand Down
14 changes: 1 addition & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,8 @@ New here? [**Getting started**](docs/getting-started.md) walks through a first r
| [**Depth-Anything**](#depth-anything-v2) | Depth estimation | CPU, Vulkan |
| [**MI-GAN**](#mi-gan) | Inpainting | CPU, Vulkan |
| [**ESRGAN**](#real-esrgan) | Super-resolution | CPU, Vulkan |
| [**YOLOv9t**](#yolov9t) | Object detection | CPU |
| [**MMDetection** models](docs/mmdet-detectors.md) | Object detection, segmentation, tracking | CPU |
| [**Compiled PyTorch models**](docs/mmdet-detectors.md#models-whose-head-survives-tracing) | Any traceable `nn.Module` — ultralytics YOLO, torchvision · needs the compiler, [GTX_Compiler](https://github.com/Sudo42b/GTX_Compiler), which carries this repository as a submodule | CPU |
| [**Compiled PyTorch models**](docs/mmdet-detectors.md#models-whose-head-survives-tracing) | Any traceable `nn.Module`, e.g. torchvision · needs the compiler, [GTX_Compiler](https://github.com/Sudo42b/GTX_Compiler), which carries this repository as a submodule | CPU |
| [_Implement a model [**Guide**]_](docs/model-implementation-guide.md) | | |

**Backbones:** SWIN (v1), DINO (v2), TinyViT
Expand Down Expand Up @@ -136,17 +135,6 @@ vision-cli migan -m MIGAN-512-places2-F16.gguf -i image.png mask.png -o output.p
vision-cli esrgan -m RealESRGAN-x4plus_anime-6B-F16.gguf -i input.png -o output.png
```

#### YOLOv9t

YOLOv9t object detection (anchor-free, DFL decode). The arch is self-contained
(`ELAN1` / `RepNCSPELAN4` / `SPPELAN` blocks + detection head with `make_anchors`
/ `dist2bbox` / DFL) and builds into `libvisioncpp`.

[Paper (arXiv)](https://arxiv.org/abs/2402.13616) | [Repository (GitHub)](https://github.com/WongKinYiu/yolov9) | License: GPL-3.0

Used via the library API (`visp::yolov9t::yolov9t_forward`) — no dedicated
`vision-cli` subcommand yet. Weights are GGUF (`general.architecture = "yolov9t"`).

Models need to be converted to GGUF before they can be used. This will also
rearrange or precompute tensors for more optimal inference.

Expand Down
43 changes: 43 additions & 0 deletions depend/ggml-gtx/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# GTX NPU backend for ggml.
#
# It lives here rather than inside depend/llama so that depend/llama can point at an
# upstream tag without local patches. ggml's own registry does not know this backend,
# so visp registers it at startup (load_ggml_backends in src/visp/ml.cpp).

message(STATUS "Using GTX NPU backend")

# ggml_add_backend_library 는 GGML_VERSION(_MAJOR) 로 so 버전을 붙인다. 그 변수는 ggml 폴더
# 안에서만 정의되므로 ggml 타깃에 붙은 값을 가져온다.
get_target_property(GGML_VERSION ggml VERSION)
get_target_property(GGML_VERSION_MAJOR ggml SOVERSION)

ggml_add_backend_library(ggml-gtx
src/ggml-gtx.cpp
src/pcie_irq_host.cpp
)

target_include_directories(ggml-gtx
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/include
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_SOURCE_DIR}/depend/llama/ggml/src) # ggml-impl.h, ggml-backend-impl.h

# Consumers of ggml (visioncpp, vision-cli) see this and register the backend.
target_compile_definitions(ggml-gtx PUBLIC GGML_USE_GTX)

# GTX backend requires Windows (for PCIe driver) or Linux (for /dev/gtx*)
if (WIN32)
# Windows: SetupAPI for device enumeration, could also need custom driver lib
target_link_libraries(ggml-gtx PRIVATE setupapi)
target_compile_definitions(ggml-gtx PRIVATE GGML_GTX_WINDOWS)
elseif (UNIX AND NOT APPLE)
# Linux: mmap for BAR access
target_compile_definitions(ggml-gtx PRIVATE GGML_GTX_LINUX)
else()
message(WARNING "GTX backend may not work on this platform: ${CMAKE_SYSTEM_NAME}")
endif()

# Shared library export definitions
if (BUILD_SHARED_LIBS)
target_compile_definitions(ggml-gtx PRIVATE GGML_GTX_BUILD)
target_compile_definitions(ggml-gtx PUBLIC GGML_GTX_SHARED)
endif()
Loading
Loading