d2f (digital 2 film)
deep learning-based film grain and color synthesis
๐ 25.01.31 ~ Temporary suspension
๐ Tech Stack
- mlx framework
- python / pytorch
- etcโฆ
๐ฏ Why Start This?
Since Iโm unsure about what I want to beโa businessman, a startup member, a personal developer, or something elseโIโve been feeling uneasy these days. However, one thing Iโve realized is that I have a strong desire to solve problems or fulfill my own needs by learning new skills, such as AI, circuit design, and system development. Whether intentional or not, I have a day off today, so Iโm setting aside my future plans and immersing myself in this project.
Final goal is :
- making active users with my product
- finishing with a level of completeness that makes it presentable
Praying for myself ๐งฏ
๐ญ Why suspension?
-
Resource limitration
-> i canโt run EfficientDet(which is purposed for efficiency, using the feature fusion tech.) or ViT -
The max capa of my M2 air 16gb with proper batch size is UNET-512
-
The film grain and colour complexity is not that easy, i thought as i have the my own data i can make it but unlike other tasks that deals with a specific purpose,
considering 2 factors in one pipeline
is complex. -
Deployment is not my style
. If the product is all made, i could tried but without any motivation it was hard for me to learn the AWS tools. -
Also, thought
data
is enough (375 pics) since it has high resolutions(2048x3089). but as we need to use it with resized data to fit in memory and make model capture the overall colour. Itwas not enough
.
๐ What i have learned?
-
Unsupervised Denosier๋ฅผ ์ฝ์ผ๋ฉด์ model ์์ฒด๋ฅผ ํ๋์ ์ด๋ฏธ์ง์ denosing์ ์ํด์ ์ฌ์ฉํ๋ค๋ ์ ์ด ๋๋ผ์ ๋ค. ๋๋ถ๋ถ์ ๋ชจ๋ธ์ ํ์ตํ๊ณ freeze๋ ์ํ์์์ ๊ฒฐ๊ณผ๋ฌผ ์ถ๋ก ์ ๊ธฐ๋ํ๋๋ฐ, ์ด ๋ ผ๋ฌธ์์๋
๋ชจ๋ธ์ ํ๋์ ์ฌ๊ทํจ์์ฒ๋ผ
์ฌ์ฉํ์ฌ prior๋ฅผ ๋ฐ๋ผ๊ฐ๋๋ก ๋ง๋๋ ๊ณผ์ ์ด ๋๋ฌด๋ ์ ๊ธฐํ๊ณ , ์ด๋ฌํ ๊ฐ๋ ์ ์ดํดํ๊ธฐ ์ํด์ํ๋ฅ ์ด ์ผ๋ง๋ ์ค์ํ์ง
๋ฅผ ์ ์ ์์๋ค. ํนํ AMDD์ด๋ผ๋ ๋ฐฉ๋ฒ์ ์๋ฒฝํ๊ฒ ์ดํดํ์ง๋ ๋ชปํ์ง๋ง, ๋ ธ์ด์ฆ ์ด๋ฏธ์ง ๋ง์ ๊ฐ์ง๊ณ ๋๋ ธ์ด์ง์ ํด๋์ ๋ ๊ณผ์ ์์์ ํ๋ฆฌํฐ๋ ์ข์๊ณ , ๋ชจ๋ธ์ ๋ฐ๋ผ๋ณด๋ ์๋ก์ด ๊ด์ ์ ๋๋ ์ ์์๋ค. -
pytorch์ ํ์ต์ ๋ํ(vision model ์ค์ฌ) convention์ ๋ง์ด ์ตํ ์ ์์๋ค. ํนํ UEGAN์
IEEE T-IP
์ ๊ฐ์๋ ๋ ผ๋ฌธ์ผ๋ก CVPR, ECCV์ ๊ฐ์ ์๋๊ฐ ์๋ ์ฐ๊ตฌ์ ๋ฌ๋ฆฌ ์ฐ๊ตฌ์ ์์ฑ๋๋ฅผ ๋๋ ์ ์์์ผ๋ฉฐ, ํด๋น source code๋ฅผ ์ฝ์ด๋ณด๋ฉด์ pytorch ํ์ต์ ๋ํ ์ผํ ๋ถ๋ถ๋ค์ ํ์ตํ ์ ์์๋ค. ํนํ IEEE T-IP ํน์ฑ์ธ์ง ์ฝ๋๊ฐ ๊ต์ฅํ ๊น๋ํ๊ฒ ์ ๋ฆฌ๋์ด์์๊ณ ,๊น๋ํ ์ฝ๋๊ฐ ๊ฐ๋ ์ฑ์ ์ผ๋ง๋ ๋์์ด ๋ง์ด๋๋์ง
๋ฅผ ์ ์ ์์๋ค. ์ด์ ๊น์ง๋ ์ฝ๋๋ฅผ ๋ณด๋ฉด์ ์ด๋ถ๋ถ๋ ์ค์ํ ์ญํ ์ธ๊ฐ์ ๋ํ ์ง๊ด์ด ์์๋ค๋ฉด, UEGAN ๋ฟ๋ง ์๋๋ผ ๋ค์ํ pytorch code implementation์ ๋ณด๋ฉด์ ์ด๋ค ๋ถ๋ถ์ ์ง์ค์ ์ผ๋ก ๋ด์ผํ๊ณ , ์ด๋ค ๋ถ๋ถ์ convention์ ์ธ์ง ๊ตฌ๋ถํ๋ ์ง๊ด์ ๊ฐ์ง๊ฒ ๋์๋ค. -
model training์์
๋ฉ๋ชจ๋ฆฌ์ computation์ ํจ์จ์ฑ
๊ณผ capacity์ ์ค์์ฑ์ ๋๋ ์ ์์๋ค. ํนํ ๋ ์ฑ๋ฅ ์ข์ ๋ชจ๋ธ์ ์ํด์ ๊ฐ์ค์น๋ฅผ ๋์ด๋ฉด ๊ฐ์ค์น ๊ฐฏ์๊ฐ ์ฆ๊ฐํ๋ ๊ฒ๋ ๋ฌธ์ ์ง๋ง, ํด๋น ๊ฐ์ค์น์ grad๋ฅผ ์ถ์ ํ๊ธฐ ์ํด์ ์ฌ์ฉ๋๋ ๋ฉ๋ชจ๋ฆฌ๋๋ ๋์ด๋๊ธฐ ๋๋ฌธ์ ์ผ๋ง๋ ์ฑ๋ฅ์ด ๋ฉ๋ชจ๋ฆฌ ์ง์ฝ์ ์ธ์ง๋ฅผ ๋๋ ์ ์์๋ค. ๋ ๋ชจ๋ธ์ computation ๋ฅ๋ ฅ์ ๋นํด์memory w/r ๋น์จ์ด ๋์ผ๋ฉด ์ฑ๋ฅ ๋นํจ์จ
์ด ๋ฐ์ํ๊ธฐ ๋๋ฌธ์ prefetcher์ ๊ฐ์ ๋ฐ์ดํฐ ๋ก๋๋ฅผ ์ฌ์ฉํ๊ฑฐ๋, tqdm๊ณผ time์ผ๋ก ํ์ต ์ด๊ธฐ์๋ compute / read ํจ์จ์ ์ธก์ ํ๋ ๊ฒ๋ ์ข์ profiling ๋ฐฉ๋ฒ์ด๋ผ๋ ์ ์ ์๊ฒ๋์๋ค. -
ํ๋์ ๋ชฉํ๋ฅผ ํฅํด์ ํ์ํ ์๋ฃ๋ค๊ณผ ๋ ผ๋ฌธ๋ค์ ์ฝ์ผ๋ฉด์ ๊ณต๋ถ๋ฅผ ํด๋๊ฐ๋ ๊ณผ์ ์ ํ์คํ ํฅ๋ฏธ๋กญ๋ค๋ ์ ์ ์๊ฒ๋์๊ณ , ์ง์ ํ ์ ๋ฌธ๊ฐ๊ฐ ๋๊ธฐ ์ํด์ ์ฝ์ด์ผํ ๋ ผ๋ฌธ๋ค์ด ์ผ๋ง๋ ๋ง์ ๊ฐ๋ฅผ ์๊ฒ๋์๋ค. ์ด๋ ํ ๋ชฉํ๋ฅผ ์ํด์๋ ๊ทธ ๋ชฉํ๋ก ์์ฑ๋ ๋ ผ๋ฌธ ๋ฟ๋ง ์๋๋ผ ํด๋น ๋ถ์ผ ์์ฒด์ ๋ค์ํ ๋ ผ๋ฌธ์ ์ฝ๋ ๊ฒ์ด ํจ์ฌ ๋ ๋ค์ํ ์ ๊ทผ์ ๊ฐ๋ฅํ๊ฒ ํ ๊ฒ์ด๋ผ๋ ํ์ ์ด ๋ค์๋ค. ๋น๋จ CV๋ผ๋ NLP์ attention mechanism์ ๋ถ๋ฅ๋ชจ๋ธ์์๋ ์ ๊ทนํ์ฉํ๋ ์ ์ AI๋ผ๋ ๋ถ์ผ ์ ๋ฐ์ ๋ํ ๊ด์ฌ์ด ํ์ํจ์ ์ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ๊ณต๋ถ๋ฅผ drivingํ๋ force๋ ๊ทธ ๋ถ์ผ์ ๋ํ ๊ด์ฌ์ผ ์๋ ์์ง๋ง, ๋ด๊ฐ ๋ง๋ค๊ณ ์ ํ๋ ํ๋์ ๊ฐ์น๋ฅผ ๋ช ํํ๊ฒ ํ๋ ๊ฒ์ด ํจ์ฌ๋ ์ค์ํ๋ค๊ณ ์๊ฐํ๊ฒ ๋์๋ค. ๊ทธ๋ฐ ์๋ฏธ์์์ ๋์ ๋ถ์ผ์ ๋ํ ๋์ ๊ณผ๊ฐํ ์ ํ์ด ๋๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ณ ์๋ค๊ณ ์๊ฐํ๋ค.
-
๋ ViT๋ฅผ ๊ณต๋ถํ๋ฉด์, deepseek์ multi-head latent attention๊ฐ์ ๊ฒฝ์ฐ์๋ ๊ฒฐ๊ตญ latent space ๊ฐ๋ ์ ํ์ฉํ๋ ๊ฑด๋ฐ, ์ด๋ VAE์์๋ ๋์ค๋ ๊ฐ๋ ์ด๋ task๊ณผ ๊ด๋ จ์์ด ์ค์ํ milestone๊ณผ ๊ฐ์ ๊ฐ๋ ๋ค์ ์ตํ๊ณ ๊ณ ์ ๊ด๋ ์ ํผํ๋ ค๊ณ ํ๋ ๋ ธ๋ ฅ์ด ํ์ํ ๊ฒ ๊ฐ๋ค.
-
๊ทธ๋ฆฌ๊ณ ๋ถ๋ช ํ AI์ ์๋๊ฐ ๋๋ํ์ง๋ง, ์ฌ์ ํ
legacy algorithm์ ์ค์์ฑ
๊ณผ ํจ์จ์ฑ์ ๋ฌด์ํด์๋ ์๋๋ค๋ ์ ์ ์๊ฒ ๋์๋ค. ADMM์ ์ํด์ ์ฌ์ฉ๋ BM3D๋ grain noise detect์ ์ํด์ ์ฌ์ฉ๋ Homogeniety block detection ๊ณผ ๊ฐ์ ์๋์ฐ ๊ธฐ๋ฐ์ ๋ฐฉ๋ฒ๋ค์ ๊ฒฐ๊ตญ ๋ด๊ฐ ์ง๊ธ ๊ฐ์ง ์์๋ด์์ ๋ด๊ฐ ํ์ํ ์ฑ๋ฅ์ ์ํด์ ์ ํฉํ ๋ฐฉ์์ ๋ชจ์ํ ๋ ๋ ๋์ ์์ผ๋ฅผ ๊ฐ์ง๊ฒ ํด์ค ๊ฒ์ด๋ค. -
mlx
์ ๊ฐ์ ํ๋์จ์ด ์ต์ ํ ํ๋ก๊ทธ๋จ์ด๋ framework๋ฅผ ์ํด์๋ ๊ฒฐ๊ตญ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ง์ ์ ์ผ๋ก ๊ด๋ฆฌํ๋ low level programming language์ ํ์์ฑ์ ๋์ฑ ์ฒด๊ฐํ ์ ์์๋ค. ๋ด๊ฐ python์ ์ฌ์ฉํ๋ ์ฌ๋์ด ๋๋๋ผ๋ ํ์์ ๋ฐ๋ผ์ source code ์์ฒด๋ฅผ ์์ ํ๊ณ buildํ ์ ์๋ ์ฌ๋์ด ๋๊ณ ์ถ๋ค. -
๋ํ ํ์ฌ์ cpu, gpu, tpu์ ๊ฐ์ Heterogeneous computing system์์ apple silicon๊ณผ ๊ฐ์
Unified Memory
๊ฐ ๊ฐ์ง๋ ์ด์ ์ ํ์คํ ์ ์ ์์๋ค. ํนํ CUDA์ ๊ฒฝ์ฐ pin_memory option์ ์ฌ์ฉํ๋๋ฐ ์ด๋ ์ด์์ฒด์ ์์ swap ๋ชปํ๋ page-locked memory์ ๋ฐ๋ก dataloader๊ฐ data๋ฅผ ์ฌ๋ฆผ์ผ๋ก์จ DMA๊ฐ ๋ฐ๋ก GPU๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ ์ ์๋๋ก ํ๋ค. pin_memory=false์ผ์, pageable memory์์ page-locked memory๋ก ์ด๋ํ๋ ์ถ๊ฐ๊ณผ์ ์ด ํ์ํ๊ธฐ ๋๋ฌด๋ค GPU์ CPU๊ฐ ๋ฐ์ดํฐ ์ ์ก์ ๋ณ๋ชฉ์ด ๋ฐ์ํ ์ ์๋ ๊ฒ์ด๋ค. ์ด๋ฅผ Unified memory์ ๊ฒฝ์ฐ๋ GPU CPU๊ฐ ๋ฉ๋ชจ๋ฆฌ ๊ณต๊ฐ์ ๊ณต์ ํ๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ๋ฐ์ดํฐ ์ด๋์ด ์๋ค. ํ์ง๋ง ์ด๋ CPU GPU๊ฐ ์ ํ๋ ๋ ธํธ๋ถ๊ณผ ๊ฐ์ ํ๊ฒฝ์์๋ ์ ์ฉํ ์ ์์ง๋ง, ๋๊ท๋ชจ ์๋ฒ ์์คํ ์์๋ ํ์ฅ์ฑ์์ GPU์์ฒด์ ๋ฉ๋ชจ๋ฆฌ๊ฐ ์กด์ฌํ๋๊ฒ ํจ์ฌ ํจ์จ์ ์ผ ๊ฒ์ผ๋ก ์๊ฐ๋๋ค. ์ด์ ๊ฐ์ด ๊ฒฐ๊ตญ SW๋ฅผ ๋ค๋ฃจ๋๋ผ๋ ํ๋์จ์ด์ ๋ํ ์ง์ ์ ๋ฌธ์ฑ์ ๋ค๋ฅด๊ฒ ๋ง๋ ๋ค๋ ํ์ ์ด ๋ ๋ค. ๊ทธ๋ผ์๋ NVIDIA์ ์ฐ์ฐ์ฑ๋ฅ์ ์ ๋ง ๋ฐ์ด๋๋ค. -
๊ทธ๋ฆฌ๊ณ ๋ฌด์๋ณด๋ค ๋ด์ฉ์ ์ ๋ฌธ์ฑ์ด ๋์์ง๋ค๋ฉด ๊ผญ!
๊ณต์๋ฌธ์๋ฅผ ์ ๋ ํ๋ ๊ฒ์ด ์ค์
ํ๋ค๋ ๊ฒ์ ๋๊ผ๋ค. ์๋ฌด๋ฆฌ GPT๋ ๋ํํ๋๋ผ๋ ๊ฒฐ๊ตญ ๋์ ํ๊ฒฝ์์์ ๋ณ์๊ฐ ์๊ณ , ๊ณต์๋ฌธ์๋ฅผ ์ฝ๊ฒ๋๋ฉด gpt๊ฐ ์๋ ค์ฃผ์ง ์๋ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ๋ ์ ์ ์๋ค. ์ด๊ธฐ์๋ ๋น ๋ฅด๊ฒ gpt๋ก ์ ๊ทผํ๋๋ผ๋ ์กฐ๊ธ ๋ณต์กํ๊ฑฐ๋ ๋ชจํธํ ๊ฐ๋ ์ ๋ํด์๋ ๊ณต์๋ฌธ์์ ์๊ฐ์ ํฌ์ํ๋ ๊ณผ๊ฐํ ์ ํ์ ํ์๋ผ๊ณ ์๊ฐํ๋ค.
Thigns done โฌ๏ธ
๐ MLX framework
1.
mlx.data.buffer_from_vector
error : dictionary๋ก ๊ตฌ์ฑ๋ sample = [{โimageโ : bโPath/โ}],
์ด๊ฑฐ๋ฅผ buffer_from_vector๋ฅผ mlx.data๋ก ์คํํ๋ฉด byte array๊ฐ ๋์ด์์ผํ๋๋ฐ, ๋น๋ฐฐ์ด์ด ๋์ด์ด ([] dtype=int8)
Solution :
Mac ์ด๊ธฐํ -> mlx-data๋ฅผ pip๋ก installํ์ง ์๊ณ ์์ค์ฝ๋์์ python blinding์ผ๋ก ์ค์นํจ
(ํ๊ฒฝ๋ณ์์ ๋ค์ํ dependency๊ฐ ๊ผฌ์ฌ์๋ ๊ฒ์ผ๋ก ํ๋จ๋จ)
2.
mlx framework insights
Buffer : image๋ฅผ ํ์์์ loadํ์ฌ ๋ถํ์ํ๊ฒ load๋๋ ๊ฒฝ์ฐ๋ฅผ ๋ง๋๋ค. -> ์ ํ์ด ์ง๋ฆฌ๊ธดํ๋๋ฏ (๊ฒฐ๊ตญ Apple silicon์ ๋ง๋ ์ด์ ๊ทธ๋ค์ framework์ protocol ๊ฐ๋ฐ์ ๋ถ๊ฐํผํ๊ณ , ์ฌ๊ธฐ์๋ ๋ง์ฝ์ ๋๊ฐ์ ๋๋ฌ๋ธ๋ค๋ฉด ๊ฒฐ๊ตญ ์ ํ ์ฌ์ดํด ๋ค์ ์จ๋ค๊ณ ๋ด)
stream.prefetch(4, 4) : CPU์์ 4๊ฐ์ batch๋ฅผ GPU์ฐ์ฐ๋์ loadํด๋๊ณ , GPU๋ 4๊ฐ์ batch๋ฅผ ํ๋ฒ์ ๋ถ๋ฌ๋๋ฆฌ๋๋ก ์ค์ ํจ
3.
binary cross entropy์์ mx.compile ๋ฌธ์
ํด๊ฒฐ ๋ชปํจ โก๏ธ ๊ทธ๋ฅ num_classes=2 ๋ก ํ๊ณ mlx.nn.losses.cross_entropy๋ก ํจ
binary cross entropy์์ @partial(mx.compile) ์ต์ ์์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ๋ฏํจ
4.
Training overfitting (resent44)
training data๊ฐ 204๊ฐ์์ training์ด overfitting์ด ๋ฐ๊ฒฌํ๋ ๊ฒ์ ํ์ธํ์๋ค.
๋ฐ์ดํฐ๋ (224,224) center crop๋์ด ์ฌ์ฉ๋์๊ณ , batch_size = 16, epoch=50, lr=1e-5
Epoch | Train Loss | Train Accuracy | Test Accuracy |
---|---|---|---|
49 | 0.040 | 0.990 | 0.688 |
๐ ์ด์ ? ์๋ง๋ data๊ฐ ๋ถ์กฑํ๋ฏ ํ๋ค. image crop๊น์ง๋ ์ด๋ป๊ฒ ํ๊ธดํ๋๋ฐ, crop๋ณด๋ค๋ 224,224 ๋ฐ์ดํฐ๋ฅผ ์๋ก ์์ฑํด์ ์งํํด์ผ๊ฒ ๋ค.
5.
224,224๋ก ์ด๋ฏธ์ง ์ชผ๊ฐ์ ํ์ต ์งํ
๐พ ์๋ ๋ฐ์ดํฐ : 1.02GB -> 743MB (6.13GB disk)
train length : 42111
Test length : 4678
๐๐พโโ๏ธ ํ๋๋ฐ๋ training acc๋ 1์ epoch1๋ง์ ์๋ ดํ๋๋ฐ, test accur๋ ์์ํ ์ฌ๋ผ๊ฐ๊ธดํ๋ overfitting์ ๋ณด์
์ฌ์ค ๋ด๊ฐ ์ด๋ค ํ๋ก์ ํธ๋ฅผ ์งํํ๊ฑฐ๋ ๊ณต๋ถ๋ฅผ ์งํํ ๋ ํญ์ ์ด๋ฌํ ๋๊ธฐ ๊ท์ฐฎ์ ๋ฌธ์ ๋ค์์ ํฌ๊ธฐํ๊ณ ๊ทธ๋ฅ ํ๊ต๋ ์ฌํ์์ ์ฃผ์ด์ง ๊ฒ๋ค์ ์ด์ฌํ ํ๊ธฐ ์ํด์ ๋์๊ฐ์๋ค. ๊ทธ๋ฐ๋ฐ ์ด๋ฒ ํ๋ฌ์ ๋ชฉํ๋ฅผ ์ด๋ฌํ ๋๋ฅผ ๋ง์ฃผํ๊ณ ๊ทธ๋ฌํ ํ๋ค์ ์นจ์ฐฉ๊ณ ์กฐ์ฉํ ๊พธ์คํ๊ฒ ๋์ด๊ฐ๋ ค๊ณ ํ๋ค. ์ด๋ฒ์๋ ์ฌ์ค ๊ทธ๋ฅ โ์ ๋ญ์ผ ๋ชฐ๋ผโํ๊ณ ๋์ด๊ฐ ์ ์์ง๋ง ๋๋ ์ด๋ฒ๋งํผ์ ๋์ ๋ด์ผํ๋ค.

