units에 정의된 각 수치에 대해 7×7 및 1×1 합성곱 층과 드롭아웃 층을 추가합니다(①). 이를 dense_convs 리스트에 저장합니다. 그리고 keras.Sequential을 사용하여 이 층들을 하나의 시퀀셜 모델로 결합합니다(②). 그 후 dense_convs.trainable = False를 통해 추가 층들의 가중치를 고정시킨 다음(③), dense_convs 모델을 백본의 마지막 출력에 적용합니다. 이렇게 기존 백본 네트워크에 층을 추가 및 변경합니다.
이제 다음처럼 FCN 모델의 뒷부분인 fcn32s 아키텍처를 구성합니다. 여기에서는 영역 분할 작업을 위한 합성곱 층과 업샘플링 층을 정의하고 연결합니다.
pool5 = keras.layers.Conv2D(filters=NUM_CLASSES, kernel_size=(1, 1), padding="same", strides=(1, 1), activation="relu",)
fcn32s_conv_layer = keras.layers.Conv2D(filters=NUM_CLASSES, kernel_size=(1, 1), activation="softmax", padding="same", strides=(1, 1),)
다음처럼 FCN 모델의 fcn32s 아키텍처에서 최종 예측 맵을 원본 이미지 사이즈로 복원하는 업샘플링 과정을 진행합니다.
fcn32s_upsampling = keras.layers.UpSampling2D(size=(32, 32),data_format=keras.backend.image_data_format(), interpolation="bilinear",)