사전 훈련 된 모델을 사용하여 Pascal VOC2012에서 Deeplabv3 + 의이 Keras 구현 을 훈련하려고합니다 (이 데이터 세트에서도 훈련 됨).
정확도가 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
모델 테스트도 100 % 정확도를 제공합니다.
나는 훈련 전후에 동일한 무작위 이미지 세트에 대한 예측을 플롯하기로 결정했으며 모델이 모든 것이 배경 (Pascal VOC2012의 첫 번째 클래스)이라고 말하는 것이 좋습니다.
저는 딥 러닝에 익숙하지 않으며 이것이 어디에서 왔는지 알아내는 데 도움이 필요합니다.
아마도 이것이 손실 함수 일 수 있다고 생각했습니다.
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))
내 텐서의 모양이 올바른지 확실하지 않습니다. TF의 데이터 세트 API를 사용하여 .tfrecord
파일 을로드 하고 있으며 주석 텐서 모양 (batch_size, height, width)
입니다. 겠습니까 (batch_size, height, width, 21)
무엇을 필요한 수? 주석 이미지를 21 개의 이미지가 포함 된 텐서 (각 클래스 당 하나씩)로 분리하려고하면 모델 내부의 다른 오류가 발생합니다.
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"]()]]
도와 주셔서 감사합니다!
5
여기에서 고려해야 할 몇 가지 항목, 나는 어디에서 시작 해야할지 거의 모릅니다 (1) 훈련에 샘플 크기 5를 사용하고 있습니까 ??? (2) 이미지에 대해 어떤 전처리 작업을 수행하고 있습니까? 나는 그 대답이 이것 안에 있다고 생각하고 (3) 당신의 모델에 대해 더 많은 정보를 제공해야합니다. 몇 개의 라벨링 된 샘플이 있습니까? 가능한 카테고리는 몇 개입니까? 균형 잡힌 훈련 세트가 있습니까? (4) 1.0의 정확도는 손실이 매우 높고 증가하기 때문에 기본적으로 아무 의미가 없습니다. 정확도가 향상되면 손실이 줄어 듭니다 .
—
I_Play_With_Data
(1) 크기가 12 인 배치를 사용하고 있지만 관련이 없습니다. 여기서는 단지 5 단계로 3 개의 작은 에포크 만 보여주었습니다. (2) 내 전처리는 모든 이미지와 관련 주석에 대해 일부 확대 및 크기 조정 (512x512)으로 구성됩니다 (자르기 가능). (3) Pascal VOC 2012에는 약 11,500 개의 레이블이있는 이미지가 있습니다.이 데이터 세트에 대해 대부분의 논문이 85 % 이상 mIOU에 도달하면 균형이 잡힌 것으로 가정합니다. 이 데이터 세트에는 20 개의 범주가 있고 배경 또는«모호한»하나에 대해 총 21 개가 있습니다.
—
Matt
나는 호기심입니다. 모델 결과에 대한 이유를 찾았습니까?
—
Mark.F
코드를 공유하면 실수를 찾을 수 있습니다.
—
Dmytro Prylipko
사전 훈련 된 모델이 원래 사용 된 것과 동일한 데이터를 사용하여 3 epoch 내에서 100 % 정확도를 얻는 방법을 발견한다는 사실은 훈련 레이블이 잘못되었거나 버그가 해당 레이블로 설정되어 있다고 생각합니다. 배경. 어쨌든 사람들이 모델을 미세 조정하기 위해 문제와 해결책을 논의하는 이 문제 스레드를 살펴보십시오 . 모델이 반드시 깨지는 것은 아니며 Tensorflow의 batchnorm 버그를 해결할 수 있습니다.
—
n1k31t4