๋ณด๋ฉด, buffer๋ฅผ ๋๋คํ๊ฒ shuffleํ๊ณ plot์ ํด๋ณด์๋๋ฐ, ๋ฐ์ดํฐ์ ์๋นํ ํธํฅ์ ๋ฐ๊ฒฌํ๋ค. 224x224๋ ๋์ผํ๊ฒ cropํ์ง๋ง 1.7x ์ข์์ croppd์์ 3:1 ์ ๋๋ก image๊ฐ ๋ง์ ๊ฒ์ ํ์ธํ๋ค. ๋ฐ์ดํฐ์ ๋ฐธ๋ฐ์ค๋ฅผ ๋ง์ถฐ์ ๋ค์ ํ์ต์ ํด๋ณด์์ผ๊ฒ ๋ค.

sample loadํ๊ณ spiltํ๋ ์ฝ๋์ min_count๋ก ๊ฐ์ฅ ๊ฐฏ์๊ฐ ์ ์ label์ ๋ํด์ 1:1๋ก data balance๋ฅผ ๋ง์ถ ์ ์๊ฒ ํ์๋ค.
+optimizer๋ฅผ adma์์ sgd 0.01 momentum 0.9 weight_decay=5e-4๋ก ํ๊ณ , 50step ๋ง๋ค opt updateํ๋๋ก ์์
๐ module.load_weights๋ก .npz load๋ฅผ ํ๊ณ unseen data์ ๋ํด์ ์ ์ฉํด๋ณธ ๊ฒฐ๊ณผ ๊ฑฐ์ ๋ชจ๋ ๊ฒฝ์ฐ์์ ์ฌ๋ฐ๋ฅธ ์์ธก์ ํ์๋ค.
ํ์ง๋ง, ํด๋น ๊ฒฐ๊ณผ๋ฅผ ๋ฐฑํธ๋ํนํด๋ณด๋, wiener2 7x7 ํํฐ๋ง ์ ์ฉํด๋ Discriminator๋ฅผ ์ ๋ถ ์์ด๋ ๊ฒ์ด ๊ฐ๋ฅํ๋ค. + noise๋ฅผ ์ถ๊ฐํด๋ ์๋จ
๋ฐ๋ผ์ ๋ฐ์ดํฐ๋ฅผ ์กฐ๊ธ ๋ ๊ฐ๊ณตํด์ ๋ค์ ํ์ต์ ์์ผ์ผ ๊ฒ ๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๊ทผ๋ฒ์ ์ฌ๋ฌ๊ฐ์ง์ chain์ผ๋ก ๊ฐ์ ธ๊ฐ๋ ๊ฒ์ด ๋ง์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด๋ ๋ค.
๐งน Denoiser Appoach
6.
dncnn ๋์
๐๏ธ ํ์ฌ resnet20 ๊ธฐ๋ฐ์ d2f_D(discriminator)๊ฐ ํ๋ฆ์ ์๊ฐ์ ํ์ตํ๋ค๊ธฐ ๋ณด๋ค๋ texture๋ฅผ ํ์ตํ๋ค๊ณ ์๊ฐ๋๋ค.
DnCnn์ ๊ธฐ๋ฐ์ผ๋ก denoisingํ ๊ฒฐ๊ณผ๋ก inference๋ฅผ ํด๋ณธ ๊ฒฐ๊ณผ๊ฐ ์๋์ ๊ฐ๋ค. (์๋ฒฝํ Discriminator๋ฅผ ์์)

