시맨틱 세분화를위한 손실 기능


10

기술 용어의 오용에 대해 사과합니다. CNN (Convolutional Neural Network)을 통한 시맨틱 세그먼테이션 프로젝트를 진행하고 있습니다. Encoder-Decoder 유형의 아키텍처를 구현하려고 시도하므로 출력의 크기는 입력과 동일합니다.

라벨을 어떻게 디자인합니까? 어떤 손실 기능을 적용해야합니까? 특히 클래스 불균형이 심한 상황에서 (클래스 간 비율은 이미지마다 다름)

이 문제는 두 가지 클래스 (관심 대상 및 배경)를 처리합니다. tensorflow 백엔드와 함께 Keras를 사용하고 있습니다.

지금까지 픽셀 단위 라벨링을 적용하여 예상 출력을 입력 이미지와 동일한 크기로 디자인하려고합니다. 모델의 최종 레이어에는 소프트 맥스 활성화 (2 클래스) 또는 시그 모이 드 활성화 (픽셀이 객체 클래스에 속할 확률을 표현하기 위해)가 있습니다. 이러한 유형의 작업에 적합한 목적 함수를 설계하는 데 문제가 있습니다.

function(y_pred,y_true),

Keras 와 동의 합니다.

관련된 텐서의 치수 (모델의 입력 / 출력)를 구체적으로 지정하십시오. 모든 생각과 제안은 대단히 감사합니다. 감사합니다 !


arxiv.org/pdf/1511.00561.pdf를 읽어보십시오. "우리는 교차 엔트로피 손실을 네트워크 훈련을위한 목적 함수로 사용합니다."
Miss Palmer

답변:


6

교차 엔트로피는 확실히 갈 길입니다. 나는 Keras를 모르지만 TF는 이것을 가지고 있습니다 : https://www.tensorflow.org/api_docs/python/tf/nn/sigmoid_cross_entropy_with_logits

다음은 직접 구현 종이이다 시맨틱 세분화 완전 컨볼 루션 네트워크 Shelhamer 등에 의해이.

U-순 논문은 공간 해상도의 피할 손실로 이동 연결을 사용하여, 또한 아이디어의 매우 성공적인 구현입니다. 그물에서 이것에 대한 많은 구현을 찾을 수 있습니다.

내 개인적인 경험으로는 먼저 간단한 인코더 디코더 네트워크로 시작하고 싶지만 보폭 (또는 보폭 = 1)을 사용하지 않으면 업 샘플링이 완벽하지 않기 때문에 많은 해상도를 잃게됩니다. 작은 커널 크기로 이동하십시오. 특정 응용 프로그램을 모르지만 2-3 개의 숨겨진 계층 네트워크조차도 매우 좋은 결과를 제공합니다. 각 레이어에서 32-64 채널을 사용하십시오. 간단한 2 개의 숨겨진 레이어, 각각 32 개의 채널, 3x3 커널, stride = 1을 시작하고 격리 된 방식으로 매개 변수를 실험하여 효과를 확인하십시오. 분해능 손실을 피하려면 스타터의 치수를 항상 입력 치수와 동일하게 유지하십시오. 그 후 보폭과 업 샘플링을 켜고 U-Net과 같은 아이디어를 구현할 수 있습니다. U-Net은 의료 이미지 분할에 매우 적합합니다.

클래스 불균형에 대해서는 https://swarbrickjones.wordpress.com/2017/03/28/cross-entropy-and-training-test-class-imbalance/를 참조 하십시오. 여기서 아이디어는 및 다른 클래스에 가중치를 부여하는 것입니다. 매개 변수.αβ


이 분야의 전문가는 아니지만이 설정에서 수업을 독점해서는 안됩니까? 그렇다면 softmax 손실이 더 나은 옵션이 아닐까요? tensorflow.org/api_docs/python/tf/nn/...
헤럴드 톰슨

1
@HaraldThomson, 세분화는 이진 문제입니다. 많은 사람들이 이진 문제에 대해 softmax를 사용하지만 완전히 불필요하고 과도합니다. 두 개의 출력 노드를 갖는 대신 P (y = 1)를 나타내는 하나의 출력 노드를 갖는 다음 교차 엔트로피를 사용하십시오.
Ricardo Cruz

2

가중 주사위 손실과 가중 교차 엔트로피 손실을 사용하십시오. 주사위 손실은 분할에 매우 좋습니다. 시작할 수있는 가중치는 클래스 주파수가 반전되어야합니다. 즉, 50-100의 샘플을 취하고 각 클래스에 속하는 평균 픽셀 수를 찾은 다음 해당 클래스의 가중치를 1 / 평균으로 만듭니다. 주사위를 직접 구현해야하지만 간단합니다. 또한 당신은 역 주사위 손실과 초점 손실을 볼 수 있습니다


-1

처음에는 좀 더 구체적으로 설명하고 더 일반적으로 설명하겠습니다. 내가 당신을 오해하면 사과드립니다.

인코딩과 디코딩을 언급하고 출력 크기와 동일한 입력 크기를 언급했기 때문에 자동 인코더 신경망이 필요하다고 생각합니다. 그렇다면 손실 함수는 입력 벡터를 재현하는 동시에 데이터를 압축하여 중간 숨겨진 레이어에서 더 짧은 벡터로 압축하는 것입니다. 최소 평균 제곱 오차 (회귀) 또는 로그 손실 또는 분류 오류 (분류)를 달성하는 것이 좋습니다. 그러나 CNN은 자동 인코더에서 사용 된 것으로 보이지는 않지만 이미지의 가장자리 및 객체 감지와 같이 변환 불변이 중요한 경우에는 그렇게 할 수 있고 유용 할 것이라고 생각합니다.

보다 일반적으로 CNN을 언급 한 이후로 매우 복잡한 기계 학습 모델을 구축하는 것 같습니다. CNN 및 기타 딥 러닝 모델은 가장 복잡한 머신 러닝 모델 중 일부입니다.

치수, 레이블 및 손실 기능을 선택하는 것은 초등학교 기계 학습과 비슷합니다. 나는 당신이 딥 러닝으로 당신의 머리 위로 있을지도 모른다고 생각합니다. 먼저 평범한 기계 학습에 관한 수업을 듣셨습니까?


이것도 필요합니까? 예를 들어 Pixon method를 참조하십시오 .
Carl

유효한 접근 방식입니다 : arxiv.org/pdf/1511.00561.pdf
Miss Palmer

"CNN 및 기타 딥 러닝 모델은 가장 복잡한 머신 러닝 모델 중 일부입니다." 나는 동의하지 않는 경향이있다. 모델 자체는 복잡 할 수 있지만 이론적으로 거의 이해하지 않고 사용하기가 매우 간단합니다. 이것이 DL, 작은 이론, 쓰기 쉬운 모델 및 매우 높은 정확도에 대한 과대 광고의 이유입니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.