def main(args): # jsonファイルから学習モデルのパラメータを取得する p = ['unit', 'shape', 'shuffle_rate', 'actfun1', 'actfun2'] unit, shape, sr, af1, af2 = G.jsonData(args.param, p) af1 = G.actfun(af1) af2 = G.actfun(af2) ch, size = shape[:2] # 学習モデルを生成する model = L.Classifier( JC(n_unit=unit, n_out=ch, rate=sr, actfun1=af1, actfun2=af2) ) # load_npzのpath情報を取得し、学習済みモデルを読み込む load_path = F.checkModelType(args.model) try: chainer.serializers.load_npz(args.model, model, path=load_path) except: import traceback traceback.print_exc() print(F.fileFuncLine()) exit() # GPUの設定 if args.gpu >= 0: chainer.cuda.get_device_from_id(args.gpu).use() model.to_gpu() # else: # model.to_intel64() # 高圧縮画像の生成 org_imgs = I.io.readN(args.jpeg, ch) ed_imgs = [encDecWrite(img, ch, args.quality, args.out_path, i) for i, img in enumerate(org_imgs)] imgs = [] with chainer.using_config('train', False): # 学習モデルを入力画像ごとに実行する for i, ei in enumerate(ed_imgs): img = predict( model, I.cnv.splitSQ(ei, size), args.batch, ei.shape, sr, args.gpu ) # 生成結果を保存する name = F.getFilePath( args.out_path, 'comp-' + str(i * 10 + 1).zfill(3), '.jpg' ) print('save:', name) cv2.imwrite(name, img) imgs.append(img) # オリジナル、高圧縮、推論実行結果を連結して保存・表示する c3i = [concat3Images([i, j, k], 50, 333, ch, 1) for i, j, k in zip(org_imgs, ed_imgs, imgs)] for i, img in enumerate(c3i): path = F.getFilePath( args.out_path, 'concat-' + str(i * 10).zfill(3), '.jpg' ) cv2.imwrite(path, img) cv2.imshow(path, img) cv2.waitKey()
def main(args): # jsonファイルから学習モデルのパラメータを取得する n_out, n_unit, actfun = GET.jsonData(args.param, ['n_out', 'n_unit', 'actfun']) # 学習モデルを生成する model = L.Classifier( CNT(n_out, n_unit, GET.actfun(actfun), base=L.ResNet50Layers(None))) # load_npzのpath情報を取得し、学習済みモデルを読み込む load_path = F.checkModelType(args.model) try: chainer.serializers.load_npz(args.model, model, path=load_path) except: import traceback traceback.print_exc() print(F.fileFuncLine()) exit() # GPUの設定 if args.gpu >= 0: chainer.cuda.get_device_from_id(args.gpu).use() model.to_gpu() # else: # model.to_intel64() # 画像の生成 if (args.human_num < 0): h_num = np.random.randint(0, 4) else: h_num = args.human_num if args.image == '': x = create(args.other_path, args.human_path, args.background_path, args.obj_size, args.img_size, args.obj_num, h_num, 1)[0] print(x.shape) elif IMG.isImgPath(args.image): x = cv2.cvtColor(cv2.imread(args.image, IMG.getCh(0)), cv2.COLOR_RGB2BGR) else: print('input image path is not found:', args.image) exit() t = img2resnet(np.array(x)) # 学習モデルを実行する with chainer.using_config('train', False): st = time.time() y = model.predictor(t) num = y[0].data.argmax() print('exec time: {0:.2f}[s]'.format(time.time() - st)) print('result:', num) # 生成結果を保存する name = F.getFilePath(args.out_path, 'predict-' + str(num).zfill(2), '.jpg') print('save:', name) cv2.imwrite(name, x) cv2.imshow(name, x) cv2.waitKey()
def main(args): # jsonファイルから学習モデルのパラメータを取得する net, unit, ch, size, layer, sr, af1, af2 = GET.modelParam(args.param) # 学習モデルを生成する if net == 0: from Lib.network import JC_DDUU as JC else: from Lib.network2 import JC_UDUD as JC model = L.Classifier( JC(n_unit=unit, n_out=1, rate=sr, actfun1=af1, actfun2=af2)) # load_npzのpath情報を取得し、学習済みモデルを読み込む load_path = F.checkModelType(args.model) try: chainer.serializers.load_npz(args.model, model, path=load_path) except: import traceback traceback.print_exc() print(F.fileFuncLine()) exit() # GPUの設定 if args.gpu >= 0: chainer.cuda.get_device_from_id(args.gpu).use() model.to_gpu() else: model.to_intel64() # 高圧縮画像の生成 org_imgs = [ cv2.imread(name, IMG.getCh(ch)) for name in args.jpeg if IMG.isImgPath(name) ] imgs = [] # 学習モデルを入力画像ごとに実行する for i, ei in enumerate(org_imgs): with chainer.using_config('train', False): img = predict(model, IMG.splitSQ(ei, size), args.batch, ei.shape, sr, args.gpu) imgs.append(IMG.resize(img, args.out_rate)) for img in imgs: cv2.imshow('view', img) cv2.waitKey() # 生成結果を保存する name = F.getFilePath(args.out_path, 'comp-' + str(i * 10 + 1).zfill(3), '.jpg') print('save:', name) cv2.imwrite(name, img)
def main(args): # スナップショットとモデルパラメータのパスを取得する snapshot_path, param = getSnapshotAndParam(args.snapshot_and_json) # jsonファイルから学習モデルのパラメータを取得する p = ['unit', 'shape', 'shuffle_rate', 'actfun1', 'actfun2'] unit, shape, sr, af1, af2 = G.jsonData(param, p) af1 = G.actfun(af1) af2 = G.actfun(af2) ch, size = shape[:2] # 推論実行するために画像を読み込んで結合する img = getImage(args.jpeg, ch, size, args.img_num, args.random_seed) # 学習モデルを生成する model = L.Classifier( JC(n_unit=unit, n_out=ch, rate=sr, actfun1=af1, actfun2=af2) ) out_imgs = [img] for s in snapshot_path: print(s) # load_npzのpath情報を取得する load_path = F.checkModelType(s) # 学習済みモデルの読み込み try: chainer.serializers.load_npz(s, model, path=load_path) except: import traceback traceback.print_exc() print(F.fileFuncLine()) exit() # GPUの設定 if args.gpu >= 0: chainer.cuda.get_device_from_id(args.gpu).use() model.to_gpu() else: model.to_intel64() # 学習モデルを入力画像ごとに実行する ed = encDecWrite(img, ch, args.quality) with chainer.using_config('train', False): out_imgs.append( predict(model, I.cnv.splitSQ(ed, size), args.batch, ed.shape, sr, args.gpu) ) # 推論実行した各画像を結合してサイズを調整する 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)
def main(args): # jsonファイルから学習モデルのパラメータを取得する net, unit, ch, size, layer, sr, af1, af2 = GET.modelParam(args.param) # 学習モデルを生成する model = L.Classifier( JC(n_unit=unit, n_out=ch, rate=sr, actfun1=af1, actfun2=af2)) # load_npzのpath情報を取得し、学習済みモデルを読み込む load_path = F.checkModelType(args.model) try: chainer.serializers.load_npz(args.model, model, path=load_path) except: import traceback traceback.print_exc() print(F.fileFuncLine()) exit() # GPUの設定 if args.gpu >= 0: chainer.cuda.get_device_from_id(args.gpu).use() model.to_gpu() else: model.to_intel64() # 画像の生成 if args.image == '': x, _ = create(args.other_path, args.human_path, args.background_path, args.obj_size, args.img_size, args.obj_num, 1, 1) elif IMG.isImgPath(args.image): x = cv2.imread(args.image, IMG.getCh(0)) w, h = x.shape[:2] x = np.array(x).reshape(1, w, h, -1) else: print('input image path is not found:', args.image) exit() # 学習モデルを実行する with chainer.using_config('train', False): img = IMG.resize(predict(model, x, args.batch, args.gpu), 1 / sr) # 生成結果を保存する name = F.getFilePath(args.out_path, 'predict', '.jpg') print('save:', name) img = np.hstack([x[0], img]) cv2.imwrite(name, img) cv2.imshow(name, img) cv2.waitKey()
def main(args): # jsonファイルから学習モデルのパラメータを取得する n_out, n_unit, actfun = GET.jsonData(args.param, ['n_out', 'n_unit', 'actfun']) # 学習モデルを生成する model = L.Classifier( CNT(n_out, n_unit, GET.actfun(actfun), base=L.ResNet50Layers(None))) # load_npzのpath情報を取得し、学習済みモデルを読み込む load_path = FNC.checkModelType(args.model) try: chainer.serializers.load_npz(args.model, model, path=load_path) except: import traceback traceback.print_exc() print(FNC.fileFuncLine()) exit() # GPUの設定 if args.gpu >= 0: chainer.cuda.get_device_from_id(args.gpu).use() model.to_gpu() xp = cupy else: xp = np # model.to_intel64() # 画像の生成 x = [] t = [] for i in range(n_out): x.extend( create(args.other_path, args.human_path, args.background_path, args.obj_size, args.img_size, args.obj_num, i, args.img_num)) t.extend([i] * args.img_num) x = imgs2resnet(np.array(x), xp) t = xp.array(t, dtype=np.int8) print(x.shape, t.shape) # 学習モデルを実行する with chainer.using_config('train', False): st = time.time() y = model.predictor(x) print('exec time: {0:.2f}[s]'.format(time.time() - st)) # 適合率(precisiton)と再現率(recall)とF値を検証する # precision: 正解の人数を答えたうち、本当に正解の人数だった確率 # (正解が一人の場合に)別の人数を回答すると下がる # recall: 正解の人数に対して、本当に正解の人数を答えられた確率 # (正解が一人でない場合に)一人だと回答すると下がる # F score: 2/((1/recall)+(1/precision)) print('t:', t) print('y:', y.data.argmax(axis=1)) p, r, f, _ = F.classification_summary(y, t) precision = p.data.tolist() recall = r.data.tolist() F_score = f.data.tolist() print('num|precision|recall|F') [ print('{0:3}| {1:4.3f}| {2:4.3f}| {3:4.3f}'.format( i, elem[0], elem[1], elem[2])) for i, elem in enumerate(zip(precision, recall, F_score)) ]