회귀를위한 CNN 아키텍처?


32

입력이 이미지이고 레이블이 80과 350 사이의 연속적인 값인 회귀 문제를 연구하고 있습니다. 이미지는 반응 후 일부 화학 물질입니다. 밝혀지는 색은 남은 다른 화학 물질의 농도를 나타내며 모델이 출력하는 것입니다-화학 물질의 농도. 이미지를 회전, 뒤집기, 대칭시킬 수 있으며 예상 출력은 여전히 ​​동일해야합니다. 이러한 종류의 분석은 실제 실험실에서 수행됩니다 (매우 전문화 된 기계는이 모델을 훈련시키는 것처럼 색상 분석을 사용하여 화학 물질의 농도를 출력합니다).

지금까지 VGG (conv-conv-conv-pool 블록의 여러 시퀀스)를 기반으로 한 모델로만 실험했습니다. 최신 아키텍처 (Inception, ResNets 등)를 실험하기 전에 이미지를 사용하여 회귀에 더 일반적으로 사용되는 다른 아키텍처가 있는지 조사해야한다고 생각했습니다.

데이터 세트는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

데이터 세트에는 약 5,000 개의 250x250 샘플이 포함되어 있으며 64x64로 크기가 조정되어 훈련이 더 쉽습니다. 유망한 아키텍처를 찾으면 더 큰 해상도의 이미지를 실험 해 보겠습니다.

지금까지 내 최고의 모델은 훈련 및 유효성 검사 세트 모두에서 평균 제곱 오차가 약 0.3이며, 이는 사용 사례에서 허용되지 않습니다.

지금까지 내 최고의 모델은 다음과 같습니다.

// pseudo code
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])

x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])

x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])

x = dropout()->conv2d(x, filters=128, kernel=[1, 1])->batch_norm()->relu()
x = dropout()->conv2d(x, filters=32, kernel=[1, 1])->batch_norm()->relu()

y = dense(x, units=1)

// loss = mean_squared_error(y, labels)

의문

이미지 입력의 회귀 출력에 적합한 아키텍처는 무엇입니까?

편집하다

설명을 다시 말하고 정확성에 대한 언급을 제거했습니다.

편집 2

내 질문을 재구성 했으므로 내가 뭘했는지 분명히 알 수 있습니다.


4
정확도는 회귀 문제에 직접 적용 할 수있는 척도가 아닙니다. 정확도가 30 %라고 말할 때 무엇을 의미합니까? 정확도는 실제로 회귀가 아닌 분류 작업에만 적용됩니다.
핵 왕

1
"시간의 30 %를 정확하게 예측합니다"는 무슨 뜻 입니까? 정말로 회귀 분석을하고 있습니까?
Firebug

1
이 문제를 왜 회귀 분석이라고합니까? 라벨로 분류하지 않습니까? 라벨이 기본인가요?
Aksakal

2
vgg와 똑같은 것을 원하지 않습니다. vgg와 같은 것을하고 있습니다. 즉 일련의 전환과 최대 풀링, 완전히 연결됨을 의미합니다. 이미지 작업을위한 일반적인 접근 방식 인 것 같습니다. 그러나 다시, 그것은 나의 원래 질문의 요점입니다. 이러한 의견은 모두 통찰력이 있지만 처음에 요구하는 사항을 완전히 놓친 것 같습니다.
rodrigo-silveira

1
또한 문제에 대한 자세한 설명을 제공하면 더 나은 도움을 제공 할 수 있습니다. 1) 이미지는 무엇입니까? 그들의 해결책은 무엇입니까? 이미지와 응답 사이에 어떤 관계가 있습니까? ? 이 관계 회전 불변성, 즉 원형 이미지를 임의의 각도 회전하면 가 변경 될 것으로 예상 됩니까? 2) VGG-net 아키텍처를 훈련시키기위한 5000 개의 이미지가 불행하다는 것을 알고 있습니까? 아키텍처의 매개 변수 수를 계산 했습니까? 더 많은 이미지를 얻을 수있는 방법이 있습니까? 당신이 할 수 없다면, 아마도 당신이 필요합니다 ...y[80,350]yθy
DeltaIV