๋ฐ๋ผ์ ์ง๊ธ ํ์ฌ์ dataset์ ๋๊ฐ๋ก ๋ถ๋ฆฌ
โ๏ธ DnCnn ์ ์ฉ๋ set(๋์ผํ๊ฒ ์ ์ฉ) -> ํ์ชฝ๋ง ์ ์ฉ์ ๋ dncnn์ ํน์ฑ์ ํ์
ํ ๊ฒ ๊ฐ๋ค๋ ํ๋จ
๐ ๊ธฐ์กด ์๋ณธ ์ด๋ฏธ์ง
โฆ ๊ทธ๋ฆฌ๊ณ ์ง๊ธ๊น์ง์ ๋ชจ๋ธ์ด discriminator๋ก์จ ํ๋ํ๋ ๋ชจ์ต์ ๋ณด์์๋, ํ์ต์ ์์ ์ฑ์ ์ํด์๋ texture์ ์๊ฐ์ ๋์์ ์งํํ๋ ๊ฒ ์๋๋ผ
2๊ฐ์ง ๋ชจ๋์ pipeline์ด ํ์ํด ๋ณด์ธ๋ค.
7.
dncnn applied dataset d2f_D ๊ฒฐ๊ณผ
dncnnd์ ํต๊ณผ์ํจ๋ค๊ณ , grain ํน์ฑ์ด ์ฌ๋ผ์ง์ง๋ ์์ โก๏ธ ๊ธฐ์กด์ ์ด๋ฏธ์ง์ ํน์ฑ๊ณผ ์ ํ ๋ค๋ฅธ ํน์ฑ์ผ๋ก ๋ณด์ฌ์ง

Torch๋ก ๋ณ๊ฒฝ
๐ก MLX์์์ performance๊ฐ dramaticํ์ง ์๊ณ , MVP๋ฅผ ๋น ๋ฅด๊ฒ ๋ง๋๋๊ฒ์ ๋ชฉํ๋ก ๋ณ๊ฒฝ
8.
Grain Synthesis Weakness
FFT High Frequency Energy Ratios:
Digital Image: 28.44%
Film Image: 83.57%
Difference (Film - Digital): 55.13%
ํด๋น ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํด์ torch.fft๊ธฐ๋ฐ์ disciriminator ์ฑ๋ถ์ ๋ง๋ค์ด์ผํ ๊ฒ ๊ฐ๋ค.
๋ณ๋ค๋ฅธ ์ฑ๊ณผ๋ ์์ โก๏ธ fft๋ฅผ discriminator์๋ง ์ถ๊ฐํ๋ ๋ฐฉ์์ generator๊ฐ high frequency ์ฑ๋ถ์ ํ์ตํ๊ฒ ํ๋๋ฐ ํ๊ณ๊ฐ ์๋ค.
๋ํ ํ์ฌ image์ ํ์ต์์์ ์ฌ์ด์ฆ๊ฐ 256x256์ธ๋ฐ, film ์ด๋ฏธ์ง์ bilinear transform์์ ๋ง์ texture ์ ๋ณด๊ฐ ๋ ์๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.
๋ฐ๋ผ์ ํ์ฌ UEGAN์์๋ ์๊ฐ์ ํ์ต์ํค๋ ๋ฐฉํฅ์ผ๋ก ํ๊ณ , ํ๋ฆ ์ด๋ฏธ์ง๋ฅผ denosiingํ์ฌ์ paired data๋ก film grain model์ ์ถ๊ฐ ํ์ตํ๋ ๋ฐฉํฅ์ผ๋ก ๊ฐ๋ ค๊ณ ํ๋ค.
9.
denoising Networks
Denoising์ด๋ image resolution๋ฑ๊ณผ ๊ฐ์ ๋ชจ๋ธ์ ๋ณผ ๋, ์ข์ ์ฌ์ดํธ๋ฅผ ์ฐพ์
Dataset์ ๊ฒ์ํ๋ฉด ํด๋น ๋ฐ์ดํฐ์
์ ํ์ฉํ๋ task์ ๋
ผ๋ฌธ๋ค์ด ์ ๋ฆฌ๋์ด ์์ด์ SOTA๋ ๋์ ๊ฐ์ฅ fitํ ๋ชจ๋ธ์ ์ฐพ์ ์ ์์๋ค.
๋๋ ์ง๊ธ KODAK24 dataset์ ํ์ฉํ๋ ๋ชจ๋ธ๋ค ์์ฃผ๋ก ํ์ธํ๋ค.
๐ : Restormer / SwinIR / DMID-d
DMID(diffusion based) : Github DMID
Restormer(transformer based) : Github Restormer
10.
Unsuperviesd Denoiser
์ด๊ฒ ์ ์ผ ๋๋ฐ์ด๋ผ๊ณ ์๊ฐ๋จ
Stimulating Diffusion Model for Image Denoising via Adaptive Embedding and Ensembling
์์ ์ฌ์ฉ๋๋ ๋ถ๋ถ์ ์ธ gaussian noiser ์๋๋ฐ, ๋๋ฐ์
๐ (Insane) AN UNSUPERVISED DEEP LEARNING APPROACH FOR REAL-WORLD IMAGE DENOISING
๋ด๊ฐ ์๊ฐํ๋ AI์ ๋ฐฉํฅ์ / ์์ฒด์ ์ผ๋ก ํ์ต์ ์ด์ด์ ํ๋ค๊ฐ โก๏ธ ์ด์ ๋๋ฉด ๋๋ค๊ณ ํ ๋ ๊ทธ๋ง๋
Key idea
- SURE (Steinโs Unbiased Risk Estimator)
- Unet Based Enc / Dec -> learning picture by picture gaussian denoising
์ด๋ฏธ์ง ๋ง๋ค DL์ ํ์ตํด์ผ๋์ cost๋ ๋์ง๋ง, ์ด๋ฌํ ๋ฐฉ์์ด ํฉ์ณ์ง๋ฉด ๊ต์ฅํ ์ข์ ์๋์ง๋ฅผ ๋ผ ์ ์๋ค๊ณ ์๊ฐํจ

