본문 바로가기

영상 화자 분리/개발

[Colab 학습 진행] Keras-frcnn 으로 이미지 학습시키기(1)

1. 목적

labelImg 오픈소스로 데이터 라벨링이 끝났습니다. 그리고 이미지와 라벨링 정보, 그리고 어떤 이미지를 train 하고, test 하는 지를 기록한 리스트(.txt) 파일 총 3가지에 대하여 구글 드라이브에 업로드 합니다. (참고)

 

2. 오픈소스를 커스텀화시키는 과정

이 과정에서 이것저것 변경해서 변경 사항추적이 헷갈려서 오류가 많이 났음.

(1) VOC 파일 생성

VOC 디렉토리 구조

데이터를 우선 설명하면, 각자 개인이 생성한 데이터는 [PNGImages] 아래에 모두 들어갑니다. 그리고 '라벨링이미지'툴로 만들어진 xml 값들은 [Annotations]으로 들어갑니다. [Main]의 각 trainval, test 데이터에 대한 '파일명'을 개행하여 나열합니다.

3가지 VOC 데이터입니다.

그럼 최상위 폴더명 이름에 대해서는 '나는 mouth가 아닌데' 하면 'VOCDog, VOCCat' 이든 뭐든 짓습니다. 일단, 나중에 parser.py를 수정하면 되니깐요.

 

(2) xml 파일 수정

라벨링태그 산출물

학습을 시킬 공간이 '구글드라이브'입니다. 그러나, '라벨링태그'가 이뤄진 공간은 내 컴퓨터입니다. 따라서, 위의 <path> 정보를 구글 드라이브내 [PNGImages/각소스.png]로 모두 변경해줬습니다. ( 그냥 변경하지 않고 살짝 돌려봤는데 진행은 됩니다. 그러나, 어떤 결과가 나올지는 확인해보지는 않았습니다. )

변경 방법은 모두 찾아 바꾸기를 하면 되겠죠.

변경된 annotaion

(3) keras-frcnn 오픈 소스 변경

여기서 시간을 꽤 허비했습니다. 먼저, 기반 환경 구축입니다.

세세하게 다 맞추고 시작 못 하는 그런 개발자만의 고충이 당연히 있으리라 짐작합니다. 그런 부분은 에러를 잡아가면서 구현해야겠지요. 마찬가지로 진행하면서 어떤 것이 앞선 원인인지 모를 정도로 헤맸기 때문에 나타났던 오류는 따로 정리하려고 합니다.

대표적으로는 아래와 같습니다. 참고로, 해당 오류들은 공통적으로 이미지를 제대로 읽어들이지 못 할 때 나타났습니다.

첫 번째, '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)

 

(3.1) pascal_voc_parser.py 변경

train_frcnn.py를 실행하면 parser가 입력데이터를 읽어들입니다. 그리고 paser 코드를 보면 위에서 만들었던 디렉토리 구조들이 이해가 됩니다.

train.py 내부 parser 호출 부분

 

pascal_voc_parser.py 내부 일부분

저기 항목을 원하는 형태로 변경하면 됩니다. 처음에 참고하라고 링크된 블로그에 보면 예제 VOC.zip 파일이 있습니다. 다운받아서 내용만 바꾸시면 됩니다.

 

여기까지.

 

3. colab 내 파이썬 코드 참조

https://github.com/ukiKwon/voice-separater-with-ripTracking/blob/master/uki_lip_train.ipynb

 

ukiKwon/voice-separater-with-ripTracking

[우수상] Future Finance AI Challenge (seperate voice from vision) - ukiKwon/voice-separater-with-ripTracking

github.com

 

4. 배경지식 참조

https://inspace4u.github.io/dllab/lecture/2017/09/06/Keras_FRCNN_Description.html