학습된 pth로 원하는 데이터셋을 inference해 그 결과를 Fiftyone으로 볼 수 있게 한다.
학습 결과 어떤 이미지를 잘 예측하고, 어떤 이미지를 잘 예측하지 못하는지, 글자 영역을 어떻게 예측하고 있는지 직접 보려고 한다.
Content
[x] inference_val.py
[x] utils.py의 json_normalize
[x] dataviz.py
Details
inference_val.py
기존 inference를 수정하지 않고 inference_val.py를 새로 만들었습니다.
data_dir, model_dir, output_dir은 설정해주면 됩니다.
저는 아래와 같이 설정했습니다.
data_dir: ICDAR17_Korean
model_dir: 기존 inference와 동일, trained_models 폴더 안에 latest.pth 위치
output_dir: 기존 inference와 동일, output.json은 predictions 폴더 안에 생성
원래는 output.csv 파일을 생성하지만 이름을 output.json으로 변경했습니다.
json_normalize
normalize에 img_h, img_w가 이용되어 inference_val.py에서 ufo_result를 생성할 때 해당 값이 저장되도록 했습니다.
from pathlib import Path
import json
def read_json(filename):
with Path(filename).open(encoding='utf8') as handle:
ann = json.load(handle)
return ann
def json_normalize(input_json_path = "/opt/ml/level2-data-annotation_cv-level2-cv-17/predictions/output.json",
output_json_path ="/opt/ml/level2-data-annotation_cv-level2-cv-17/predictions/normalize_output.json"):
"""Function normalize points value to 0-1 for visualization and etc
Args:
json_path (str, optional): json path which you want to normalize vertical points . Defaults to "../input/data/ICDAR17_Korean/ufo/train.json".
"""
data = read_json(input_json_path)
for image in data['images']:
image = data['images'][image]
img_h = image['img_h']
img_w = image['img_w']
for polygon in image['words']:
for points in image['words'][polygon]['points']:
points[0] = points[0]/img_w
points[1] = points[1]/img_h
image['words'][polygon]['points'] = list(map(lambda x: tuple(x),image['words'][polygon]['points']))
with open(output_json_path,'w') as f:
json.dump(data, f, indent=4)
json_normalize()
dataviz.py
이후 dataviz.py를 실행시키면 Fiftyone을 통해 inference 결과를 볼 수 있습니다.
이 때 json에 'illegibility'가 없으므로 해당 부분을 주석처리 해주고 filled=False로 넣어주었습니다.
Background
학습된 pth로 원하는 데이터셋을 inference해 그 결과를 Fiftyone으로 볼 수 있게 한다. 학습 결과 어떤 이미지를 잘 예측하고, 어떤 이미지를 잘 예측하지 못하는지, 글자 영역을 어떻게 예측하고 있는지 직접 보려고 한다.
Content
Details
inference_val.py
기존 inference를 수정하지 않고 inference_val.py를 새로 만들었습니다. data_dir, model_dir, output_dir은 설정해주면 됩니다. 저는 아래와 같이 설정했습니다.
원래는 output.csv 파일을 생성하지만 이름을 output.json으로 변경했습니다.
json_normalize
normalize에 img_h, img_w가 이용되어 inference_val.py에서 ufo_result를 생성할 때 해당 값이 저장되도록 했습니다.
dataviz.py
이후 dataviz.py를 실행시키면 Fiftyone을 통해 inference 결과를 볼 수 있습니다. 이 때 json에 'illegibility'가 없으므로 해당 부분을 주석처리 해주고 filled=False로 넣어주었습니다.