โผ ๊ฒฐ๊ตญ ๋ชจ๋ ํ์์ Normal Distribution์ ๋ฐ๋ฅด๊ฒ ๋๋๊น
๐ ๋ฌธ์ ๋ ์ด๋ฏธ์ง๋น 50๋ถ์ด ๊ฑธ๋ฆฐ๋ค๋๊ฑฐ์
์ฝ๋ค๊ฐ ํฌ๊ธฐํจ / lagrangian ๊น์ง๋ ์ด๋ป๊ฒ ์ดํดํ๊ฒ ๋๋ฐ, ADMM์ด๋ augmented lagrangian method์ ์์์ ์ดํดํ๊ธฐ ์ด๋ ค์
์ต์ ํ ์ด๋ก ์์ ์ ํตํด์ ํด๊ฒฐํด์ผ๋๋ ๋ฌธ์
11.
Neural Styletrasnfer
์ผ๋จ ์๊ฐ ์ ๋ณด๋ UEGAN์ ๊ตฌ์กฐ์ loss function์ด ์ ์ง์ผ์ค๋ค๊ณ ์๊ฐํ์๋, texture์ ๋ํ ๋ด์ฉ์ ์ด๋ป๊ฒ ํด๊ฒฐํ ์ง์ ์ง์ค
style transfer์ ๊ทผ๋ณธ ๋ ผ๋ฌธ์์๋ถํฐ vgg19์ usage๋ฅผ ํ์ธํด๋ณด๋ ค๊ณ ํจ
๐ Gatys๊ฐ ์ฌ์ฉํ gram matrix์์ vgg19์ conv block ๋ณ content style ์ ๋ณด๋ฅผ ๊ฐ์ง๋ layer๋ฅผ ๊ตฌ๋ถํ๊ณ ์๋ ์ฌ์ค์ ๋ฐ๊ฒฌํจ โก๏ธ ์ด๋ฅผ ํ์ฉํ์ฌ์ ๋น์ทํ content์ ๋ค๋ฅธ style์ธ ์ฌ์ง์ ๊ทธ๋๋ง ๊ณจ๋ผ์ ๋น๊ตํด๋ณด๋ ค๊ณ ํจ
- ์ด๋ฐ ๋ ์ด์ด(conv1~conv3): ๋๋ฌด ๋ก์ฐ๋ ๋ฒจ(low-level) ํน์ง (์์ง, ์ง๊ฐ) โ content ์ ๋ณด๊ฐ ์ถฉ๋ถํ์ง ์์.
- ์ค๊ฐ ๋ ์ด์ด(conv4_2, conv5_2): ํํ(structure)์ ์๋ฏธ์ ์ธ ์ ๋ณด๊ฐ ์ ์ ์ง๋จ โ content feature๋ก ์ ํฉ.
- ๊น์ ๋ ์ด์ด(conv5_4 ์ดํ): ์ถ์์ ์ธ ๊ฐ๋ ์ด ๊ฐํด์ ธ์ ์ธ๋ถ ๊ตฌ์กฐ ์์ค ๊ฐ๋ฅ์ฑ โ content ์ ๋ณด๋ก ๋ถ์ ํฉ.
โ๏ธ vgg layer ๋ณ cosine ์ ์ฌ๋(film image vs digital image)

โ๏ธ vgg layer ๋ณ cosine ์ ์ฌ๋(digital image vs digital image with GN)

ํ์คํ vgg์ content feature์ style feature๊ฐ ์กด์ฌํ๊ธฐ๋ ํ๋ค๊ณ ์๊ฐํจ (content loss์ style loss weight๋ฅผ ์กฐ์ ํ๋ ๊ฒ๋ ์ค์ํ ์์์)


๋ค์ํ ๋ฐฉ์์ ์๋ํด๋ณธ ๊ฒฐ๊ณผ, ์ด๊ฑด ํ์คํ style๋ณด๋ค๋ ํน์ ํจํด, ํน์ ์์์ ๋ฃ๋ ๊ฒ์ ๊ฐ๊น์ (์ฒ์ ๋ฐ๊ฒฌํ์๋ vgg๋ง์ผ๋ก content๋ฅผ ๋ณด์กดํ ์ ์๋ค๋ ์ ์ ๊ต์ฅํ ์๋ฏธ๊ฐ ์๋ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐ๋จ)
๐พ Model approaches
12.
How does UEGAN preserves content details
UEGAN์ ๋ณด๋ฉด conent๋ preservingํ๋ฉด์ ํนํ colour ์ ๋ณด๋ฅผ ์ ๋ณํํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
๐น ํ์ฌ๊น์ง์ Limitation
- ์๊ฐ ๋ณํ์ด ๊ณผ๋ํ๊ฒ ๋๋ ๊ฒฝํฅ์ด ์์ (L_qual์ ์์น๋ฅผ ์กฐ์ ํด์ผ ๋ ๋ฏํจ 0.1์ด์์์๋ too heavyํ๊ฒ ๋ณํ์ด ์ผ์ด๋จ)
- Grain์ ํด๋น ํ๋ ๋ด์ฉ์ synthesisํ์ง ๋ชปํจ (DL ํน์ฑ์ 2๊ฐ์ง task๋ฅผ ํ๋ฒ์ ํด๊ฒฐํ๋ ค๊ณ ํ๋ฉด ๋ ๋ณต์กํ ๊ฒ์ผ๋ก ์์๋จ)
๐ค UEGAN์ ์ด์
- GAM(global attention Module)์ ์ฌ์ฉํด์ illumination์ด๋ colour๋ฅผ ๋ ์ ํฌ์ฐฉํ๊ณ ์ง์คํ๋๋ก ์ค๊ณ๋จ
- 3๊ฐ์ง loss(Quality, Fidelity, Identity)๋ฅผ ์ด์ฉํด์ ๊ฐ๊ฐ (enhancement, content preserve, over-enhancement preserve)

์ด๋ฒ task์ ํต์ฌ์ ์๋ฒฝํ ์ ๋์ qualitive score๋ผ๊ณ ์๊ฐํจใ ใ
13.
RGB grain analysis
ํ์คํ ์ฐจ์ด๊ฐ ๋ง์ด ๋จ (๊ฐ์ ์ผ์ชฝ ์๋จ ์์น์ฌ์ ํ๋์ ๋จ์ ๋ถ๋ถ์)
๐บ ์ด๊ฒ ์ ์ผ ์ค์ํ ๋ด๊ฐ ๋ดค์๋๋..

14.
spatial analysis



15.
The key Points!11!!!!!!
3x3 stride=1๋ก max_val์ด ์๋ ๊ณณ์ 255๋ก ์ฑ์ด ๊ฒฐ๊ณผ๋ฌผ -> ์ฆ film์ silver halide๊ฐ ์กด์ฌํจ์ ์ญ์ผ๋ก ์ ์ ์๋ค.
๊ทธ๋ฆฌ๊ณ ๊ทธ surface ํน์ฑ์ ๊ฐ์ง๋๋ก ํ๋๊ฒ์ด ํต์ฌ์ผ ๊ฒ์ผ๋ก ๋ณด์ (๋ฌด์กฐ๊ฑด RGB ์ฑ๋ ๋ฐ๋กํ๋๊ฒ ๋ง์)


16.
Max value interpolation
interpolationd์์ min value์ ๋ํ ์ ๋ณด๊ฐ ์์ค๋์ grain์ ๋ํ ํน์ฑ์ max_val pooling์ด ๋ํํ ์ ์์ ๊ฒ์ผ๋ก ์๊ฐ๋์ง๋ง,
ํน์ฌ grainํ pixel halide selection์ผ๋ก GAN ํ์ต input์ผ๋ก ์ฌ์ฉํ์ ๋ ํด๋น detail์ ๋ณด์กด ๋ฐ ์ฌ์ ์ฌ๋ถ๋ ๋ฏธ์ง๋ผ๊ณ ์๊ฐํจ


Combined pooling and interpolated results


์๋ ๋ฐฉ์์ด ์ข ๋ grainํ๊ฒ ๋ถํฌํจ -> ์ด๊ฑฐ๋ฅผ input์ผ๋ก ํ์ฉํ ์์
RGB mask ๊ฐ๊ฐ์ density
Type | Density of R / 1s | Density of G / 1s | Density of B / 1s |
---|---|---|---|
Film full size | 0.10262 | 0.10287 | 0.17325 |
Film crop size | 0.10365 | 0.095427 | 0.1106 |
Digital full | 0.43867 | 0.4313 | 0.44063 |
์ผ๋ฐํ ๊ฐ๋ฅํ๋ค๊ณ ์ฌ๊ฒจ์ง


๐ก min pooling์ ํ ๋, 255๋ฐ์ ์์ max pooling์ ์์ผ์ ์งํํ์ฌ์ masking์ด ์ ์์ ์ผ๋ก ๊ฐ๋ฅํ๋๋ก ํจ
์ฃผ์ํด์ผ๋๋๊ฒ, ์์ red๊ฐ 0์ผ๋ก ๋๋ฒ๋ฆฌ๋ ๊ตฌ๊ฐ๋ ์กด์ฌํ๋๊น ๊ทธ๋ฐ ๊ตฌ๊ฐ์์์ pp halide๋ฅผ ์ด๋ป๊ฒ ์ค์ ํ ์ง์ ๋ํ ๊ณ ๋ฏผ์ด ํ์ํด ๋ณด์

python์ผ๋ก loadingํ data


