[리뷰] BiRefNet (1회독)

TL;DR BiRefNet 논문을 1회 읽어 보았다. 읽기도 벅찼다. 다음에 읽을게 많다. BiRefNet 정보 논문 제목: Bilateral Reference for High-Resolution Dichotomous Image Segmentation 저자: Peng Zheng, Dehong Gao, Deng-Ping Fan, Li Liu, Jorma Laaksonen, Wanli Ouyang, Nicu Sebe 링크: https://arxiv.org/pdf/2401.03407 목적 고해상도 이진 이미지 분할(DIS, Dichotomous Image Segmentation) 기존 모델(1, 2, 3, 4, 5)는 배경과 비슷한 경계 등을 잘 분리하지 못하는 한계가 있었음 핵심 아이디어 분리된 localization module과 reconsturction module을 사용해 높은 해상도의 이미지 DIS를 진행한다. ...

April 19, 2025 · 3 min · 470 words · Crispy

Map의 Resize 비용은 정말 클까

TL;DR 100만개의 item에 대해서 Map을 활용해 자료구조의 resizing 비용이 큰지 비교하는 간단한 실험입니다. 실험이 적절하지 않아 resize 비용이 속도에 영향을 주는 정도인지는 알 수 없었습니다. Map을 초기에 intialize해서 resize를 1번 일으키는 것보다 그냥 매번 resize를 일으키되 찾는 연산을 작은 데이터 셋에서 하는게 더 좋다는 것만 알게 되었습니다. Resizing을 줄이는게 의미 있을까? 뭔말이여 100만개의 데이터를 돌리는데 Resizing 비용이 아까웠다. [지난 실험][1]에서 백만개 item으로 구성된 json array에 대한 uniqueBy를 수행하면서, resizing 비용이 클거라는 생각에 직접 구현을 고민 했었습니다. 하지만 정말로 큰게 맞을까요? chatGPT에게 물어보니 초기에 값을 넣어주는 방식을 채택하면 resize에 들어가는 비용이 줄어든다고 하더군요. 합리적인 말이라고 생각해서 실험해보기로 했습니다. ...

December 28, 2024 · 4 min · 647 words · Crispy

100만개 item을 가장 빠르게 필터링하는 unique by를 만들어 보자

TL;DR native set, lodash, ImmutableJS의 Set을 이용한 uniqueBy 구현체의 속도/메모리 사용량/CPU 사용량을 봅니다. CPU 사용량이 많아지는 것에 대한 걱정이 없다면 ImmutableJS의 Set을 활용한 uniqueBy를 구현해 사용하세요. 꽤 많은 데이터에 대해서 uniqueBy를 빠르게 돌리고 싶다. 왜 와이 백만개 정도 되는 데이터를 돌릴 필요가 발생했다. 백만개 item 정도 되는 json array에 대한 uniqueBy를 할 필요가 생겼습니다. 실제로 백만개 item에 대해서 테스트는 하기 어려워서 그냥 native set을 이용해 개발했습니다. 개발을 하고 보니, 더 빠른 구조가 있을지 궁금해 졌습니다. chatGPT에 물어보니, TypedArray를 사용해 직접 구현하는 방법과 ImmutableJS를 이용해 구현하는 방법을 제안해 주었습니다. ...

December 25, 2024 · 5 min · 856 words · Crispy

노드에서 배치잡 돌리기(feat. child_process, cluster, worker_threads)

TL;DR node에서 배치잡을 돌리고 싶다. child_process, cluster, worker_thread 비교 io intensive + cpu intensive일 때의 비교 child_process 쓸거 함수별 사용 시점 정리 node에서 배치잡을 돌리고 싶다. 왜와이 쉽고 빠르게 배치작업을 하고 싶다. 일회성 배치작업을 해야 하는 상황이 생겼습니다. 쉽고 빠르게 익숙한 NodeJS로 배치작업을 하고 싶었습니다. io와 cpu 모두 사용하는 작업으로, 딱봐도 오래걸리는 작업이었습니다. 그냥 해보았습니다. 싱글 스레드로 작업을 진행했습니다. Promise.all로 일부 데이터만 작업을 진행했더니 20분이 걸렸습니다. 도저히 전체를 한번에 돌릴 수는 없다고 생각이 들었고, 빠르게 처리하는 방법을 찾게 되었습니다. ...

May 16, 2024 · 5 min · 1037 words · Crispy

JAVA Reflection API를 이용한 Annotation만들기

TL;DR Reflection이 뭔가 훑어 보기 Annotation이 뭔가 바라만 보기 Reflection으로 Annotation 다루기 Reflection이 뭔가 정의 Oracle의 문서에 따르면 Reflection의 정의는 아래와 같습니다. Reflection is commonly used by programs which require the ability to examine or modify the runtime behavior of applications running in the Java virtual machine. Reflection은 JVM에서 동작하고 있는 어플리케이션의 런타임 동작을 검사하거나 바꾸고자 할 때 사용하는 것이다. https://docs.oracle.com/javase/tutorial/reflect/ 주의할 점 성능 문제 야기 Reflection은 런타임에 동작을 합니다. 그렇기 때문에 동작을 할 때 JVM의 최적화 과정 일부가 동작하지 않을 수 있습니다. 그 결과 Reflection이 없는 코드와 비교했을때 느릴 수 있습니다. 보안상 제약 Reflection은 런타임에 동작해야 합니다. 그렇기 때문에 일부 보안이 중요한 맥락에서는 사용하기 어려울 수 있습니다. 내부가 드러남 Reflection은 때로 private등 가려진 정보들에 접근하게 됩니다. 이 때문에 예상치 못한 side effect가 발생할 여지가 생기고, 이식성(portability)에 영향을 줍니다. Annotation은 뭘까 정의 위키백과에 따르면 annotation의 정의는 아래와 같습니다. ...

March 16, 2024 · 3 min · 577 words · Crispy