[lmdb] lmdb 파일 쓰기 및 읽기
·
Etc
lmdb는 embeded key-value 데이터베이스 엔진입니다. 그렇기 때문에 빠른 속도로 데이터 쓰기 및 읽기가 가능하고 메모리 사용량도 낮습니다. 이러한 장점 덕분에 대규모 데이터를 사용하는 딥러닝 학습에도 자주 쓰입니다.  - lmdb 파일 만들기   lmdb에 이미지 경로와 이미지 값을 저장하는 경우라고 생각해볼게요. 먼저 데이터베이스를 열어줍니다.import lmdbenv = lmdb.open('이미지폴더 경로', map_size=int(1e12)) 또한 key, value 모두 bytes 형식으로 저장하므로 encode함수를 사용합니다.  이미지도 bytes로 저장할거기 때문에 opencv나 PIL로 읽는 것이 아닌 open 함수로 읽어주었습니다.with env.begin(write=Tru..
sd-x2-latent-upscaler 모델로 image upscale 하기
·
Etc
diffusion을 기반으로 하는 image upscale 모델이 아주 많은데요.많이 쓰이는 모델 중 하나인 sd-x2-latent-upscaler를 이용해 image upscale을 진행해보겠습니다. 전체 코드는 아래와 같습니다.from diffusers import StableDiffusionLatentUpscalePipelineimport torchupscaler = StableDiffusionLatentUpscalePipeline.from_pretrained("stabilityai/sd-x2-latent-upscaler", torch_dtype=torch.float16)upscaler.to("cuda")prompt = "(photorealistic:1.4), best quality"generato..
safetensor 모델을 diffusers에서 사용 가능하게 변경하기
·
Etc
diffusion을 사용하시는 분들이라면  civitai에서 다양한 모델을 다운받아 사용하실텐데요. civitai에서는 모델을 .safetensors의 형태로 제공합니다. 하지만 diffusers에서는 scheduler, text_encoder, tokenizer, unet, vae 가 각각 다른 폴더에 저장되어 있는 파일 구조를 원합니다. 이를 위해 diffusers에서 제공하는 convert_original_stable_diffusion_to_diffusers.py를 사용하면 됩니다. 코드는 아래 github에서 제공하고 있습니다. https://github.com/huggingface/diffusers/blob/main/scripts/convert_original_stable_diffusion_to..
[JNI] jbyte를 C++의 vector<uchar>로 변환하는 방법
·
Etc
이번 포스팅에서는 매개변수로 받은 jbyte형 변수를 C++의 vector 자료형으로 변환하는 방법에 대해 설명하겠습니다! JNI 함수 쪽에서 아래와 같은 과정을 통해 변환해주면 됩니다.void byte2char( JNIEnv *env, jclass obj, jbyteArray tmp){ int tmp_len = env->GetArrayLength(tmp); unsigned char* tmpBuffer = new unsigned char[tmp_len]; env->GetByteArrayRegion(tmp, 0, tmp_len, reinterpret_cast(tmpBuffer)); vector newtmp(*tmpBuffer, tmp_len);}1. 먼저, ..