공부하며 성장하기

    새 창에서 진행률 progress bar 표시하기

    새 창에서 진행률 progress bar 표시하기

    background thread에서 수행하고 있는 task에 대해 새 창에서 진행률을 보여주려면 UI thread로 해당 부분을 넘겨줘야 한다. 그러려면 BackgroundWorker와 Dispatcher가 필요하다. 아래 코드는 기본적인 로직만 담고 있다. 필요한 경우에 가져다 쓰면 된다. // MainWindow.xaml // TestProgress.xaml.cs (Main Window) namespace TestProgress { public partial class MainWindow : Window { private BackgroundWorker Worker; private ProgressWindow ProgressBarWindow; public MainWindow() { InitializeCo..

    Docker Desktop shutting down 해결

    Docker Desktop shutting down 해결

    Docker desktop을 업데이트하고 난 후부터는 실행이 되지 않았다. 삭제 - 재설치할 때, backend를 hyper-v로 바꾸면 실행은 가능했다. 하지만 근본적인 해결책은 아니었다. 막상 실행하고자 하는 container들을 실행하는 데 한계가 있었다. 예를 들면 nvidia-container-cli: initialization error: load library failed: libnvidia-ml.so.1 같은 에러가 발생했다. 열심히 검색해보니 이 error는 wsl 기반에서는 발생하지 않는 것 같았다. nvidia-container-cli: initialization error: load library failed: libnvidia-ml.so.1 · Issue #154 · NVIDIA/..

    [한 줄 정리] 다양한 Normalization 기법들

    [한 줄 정리] 다양한 Normalization 기법들

    가장 흔히 사용하는 Batch Normalization 외에도, Layer Normalization, Instance Normalization, Group Normalization이 있다. Batch Normalzation과 비교해 각각 간단히, 직관적으로 정리해 보았다. 우선 Batch Norm은 하나의 batch 내 모든 이미지를 channel별로 normalize 하는 것이다. 아래 그림에는 한 배치당 2개 이미지가 있고, 각 채널 개수는 3이다. 그런데 이 BN에 작은 단점이 있다. batch 내에 엄청 튀는 data가 있으면 그에 편향된 평균과 표준편차로 normalize 된다는 것이다. 물론 batch size를 키우면 대부분 해결이 된다. 하지만 그게 어려울 경우, batch와 관계없이 no..

    Object Detection에서 mAP_0.5와 mAP_0.5:0.95의 의미

    Object Detection에서 mAP_0.5와 mAP_0.5:0.95의 의미

    Object Detection 모델을 학습하면서 mAP_0.5는 꽤 높은 수준으로 잘 나오는데, mAP_0.5:0.95는 그에 비해 많이 떨어지는 걸 발견했다. 표기만 봐서는 mAP_0.5는 IoU 값이 0.5 이상일 때 Average Precision의 평균일 거고, mAP_0.5:0.95는 IoU 값이 0.5에서 0.95 사이인 경우 Average Precision의 평균일텐데, 왜 이렇게 차이가 많이 나는지 이해가 가지 않았다. 정확히 찾아보니, mAP_0.5:0.95는 0.05 step으로 IoU 값이 0.5일 때, 0.55일 때, 0.6, 0.65, 0.70, ..., 0.9, 0.95일 때 Average Precision을 각각 구한 후 그 평균을 구한 값임을 알았다. 당연히 IoU thres..

    Loss function returned Nan values 해결

    Loss function returned Nan values 해결

    직접 model architecture와 dataset, loss function을 만들고 학습시키려고 보니 loss function returned Nan values와 같은 에러가 발생했습니다. 아래와 같은 순서대로 어디서부터 문제가 발생했는지 확인하고, 해결할 수 있었습니다. 1. Learning rate 줄여보기 Learning rate이 너무 크면 모델이 loss function의 minimum value로 optimize되지 못하고 oscillate / overshoot 할 수 있습니다. 따라서 안정적으로 converge하도록 하려면 더 작은 learning rate으로 조정해볼 필요가 있습니다. ex) 0.001 → 0.0001 2. Model architecture 또는 parameter ..

    List comprehension보다 for문이 빠른 경우

    List comprehension보다 for문이 빠른 경우

    보통은 list comprehension이 반복문보다 처리 속도가 빠르다고 알고 있다. 그런데 그렇지 않은 경우도 존재한다. 다음과 같은 경우를 예로 살펴 보자. 어떤 pattern과 text를 입력 받아, 해당 pattern이 text에 포함되어 있는지 검사하는 코드이다. 결과로 pattern이 시작되는 text의 index를 반환한다. def read_input(): return (input().rstrip(), input().rstrip()) def print_occurrences(output): print(' '.join(map(str, output))) def get_occurrences(pattern, text): return [ i for i in range(len(text) - len(pa..

    DeeplabV3+ 모델 전이 학습(transfer learning) 쉽게 구현하기

    DeeplabV3+ 모델 전이 학습(transfer learning) 쉽게 구현하기

    아래 repository를 기반으로 작성하였다. GitHub - qubvel/segmentation_models.pytorch: Segmentation models with pretrained backbones. PyTorch. Segmentation models with pretrained backbones. PyTorch. - GitHub - qubvel/segmentation_models.pytorch: Segmentation models with pretrained backbones. PyTorch. github.com 1. Pretrained 모델 로드 # train.py pretrained_model = smp.DeepLabV3Plus( encoder_name='resnet50', encode..

    AMP(Automatic Mixed Precision) 쉽게 적용하기

    AMP(Automatic Mixed Precision) 쉽게 적용하기

    pytorch 1.6 이상에서는 torch.cuda.amp 패키지를 이용해 편리하게 AMP를 적용할 수 있다. * AMP는 float32와 float16을 함께 적절히 사용함으로써 빠른 연산 속도와 효율적인 메모리 활용이 가능하도록 해준다. 내 딥러닝 모델에 AMP를 적용하려면 앞서 말한 패키지에서 두 가지를 import 해야 한다. from torch.cuda.amp import autocast, GradScaler 우선 GradScaler는 mixed-precision으로 학습을 진행할 때 gradient scaling을 수행하는 역할을 한다. 즉 backpropagation 중 gradient가 너무 작아지는 것을 방지하여 floating-point 형식으로 정확하게 표현될 수 없는 숫자가 되는 문..

    AWS ECR 이미지와 lambda로 딥러닝 Serverless 서비스 만들기 - UnicodeDecodeError 해결

    AWS ECR 이미지와 lambda로 딥러닝 Serverless 서비스 만들기 - UnicodeDecodeError 해결

    Error message: Traceback (most recent call last): File "/var/runtime/bootstrap.py", line 60, in main() File "/var/runtime/bootstrap.py", line 55, in main add_default_site_directories() ... 중략 ... File "/var/lang/lib/python3.9/codecs.py", line 322, in decode (result, consumed) = self._buffer_decode(data, self.errors, final) UnicodeDecodeError: 'utf-8' codec can't decode byte 0x80 in position 64: ..

    K-means Clustering

    K-means Clustering

    K-means cluster analysis is an unsupervised machine learning algorithm used to partition a dataset into distinct groups or clusters based on similarity of data points. It aims to find K cluster centers in such a way that the within-cluster sum of squares is minimized. Here's how k-means cluster analysis works: Initial Setup: The algorithm begins by randomly selecting K initial cluster centers fr..