1. 목적
train 과정 중, 발생했던 오류에 대한 정리하려고 합니다.
첫 번째, 'NoneType' object has no attribute 'shape'
두 번째, keras.backend' has no attribute 'image_dim_ordering
세 번째, expected convolution2d_input_1 to have shape (None, 96, 128, 1) but got array with shape (0, 1, 96, 128)
2. 항목과 종류
keras-frcnn 내 traceback 결과로 오류 지점 살피면 됩니다. 그 과정에서 구글링도 했지만, 정말 케이스 바이 케이스라서 적용되는 것을 찾기도 어려웠습니다. 이 정리해놓는 내용 수 많은 해결 사례 중 하나가 되겠지요.
(1) NoneType obeject has no attribute shape
-> Null 객체가 멤버 함수를 호출해서 생긴 문제입니다. 고로, 할당되는 지점을 찾아내서 검수합니다.
에러를 찾기 위해 변수가 할당되는 data_augment.py 내부 동작을 살폈습니다. 보아하니, 변수 img가 빈 값이 생성되는 듯 했습니다. 첫 번째, 조취는 xml 내부 filepath를 찍어서 지정된 경로가 유효한지 확인했습니다.
첫 번째 조취에 대한 유추는, ['My drive'와 My drive ] 문제입니다.
-
train.py에 넘기는 --path 정보도 ['My drive'],
-
[attonation] 내 xml의 filepath 또한 ['My drive'],
그럼에도 불구하고. data_augment 에서 출력되는 값은 [My drive]였습니다. 그리고 colab 코드 셀에서 그 차이를 보려고 했습니다.
그래서 결론은, filepath에서 'My drive'를 없애는 것입니다. My drive를 도대체 왜 간격을 띄워서 고생스럽게 하는 지 모르겠고 이게 원인이 맞는지도 모르겠지만. 두 번째, 조취는 현재 경로를 [My drive] 내부로 당기는 것입니다.
!cd가 먹으면 !cd로 하면 되고, %cd가 먹으면 %cd로 하면 됩니다. 명령어가 읽히면, 결과가 출력되니 확인하고 갑니다.
그러고 나면, 아래와 같이 바뀝니다.
(2) img_dim_ordering 문제
제 경우에 대한 이 원인은, 분명이 버전 차이에서 왔습니다.
버전을 낮추기 전에 사실 오픈 소스 내부 코드를 만져놓은 상태였습니다. 대표적으로 실수한 것이 'img_dim_ordering'을 'img_data_format'으로 단순히 변경하는 것입니다. 그래서는 안 됩니다. 하더라도 아래와 같이 수행합니다. 왼쪽이 deprecated된 것이고, 오른쪽이 새로운 사용법입니다.
출처 : https://github.com/keras-team/keras/issues/12649
(3) expected convolution2d_input_1 to have shape (None, None, None, 3) but got array with shape (1, 3, 300, 800)
이 에러는 위의 에러와 연관되었습니다. 제 경우는.
오류가 몇 번째 라인에서 발생했는 지 그걸 찾는 게 새삼 중요한 지 알게되었습니다.
이전에 어느 블로그에서 봤었던게,
[ image_dim_ordering->image_data_format (x) ] 이름만 치환해주면 된다고 되있었습니다.
그러나, 그게 오류를 만들었습니다. 해서는 안 됩니다.
'영상 화자 분리 > 개발' 카테고리의 다른 글
[Colab 학습 진행] Keras-frcnn 으로 이미지 학습시키기(3) (0) | 2020.06.14 |
---|---|
[Colab 학습 진행] Keras-frcnn 으로 이미지 학습시키기(1) (0) | 2020.05.14 |
[데이터생성] 입 데이터 생성과 전처리(2) (0) | 2020.04.28 |
[Opencv4] Stitch error (0) | 2020.04.26 |
[데이터생성] 입 데이터 생성과 전처리(1) (0) | 2020.04.24 |