Tại sao mô hình Keras của tôi học cách nhận diện nền?


9

Tôi đang cố gắng đào tạo triển khai Keras này của Deeplabv3 + trên Pascal VOC2012, bằng cách sử dụng mô hình đã được sàng lọc (cũng được đào tạo trên tập dữ liệu đó).

Tôi đã nhận được kết quả kỳ lạ với độ chính xác nhanh chóng hội tụ đến 1.0:

5/5 [==============================] - 182s 36s/step - loss: 26864.4418 - acc: 0.7669 - val_loss: 19385.8555 - val_acc: 0.4818
Epoch 2/3
5/5 [==============================] - 77s 15s/step - loss: 42117.3555 - acc: 0.9815 - val_loss: 69088.5469 - val_acc: 0.9948
Epoch 3/3
5/5 [==============================] - 78s 16s/step - loss: 45300.6992 - acc: 1.0000 - val_loss: 44569.9414 - val_acc: 1.0000

Kiểm tra mô hình cũng cho độ chính xác 100%.

Tôi quyết định vẽ các dự đoán trên cùng một tập hợp các hình ảnh ngẫu nhiên trước và sau khi đào tạo, và thấy rằng mô hình được khuyến khích nói mọi thứ chỉ là nền tảng (đó là lớp 1 trong Pascal VOC2012).

nhập mô tả hình ảnh ở đây

nhập mô tả hình ảnh ở đây

Tôi còn khá mới mẻ với việc học sâu và sẽ cần giúp đỡ để tìm ra điều này có thể đến từ đâu.

Tôi nghĩ rằng có lẽ nó có thể là chức năng mất của tôi, mà tôi định nghĩa là:

def image_categorical_cross_entropy(y_true, y_pred):
    """
    :param y_true: tensor of shape (batch_size, height, width) representing the ground truth.
    :param y_pred: tensor of shape (batch_size, height, width) representing the prediction.
    :return: The mean cross-entropy on softmaxed tensors.
    """
    return tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=y_pred, labels=y_true))

Tôi có một chút không chắc chắn về việc liệu tenors của tôi có đúng hình dạng hay không. Tôi đang sử dụng API tập dữ liệu của TF để tải .tfrecordcác tệp và tenxơ chú thích của tôi có hình dạng (batch_size, height, width). Sẽ (batch_size, height, width, 21)là những gì cần thiết? Các lỗi khác từ bên trong mô hình phát sinh khi tôi cố tách hình ảnh chú thích thành một tenxơ chứa 21 hình ảnh (một cho mỗi lớp):

tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [12,512,512,21] vs. [12,512,512]
         [[Node: metrics/acc/Equal = Equal[T=DT_INT64, _device="/job:localhost/replica:0/task:0/device:GPU:0"](metrics/acc/ArgMax, metrics/acc/ArgMax_1)]]
         [[Node: training/Adam/gradients/bilinear_upsampling_2_1/concat_grad/Slice_1/_13277 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:GPU:1", send_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device_incarnation=1, tensor_name="edge_62151_training/Adam/gradients/bilinear_upsampling_2_1/concat_grad/Slice_1", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:1"]()]]

Cảm ơn sự giúp đỡ của bạn!


5
Khá nhiều mục để xem xét ở đây, tôi gần như không biết bắt đầu từ đâu (1) bạn đang sử dụng cỡ mẫu 5 để đào tạo ??? (2) Bạn đang làm gì để xử lý trước hình ảnh của mình? Tôi có cảm giác rằng câu trả lời nằm trong điều này và (3) bạn sẽ phải cung cấp nhiều thông tin hơn về mô hình của mình. Bạn có bao nhiêu mẫu dán nhãn? Có bao nhiêu loại có thể? Bạn có một bộ đào tạo cân bằng? (4) về cơ bản, độ chính xác của bạn là 1.0 không có nghĩa gì vì tổn thất của bạn là siêu cao và ngày càng tăng. Mất mát của bạn sẽ giảm khi độ chính xác của bạn được cải thiện.
I_Play_With_Data

(1) Tôi đang sử dụng các lô cỡ 12 nhưng tôi nghĩ nó không liên quan. Tôi chỉ cho thấy 3 kỷ nguyên nhỏ chỉ có 5 bước ở đây vì đó là cách nó hội tụ nhanh chóng. (2) Quá trình tiền xử lý của tôi bao gồm một số gia tăng và thay đổi kích thước (có thể cắt xén) thành 512x512 cho mỗi hình ảnh và chú thích liên quan của nó. (3) có khoảng 11.500 hình ảnh được dán nhãn trong Pascal VOC 2012. Được cấp hầu hết các giấy tờ đạt 85% + mIOU trên bộ dữ liệu này, tôi cho rằng nó cân bằng. Có 20 loại khác nhau trong bộ dữ liệu này cộng với một loại cho nền hoặc «mơ hồ», với tổng số 21.
Matt

Tôi tò mò. Bạn đã tìm thấy lý do cho kết quả mô hình của bạn?
Mark.F

3
Nếu bạn chia sẻ mã của mình, có thể tìm thấy lỗi.
Dmytro Prylipko

1
Việc một mô hình được đào tạo trước tìm ra cách để có được độ chính xác 100% trong vòng 3 epoch, sử dụng cùng một dữ liệu như ban đầu, khiến tôi nghĩ rằng lỗi là nhãn đào tạo của bạn sai, có lẽ tất cả được đặt thành nhãn tương ứng để nền. Trong mọi trường hợp, hãy xem chủ đề vấn đề này , nơi mọi người thảo luận về các vấn đề và giải pháp của họ để tinh chỉnh mô hình. Mô hình không nhất thiết bị hỏng và có thể xử lý lỗi hàng loạt trong Tensorflow.
n1k31t4

Câu trả lời:


1

Mô hình của bạn là quá mức. Mỗi kỷ nguyên chỉ có 5 hình ảnh. Mô hình là "ghi nhớ" câu trả lời cho mỗi hình ảnh.

Để giảm thiểu cơ hội thừa, hãy tăng số lượng hình ảnh. Cần có vài nghìn hình ảnh ví dụ cho từng loại đối tượng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.