본문 바로가기

전체 글178

[논문 구현] U-Net: Convolutional Networks for BiomedicalImage Segmentation U-net은 정말 다양한 곳에 쓰입니다. 저는 U-net을 노이즈 제거 작업에 사용할 것입니다. 먼저 GPU를 설정해 줍니다. 전에는 MNIST 데이터를 사용했습니다. 이번에는 fashion_mnist 데이터를 사용하겠습니다.  노이즈 제거 작업을 한다고 했었죠. 이미지에 노이즈를 입혀줍니다. 노이즈가 잘 적용되었는지 확인해 봅시다.  원본 이미지랑 비교했을 때 조금 더 얼룩이 들어가 있는 것을 확인할 수 있습니다. 이제 모델 구현으로 가봅시다. 이미지의 크기가 작으니 깊이를 2단계만 내려가도록 하겠습니다.먼저 CNN을 2번 적용하고 MaxPool을 적용합니다. 똑같이 CNN 2번에 MaxPool을 적용합니다. 다른 구현에는 함수를 사용해 중복을 줄였지만 깊이가 깊지 않으니 굳이 함수로 빼지는 않겠습니다.. 2024. 5. 31.
[논문 리뷰] U-Net: Convolutional Networks for BiomedicalImage Segmentation UNet 에 대한 논문을 리뷰해 보겠습니다. 이것 역시 깊이 들어가기보다는무엇을 하는 녀석인가구조가 어떻게 되어 있는가어떻게 로스를 계산하는가에 중점을 두도록 하겠습니다.무엇을 하는 녀석인가이 논문에서는 세포들이 있는 이미지가 입력으로 주어지면 서로 다른 세포들을 분류해 주는 인공지능입니다. 하지만 다양한 곳에 쓰일 수 있습니다.구조가 어떻게 되어 있는가CNN을 이용해서 데이터를 수축시키고 여기에 up-conv를 적용해 다시 팽창시킵니다. 그림을 보면 U자 형태를 띄고 있습니다. 첫 번째572*572*3이미지가 주어집니다. *3은 색을 나타냅니다. 3*3 CNN을 2번 적용하되 padding을 주지 않아 크기가 2씩 줄어듭니다. 채널은 64개를 사용합니다. 이후 max pool을 해서 284*284*64.. 2024. 5. 29.
11873 - 최대 직사각형 step 1더보기https://www.acmicpc.net/problem/6549https://codestudycafe.tistory.com/37step 2더보기"직사각형의 밑변이 i번째 행에 있다면 만들 수 있는 직사각형의 최대 넓이는 얼마일까" 라는 질문을 모든 행에 대해서 하면 됩니다.i가 정해졌다고 할 때, 0 위에 있는 1들은 아무 의미 없습니다. 그곳에 직사각형이 도달할 수 없기 때문이죠. 아래는 예제의 첫번째 케이스에서 i=3일 때입니다.그렇다면 이 문제는 "히스토그램에서 가장 넓은 직사각형이 무엇인가"를 푸는 문제로 바뀝니다.이 문제를 푸는데 N, 이 문제의 개수가 N이므로 N^2에 해결할 수 있습니다.코드더보기#include#includeusing namespace std;stack> s.. 2024. 5. 26.
13537 - 수열과 쿼리 1 step 1더보기원래 있는 수열을 쿼리로 변환해 봅시다.그럼 문제는 다음과 같이 바뀝니다. 길이 $N$인 수열이 주어집니다. 처음 수열의 값은 전부 0입니다.$1 i k$ : 수열 $i$번째 위치에 $k$를 추가합니다.$2 i j k$ : $A_i, A_{i+1}, ..., A_j$로 이루어진 부분 수열 중에서 $k$보다 큰 원소의 개수를 출력한다.step 2더보기$2 i j k$를 봅시다. 수열에서 $k$ 이하인 숫자들은 아무 의미가 없습니다. $k$ 초과인 숫자들은 $k$보다 크다는 것이 중요하지 그 숫자의 값은 중요하지 않습니다.그럼 이 쿼리들을 $k$가 큰 순서로, $k$가 같으면 2번 쿼리가 먼저 나오도록 정렬해 봅시다. 세그먼트 트리를 하나 만든 다음 1번 쿼리고 오면 $i$에 1 추가, 2번.. 2024. 5. 26.
1055 - 끝이없음 step 1더보기max - min은 대략 100만큼 차이 납니다. 그럼 "i번째 문자가 무엇인가"라는 문제를 i가 min, min+1, ..., max일 때까지 해서 총 100번 물어보면 됩니다. 앞으로의 설명에서는 i번째 문자를 구하는 데에 집중하겠습니다.step 2더보기$ 기호가 1개일 때와 2개일 때로 나눌 수 있습니다. $가 1개일 때 먼저 처리하겠습니다. S를 $ 기준으로 앞과 뒤로 나눌 수 있습니다. $ 앞을 (1), $ 뒤를 (2)라고 하면 (1) (1) (1).... (1) (1) (입력) (2) (2) (2)... (2) (2) 로 만들어 집니다. (1)과 (2)는 (실행시킨 횟수)만큼 반복됩니다. (1)과 (2)의 길이를 구해두면 쉽게 풀 수 있습니다.step 3더보기N번 실행시켰을 때.. 2024. 5. 26.
6549 - 히스토그램에서 가장 큰 직사각형 step 1더보기정답이 되는 직사각형은 위, 아래, 좌우로 더이상 확장이 불가능한 상태여야 합니다.히스토그램의 각 막대에 대해서 '해당 막대를 완전해 포함할 때 직사각형의 최대 면적'을 구한 다음 그 중 가장 큰 것을 고르면 됩니다.step 2더보기막대가 정해졌다면 사실 높이가 정해진 것과 같습니다. 그럼 좌, 우로 얼마나 확장 가능한지만 남아 있습니다. 오른쪽으로만 확장한다고 생각해 봅시다.스택을 하나 만든 다음 왼쪽부터 오른쪽으로 쭉 보면서 다음 규칙에 따라 스택에 막대를 넣고 뺍니다.스택의 가장 위 막대의 높이가 지금 보고 있는 막대의 높이보다 크다면 스택에 있는 막대는 오른쪽으로 더이상 확장하지 못한다는 뜻입니다. 해당 막대를 스택에서 빼고 그 막대가 오른쪽으로 얼마나 확장했는지 기록합니다.스택의.. 2024. 5. 24.