2*2 맥스 풀링 연산을 적용하여 다운샘플링하는 이유 : 2*2 맥스 풀링 연산을 실행하면 이미지의 크기가 절반으로 줄어들음 (한 픽셀이 더 넓은 영역을 요약해서 담게 됨)
각 다운샘플링 단계에서 특징 채널의 수를 두 배로 증가시키는 이유 : 다운샘플링을 통해 이미지 크기가 작아지므로, 대신 채널 수를 늘려서 더 많은 특징을 기억하도록
근데 [입력] → [합성곱1] → [합성곱2] → [다운샘플링] → [채널 수 늘림] 인데 채널 수는 어떻게 늘어나는 것인가? → 결론부터 말하면 복사하는 건 아니고, 새롭게 만들어진 특징임
입력 이미지가 128*128*64 라고 했을 때 이를 처리하기 위해 128개의 필터를 씌움 → 필터 하나당 각각 128*128*1 로 생성이 됨 → 결과적으로 128*128*128 이 생성 (첫 단계에서 합성곱을 64개의 필터를 사용한다면, 두 번째 단계에서는 128개의 필터를 사용 → 결과적으로 필터가 늘어나게 됨)
확장 경로
각 단계에서 특징 맵을 업샘플링한 후, 2*2 합성곱을 적용하여 특징 채널의 수를 절반으로 줄임
수축 경로에서 가져온 대응되는 크롭된 특징 맵과 결합 (스킵 커넥션)
3*3 합성곱을 두 번 수행하고, 각 합성곱 연산 후, ReLU 활성화 함수를 적용
최종 레이어에서는 1*1 합성곱을 사용하여, 64차원 특징 벡터를 원하는 클래스 수로 변환 → 결과적으로, 이 네트워크는 총 23개의 합성곱 계층을 포함
특징 채널의 수를 절반으로 줄이는 이유 계산량도 줄고 정보 중복도 제거됨 (마치 앞에서 했던 거 되돌리기 하는 느낌)
크롭된 특징 맵과 결합하는 이유 : 다운하면서 손실된 정보들을 복원하기 위해서는 정보가 더 필요함 → 그걸 수축 경로에서 저장해뒀던 특징맵을 같은 해상도가 되었을때 확장 경로로 끌고 와서 붙이는 거임
예를 들어, 업샘플링으로 64*64 가 되었을 때, 다운샘플링 2번 후 64*64로 줄었을때의 특징맵을 가져와 합침 → 그러면 64*64에서의 디테일(다운샘플링)과 요약된 정보(업샘플링)가 동시에 존재하는 풍부한 특징 맵이 됨 (붙이는 방법 : torch.cat([left, right], dim=1) in 파이토치)
그 후, 3*3 합성곱을 두 번 수행하고, 각 합성곱 연산 후, ReLU 활성화 함수를 적용함 : 고해상도 + 저해상도 정보 합친 거를 이제 이해시켜야 함 붙여진 정보를 재해석하는 과정
ReLU 함수를 사용하는 이유 : ReLU 함수를 사용하면 중요한 정보만 남기고 중요하지 않은 음수 정보는 잘라냄으로써 합쳐진 정보가 섞이고 다듬어지면서 점점 의미 있는 구조로 바뀜
의미 있는 구조로 바뀌는 과정 : concat을 이용해서 붙여진 두 맵은 처음에 나란히 붙은 거 → 이 이후에 합성곱을 통해 채널들 중 각 위치의 값들과 가중치를 곱해서 더해지면서 의미 있는 채널이 생김 → 그래서 그 채널들을 강하게 연결해서 새로운 특징맵을 만들어냄→그러면서 중요한 채널 조합은 강조되고, 덜 관련있는 채널들은 거의 무시되거나 사라짐 (결국 CNN이 관련 있는 채널들을 학습을 통해 골라서 조합하는 것)
각 합성곱 연산에서 경계 픽셀의 손실 발생 → 크롭 과정이 필요함 : U-Net 원 논문에서는 패딩 없이 합성곱을 진행함 → 그러면 가장 자리가 잘려나가서 경계 픽셀 손실이 생겨버림 → 그러다 보니까 수축 경로의 특징맵이 업샘플링한 출력보다 더 큼 → 그래서 왼쪽 특징맵을 오른쪽이랑 딱 맞게 만든 후, 채널 방향으로 붙여 줘야 함 (보통 가운데 기준으로 자름)
수축 경로
입력: 572×572
Conv(3×3) → 출력: 570×570
Conv(3×3) → 출력: 568×568
Max Pooling (2×2) → 284×284
확장 경로
업샘플링 → 크기 늘려서 284×284
하지만 이쪽도 Conv(3×3)을 두 번 하니까 → 출력이 더 작아짐 (예: 280×280)
최종 레이어에서는 1*1 합성곱을 사용하여, 64차원 특징 벡터를 원하는 클래스 수로 변환함 : 이제 각 픽셀마다 어떤 클래스인지 예측해야 함 픽셀 단위 분류기 역할인 셈
계산 : 64개의 숫자에 대해 각각 가중치 64개를 곱해서 하나의 숫자를 만듦 ex. 클래스 수가 2라고 한다면, 64차원 벡터가 각 클래스별 점수로 뽑아내 2차원 벡터로 만들어 버림
이 네트워크는 총 23개의 합성곱 계층을 포함함
수축 경로 : 총 4단계 인데 각 단계마다 3*3 합성곱 2번 이니까 8개
중간 : 2개 -> 수축 경로에서 모든 고차원 특징들을 더 깊이 정리하고 확장 경로로 잘 넘기기 위한 중간 정제 과정
왼쪽 : 클래스간 불균형을 보정하는 기본 가중치 (개수로 따져서 많으면 낮은 가중치, 적으면 높은 가중치)
오른쪽 : 세포 경계에서 가까운 픽셀일수록 손실 값을 더 크게 반영하는 가중치를 적용
세포 간의 경계를 강조하는 방법 : 형태학적 연산을 활용한 경계 계산 - 거리 변환 사용
세포 경계에서 가까운 픽셀일수록 → exp 값 커짐
반대로 세포 내부나 배경에 있는 픽셀일수록 → exp 값 작아짐
문제점 : 훈련 데이터에서 특정 클래스의 픽셀 수가 불균형할 수 있음 (ex. 배경 픽셀이 압도적으로 많고, 세포 픽셀은 너무 적은 경우) → 이를 보정하기 위해 가중치 맵을 미리 계산해서 픽셀 수가 적은 클래스에 더 높은 가중치 부여
실험 설정
w_0 = 10 : 세포 경계 픽셀의 중요도를 10배 증가시킨다는 의미
시그마 = 5 픽셀 : 세포 경계 근처 (약 5픽셀 이내)까지는 높은 가중치를 유지하면서, 그 이후에는 가중치를 줄이고자 함
교차 엔트로피 손실 함수가중치 맵 수식
가중치를 적절히 초기화하는 것의 중요성
이상적으로, 네트워크 내의 각 특징 맵이 대략 단위 분산을 갖도록 초기 가중치가 조정되어야 함 → 각 계층의 출력을 안정적으로 유지해야 한다는 말 (적절하게 초기화 되지 않으면, 기울기 소실 문제 혹은 기울기 폭발 문제가 발생)
He 초기화 : ReLU 활성화 함수를 사용하는 네트워크에서 가장 적절한 가중치 초기화 방법
신경망이 깊어질 때도 출력 값의 분산이 유지되도록 함
분산 = 2/N (∵ReLU 함수는 음수를 모두 0으로 바꾸기 때문에 평균이 낮아지고 분산이 줄어들어서 기본적인 Xavier 초기화 (1/N)보다 더 큰 값을 사용해야 함) → 실험적으로 2/N이 가장 안정적인 학습을 보장한다는 것이 알려져 있음
3.1 Data Augmentation
데이터 증강 : 훈련 샘플가 적을 때, 네트워크가 불변성과 강건성 특성을 학습하도록 하기 위해 사용
현미경 이미지의 경우, 주로 이동, 회전, 변형, 회색 값 변화(픽셀의 밝)에 대한 강건성 필요
랜덤 탄성 변형 : 주석 이미지 수가 매우 적을 때도 효과적인 학습을 가능하게 하는 핵심 데이터 증강 기법
변형 적용 방법
3*3 그리드로 이미지 분할 이러한 변위 값들은 표준 편차가 10 픽셀인 가우시안 분포에서 샘플링 됨
각 격자의 중심점에서 랜덤한 변위 벡터를 생성 → 변위 값들은 표준 편차가 10 픽셀인 가우시안 분포에서 샘플링됨 (10픽셀이라는 값은 실험적으로 가장 적절한 변형 정도를 제공하도록 설정한 것)
각 격자의 중심점이 랜덤하게 움직였으니, 주변 픽셀도 이에 맞춰 변형되어야 함
드롭아웃 : 수축 경로의 끝에 있는 드롭아웃 계층은 추가적인 암시적 데이터 증강을 수행함
각 픽셀 단위의 변위는 이후 바이큐빅 보간법을 사용해 계산됨
바이큐빅 보간법 : 16개의 주변 픽셀 값을 고려하여 새로운 픽셀 값을 계산하는 방식 → 중심점이 이동했을 때 새로운 중심점 위치를 기준으로, 주변 픽셀들의 위치를 보간하여 부드럽게 조정함 즉, 픽셀들이 갑자기 끊기거나 깨지지 않도록 부드럽게 변형해줌
4. Experiments
U-Net을 세 가지 다른 세분화 작업에 적용하는 것을 보여줌
전자현미경 기록에서 신경 구조를 분할하는 것 (그림 2)
데이터 세트 : ISBI 2012에서 시작된 EM 세분화 챌린지의 데이터 세트
훈련 데이터 : 초파리 유충의 배측 신경삭을 전자현미경을 이용해 연속 단면으로 촬영한 30장의 이미지 (세포와 세포막에 대한 완전히 주석이 달린 정답 세분화 맵과 함께 제공)
테스트 데이터 세트 : 데이터는 공개되어 있지만, 정답은 비공개
평가 기준 : 10개의 서로 다른 임계값으로 이진화한 후(세포막 예측 확률 맵이 연속적인 값이기 때문에 여러 개의 임계값을 사용), 왜곡 오차 / Rand 오차 / 픽셀 오차 를 계산
왜곡 오차 : 모델이 예측한 세포막 경계가 실제 정답과 얼마나 잘 일치하는지 평가하는 척도
Rand 오차 : 세포들이 원래 연결된 형태 그대로 잘 분리되었는지 측정하는 지표
픽셀 오차 : 픽셀 단위에서 예측이 얼마나 정확한지 평가하는 척도
결과
추가적인 전처리 또는 후처리 없이 왜곡 오차 0.0003529, Rand 오차 0.0382 달성 (표1) -> Ciresan et al. 의 슬라이딩 윈도운 합성곱 신경망 결과보다 훨씬 우수한 성능
Ciresan et al. 의 최고 성능 제출은 왜곡 오차 0.000420, Rand 오차 0.0504 기록 Rand 오차 기준으로 보면, U-Net보다 성능이 더 좋은 방법도 있었음 근데 그 방법들은 Ciresan et al. 의 예측 결과에 특화된 후처리를 적용한 것 / 즉, 별도의 후처리를 적용하지 않은 모델 자체 성능만 비교하면, U-Net이 더 우수했음을 의미
광학 현미경 이미지에서의 세포 분할 작업
ISBI 세포 추척 챌린지 2014 및 2015의 일부
데이터 세트
PhC-U373 : 위상차 현미경으로 촬영된 폴리아크릴아미드 기질 위의 신경교모세포종 U373 세포 35개의 훈련 이미지 포함 성능 : 여기서 우리는 평균 IOU(교집합 대비 합집합) 92% 달성 이는 두 번째로 성능이 좋은 알고리즘(83%)보다 상당히 우수한 결과
DIC-HeLa : 미분 간섭 대비 현미경으로 촬영된 평평한 유리 위의 헬라 세포 20개의 훈련 이미지 포함 성능 : 평균 IOU 77.5% 달성 이는 두 번째로 성능이 좋은 알고리즘(46%)보다 상당히 우수한 결과
5. Conclusion
U-Net 아키텍쳐는 다양한 생의학적 세분화 응용에서 매우 우수한 성능을 발휘함
탄성 변형을 이용한 데이터 증강 덕분에, U-Net은 매우 적은 수의 주석된 이미지만 필요하면, Nvidia Titan GPU에서 단 10시간 만에 합리적인 학습 시간이 걸림