일반적으로 Depthwise Convolutional Layer는 CNN 모델의 연산량과 파라미터 수를 줄이기 위하여 제안되었으나, 실제로 이를 사용하여 모델을 구현한 뒤에 속도를 측정해보면 줄어드는 연산량 대비 고속화의 정도가 크지 않습니다. 특히, 저의 경우 Depthwise Convolutional Layer가 포함된 CNN 모델을 학습시키려하니, Forward 및 Backward 과정에서 비정상적으로 긴 시간이 걸리는 것을 확인하였습니다. 이러한 경우 코드상에서 Forward 및 Backward 과정 이전에 아래의 코드를 작성해주면 소요시간을 단축시킬 수 있습니다. torch.backends.cudnn.deterministic = False torch.backends.cudnn.benchmark ..
def img2tensor(img): #the format of img needs to be bgr format img = img[..., ::-1] #bgr2rgb img = img.transpose(2, 0, 1) #(H, W, CH) -> (CH, H, W) img = np.ascontiguousarray(img) tensor = torch.tensor(img, dtype=torch.float32) return tensor
본 게시글은 해당 링크를 참고하여 작성된 게시글입니다. Multi GPUs를 사용하여 Model을 학습시키고 Weights을 저장하면 모든 Parameter의 Key값에 "module."이 붙은채로 저장됩니다. 그런데, 이렇게 되면 Model의 멤버 변수(self.*)를 클래스 외부에서 접근할때 코딩 시 객체명.* 으로 접근하지 못하고 객체명.module.*과 같이 "module"을 붙여주어야 접근이 가능해집니다. 이렇게 되면, 코드를 작성할때 항상 module의 존재를 신경써주어야 합니다. 문제를 파악해봅시다. module이 붙는 이유는 Model을 병렬화 시켰기 때문이고, Model을 병렬화 시켰던 이유는 Load하고자하는 Weights의 Key값에 'module.'이 붙었기 때문입니다. 해결 방법은..
import torch import torch.nn as nn import torchvision.models as models class CNN(nn.Module): def __init__(self, ): super(CNN, self).__init__() self.backbone = models.resnet18(pretrained=True) for p in self.backbone.parameters(): p.requires_grad = True self.fc = nn.Linear(512, 2) def forward(self, x): x = self.backbone.conv1(x) x = self.backbone.bn1(x) x = self.backbone.relu(x) x = self.backbone...
- Total
- Today
- Yesterday
- 백준 11437
- 백트래킹
- cosine
- 인공지능을 위한 선형대수
- 이분탐색
- 조합
- PyCharm
- 자료구조
- 백준 11053
- 가장 긴 증가하는 부분 수열
- 문제집
- 백준 1766
- C++ Deploy
- 파이참
- 백준
- FairMOT
- ㅂ
- LCA
- 단축키
- MOT
- 위상 정렬 알고리즘
- 순열
- Lowest Common Ancestor
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
