🧡 Programming(11)
-
[CUDA] PID 모를 때 GPU 프로세스 Kill 하기(sudo권한 필요 X)
CUDA OOM 에러로 프로세스가 종료되었을 때 할당되어있던 메모리를 릴리즈하지 못하고 그대로 가지고 있는 상황에서 GPU를 강제로 죽이는 방법을 알아보자 통상적으로는 nvidia-smi 명령을 통해서 PID를 확인하고 kill -9 {PID번호}를 하면 간단하게 프로세스를 죽일 수 있다. 하지만 나의 경우 PID가 전혀 나오지 않는 상황이었다. 그리고 sudo권한을 사용 할 수 없는 서버여서 sudo fuser -k /dev/nvidia3 명령어도 사용 할 수 없었다. 내가 선택한 방법은 ps aux명령어를 통해 현재 모든 프로세스를 조회하는 것이었다. ps aux 해당 명령어를 입력하면 모든 프로세스가 주르륵 나온다. 아래와 같은 형식으로 나오는데 이때 PID번호와 내가 삭제하고 싶은 프로세스 명을 ..
2023.03.02 -
[OpenCV] 이미지 ROI 마스크 적용 방법들, 컬러 마스크 중복 적용 하기 (x연산, bitwise, copyTo, addWeighted)
이미지를 플롯하다보면 다양한 방법으로 이미지 마스킹을 하고 싶을 때가 있다. 특히 segmentation과 같은 마스크를 같이 이용하는 네트워크를 이용하다보면 실제 gt mask와 pred mask를 효율적으로 플롯할 방법을 고민하게 된다. 매번 마스킹 방법을 검색하는 것이 너무 번거로워서 내가 자주 사용하는 마스킹 방법들을 총 망라해 보겠다. 💡 bitwise_and 💡 곱하기 연산 (x) 💡 copyTo 💡 addWeighted 💡 컬러 마스크 / 중복 마스크 적용 사용 마스크 이미지 사용한 이미지는 skimage에서 가져온 PIL이미지이므로 opencv에서 사용 할 수 있도록 numpy 배열로 바꾸고 이진화를 먼저 수행했다. horse_mask = cv2.cvtColor(np.array(images..
2023.02.18 -
[백준/C++] 17142 연구소3 (BFS)
💡 문제 설명 비활성 바이러스의 위치가 2로 표시되는데 연구실 바이러스 M개를 활성시킨다는 것은 2로 표시된 위치 중에서 M 개를 선택해서 바이러스를 뿌리겠다는 것이다. 그리고 전체 빈 공간을 바이러스(비활성,활성 포함)로 모두 채우는데 얼마나 걸리는 지를 계산 하는 문제이다. 전형적인 bfs이지만 조합이 한 번 들어갔다는 점에 있어서 아주 살짝 까다로운 느낌을 내려고 한 문제이다. 💡 문제 풀이 먼저 바이러스 정보들을 struct info에 저장하고 이 struct를 벡터로 구성하여 virus정보를 저장한다. 조합을 통해서 바이러스의 활성 상태를 on/off 해 주면서 조합을 구한다. 조합은 중복되지 않는 숫자들을 고르는 것이기 때문에 for (int i = inx ; i < virus.size() ;..
2023.02.18 -
[PyTorch] Custom Dataset 만들기
모델을 만들면 항상 커스텀 데이터셋을 만들게 된다. 왜냐면 나는 이미지 폴더로 데이터로드 하는 것을 싫어한다. 아래와 같이 사용하는 것인데 이미지 폴더를 바로 가져와서 데이터셋을 구성하는 편리함이 있긴 하지만 데이터셋 내에서 데이터를 다양하게 조합하고 싶을 때마다 데이터를 매번 새로운 폴더로 만들 수는 없다. from torchvision.datasets import ImageFolder from torch.utils.data import DataLoader dataset = ImageFolder(root='folder_path', transform=transforms.Compose([ transforms.ToTensor(), ])) data_loader = DataLoader(dataset, batch..
2023.02.18 -
[백준/C++] 14500 테트로미노 (DFS)
전형적인 DFS문제이다. 위 입력과 같이 인풋이 주어질 때 테트리미노가 놓인 칸에 쓰인 수들의 합의 최댓값을 출력하는 문제이다. map 을 방문하면서 한 위치를 고정으로 dfs를 4번 돌면 테트리미노가 완성된다. 근데 그중 凸모양(?) 테르리미노는 dfs로 구현이 안되므로 cnt==1일 때 조건을 만들어서 따로 계산한다. 이와 좀 유사한 문제로는 PuyoPuyo(뿌요뿌요)가 있었던 것으로 기억한다. dfs를 돌면서 어떤 도형을 만드는 형태의 문제는 자주 나오는 문제이므로 한 번 풀어보고 감을 잡는 것이 좋다. #define _CRT_SECURE_NO_WARNINGS #include #include int N, M; int map[555][555]; bool visit[555][555]; int dx[4]..
2023.02.15 -
[SWEA/C++] 4615 재미있는 오셀로 게임 (DFS, 쉽고 짧은 코드)
나는 오셀로 게임을 좋아했다. 그리고 못하는 편은 아니라고 생각한다. (하지만 회사 내 어르신에게 여러 번 진 이력이 있다...) 사실 구석 4 모서리를 잘 선점하는 이기는 게임.. ㅋㅋㅋ 문제에서 주어진 오셀로 게임의 설명은 다음과 같다. 무튼 이 문제의 핵심은 흑돌과 백돌을 번갈아가면서 주어진 인풋대로 두는데 각각 돌이 몇개냐를 묻는 문제이다. 방법은 간단하다. 돌을 입력받을 때 마다 find(y_coord, x_coord, wb)를 이용하여 돌을 두고 돌 색을 바꾸면 된다. void find(int Y, int X, int STONE) 함수를 보면 돌을 둔 위치에서 8방향을 체크한다. 돌을 두었다는 것 자체가 먹을 돌이 있다는 얘기이니까 돌을 두었을때 잡아먹을 수 있는 돌이 있는 지는 딱히 신경 쓸..
2023.02.12