Exemple #1
0
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()
Exemple #2
0
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()
Exemple #3
0
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)
Exemple #5
0
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()
Exemple #6
0
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))
    ]