3

현재 VGG16 + Keras + Theano는 트랜스퍼 학습 방법론이 식물 클래스를 인식한다고 생각했습니다. 그것은 잘 작동하고 내게 좋은 정확성을 제공합니다. 그러나 내가 풀려고하는 다음 문제는 입력 이미지가 식물을 전혀 포함하지 않는지 확인하는 방법을 찾는 것이다. 나는 정말 효율적이지 않기 때문에 그것을 할 다른 분류자를 하나 갖고 싶지 않습니다.길쌈 신경 네트워크 훈련에 사용 된 데이터 세트와 관련된 이미지인지 알 수있는 효율적인 방법

그래서 일부 검색을 수행하여 활성화 레이어 이전의 최신 모델 레이어에서 활성화를 얻고 분석 할 수 있음을 발견했습니다. 이미지의 경우

  1. 사용되었다

    위의 코드에서
    from keras import backend as K 
    
    model = util.load_model() # VGG16 model 
    model.load_weights(path_to_weights) 
    
    def get_activations(m, layer, X_batch): 
        x = [m.layers[0].input, K.learning_phase()] 
        y = [m.get_layer(layer).output] 
        get_activations = K.function(x, y) 
        activations = get_activations([X_batch, 0]) 
    
        # trying to get some features from activations 
        # to understand how can we identify if an image is relevant 
        for l in activations[0]: 
         not_nulls = [x for x in l if x > 0] 
    
         # shows percentage of activated neurons 
         c1 = float(len(not_nulls))/len(l) 
         n_activated = len(not_nulls) 
         print 'c1:{}, n_activated:{}'.format(c1, n_activated) 
    
        return activations 
    
    get_activations(model, 'the_latest_layer_name', inputs) 
    

    나는 우리가 매우 관련이없는 이미지가있을 때, 활성화 된 뉴런의 수는 식물을 포함하는 이미지보다 큰 것으로 나타났습니다 모델 교육, 활성화 된 뉴런의 수를 19 % -23 %를 알 수없는 식물 종의 20 % 관련이없는 이미지의 경우 -26 %

  2. 24 % -28 %를 포함하는 이미지

백분율 값과 관련된 이미지가 교차하는지 이해하는 것은 좋지 않습니다.

그래서이 문제를 해결할 수있는 좋은 방법이 있습니까?

+0

더 좋은 방법은 신경 세포의 비율보다는 관련 이미지에 대해 활성화 된 뉴런을 확인하는 것입니다. 겹치는 부분이 많습니까? –

+0

으로 Krishan은 더 나은 방법은 이들을 기능으로 간주하고 두 클래스 "클러스터링"사이에 상관 관계가 있는지 확인하는 것입니다. 예 또는 아니오를 결정하기 위해 특정 레이어에 다른 분류자를 추가 할 수 있습니다. – Feras

답변

0

위의 설명에서 Feras의 아이디어 덕분입니다. 몇 가지 시련 끝에 99.99 %의 정확도로이 문제를 해결할 수있는 궁극적 인 솔루션을 찾았습니다.

단계는 다음과 같습니다

  1. 데이터 집합에 모델을 훈련;
  2. 이전 단계의 숙련 된 모델을 사용하여 관련 이미지와 관련성이없는 이미지를 예측하여 정품 인증을 저장합니다 (위의 방법 참조). 끝에서 두 번째 레이어로 활성화해야합니다. VGG16의 경우 InceptionV3의 경우 두 개의 Dense (4096) 중 마지막으로 resnet50에 대해 두 번째로 두꺼운 (1024) 레이어가 추가되었으며 두 번째 Dense (2048) 레이어에 추가되었습니다.
  3. 저장된 활성화 데이터를 사용하여 이진 문제를 해결합니다. 나는 간단한 평면 NN과 로지스틱 회귀를 시도했다. 둘 다 정확성이 뛰어 났지만 (평면 NN은 좀 더 정확했습니다), Logistic Regression을 선택한 이유는 Logistic Regression이 더 간단하고 빠르며 메모리와 CPU/GPU가 적기 때문입니다.

이 프로세스는 CNN의 최종 가중치가 다를 때마다 모델을 재 훈련 한 후에 매번 반복해야하며 이전에 작동했던 내용은 다음 번에 달라집니다.

결과적으로 우리는 문제를 해결하기위한 또 다른 작은 모델을 가지고 있습니다.

관련 문제