Yolov3 (tf1)를 tensorflow 2버전으로 실행해 보자(2)
2021/03/03 - [AI/Github] - keras로 Yolov3 (tf1)를 tensorflow 2버전으로 실행해 보자
글이 길어서 나누었다. 그럼 바로 이어서 진행한다.
stack overflow에서 get_session 을 찾아봤더니 다행히도 있다고 한다. 그런데 다른 위치에 있기때문에 따로 import 해주셨다.


+) 개발을 하다보면 오류문을 확인하기 위해 맨 아래를 보는 습관이 드는데, 에러가 발생한 위치를 거기서 알려주기 때문이다. 그런데 문법오류가 아닌 것 같다 싶으면 오류 구문을 위에서 부터 보는 것이 좋다.

"에러는 이래서 난 것 같다" 부분을 보면 load_model 과정에서 model_path를 입력받아 해당 모델을 호출하려는 과정에서 경로에 모델을 못 찾았다. saved_model 혹은 h5형태를 원하는 듯하다.
해야 할 것 : weight를 h5로 변환하기
- github 페이지 quick start에서 변환하는 방법을 알려줬다. (이래서 보통 순서를 잘 지키라고 하는 것이다. 솔직히 안읽고 다른데 좀 찾았다.)
- 나는 모델이 model/yolov3-tiny.weights 로 있으니 yolov3.weights를 이것으로 바꿔줬다. 그리고 yolov3.cfg로 yolo-tiny.cfg로 바꿧다.
python convert.py yolov3.cfg yolov3.weights model_data/yolo.h5

- 방금 뭘 한거냐면, saved_model혹은 h5라는 모델 객체는 구조상 {학습 모델 + 모델 가중치}를 담고 있다.
- weights라는 것은 말 그대로 가중치 뿐이다. saved model or h5로 만들려면 학습 모델이 필요하다.
- .cfg에 학습모델구조가 들어있다.
- convert.py는 cfg의 학습 모델과 yolov3의 가중치를 합쳐서 h5로 만든 것이다.
해야할 것 : h5 입력하기 + tiny 관련 파일 적용하기

- model path 뿐만 아니라 anchors path도 tiny 버전으로 바꿔 줘야 한다.(git에 포함되어있음) 다운로드 시간 아끼려다가 코드 적용하는데 더 시간을 쓰는 것 같다.
- 이렇게 실행하면 input 이미지를 입려해줘도 어째서인지 무시하고 다시 이미지를 입력해달라고 한다. 그렇게 하면feed_dict에서 에러가 발생한다. 드디어 sess.run에서 오류가 발생한 것이다. sess.run의 유무는 tf1과 2의 아주 큰 다른 점이다.


- 129번 라인 sess.run에서 하는 것은 네트워크(모델구조)와 가중치를 갖고 있는 모델에게 input을 주는 것이다. tf 1에서는 feed dict라는 형식으로 비교적 섬세하게 줬으나 2에서는 input param! output! 으로 심플해졌다.
tensorflow 에서 1.0을 2로 바꾸는 방법을 알려줬다.
loss가 잘렸다. 괜찮다. 아래 출처 링크에서 보면된다. 덧붙이지 않는 이유는 여기까지 흐름을 파악하면 된다.
tensorflow 에서 1.0을 2로 바꾸는 방법을 알려줬다.


loss가 잘렸다. 괜찮다. 아래 출처 링크에서 보면된다. 덧붙이지 않는 이유는 여기까지 흐름을 파악하면 된다.



이제 모델추론을 진행했으니, 남은 것은 모델 output을 후처리 하여 사용자가 원하는 값을 출력하는 것이다.
현재 상태 : 기존 모델의 아웃풋이 out_boxes, out_scores, out_classes 였는데 지금 모델이 출력한 것은 1, 2 이다. 무언가 2개가 합쳐져 있는 상태라 생각한다. output shape은 아래와 같다.