답변:


42

우선 일반적인 제안 : 익숙하지 않은 주제에 대해 실험을 시작하기 전에 문헌 검색을 수행하십시오. 당신은 많은 시간을 절약 할 수 있습니다.

이 경우 기존 논문을 보면

  1. CNN은 회귀에 여러 번 사용되었습니다. 이것은 고전적이지만 오래되었습니다 (예, DL에서 3 년이 되었음 ). 보다 현대적인 논문은이 작업에 AlexNet을 사용하지 않았을 것입니다. 이것은 더 최근이지만 훨씬 더 복잡한 문제 (3D 회전)에 대한 것이므로 어쨌든 익숙하지 않습니다.
  2. CNN과의 회귀는 사소한 문제가 아닙니다. 첫 번째 논문을 다시 살펴보면 기본적으로 무한 데이터를 생성 할 수있는 문제가 있음을 알 수 있습니다. 그들의 목표는 2D 사진을 수정하는 데 필요한 회전 각도를 예측하는 것입니다. 즉, 기본적으로 훈련 세트를 가져 와서 각 이미지를 임의의 각도로 회전시켜 확대 할 수 있으며 유효하고 더 큰 훈련 세트를 얻을 수 있습니다. 따라서 딥 러닝 문제가 발생하는 한 문제는 비교적 단순 해 보입니다. 그건 그렇고, 그들이 사용하는 다른 데이터 확대 트릭에 주목하십시오.

    변환 (이미지 너비의 최대 5 %), [−0.2, 0.2] 범위의 밝기 조정, γ ∈ [−0.5, 0.1]의 감마 조정 및 [0] 범위의 표준 편차가있는 가우시안 픽셀 노이즈를 사용합니다. , 0.02].

    실험실에서 신중하게 촬영 한 사진의 위치, 밝기 및 감마 노이즈의 변화를 고려하는 것이 합리적이라고 말할만큼 귀하의 문제를 잘 모릅니다. 그러나 테스트 세트 손실이 개선되지 않으면 언제든지 시도하고 제거 할 수 있습니다. 실제로 이러한 종류의 실험 에는 유효성 검사 세트 또는 폴드 교차 검증을 사용해야하며 , 테스트 세트 손실을 대표하는 설정을 원하는 경우 설정을 정의 할 때까지 테스트 세트를 보지 마십시오. 일반화 오류.k

    어쨌든, 이상적인 조건에서도 순진한 접근 방식은 그다지 효과가 없었습니다 (섹션 4.2 ). 출력 레이어 (softmax 레이어) 를 제거하고 회전 각도 의 사인 와 코사인 를 예측하는 두 개의 단위로 레이어를 대체했습니다 . 그런 다음 실제 각도는 로 계산됩니다 . 신경망도 ImageNet에 사전 교육을 받았습니다 ( 이전 학습 이라고합니다).yxα=atan2(y,x)). 물론 ImageNet에 대한 교육은 다른 작업 (분류)을위한 것이었지만 신경망을 처음부터 교육하는 것은 게시하지 않기로 결정한 끔찍한 결과를 가져 왔어 야합니다. 따라서 잠재적 인 무한한 훈련 데이터, 사전 훈련 된 네트워크 및 명백히 단순한 회귀 문제 (-1과 1 사이의 두 숫자 예측) : 그러나이 방법으로 얻을 수있는 최선의 방법은 21 ° 오류였습니다. 이것이 RMSE 오류인지 MAD 오류인지 확실하지 않지만 여전히 좋지는 않습니다. 만들 수있는 최대 오류는 180 °이므로 평균 오류는 가능한 최대 오류의 입니다. 두 개의 네트워크를 직렬로 사용하여 약간 나아졌습니다. 첫 번째 네트워크는 분류를 수행합니다 (각도가>11%[180°,90°],[90°,0°],[0°,90°] 또는 클래스), 이미지는 첫 번째 네트워크에 의해 예측 된 양만큼 회전 , 범위 에서 최종 추가 회전을 예측하는 다른 신경망 (이번 회귀)에 공급됩니다 .[90°,180°][45°,45°]

    훨씬 간단한 (회전 된 MNIST) 문제에서 더 나은 것을 얻을 수는 있지만 여전히 가능한 최대 오류의 인 RMSE 오류 아래로 가지 않습니다 .2.6%

