Chainer의 extensions.snapshot()에서 생성된 여러 스냅샷에서 추론 실행
extensions.snapshot()
라는 스냅샷을 출력하는 기능이 있으므로, 그것을 사용하여 학습의 추이를 비교하고 싶다. 소스 코드는 여기【추기】
predictor
앞에 with chainer.using_config('train', False):
를 설정하지 않으면 오차 전번이 실행되어 버리므로주의운영 환경
실행 이미지
가장 왼쪽이 정답 이미지로, 오른쪽으로 갈수록 학습이 진행된 스냅샷이 된다. 학습이 진행될수록 문자가 선명하게 되어 있는 것을 확인할 수 있다.
코드
메인부 main()
[1]에서 네트워크 레이어 설정, [2]에서 입력하는 이미지 생성, [3]에서 스냅샷 호출 학습 모델 생성 및 추론 실행, [4]에서 각 스냅샷에서 생성된 출력 이미지를 연결 그런 다음 표시 및 저장을 수행합니다.
predict_some_snapshot.pyimport cv2
import numpy as np
import chainer
import chainer.links as L
from Lib.network import JC
import Lib.imgfunc as IMG
import Tools.func as F
from predict import getModelParam, predict, isImage, checkModelType
def main(args):
# [1]
snapshot_path, param = getSnapshotAndParam(args.snapshot_and_json)
unit, ch, layer, sr, af1, af2 = getModelParam(param)
model = L.Classifier(JC(
n_unit=unit, n_out=ch, layer=layer, rate=sr,
actfun_1=af1, actfun_2=af2
))
# [2]
img = getImage(args.jpeg, ch, args.random_seed)
out_imgs = [img]
# [3]
for s in snapshot_path:
load_path = checkModelType(s)
try:
chainer.serializers.load_npz(s, model, path=load_path)
except:
import traceback
traceback.print_exc()
print(F.fileFuncLine())
exit()
if args.gpu >= 0:
chainer.cuda.get_device_from_id(args.gpu).use()
model.to_gpu()
with chainer.using_config('train', False):
out_imgs.append(predict(model, args, img, ch, -1))
# [4]
img = stackImages(out_imgs, args.img_rate)
cv2.imshow('predict some snapshots', img)
cv2.waitKey()
cv2.imwrite(F.getFilePath(args.out_path, 'snapshots.jpg'), img)
추론 실행 predict()
predict()
를 비롯한 일부 함수는 자작이다. 소스 코드는 동일한 리포지토리에 있습니다. [1]로 화상을 압축하여 열화시키고 [2]로 분할한다. [3]에서 배치 사이즈마다 실행하고, [4]로 분할한 화상을 다시 결합하고, [5]로 크기를 입력 화상과 동일하게 하고 [6]에 저장한다.
predict.pyimport cv2
import numpy as np
import chainer
import chainer.links as L
from chainer.cuda import to_cpu
from Lib.network import JC
import Lib.imgfunc as IMG
import Tools.func as F
def predict(model, args, img, ch, val):
org_size = img.shape
# [1]
comp = IMG.encodeDecode([img], IMG.getCh(ch), args.quality)
if(val >= 0):
cv2.imwrite(
F.getFilePath(args.out_path, 'comp-' +
str(val * 10).zfill(3), '.jpg'),
comp[0]
)
# [2]
comp, size = IMG.split(comp, args.img_size)
imgs = []
# [3]
for i in range(0, len(comp), args.batch):
x = IMG.imgs2arr(comp[i:i + args.batch], gpu=args.gpu)
y = model.predictor(x)
y = to_cpu(y.array)
y = IMG.arr2imgs(y, ch, args.img_size * 2)
imgs.extend(y)
# [4]
buf = [np.vstack(imgs[i * size[0]: (i + 1) * size[0]])
for i in range(size[1])]
img = np.hstack(buf)
# [5]
h = 0.5
half_size = (int(img.shape[1] * h), int(img.shape[0] * h))
flg = cv2.INTER_NEAREST
img = cv2.resize(img, half_size, flg)
img = img[:org_size[0], :org_size[1]]
# [6]
if(val >= 0):
name = F.getFilePath(args.out_path, 'comp-' + str(val * 10 + 1).zfill(3), '.jpg')
print('save:', name)
cv2.imwrite(name, img)
return img
이상.
Reference
이 문제에 관하여(Chainer의 extensions.snapshot()에서 생성된 여러 스냅샷에서 추론 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ka10ryu1/items/ebe45dbd9dee7e9115df
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
메인부 main()
[1]에서 네트워크 레이어 설정, [2]에서 입력하는 이미지 생성, [3]에서 스냅샷 호출 학습 모델 생성 및 추론 실행, [4]에서 각 스냅샷에서 생성된 출력 이미지를 연결 그런 다음 표시 및 저장을 수행합니다.
predict_some_snapshot.py
import cv2
import numpy as np
import chainer
import chainer.links as L
from Lib.network import JC
import Lib.imgfunc as IMG
import Tools.func as F
from predict import getModelParam, predict, isImage, checkModelType
def main(args):
# [1]
snapshot_path, param = getSnapshotAndParam(args.snapshot_and_json)
unit, ch, layer, sr, af1, af2 = getModelParam(param)
model = L.Classifier(JC(
n_unit=unit, n_out=ch, layer=layer, rate=sr,
actfun_1=af1, actfun_2=af2
))
# [2]
img = getImage(args.jpeg, ch, args.random_seed)
out_imgs = [img]
# [3]
for s in snapshot_path:
load_path = checkModelType(s)
try:
chainer.serializers.load_npz(s, model, path=load_path)
except:
import traceback
traceback.print_exc()
print(F.fileFuncLine())
exit()
if args.gpu >= 0:
chainer.cuda.get_device_from_id(args.gpu).use()
model.to_gpu()
with chainer.using_config('train', False):
out_imgs.append(predict(model, args, img, ch, -1))
# [4]
img = stackImages(out_imgs, args.img_rate)
cv2.imshow('predict some snapshots', img)
cv2.waitKey()
cv2.imwrite(F.getFilePath(args.out_path, 'snapshots.jpg'), img)
추론 실행 predict()
predict()
를 비롯한 일부 함수는 자작이다. 소스 코드는 동일한 리포지토리에 있습니다. [1]로 화상을 압축하여 열화시키고 [2]로 분할한다. [3]에서 배치 사이즈마다 실행하고, [4]로 분할한 화상을 다시 결합하고, [5]로 크기를 입력 화상과 동일하게 하고 [6]에 저장한다.predict.py
import cv2
import numpy as np
import chainer
import chainer.links as L
from chainer.cuda import to_cpu
from Lib.network import JC
import Lib.imgfunc as IMG
import Tools.func as F
def predict(model, args, img, ch, val):
org_size = img.shape
# [1]
comp = IMG.encodeDecode([img], IMG.getCh(ch), args.quality)
if(val >= 0):
cv2.imwrite(
F.getFilePath(args.out_path, 'comp-' +
str(val * 10).zfill(3), '.jpg'),
comp[0]
)
# [2]
comp, size = IMG.split(comp, args.img_size)
imgs = []
# [3]
for i in range(0, len(comp), args.batch):
x = IMG.imgs2arr(comp[i:i + args.batch], gpu=args.gpu)
y = model.predictor(x)
y = to_cpu(y.array)
y = IMG.arr2imgs(y, ch, args.img_size * 2)
imgs.extend(y)
# [4]
buf = [np.vstack(imgs[i * size[0]: (i + 1) * size[0]])
for i in range(size[1])]
img = np.hstack(buf)
# [5]
h = 0.5
half_size = (int(img.shape[1] * h), int(img.shape[0] * h))
flg = cv2.INTER_NEAREST
img = cv2.resize(img, half_size, flg)
img = img[:org_size[0], :org_size[1]]
# [6]
if(val >= 0):
name = F.getFilePath(args.out_path, 'comp-' + str(val * 10 + 1).zfill(3), '.jpg')
print('save:', name)
cv2.imwrite(name, img)
return img
이상.
Reference
이 문제에 관하여(Chainer의 extensions.snapshot()에서 생성된 여러 스냅샷에서 추론 실행), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ka10ryu1/items/ebe45dbd9dee7e9115df텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)