250310 : pp halide์ ๋ํด์ 1์ฐจ ๊ฒฐ๋ก ์ ๋ด๋ฆผ / 3x3 window์์ ๋ง๋ฃจ์ ๊ณจ์ ๋ํ mask๋ฅผ ์น ํ๋ฉด ์ฌ์ ํ random์ฑ์ ๋ณด์ฅํด ์ฃผ๋ ๊ฒ์ ํ์ธํจ
pp halide์ ๋ํด์ max min pooling์ ํ๊ณ ํด๋น mask์ result png(๋ฌด์์ค ์ด๋ฏธ์ง ํ์ผ)์ ๋ํด์ network๋ฅผ ๊ตฌ์ฑํ๊ณ ์งํํ๋ฉด reconsturction์ด ๊ธฐ๋์ ๋ฏธ์น๊ฒ ๋์ฌ ๊ฒ์ผ๋ก ์์
digital image์ ๋ํด์๋ ๋ฐ๊ธฐ ๊ธฐ๋ฐ mask pp halide๋ฅผ ๋ฟ๋ฆฌ๊ณ ํด๋น pixel์์์ value๋ฅผ ๊ธฐ๋ฐ์ผ๋ก network๋ก reconstruction
(why? digital image๋ ์ด๋ฏธ ๋ฐ์ด๋ฒ๋ฆฐ image์ด๊ธฐ ๋๋ฌธ์ min max๋ฅผ ํด๋น pixel๋ก ์ค์ ํ์ฌ๋ ๋ฌด๋ฆฌ๊ฐ ์๋ค๊ณ ํ๋จ)
๋ค๋ง ์๊ฐ์ ์์ด์ ํด๋น pp halide์ ๋ถํฌ๋ฅผ ๊ทธ๋ฅ 1d vector๋ก representative transformation์ ํด๋ ์๊ด์์ ๊ฒ์ผ๋ก ์์๋จ
์๋ํ๋ฉด pixel value๊ฐ ๊ณผ์ฐ ๋ ์ฆ์ film fixing์์ structuralํ globalํ ์ ๋ณด๋ฅผ ๋ฐ์ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ใ ใ
์ด๋ ์์ ์ด๋์ด ๋ถ๋ถ์ ๋ํด์ blue mask๊ฐ ๊ต์ฅํ ๋ฐ๋๊ฐ ๋์ ๋ชจ์ต๋ค์ด ํฌ์ฐฉ๋จ (์ฌ๊ธฐ์ ์๋๋ผ๋ฉด film์ max value๋ง์ด ์๋ฏธ๋ฅผ ๊ฐ์ง์ง๋ง ๊ฒฐ๊ตญ ๋ชจ๋ฐฉ์ ๊ตณ์ด ๋๊ฐ์ด ํ ํ์๋ ์๋ค๋ ์๊ฐ์ผ๋ก desnity๊ฐ ๊ฑฐ์ 0์ ๊ฐ๊น์ด ๋ถ๋ถ๋ pp halide๋ก ์ถ์ถํ๊ธฐ๋ก ๊ฒฐ์ -> detail ๋ฐ edge ์ ๋ณด ์ ์ง)
์ด๋์ด ๋ถ๋ถ๊ณผ ๋ฐ์ ๋ถ๋ถ์ ๋ํด์ pp halide random seed๋ฅผ density ๋ฐ๋๋ฅผ ๋ค๋ฅด๊ฒ ํด์ digital ์ด๋ฏธ์ง์ ๋ํด์ ์ ์ฉํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ณ๋ก ๋ฌธ์ ๊ฐ ๋๋ค๊ณ ์๊ฐํ์ง๋ ์์

17.
Dataloader composition
- 256x256 Crop
- randomhorizontal filp(0.5)
- manual_seed for cropping same regions for 3 image input(pp halide(result, mask), og img)
- croping 3 times random for same image for data augmentation
๐ค hmmโฆ Attention์ ์ฌ์ฉํ ์ ์์ ๊ฒ ๊ฐ์๋ฐ, ์ด๋ป๊ฒ ๋ณด๋ฉด maskr๊ฐ attention์ญํ ์ด๋๊น ๐ uncertainํ ๊ฒ์ ๊ณผ์ฐ ๋ชจ๋ธ์ด detail์ ์ด๋ฆด ์ ์์์ง, ๊ทธ๋ฆฌ๊ณ rgb ์ฑ๋์ ๋ ๋ฆฝ์ ์ผ๋ก ํ์ต์์ผฐ์๋, rgb๊ฐ์ harmony๋ฅผ ์ ์งํ ์ ์๋์ง๊ฐ ๊ฐ๊ถ์ ๊ฒ์ผ๋ก ์์๋จ
18.
UNET 512 channel based ouptut
Trial | Model | Configuration |
---|---|---|
Trial1 | UNET128 | RGB + harmony |
Trial2 | UNET128 | harmony removed |
Trial3 | UNET128 | RGB + harmony |
Trial4 | UNET512 | crop size 256 / 4 |
Trial5 | UNET512 | crop size 16 / 128 |
- epochs์ 150์ ๋๋ฅผ ํ์ต์์ผ์ผ MSE loss๊ฐ 0.0044 ์ ๋ ๋์จ๋ค (epoch 10์ผ๋ก๋ ํ์ตX -> trail 1,2,3๋ฅผ ๋ค์ ์๋ํด๋ณผ ๊ฐ์น๊ฐ ์์)
- trail4 ๋ฐฉ๋ฒ์์ ๋ค์ mask image ๊ฐ์ด ๊ฐ์กฐ๋๋ ๊ฒฝํฅ์ด ์์ด์, ์ผ๋ฐํ ์ํฅ์ธ๊ฐ ์์ฌ๋์ด pixel value๋ 16x16 ๋ง๋๋ก๋ ์ถฉ๋ถํ interpolate ํ ์ ์๋ค๊ณ ํ๋จํ๊ณ trail 5 ์ํ

16x16์ด ์กฐ๊ธ ๋ ์ ๋ช ํ๊ณ saltyํ์ง ์์ ์ด๋ฏธ์ง๋ฅผ ๋ด๋ณด๋ด๊ธดํ๋ค.
๊ทผ๋ฐ ์ฌ๊ธฐ์ salty๋ png์ jpg์ ์ฐจ์ด๋ผ๊ณ ์๊ฐ๋๊ธฐ๋ ํ๋ค. (๋น์ฅ ํํ์ด์ง ๋ ๋๋ง๋ง ๋ด๋ smoothํด์ก์)
๐ฒ ํ์คํ ์ ์ ๋ํ ์ผ์ ์ธ ๋ถ๋ถ์ ์บก์ณํ์ง(๋ค์ ์ด๋ฏธ์ง์ RGB ์ฑ๋๊ฐ ๋ญ๊ฒ์ง๋ค๊ณ ์๊ฐ๋จ) ๋ชปํ๋ค๋ ์ ์์ UNET์ด ์๋๋ผ ์คํ๋ ค channel๋ฐฉํฅ๋ณด๋ค h,w ๋ฐฉํฅ์ผ๋ก์ ํฝ์ฐฝ์ ์๊ฐํด๋ณด๊ณ ์ถ์ด์งใ ใ
19.
Digital Image Application(statistic based) - Failed
๋จ์ํ RGB channel ๋ณ mask์ brightness์ ๊ด๊ณ๋ฅผ ํ์ ํด์ mask๋ฅผ ๋ง๋ค๊ณ trail5 model๋ก reconstruction ํด ๋ณผ ์์
Analyzing dataset: 100%|โโโโโโโโโโ| 375/375 [01:11<00:00, 5.25it/s]
Average Mask R pixel density:
Value 0: 0.8809 (ยฑ0.0329)
Value 255: 0.1191 (ยฑ0.0329)
Average Mask G pixel density:
Value 0: 0.8902 (ยฑ0.0149)
Value 255: 0.1098 (ยฑ0.0149)
Average Mask B pixel density:
Value 0: 0.8727 (ยฑ0.0418)
Value 255: 0.1273 (ยฑ0.0418)
์ค๋ง์ค๋ฝ์ฃ ใ ใ

๊ฑฐ์ ๋์ผํ ๊ฒฐ๊ณผ๋ฌผ์ ๊ฐ์ ธ์ด -> ๋ฌผ๋ก ์ด์ํ artifact๋ ๋ฐ์ํจใ ใ (๋ ์ธ๋ณด์ฐ artifact๊ฐ ์กด์ฌํจใ ใ )
๐ฅ Goal ์์ -> ์ผ๋จ maks์ result (pp halide)๋ก reconstruction์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ ์์๊ธฐ ๋๋ฌธ์, digital ์ฌ์ง์ ์ด๋ป๊ฒ pp halide๋ฅผ ๋ถํฌ ์ํฌ์ง์ ๋ํ ์ ๊ทผ์ผ๋ก ์๊ฐํ์
ํ์ด์ pp halide๋ก ์ ๊ทผํ๋ ๋ชฉ์ ์ด -> grain synthesis๋ฅผ ๋ ์ฝ๊ฒ ํ๊ณ ์ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์, ์ผ๋จ์ digital image์ ๋ํด์ grain synthesis๊ฐ ๊ฐ๋ฅํ๊ฐ์ ๋ํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๊ณ ๋์, ์๊ฐ(colour)๋ก ๋์ด๊ฐ ๊ฒ์
๋ฐ๋ผ์ ์ผ๋จ detail์ ์ํด์๋ง์ ์ํด์ ์ถ๊ฐํ๋, min pooling์ ๋นผ๊ณ max pooling๋ง์ผ๋ก ๊ตฌ์ฑ๋ datset๋ฅด ๊ฐ์ง๊ณ UNET์ด ๊ณผ์ฐ reconstruction์ ์ณ๋ฐ๋ฅด๊ฒ ํ ์ ์๋์ง๋ฅผ ํ์ธํ ๊ฒ
20.
Max pooling(only) dataset training - for the grain
์ ์ผ๋จ ์ง๊ธ๊น์ง ๊ฐ์ฅ ํจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ ๋ฐ๊ฒฌ!
- DIANET์ ์ ์ํจ (์์์ ๋งํ๋ UNET๊ณผ ๋ฐ๋์ ๊ตฌ์กฐ๋ก channel๊ณผ hw๊ฐ ํฝ์ฐฝํ๋ค๊ฐ ์ค์ด๋๋ ๊ตฌ์กฐ์ -> skip connection๋ ์กด์ฌ)
- ์ด๋ channel์ ์๊ฐ ๋๋ฌด ์ปค์ง๋ฉด model size๊ฐ ๊ต์ฅํ ์ปค์ง
- 32x32 patch x 64๋ก ํ์ต ์งํํจ
- Digital image์์ pp halide ๋ฐ๋๋ฅผ 2๋ฐฐ๋ก ์ฌ๋ฆผใ ใ ใ (๋ณธ๋ min max density์ธ 0.1์์ 2๋ฐฐ, 3๋ฐฐ๋ก ์ฌ๋ฆฌ๋๊น artifact๊ฐ ํ์คํ ์ค์ด๋ค๋ฉด์ grainyํ ์ด๋ฏธ์ง๊ฐ ์์ฑ๋จ)
- (limitation1) size(3024x3024)๊ฐ ์ปค์ก์๋ UNET์์ ๋ฐ์ํ์ง ์์๋ Memory ๋ถ์กฑ์ด ๋ฐ์ํจ
- (limitation2) colour error๊ฐ ์ฌํจ โก๏ธ film L2 loss์์ colour์ ๋ํ ๋ด์ฉ์ ์ง์คํ์ง ๋ชปํ๊ณ structuralํ ๋ด์ฉ์ ์ง์คํ๋ค๊ฐ ํ์ต์ด ๋๋๊ฒ ๊ฐ์ ๋๋
- Densiety * 3 (approx 0.3)

- Density * 1