그렇다면 이것으로부터 무엇을 배울 수 있습니까? 우선, 5000 개의 이미지는 작업을위한 작은 데이터 세트입니다. 첫 번째 논문은 회귀 작업을 배우고 싶었던 것과 비슷한 이미지로 미리 훈련 된 네트워크를 사용했습니다. 아키텍처가 디자인 된 (분류) 작업과는 다른 작업을 배울 필요가있을뿐 아니라, 훈련 세트는 이러한 네트워크가 일반적으로 훈련되는 훈련 세트 (CIFAR-10 / 100 또는 ImageNet)와 같은 것을 보지 마십시오. 따라서 당신은 아마도 전이 학습으로부터 어떤 혜택도 얻지 못할 것입니다. MATLAB 예제에는 5000 개의 이미지가 있지만 이미지는 흑백이며 의미 적으로 모두 매우 비슷합니다 (이 경우도 마찬가지입니다).

그렇다면 0.3보다 얼마나 현실적인 것이 좋습니까? 우선 0.3 평균 손실이 무엇을 의미하는지 이해해야합니다. RMSE 오류가 0.3이라는 것을 의미합니까?

1Ni=1N(h(xi)yi)2

여기서 은 훈련 세트의 크기 (따라서 ), 는 이미지 에 대한 CNN의 출력 이고 는 화학 물질의 해당 농도입니까? 이후 , 당신은 80과 350 사이에 CNN의 예측 클립 (또는 그냥 그 간격에 맞게 만들기 위해 로짓 사용) 가정, 당신은 이하지고있어 오류가 발생했습니다. 진심으로, 당신은 무엇을 기대합니까? 그것은 나에게 큰 오류가 아닌 것 같습니다.NN<5000h(xi)xiyiyi[80,350]0.12%

또한 네트워크의 매개 변수 수를 계산하십시오. 서둘러 어리석은 실수를 summary할 수 있으므로 사용중인 프레임 워크의 일부 기능으로 계산을 다시 확인하십시오 . 그러나 대략 나는 당신이 가지고 있다고 말할 것입니다.

9×(3×32+2×32×32+32×64+2×64×64+64×128+2×128×128)+128×128+128×32+32×32×32=533344

