python - 추가 - 학습 데이터 늘리기




수동으로 클래스 레이블을 keras flow_from_directory에 지정하는 방법? (2)

단순히 flow_from_directory 를 사용하여 다음과 같은 방법으로 멀티 클래스로 확장 할 수 있습니다.

def multiclass_flow_from_directory(flow_from_directory_gen, multiclasses_getter):
    for x, y in flow_from_directory_gen:
        yield x, multiclasses_getter(x, y)

multiclasses_getter 가 다중 클래스 벡터 / 다중 클래스 표현을 이미지에 할당하는 위치입니다. xy 는 단일 예제가 아니라 예제의 배치이므로 multiclasses_getter 디자인에 포함되어야합니다.

문제점 : 다중 라벨 이미지 인식을위한 모델을 훈련 중입니다. 따라서 내 이미지는 여러 개의 y 레이블과 연관됩니다. 이것은 ImageDataGenerator의 편리한 keras 메서드 "flow_from_directory"와 충돌합니다. 각 이미지는 해당 레이블 ( https://keras.io/preprocessing/image/ )의 폴더에 있어야합니다.

해결 방법 : 현재 모든 이미지를 질의가있는 배열로 읽고 거기의 "flow"함수를 사용합니다. 그러나 이로 인해 많은 메모리가로드되고 읽기 작업이 느려집니다.

질문 : "flow_from_directory"메소드를 사용하고 수동으로 (여러) 클래스 레이블을 제공하는 방법이 있습니까?

업데이트 : 나는 다중 레이블의 경우 DirectoryIterator 클래스를 확장했다. 이제 "class_mode"속성을 "multilabel"값으로 설정하고 파일 이름을 해당 레이블에 매핑하는 "multlabel_classes"사전을 제공 할 수 있습니다. 코드 : https://github.com/tholor/keras/commit/29ceafca3c4792cb480829c5768510e4bdb489c5


디렉토리에서 파일을 읽고 사용자 정의 생성기 클래스를 작성하여 레이블을 적용 할 수 있습니다. 해당 사용자 정의 생성기는 flow ()를 사용하여 배치를 생성하는 ImageDataGenerator 인스턴스를 가져올 수도 있습니다.

나는 이런 것을 상상하고있다.

class Generator():

    def __init__(self, X, Y, img_data_gen, batch_size):
        self.X = X
        self.Y = Y  # Maybe a file that has the appropriate label mapping?
        self.img_data_gen = img_data_gen  # The ImageDataGenerator Instance
        self.batch_size = batch_size

    def apply_labels(self):
        # Code to apply labels to each sample based on self.X and self.Y

    def get_next_batch(self):
        """Get the next training batch"""
        self.img_data_gen.flow(self.X, self.Y, self.batch_size)

다음 간단히 :

img_gen = ImageDataGenerator(...)
gen = Generator(X, Y, img_gen, 128)

model.fit_generator(gen.get_next_batch(), ...)

* 면책 조항 : 나는 이것을 실제로 테스트하지는 않았지만 이론적으로 작동해야합니다.





multilabel-classification