๋ฌผ๋ก ์ด๋ density ๋ฟ๋ง ์๋๋ผ RGB pp halide๊ฐ์ correlation๋ ํต๊ณ๋ฅผ ๋ด๋ ค์ ๋ถํฌ ์ํด
๐ญ ์ ์ ์๋ ์
- UNET๊ณผ DIANET์ ํ์คํ ์๊ฐํ๊ฒ๊ณผ ๊ฐ์ด fineํ ๋ถ๋ถ์ ์์ฑํ๋๋ฐ ์ฐจ์ด๋ฅผ ๋ณด์ธ๋ค.
- enc / dec ์ ํ์ต output์ ํ์ธํ๋ฉด ์ด๋ฐ์๋ structuralํ ์์ญ์ ์ก์ผ๋ ค๊ณ ๋ ธ๋ ฅํ๊ณ , ์ ๋งํฐ structuralํ ๋ด์ฉ์ด saturation๋๋ฉด ๊ทธ๋๋ถํฐ ์๊ฐ ์ ๋ณด๋ฅผ ํ์ ํ๋ ค๊ณ ๋ ธ๋ ฅํจ
- UNET(0.0044), DIANET(0.017) ์ L2 loss๊ฐ ์ฐจ์ด๊ฐ ๋ง์ด๋๋ ๋ชจ์ต์ ๋ณด์ด๋๋ฐ, DIANET์ structural ์ ๋ณด๋ฅผ ๋ง์ด ์ด๋ฆฌ์ง ๋ชปํจ(why? min pooling์ ์ญ์ ํ๊ธฐ ๋๋ฌธ์ edge๋ black spot์ ๋ํ inference์์ ์ฝํ๊ฒ์ผ๋ก ์์๋จ)
- parmeter ์๋ DIANET์ด ๋ ์ ์์ง ๋ชฐ๋ผ๋ image๋ฅผ transposedConv2d๋ก upscalingํ๋ฉด์ ์ถ๊ฐ์ ์ผ๋ก channel๋ ํค์์ memory ์ฌ์ฉ๋์ด ๊ธ์ฆํจ
- ๋ฐ๋ฉด UNET์ ๊ฒฝ์ฐ channel์ ๋๋ฆฌ์ง๋ง hw๋ ์ค์ด๋ค๊ธฐ ๋๋ฌธ์ memory expolde๊ฐ ๋ฐ์ํ์ง๋ ์์
only max

max min pooling

Digital applied Comparison



๊ฐ์ฅ deep ํ layer์์ UNET512์ DIANET(3enc)์ float32์์์ ๋ฉ๋ชจ๋ฆฌ usage๋
๋ชจ๋ธ | ์ถ๋ ฅ ํ ์ ํฌ๊ธฐ | ์ด ์์ ์ | ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ | ๋น๊ณ |
---|---|---|---|---|
UNET | 512x16x16 | 131,072 | 0.5 MB (524,288 B) | - |
DIANET | 24x1024x1024 | 25,165,824 | 96 MB (100,663,296 B) | 192x |
๐ญ ์ ์ ์๋ ์
- model parameter size๋ UNET์ด ํจ์ฌ ๋ง์ง๋ง, memory usage๋ DIANET์ด ๋ง์ (UNET์ด ๊ฐ์ง ๊ฐ์ ์ ๋ณผ ์ ์์)
- trade-off (memory vs parameter size)
๐๏ธ Loss functions
21.
Importance of loss function
LAB์ผ๋ก ํ๋๊น contrast๊ฐ ๋๋ฌด ์์ง๋ ํ์ ๋ฐ์
dynamic loss function ์ฌ์ฉ
์ค๋์ ๊ธฐ์กด์ ๋จ์ํ RGB ๊ธฐ๋ฐ MSE loss๋ง ์ฌ์ฉํ๋ ๋ฐฉ์์์ ๋ฒ์ด๋์, RGB MSE, LPIPS, SSIM, Gram Matrix(texture)๋ฅผ ์กฐํฉํ dynamic loss ๋ฐฉ์์ ๋์ ํ์ด. ์ด๊ธฐ์ structural ์ ๋ณด(SSIM)์ perceptual ์ ๋ณด(LPIPS)์ ์ง์คํ๊ณ , ํ๋ฐ์ color(RGB)์ ์ธ๋ถ์ ์ธ grain ํํ(Gram Loss)์ ์ง์คํ๋๋ก ๊ฐ์ค์น๋ฅผ ์กฐ์ ํ๋ ์ ๋ต์ ์ ํํ์ด. ์ถ๊ฐ๋ก ๊ฐ loss ๊ฐ์ ํฌ๊ธฐ(scale) ๋ถ๊ท ํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด normalization ๋๋ adaptive weighting ์ ๋ต์ ๊ณ ๋ฏผํ์ด. TensorBoard๋ฅผ ์ด์ฉํด loss๋ฅผ ์ค์๊ฐ์ผ๋ก ์ถ์ ํ๊ณ ์๊ฐํํ๋๋ก ๊ตฌ์ฑํ์ด. ๐
- MSE ๊ธฐ๋ฐ์ structural ์ ๋ณด๋ฅผ captureํ๊ธฐ๋ ํ์ง๋ง ๊ฐํ์ง ์์
- local texture(grain) ์ ๋ณด (fine details) ๋ฅผ ํํํ ์ ์์ (์๋ํ๋ฉด loss๋ฅผ ์ค์ด๊ธฐ ์ํด์ fineํ random์ฑ์ ์์ธกํ ๋ฐ์๋ ๊ทธ๋ฅ mean์ผ๋ก texture ์ฃฝ์ด๊ณ ํํํํด์ ๊ฒฝํฅ์ฑ๋ง ๋ง์ถ๋ ค๊ณ ํจ)
์คํ๋ ค ์ด๋ ๊ฒ loss function์ ์ค์ ํ๊ณ ๋๋๊ฐ dianet์ด detail ํํ capa์ ๋ฌด๋ฆฌ๊ฐ ์๋ค๊ณ ์๊ฐ๋จ (๋๋ฌด 32x32์ fitํด ์ ธ์ 2048x2048์์๋ ๋ค์ ๋ํํ๊ณ ๋์ artifact๋ก ๋์ค๋๋ฏํ๋ค 150epoch๊น์ง ์ผ๋จ ๋ณด๊ณ ๊ฒฐ์ )

๋ฐ๋ผ์ loss๋ฅผ dynamicํ๊ฒ ์ค์ ํ๊ณ UNET์ด ๊ณผ์ฐ fine detatail์ ์ด๋ฆด ์ ์์์ง ์ง์ผ๋ณด์.
๐ฅ ์ด ์์คํจ์๋ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ์ฑ๋จ:
Total Loss = ฮฑ ร (RGB MSE) + ฮฒ ร (LPIPS) + ฮณ ร (SSIM) + ฮด ร (Gram Loss)
๐ ๋จ๊ณ๋ณ Scaling Factor (๊ฐ์ค์น ์กฐ์ )
์งํ๋ฅ (Epoch %) | RGB MSE (ฮฑ) | LPIPS (ฮฒ) | SSIM (ฮณ) | Gram Loss (ฮด) | ์ง์ค ์์ |
---|---|---|---|---|---|
0 ~ 30% | 0.2 | 0.7 | 0.8 | 0.3 | Structure (SSIM), Perceptual (LPIPS) |
30 ~ 60% | 0.5 | 0.4 | 0.4 | 0.5 | ๊ท ํ ์กํ ํ์ต (Balanced) |
60 ~ 100% | 0.8 | 0.3 | 0.2 | 0.6 | Color ๋ฏธ์ธ์กฐ์ (RGB), ์ง๊ฐ (Gram) |
- ์ด๊ธฐ(0~30%): ๊ตฌ์กฐ์ ๋ฐ perceptual ์ ๋ณด ํ์ต ์ค์ฌ
- ์ค๊ธฐ(30~60%): ๊ท ํ ์กํ ํ์ต ์งํ
- ํ๊ธฐ(60~100%): ์ธ๋ถ ์ปฌ๋ฌ์ grain ๋ฑ ๋ํ ์ผํ ๋ถ๋ถ ์ต์ ํ
tensorboard๋ก loss ์๊ฐํ๋ฅผ ์์ํ๊ณ , ๋์ผ ์ด๋ฏธ์ง์ ๋ํด์ gif๋ฅด ๊ตฌ์ฑํ๊ณ ํ์ต๊ณผ์ ์ ๋ณด๋๋ฐ, ์ผ๋จ perceptual loss๊ฐ ๋ค์ด๊ฐ๋ฉด ์์์ ๋ณด๋ฅผ ๊ฑฐ์ ํ์ตํ์ง ์์