(배치 규범 레이어의 매개 변수를 건너 뛰었지만 레이어의 매개 변수는 4 개이므로 차이가 없습니다.) 50 만 개의 매개 변수와 5000 개의 예제가 있습니다 ... 무엇을 기대하십니까? 물론 매개 변수의 수는 신경망의 용량 (식별 할 수없는 모델)에 대한 좋은 지표는 아니지만 여전히 ... 이보다 훨씬 더 잘 할 수는 없다고 생각하지만 시도해 볼 수는 있습니다. 몇 가지 :

  • 모든 입력 (예 : -1과 1 사이에서 각 픽셀의 RGB 강도를 재조정하거나 표준화 사용) 및 모든 출력을 정규화합니다. 수렴 문제가있는 경우 특히 도움이됩니다.
  • 그레이 스케일로 이동 : 입력 채널을 3에서 1로 줄입니다. 모든 이미지는 (내 훈련받지 않은 눈으로) 비교적 비슷한 색상으로 보입니다. 어둡거나 밝은 영역이 아니라 예측에 필요한 색상인지 확실 합니까? 어쩌면 당신은 확신합니다 (나는 전문가가 아닙니다) :이 경우이 제안을 건너 뛰십시오.y
  • 데이터 증가 : 당신이 임의의 각도로 회전 시키거나 이미지가 동일한 출력 결과를해야 미러링, 그 반전 말했다 있기 때문에, 당신은 당신의 데이터의 크기 설정 증가시킬 수 많은 . 더 큰 데이터 세트를 사용하면 훈련 세트의 오류가 증가합니다. 여기서 찾고있는 것은 훈련 세트 손실과 테스트 세트 손실 사이의 작은 간격입니다. 또한 훈련 세트 손실이 크게 증가하면 좋은 소식이 될 수 있습니다. 이는 과적 합의 위험없이이 더 큰 훈련 세트에서 더 깊은 네트워크를 훈련 할 수 있음을 의미 할 수 있습니다. 더 많은 레이어를 추가하고 더 작은 트레이닝 세트 테스트 세트 손실이 있는지 확인하십시오 . 마지막으로, 위에서 인용 한 다른 데이터 보강 트릭이 응용 프로그램의 맥락에서 의미가 있다면 시도해 볼 수도 있습니다.
  • 분류 후 회귀 트릭을 사용하십시오. 첫 번째 네트워크 는 가 등과 같은 10 개의 빈 중 하나에 있어야 하는지 여부 만 결정합니다 . 그런 다음 두 번째 네트워크는 보정 을 계산합니다 . 센터링 및 정규화도 여기에서 도움이 될 수 있습니다. 시도하지 않고 말할 수 없습니다.y[80,97],[97,124][0,27]
  • 빈티지 아키텍처 대신 최신 아키텍처 (Inception 또는 ResNet)를 사용해보십시오. ResNet은 실제로 VGG-net 보다 매개 변수가 적습니다 . 물론 작은 ResNet을 사용하고 싶습니다. ResNet-101이 5000 이미지 데이터 세트에 도움이 될 수 있다고 생각하지 않습니다. 그래도 데이터 세트를 많이 보강 할 수 있습니다 ....
  • 당신의 출력 회전에 불변이기 때문에, 다른 좋은 아이디어 중 하나를 사용하는 것 그룹 equivariant CNNs (분류로 사용하는 경우) 그 출력에 불변 이산 회전, 또는 조종 CNNs그 출력은 연속 회전에 변하지 않습니다. 불변성 속성을 사용하면 훨씬 적은 데이터 확대로 좋은 결과를 얻거나 전혀 회전하지 않는 것이 이상적입니다 (회전과 관련된 것 : 물론 다른 유형의 da가 여전히 필요합니다). 그룹 등변 량 CNN은 구현 관점에서 조향 가능한 CNN보다 더 성숙하므로 먼저 그룹 CNN을 시도합니다. 분류 부분에 G-CNN을 사용하여 분류-회귀 분석을 시도하거나 순수한 회귀 접근법을 실험 할 수 있습니다. 그에 따라 최상위 레이어를 변경해야합니다.
  • 배치 크기로 실험하십시오 (예, 예, 하이퍼 매개 변수 해킹이 시원하지 않다는 것을 알고 있지만 제한된 시간 프레임에서 무료로 제공 할 수있는 최선입니다 :-)
  • 마지막으로, 작은 데이터 세트로 정확한 예측을하기 위해 특별히 개발 된 아키텍처가 있습니다. 그들 중 대부분은 확장 된 회선을 사용했습니다 . 유명한 예는 혼합 규모의 조밀 한 회선 신경 네트워크 입니다. 그러나 구현은 사소한 것이 아닙니다.

3
자세한 답변 감사합니다. 나는 이미 상당한 데이터 확대를하고있었습니다. 시작 모델의 두 가지 변형을 시도했습니다 (여기서 변형은 전체 필터에서 필터 수가 동일하게 조정됨을 의미 함). 놀라운 향상을 보았습니다. 여전히 갈 길이 있습니다. 몇 가지 제안을해볼 게요. 다시 감사합니다.
rodrigo-silveira

@ rodrigo-silveira 천만에요, 어떻게되는지 알려주세요. 결과가 나오면 채팅으로 대화 할 수 있습니다.
DeltaIV

1
훌륭한 답변, 더 가치가 있습니다 ^
Gilly

1
잘 구성되어 있습니다!
Karthik Thiagarajan

1
가능하다면 10k 포인트를 줄 것입니다. 놀라운 답변
Boppity Bop
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.