3

가져 오기 데이터 세트에 관한 문제로 인해 저는 미쳐 버릴 것입니다.Keras-SegNet에서 ImageDataGenerator와 fit 또는 fit_generator를 사용하십시오.

이것은 내 segnet 코드의 일부입니다.

마스크 데이터 가져 오기 &에 관한 질문에 집중하겠습니다.

  1. I는 500 * 500의 입력 크기를 변경하므로 I는 풀링 업 샘플링 및 계층 크기 조정 된

    print("CNN Model created.") 
    
    ###training data 
    data_gen_args = dict() 
    image_datagen = ImageDataGenerator(**data_gen_args) 
    mask_datagen = ImageDataGenerator(**data_gen_args) 
    seed1 = 1 
    image_datagen.fit(images, augment=True, seed=seed1) 
    mask_datagen.fit(masks, augment=True, seed=seed1) 
    
    train_image_generator = image_datagen.flow_from_directory(TRAIN_im,target_size=(500, 500),batch_size=BATCH_SIZE, class_mode = None) 
    train_mask_generator = mask_datagen.flow_from_directory(TRAIN_mask,target_size=(500, 500),batch_size=BATCH_SIZE, class_mode = None) 
    
    train_generator = zip(train_image_generator,train_mask_generator) 
    
    ###validation data 
    valid_gen_args = dict() 
    val_image_datagen = ImageDataGenerator(**valid_gen_args) 
    val_mask_datagen = ImageDataGenerator(**valid_gen_args) 
    seed2 = 5 
    val_image_datagen.fit(val_images, augment=True, seed=seed2) 
    val_mask_datagen.fit(val_masks, augment=True, seed=seed2) 
    
    val_image_generator = val_image_datagen.flow_from_directory(VAL_im,target_size=(500, 500),batch_size=BATCH_SIZE, class_mode = None) 
    val_mask_generator = val_mask_datagen.flow_from_directory(VAL_mask,target_size=(500, 500),batch_size=BATCH_SIZE, class_mode = None) 
    
    val_generator = zip(val_image_generator,val_mask_generator) 
    
    ### 
    model.fit_generator(
    train_generator,steps_per_epoch=nb_train_samples//BATCH_SIZE,epochs=EPOCHS,validation_data=val_generator,validation_steps=nb_validation_samples//BATCH_SIZE) 
    

    질문이다. 달성 가능합니까? 더 많은 것을, 고전적인 그물을 만들 수 있습니까 (AlexNet, VGG, Segnet ...) 그들의 풀링 및 upsample 레이어 크기와 필터 번호를 조정하여 임의의 입력 이미지 크기를 허용합니까?

  2. 내가 변수 "이미지"와 "마스크"의 데이터 유형이 무엇인지 알고 싶습니다

    :.

    image_datagen.fit(images, augment=True, seed=seed1) 
    mask_datagen.fit(masks, augment=True, seed=seed1) 
    

    이 부분은 Keras 공식 튜토리얼입니다 (ANS가 : 이제 내가 아는 둘 numpy 배열입니다.)

  3. 위의 질문에 따르면. 어떻게 파생시킬 수 있습니까?

    아래와 같은 mnist.load_data() 함수를 작성해야합니까?

    몇 가지 예가 필요합니다.

    (x_train_image, y_train_label), (x_test_image, y_test_label) = mnist.load_data() 
    
  4. 나는

    flow_from_directory 
    

    가 자신에 의해 "mnist.load_data()" 같은 함수를 정의 할 필요가 없다는 뜻 기능을 사용하고 난을 얻을하는 데 사용할 수 있습니다 (배치, 셔플) 데이터를 내 디렉토리 구조에서 직접?

이 내 디렉토리 구조입니다 :

Dataset -training----------images----"many images" 
      |   | 
      |   |-----mask-----"ground truth images(mask)" 
      | 
      | 
     validation----------val_images----"many images" 
      |  | 
      |  |------val_mask------"ground truth images(mask)" 
      | 
      | 
     testing---------------test images (no ground truth) 

고마워요!

+0

ImageDataGenerator를 세그먼트 화 문제와 함께 실제로 사용할 수 있습니까? 내 지식에 그것은 디렉토리에서 이미지를 무작위로 읽을 것이지만 물론 이미지와 마스크 사이에 일치하는 쌍이 필요합니다. – pietz

+0

@pietz Keras 공식 자습서를 읽었습니다 : https://keras.io/preprocessing/image/ '이미지와 마스크를 함께 변환하는 예'라는 키워드를 검색 할 수 있습니다. 페이지에서. 나는 그렇게 할 수있을 것 같다. 나는 github에서 몇 가지 keras segnet 예제를 보았습니다. –

+1

ImageDataGenerator에 대한 경험은별로 없지만 문서를 보면'normal'에 대한 샘플 통계를 계산할 때만'fit' 메서드가 필요합니다. 'featurewise_center','featurewise_std_normalization' 또는'zca_whitening'을 사용하는 경우에만 필요합니다. 너? 이 경우 이미지와 마스크는 통계를 계산하기위한 샘플 데이터입니다. – filippo

답변

2

하자.

  1. SegNet이 FCN입니다 (완전 길쌈 네트워크 ->이 조밀 한 층을 사용하지 않는)가 지정한 모든 입력/출력 크기에 맞는지. 이러한 인코더 - 디코더 아키텍처에 대해 16이라는 mutiples을 사용하는 것이 좋습니다. 왜? 당신의 경우 우리는 500에서 250에서 125에서 62로, 반대편에서 62에서 124, 그리고 248에서 496으로 갈 것이기 때문입니다. 갑자기 당신의 결의가 더 이상 일치하지 않습니다. AlexNet 및 VGG는 고밀도 레이어를 사용합니다. 즉, 필요에 따라 초기 입력 크기를 변경할 수 있지만 다른 해상도의 사전 가중치를 사용할 수는 없습니다. 매개 변수의 수가 단순히 일치하지 않습니다. 사이드 노트 : VGG 및 AlexNet은 분류 아키텍처이지만 SegNet은 세그멘테이션 아키텍처입니다.
  2. imagesmasks(num_imgs, width, height, num_channels)의 형상을 갖는 4 차원 열도 배열이다. 이 변수는 어디서 오는가? 이전 단계에서 해당 이미지 파일에서 읽어야합니다.
  3. 두 폴더 각각을 반복하고 각 이미지를 읽고 목록에 추가 한 다음이 목록을 numpy 배열로 변환하십시오. 이미지와 마스크가 같은 방식으로 정렬되어 서로 일치하도록하십시오.
  4. flow_from_directory은 이미지를 읽으려면 IDG와 함께 사용할 수있는 기능입니다. 매우 편리합니다. 그러나 featurewise_center, featurewise_std_normalizationzca_whitening이 필요하지 않은 경우 IDG fit() 함수를 실행하기 위해 이미 사용 가능한 numpy 배열이 필요하므로이 문제를 해결할 수 있습니다. Btw,이 적합 함수는 모델 훈련을 시작하는 fit() 함수와 아무 관련이 없습니다. 단지 같은 명명 규칙을 사용합니다.
+0

1. 사실, 인코딩 프로세스 및 디코딩 프로세스에서 풀링 커널 크기를 두 개의 2 * 2 및 두 개의 다섯 * 5로 조정했습니다. 그러나 컴파일하지 않았습니다.이 방법을 사용할 수 있습니까? –

+0

괜찮 았던 것 같습니다. 나는 당신이 500x500이 꽤 크다는 것을 알아 차릴 것이고 따라서 훈련하는데 꽤 많은 시간이 걸릴 것이라고 생각한다. 224x224 파이프 라인을 실험 해보고 실제로 해상도가 필요한지 확인하는 것이 좋습니다. – pietz