๊ทธ๋ฆฌ๊ณ loss๊ฐ ํ์ต๊ณผ์ ์ค์ ๊ฐ์ํ๋ค๊ณ ๋ณด๊ธฐ ์ด๋ ต๊ณ ํก๋ณดํ๋ค๊ณ ์๊ฐํจ.
์ฌ๊ธฐ์ ์ค์ํ ์ ์ ๊ฒฐ๊ตญ ์ด๋ฏธ์ง์ ์์์ ๋ณด๋ structual ํ ์ ๋ณด๋ฅผ ๋จ์ํ pixel value๋ณ๋ก ๋น๊ตํ๋๊ฒ์ ์๋ฏธ๊ฐ ์์ด๋ณด์
โก๏ธ ์๋ํ๋ฉด film image ์์ฒด๊ฐ random์ฑ์ ๋ง์ด ๊ฐ์ง๊ณ ์๋ค๊ณ ์๊ฐ๋๋๋ฐ, ์ด๋ฅผ pixel by pixel loss๋ก ์ ๊ทผํ๊ฑฐ๋ structualํ loss๋ก ์ ๊ทผํ๋ฉด ํ์ต์ด ์ฉ์ดํ์ง ์๋ค๊ณ ์๊ฐ๋จ
โก๏ธ ๋ํ model์ capa์๋ ํ๊ณ๊ฐ ์๋ค๊ณ ๋๊ปด์ง๋ฉฐ, ๋์ผํ ํจํด๋ง์ ํ์ตํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐ๋จ (์์ ๋์ผํ ๋งฅ๋ฝ).
๋ฐ๋ผ์ random feature๋ฅผ ejectํ๋ ๋ถ๋ถ์ด ์์ผ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์
https://medium.com/storm-shelter/the-importance-of-film-grain-255f0246cd64
๋์์์์ grain synthesis๋ film photography์์์ grain synthesis๋ ํ๊ฐ๋ฆด ์ ์์
์์ ์นด๋ฉ๋ผ์์ Digital Image pipeline(ISP)๋ ์๋นํ ์ค์ํ ์๋ฏธ๋ฅผ ๊ฐ์ง๋ ๊ฒ์ผ๋ก ์๊ฐ๋จ
RAW์์๋ถํฐ JPG๋ก์ 1์ฐจ ๊ฐ๊ณต์ด๊ธฐ์ ๊ทธ ํ์ฌ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ธฐ์ ๋ ฅ๊ณผ ์๊ฐ ํน์ฑ์ ๋ณด์ฌ์ค์ผํ๋ ๊ฐ์ฅ ์ค์ํ ๋จ๊ณ๋ผ๊ณ ์๊ฐ๋จ
๐ง ์ด, ์์ฒญ๋ ์ ๊ทผ๋ฒ์ด ์๊ฐ๋จ -> ์์ no base๋ก synthesisํ๋๊ฒ ์๋๋ผ ๋ด๊ฐ ์ฃผ๋ dataset์ ๋ฐํ์ผ๋ก patch๋จ์ ํน์ ststistic์ ๊ฐ์ง๊ณ ์ ๋ง์น ์์ข ์ด ๋ถ์ด์ฒ๋ผ digital image์ ๋ง๋ patch๋ฅผ ๋ถ์ด๋ ๋ฐฉ๋ฒ๋ ๊ด์ฐฎ์ ๊ฒ ๊ฐ์ -> ์ด๋ฌ๋ฉด transformer๋ฅผ ์ฌ์ฉํด ๋ณผ ์๋ ์์๋ฏ (๋ด๊ฐ ๊ฐ์ง๋ ์ด๋ฏธ์ง์ kq๋ก ์ด๋ฏธ์ง ๊ฐ์ง๊ณ ์๋ dataset์์ value๋ฅผ ๊ณ์ฐํด๋ณด๋ฉด?)
[SCW06] STEFANO A. D., COLLIS W., WHITE P. R.: Synthesising and reducing film grain. Journal of Visual Communication and Image Representation 17, 1 (2006), 163โ82.
์ฌ๊ธฐ์ ๊ทธ๋ ๊ฒ ํ๋ค๋๋ฐ ๋์ค์ ์ฝ์ด๋ณผ ๊ฒ!
๐จ Other Approaches
22.
CVAE Method pre-test
๐ dataloader์์ ํ๋์ ์ด๋ฏธ์ง์ ๋ํด์ ์ฌ๋ฌ๊ฐ์ patch๋ฅผ ๊ตณ์ด ์ค์ ํ์ง ์์๋, dataset์ __len__
property๋ฅผ ์กฐ์ ํด์ ํ๋์ ์ด๋ฏธ์ง์์ ์ฌ๋ฌ๊ฐ์ patch๊ฐ ๋์ค๋๋ก ์กฐ์ ํ ์ ์์
CVAE ํ๋ฝ
๊ตํ
- 8x8 patch๋ก batch size 64๋ก ํ์ตํ๋๋ฐ gpu ์ฌ์ฉ์ ํจ์จ์ ์ผ๋ก ํ์ง ๋ชปํ๋ ๊ฒ์ ๋ฐ๊ฒฌํจ
- ์ฆ 8x8์ ์ํด์ ์คํ๋ ค ๋ ๋ง์ Image RW operation์ด ๋ฐ์ํด์ ์๋์ ์ผ๋ก bottleneck ์ด ๊ทธ๋ถ๋ถ์ ๊ฑธ๋ฆผ
- ๊ทธ๋์ ์ด๋ฏธ์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ ค๋๊ณ , 8x8 patch๋ฅผ extractingํ๋ ๋ฐฉ์์ ์ฌ์ฉ
22.
Some technics (prefetch_generator, pin_memory)
prefetch_generator(BackgroundGenerator)
For 375 image data (3089โรโ2048)
- wo BackgroundGenerator : 45.65์ด
- w BackgroundGenerator : 26.78์ด
๐ ์ด๋, ํ์ต delay๋ฅผ 0.1ms๋ก ์ฃผ์์๋ ํจ๊ณผ๊ฐ ๋ค์ด๋์ง / ๊ทธ๋ฅ dataloader๋ง ์ํ์ํค๋ฉด ํจ๊ณผ๊ฐ ๋ค์ด๋์ง ์์
๋ฐ๋ผ์ ํ์ต ์ num_woker๋ฅผ ์ฌ์ฉํ ์ ์๋ apple silicon device์ ์ฌ์ฉํ๋ฉด ํจ๊ณผ๊ฐ ์์ ๊ฒ์ผ๋ก ์๊ฐ๋จ
pin_memory
Memory๋ ์ด์์ฒด์ ์์ ์ฌ์ฉํ์ง ์์ ์ ๋์คํฌ ๊ณต๊ฐ์ผ๋ก swapํ๋๋ก ๊ด๋ฆฌ๊ฐ๋ฅํ pageable memory์ ์ด์์ฒด์ ์์ swap ๋ชปํ๋ page-locked memory๊ฐ ์กด์ฌํจ
์ด๋, pin_memory ์ค์ ์ falseํ๊ฒ ๋๋ฉด pageable memory์ data๊ฐ ๋ถ๋ฌ์์ง๊ฒ ๋๊ณ , gpu device mem๊ณต๊ฐ์ผ๋ก ์ด๊ธฐ๊ธฐ ์ํด์๋ page-loacked memory๋ก ๋ณต์ฌ + DMA๋ฅผ ์ฌ์ฉํ์ฌ GPU VRAM์ผ๋ก ์ ์ก 2๋จ๊ณ๋ฅผ ๊ฑฐ์ณ์ผํจ. ์ฌ๊ธฐ์ overhead ๋ฐ์
ํ์ง๋ง pin_memory๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด page-locked memory๋ก data๊ฐ ๋ถ๋ฌ์์ง๊ธฐ ๋๋ฌธ์ overhead๊ฐ ์ค์ด๋ฌ
1000๊ฐ์ random tensor summation์ ๋ํด์ pin_memory ์ ๋ฌด ์๋ ๋น๊ต
์ฌ์ฉ ์ค์ธ ๋๋ฐ์ด์ค: mps
- ๐ ์ฆ๊ฐํ Page-Locked Memory: 1078.12 MB
- ๐ pin_memory=False ์์ ์๊ฐ: 0.80์ด
์ฌ์ฉ ์ค์ธ ๋๋ฐ์ด์ค: mps
- ๐ ์ฆ๊ฐํ Page-Locked Memory: 1080.55 MB
- ๐ pin_memory=True ์์ ์๊ฐ: 0.81์ด
Unified memory๋ฅผ ์ฌ์ฉํ๋ M2 macbook์ ๋ํด์๋ ์ ์ฉ์ด ์๋๋ค๊ณ ์๊ฐ๋จ, test๊ฒฐ๊ณผ ๊ทธ๋ฅ
pytorch์ ์์ค์ฝ๋๋ฅผ ๋ณด๋ฉด
1042๋ฒ์ค์์ mps device์์์ pin_memory option์ ๊ด๋ฆฌ๋ฅผ ํ์ง ์์. mps ์์ฒด์์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌ๋ฅผ ํ๋๋ฏ ๋ณด์ธ๋ค. ์ด๊ฒ UM์ ํน์ฑ์ด๋ผ๊ณ ์๊ฐ๋จ.
pytorch dataloader.py source code
pytorch mps MPSAllocator.mm source code
.mm file์ objective-C์ C++์ ์์ ํํ โก๏ธ pytorch(c++ ๊ธฐ๋ฐ), Metal API๋ Object-C ๊ธฐ๋ฐ โก๏ธ 2๊ฐ ์ฐ๊ฒฐํ๋ ค๋ฉด .mm file๋ก ์ฐ๊ฒฐ
๐ Mach Virtual Memory Statistics (Page size: 16,384 bytes)
vm_stat command
*Available Memory**
- Pages free: 18,064 (โ 281MB)
*Memory Usage**
- Pages active: 302,460 (โ 4.7GB)
- Pages inactive: 300,448 (โ 4.7GB)
- Pages speculative: 933 (โ 15MB)
*Page-Locked Memory (Pinned Memory)**
- Pages wired down: 113,599 (โ 1.8GB)
*Cached & Purgeable Memory**
- Pages purgeable: 7,490 (โ 120MB)
- File-backed pages: 139,514 (โ 2.2GB)
- Anonymous pages: 464,327 (โ 7.4GB)
*Memory Compression**
- Pages stored in compressor: 722,020 (โ 11.5GB)
- Pages occupied by compressor: 275,678 (โ 4.4GB)
- Decompressions: 2,864,785
- Compressions: 5,081,194
*Swap & Paging**
- Pageins: 2,560,652
- Pageouts: 18,275
- Swapins: 122,093
- Swapouts: 661,024
*Additional Info**
- Translation faults: 74,863,824
- Pages copy-on-write: 5,963,520
- Pages zero filled: 29,007,477
- Pages reactivated: 2,205,490
- Pages purged: 634,520
23.
Model architecture visualization
netron.start(โunet.onnxโ)

DIANET visulization

ONNX (Open Neural Network Exchange) : ๋ค์ํ framework๋ก ํ์ต๋ ๋ชจ๋ธ์ IR ์ญํ ์ ํ์ฌ์ HWํ์ฌ๋ค์ ONNX๋ฅผ ํ๊ฒํ ์ผ๋ก compiler๋ sw ์คํ์ ์ต์ ํํ๋ฉด ๋จ
NVIDIA : ONNX -> TensorRT -> CUDA kernel
Intel : ONNX -> OpenVINO -> ?
Qualcomm : ONNX -> SNPE -> HexagonDSP
APPLE : ONNX -> CoreML -> ANE(apple neural engine)
24.
Model architecture seeks (clean code done!)
Vgg perceptual loss๋ ๋ฒ๋ฆฌ์ใ ใ -> ์ ์ฌํ์ ๋ชปํ ๋ฟ๋๋ฌ MSE loss๋ง ์๋๊ฒ ๋ ๋์
Tries
- relu -> leakyrelu
- concat ์ง์ ์ convํ๋ฒ
- sigmoid ๋ถ๊ฐ (image input์ด [-1, 1] ์ ๊ท๋ถํฌ์) -> ํฐ ๋ฌธ์ ์์
DiaNet๋ ๊ตฌ์กฐ๊ฐ ๋ฌธ์ ์ธ์ง ํ์ต๋ฐฉ๋ฒ์ด ๋ฌธ์ ์ธ์ง๋ ๋ชจ๋ฅด๊ฒ ๋๋ฐ, ์ ์๋๋๊ฑด ํ์คํจ
25.
Homogeniety block detection
์คํ์ ์ผ๋ก ์ค์ ํ parameter : def extract_pure_color_patches(image_path, patch_size=16, stride=8, variance_threshold=300, edge_threshold=0.01):
homogeniety block detection์ ์ํ parameter
detection ์ด๋ฏธ๋น 5๋ง์ฅ ๋ค ์ ์ฅํ๋ค๊ฐ ๋งฅ๋ถ ์ฉ๋ ๋ค ์ก์๋จน๊ณ , ์ญ์ ํ๋๋ฐ๋ ํ์ผ ์ฝ๋๋ฐ ์์ฒญ๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ๋ ๋ฌธ์ ๋ฐ์. ssd ์๋๊ฐ ํ์คํ ๋๋ฆฌ๋ค๋๊ฒ์ ์ฒด๊ฐํ๋์ค (์ ๋นํ ์ฌ์ด์ฆ๋ก dataset๋ง๋ค๊ฑฐ๋ dataloader์์ ์๋ํ๋๋ก ํด์ผ๋ ๋ฏ)
๋ด๊ฐํ๋ taskr๊ฐ ์ง๊ธ low-level vision task(denoising, enhancement, SR) / high-level vision task (semantic tasks)
Style trasnfer๋ ๋ ๋ค ๊ณ ๋ คํด์ผ๋๋ mid-level vision task๋ก ๋ถ๋ฆด ์ ์๋ค๊ณ ํ๋ค.
๐ Learning to Generate Realistic Noisy Images via Pixel-level Noise-aware Adversarial Training
์ฌ๊ธฐ์ noise ์์ฒด์ randomness์ irregularity๋ฅผ ๊ณ ๋ คํด์ ์ด๊ฑฐ๋ฅผ L1 loss๋ก ํ๋๊ฑด ๋ถ์ ์ (non convergence)
๋ฐ๋ผ์ noise๋ฅผ Random Variable๋ก ์ฌ๊ธฐ๊ณ MLE(Irn๋ถํฌ๋ฅผ ์ซ์
๋๋ก)์ Dd๋ฅผ ์ด์ฉํ clean image alignment๋ก Image์ ์์ฑ์์์ noise๋ฅผ ๋ชจ๋ฐฉํ๋๋ก ์ค์ ํจ
๋ณธ ๋
ผ๋ฌธ์์๋ Realistic Discriminator๋ฅผ ์ฌ์ฉํ๋ค. ์ง๊ธ๊น์ง ๊ฐ์ฅ ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ด ์ข์๋ UEGAN์ Realistic Discriminator์์ ํ๋ฐ์ง ๋ ๋์๊ฐ Relativistic average HingeGAN (RaHingeGAN)์ ํ์ฉํ๋ค.
PNGAN์์๋ ํด๋น ๊ธฐ๋ฒ์ ์ ์ฉํด ๋ณผ ์ ์๊ฒ ๋ค.
26.
PNGAN denoisier + UEGAN (or others)
UEGAN์ด ์ผ๋จ grain์ด ์์๋๋ ์ฑ๋ฅ์ ๋ณด์ฌ์ฃผ๊ธด ํ๋๋ฐ, denoising์ด ๋ ๊ฒฝ์ฐ์ ์ด๋ป๊ฒ ํ์ต์ด ์งํ๋๋์ง ๋น๊ต๋ฅผ ์ํด์ ํด๋ณด์.
Colour๊ณผ grain์ ๋์์ synthesisํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ก ์์ด๋ณด์ด๋๋ฐ..
https://developer.apple.com/videos/play/wwdc2024/10160/
Torch ์ํ๊ณ ์์์ model์ fine-tunningํ๊ณ deploymentํ๋ ๋ฐฉ๋ฒ
https://www.youtube.com/watch?v=SN-BISKo2lE
27.
TPU hbm Max allocatoin
PNGAN์ผ๋ก film ์ด๋ฏธ์ง๋ฅผ ๋ชจ๋ denoisingํ๋ ค๊ณ ํ๋๋ฐ, ๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ ์ํ๊ฐ ๋ฐ์ํจ (๊ทธ๋์ colab tpu๋ก ํ๋๋ฐ๋ 32gb์์๋ ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑํจ)
RuntimeError: Bad StatusOr access: RESOURCE_EXHAUSTED: XLA:TPU compile permanent error. Ran out of memory in memory space hbm. Used 31.40G of 7.48G hbm. Exceeded hbm capacity by 23.92G.
Total hbm usage >= 31.92G: reserved 530.00M program 31.40G arguments 0B
๋ค์ ์๊ฐํด๋ณด๋๊น, ์ ์ด์ UEGAN์์๋ resize๋ฅผ ํด์ noise ์ฑ๋ถ์ด ๊ฑฐ์ ์ํฅ์ ์๋ฏธ์ณค์ ๊ฒ์ด๋ผ๊ณ ์๊ฐ๋๊ธดํจ
๋ฐ๋ผ์ denoising์ ํ์ฉํ ๊ฐ๋ฅ์ฑ์ด ๋ฎ์ ๊ฒ์ผ๋ก ์์
28.
EfficientDet
RCTNet + UEGAN + PNGAN ๊ตฌํํ๋ ค๊ณ RCTNet ๋ค์ ์ฝ๋ค๊ฐ EfficientDet์ feature fusion์ ์ฌ์ฉํ๋ค๊ณ ํด์ ์ฝ์
JAX๊ฐ ์์ฆ ๋จ๋๋ฏใ ใ
EfficientDet์ ๊ธฐ์กด์ feature์ ๋ ํจ์จ์ ์ผ๋ก ์ฐ์ฐ๋์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ฉด ๋ ์ ์๋ฏธํ feature๋ฅผ ๋ฝ์๋ด๊ธฐ ์ํ ์๋๋ผ๊ณ ๋ณผ ์ ์์
์ง๊ธ ํ๋ฆ์ด
- RCTNet
- UEGAN
- Stochastic film grain synthesis
- PNGAN
์ ๋ฐํ์ผ๋ก ํด๋น ์๊ณ ๋ฆฌ์ฆ, ๋ชจ๋ธ, ํ์ต๋ฐฉ๋ฒ์ fusion ํ๊ธฐ ์ํด์ ํ์ ๋ ผ๋ฌธ์ด๋ ์ ํ ์ฐ๊ตฌ ๋ ผ๋ฌธ ์ฝ๊ธฐ์ค
-
EfficientDet- Scalable and Efficient Object Detection (cited by RCTNet)
-
MAXIM: Multi-Axis MLP for Image Processing (citing UEGAN) ๋๋ ์ด๋ป๊ฒ ๋ณด๋ฉด low-level vision tasks์์ multi-stage networks๋ฅผ ์ฌ์ฉํด์ผ ๋ ๊ฒ์ผ๋ก ์์๋จ ์ด๋ฐ ์๊ฐ์ด ์ดใ ใ ์ฝ๋ค๋ณด๋ฉด ๋๋ฌด ์๋ก์ด ๊ฐ๋ ์ด๋ผ์ ํ๋ฒ์ ๊ธ์๋ฅผ ์ฝ๋ ๊ฒ๋ง์ผ๋ก๋ ์ดํด๊ฐ ์๋๋ ์๊ฐ์ด ์ด -> ๊ต์ฅํ ๋จธ๋ฆฌ ์ํ๊ณ ์๊ดด๊ฐ์ด ๋ค์ง๋ง, ์ต๋ํ ๋จธ๋ฆฌ๋ฅผ ์ ๋ฆฌํ๊ณ ๋ค์ ์ดํดํ๋ ค๊ณ ๋ ธ๋ ฅํด์ ํ step ์ง๋ณดํ๋ค๋ ๋ง์์ผ๋ก ๋์๊ฐ
heuristic-based scaling approach : ์ง๊ด์ด๋ ๊ฒฝํ์ ํ๋จ, ๊ฐ๋จํ ๊ท์น์ ์ด์ฉํ๋ ์ ๊ทผ
Image enhancement ๊ฐ์ ๊ฒฝ์ฐ์๋ paper with code์์๋ SOTA๋ฅผ ์ ์ ํ๋ ๊ธฐ์ค์ด ๋๊ฒ qualitivie comparision์ด๊ธฐ ๋๋ฌธ์, ๋ค์ ์ฃผ๊ด์ ์ธ ์์ญ์
๐ญ๐ญ๐ญ ๋ฐ๋ผ์ ์์ง๋์ด์ artistic sense๊ฐ ํ์ํ ์์ญ์ด๋ผ๊ณ ์๊ฐ๋๊ณ , ๋ด๊ฐ ๊ทธ๋์ ํฅ๋ฏธ๊ฐ ์๋ค๊ณ ์๊ฐํ๋ ๋ฏํ๋ค. (SSIM, PSNR ๋ฑ๊ณผ ๊ฐ์ ์์น์ ์ธ improvement๋ ๋์๊ฒ ๋ค์ ํฅ๋ฏธ๋กญ๊ฒ ์๋๊ปด์ง)
CUDA vs MPS
MPS(M2 16gb) Average Process Time: 0.4536 sec Average Prepare Time: 0.0005 sec Average Compute Efficiency: 1.00
CUDA(t4 colab) Average Process Time: 0.0309 sec Average Prepare Time: 0.0004 sec Average Compute Efficiency: 0.98
โณ Different Norms
LayerNorm: Normalizes each sample over the last dimension (C), yielding BรHรW averages = 4ร16ร16 = 1024. ๐
BatchNorm: Normalizes each channel over the entire batch (B, H, W), resulting in C averages = 64. ๐
InstanceNorm: Normalizes each channel per sample over spatial dimensions (H, W), giving BรC averages = 4ร64 = 256. ๐
These results match the PyTorch documentation and deep learning literature (Ba et al., Ioffe & Szegedy).
๐ References
๐งท https://ml-explore.github.io/mlx-data/build/html/index.html
๐งท https://ml-explore.github.io/mlx/build/html/index.html
๐งท https://blog.jaeyoon.io/2017/12/jekyll-image.html
๐งท https://gyumpic.tistory.com/511
๐ Papers
An Unsupervised Deep Learning Approach for Real-World Image Denoising
Image Style Transfer Using Convolutional Neural Networks
MAXIM: Multi-Axis MLP for Image Processing
EfficientDet: Scalable and Efficient Object Detection
Investigating properties of film grain noise for film grain management
Learning to Generate Realistic Noisy Images via Pixel-level Noise-aware Adversarial Training
Rapid and Reliable Detection of Film Grain Noise
Simulating Film Grain using the Noise-Power Spectrum
Texture Synthesis Using Convolutional Neural Networks
Film-GAN: towards realistic analog film photo generation
Stimulating Diffusion Model for Image Denoising via Adaptive Embedding and Ensembling
Computational Simulation of Alternative Photographic Processes
A Stochastic Film Grain Model for Resolution-Independent Rendering
A Large-scale Film Style Dataset for Learning Multi-frequency Driven Film Enhancement
Deep Photo Enhancer: Unpaired Learning for Image Enhancement from Photographs with GANs
Contrastive Learning for Unpaired Image-to-Image Translation
Deep-based Film Grain Removal and Synthesis
Global and Local Enhancement Networks for Paired and Unpaired Image Enhancement
Representative Color Transform for Image Enhancement
Local Color Distributions Prior for Image Enhancement
PieNet: Personalized Image Enhancement Network
Towards Unsupervised Deep Image Enhancement with Generative Adversarial Network
U-Net: Convolutional Networks for Biomedical Image Segmentation
Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks