示例#1
0
def run(PATH):
    logging.debug("function start")

    # set PATH
    Common.mkDir(PATH['RESULT'])

    # read model
    model = chainer.links.Classifier(Alex())
    model.train = False
    if not os.path.isfile(PATH['MODEL']):
        raise Exception("モデルが読み込めませんでした")
    chainer.serializers.load_npz(PATH['MODEL'], model)

    # output summary
    CARNUM = []
    IDENTIFICATION_CARNUM = []
    TPnum = []
    FPnum = []
    FNnum = []
    TNnum = []
    TP_15num = []
    FP_15num = []
    TP_20num = []
    FP_20num = []
    TP_25num = []
    FP_25num = []
    TP_30num = []
    FP_30num = []

    # set test dataset
    bs = bingTestset(datasetVOC(PATH['DATASET'], 32, False), PATH['BING'])
    names = bs.getTestIdList()
    for name in names:
        logging.debug("start: " + name)

        # read data
        images, labels, points, rawImage, bndboxs = bs.getTestDataByIndex(name)
        
        # test
        predictions = testModel(model, images, labels)

        # output
        TP = []     # 車両データを車両と認識した座標
        FP = []     # 背景データを車両と認識した座標
        FN = []     # 車両データを背景と認識した座標
        TN = []     # 背景データを背景と認識した座標

        for j in range(0, len(predictions)):
            if (predictions[j] == 1 and labels[j] == 1):
                TP.append(points[j])
            elif(predictions[j] == 1 and labels[j] == 0):
                FP.append(points[j])
            elif(predictions[j] == 0 and labels[j] == 1):
                FN.append(points[j])
            elif(predictions[j] == 0 and labels[j] == 0):
                TN.append(points[j])

        # TP結果と正解データから出力してる。
        identificationCar = Common.getIdentificationBndboxFromProposal(bndboxs, TP)

        # TPとFPに対して,重複矩形の削除を行う。
        TP_015 = Common.removeOverlapRect(TP, 0.15)
        TP_020 = Common.removeOverlapRect(TP, 0.20)
        TP_025 = Common.removeOverlapRect(TP, 0.25)
        TP_030 = Common.removeOverlapRect(TP, 0.30)
        FP_015 = Common.removeOverlapRect(FP, 0.15)
        FP_020 = Common.removeOverlapRect(FP, 0.20)
        FP_025 = Common.removeOverlapRect(FP, 0.25)
        FP_030 = Common.removeOverlapRect(FP, 0.30)

        # output summary
        CARNUM.append(len(bndboxs))
        IDENTIFICATION_CARNUM.append(len(identificationCar))
        TPnum.append(len(TP))
        FPnum.append(len(FP))
        FNnum.append(len(FN))
        TNnum.append(len(TN))
        TP_15num.append(len(TP_015))
        FP_15num.append(len(FP_015))
        TP_20num.append(len(TP_020))
        FP_20num.append(len(FP_020))
        TP_25num.append(len(TP_025))
        FP_25num.append(len(FP_025))
        TP_30num.append(len(TP_030))
        FP_30num.append(len(FP_030))
        
        # write file
        if(len(TP)):
            Common.writeCSV(PATH["RESULT"] + "/" + name + "_TP.csv", xmin=np.array(TP).T[0], ymin=np.array(TP).T[1], xmax=np.array(TP).T[2], ymax=np.array(TP).T[3])
        if(len(FP)):
            Common.writeCSV(PATH["RESULT"] + "/" + name + "_FP.csv", xmin=np.array(FP).T[0], ymin=np.array(FP).T[1], xmax=np.array(FP).T[2], ymax=np.array(FP).T[3])
        if(len(FN)):
            Common.writeCSV(PATH["RESULT"] + "/" + name + "_FN.csv", xmin=np.array(FN).T[0], ymin=np.array(FN).T[1], xmax=np.array(FN).T[2], ymax=np.array(FN).T[3])
        if(len(TN)):
            Common.writeCSV(PATH["RESULT"] + "/" + name + "_TN.csv", xmin=np.array(TN).T[0], ymin=np.array(TN).T[1], xmax=np.array(TN).T[2], ymax=np.array(TN).T[3])

        if(len(TP_015)):
            Common.writeCSV(PATH["RESULT"] + "/" + name + "_TP(0.15).csv", xmin=np.array(TP_015).T[0], ymin=np.array(TP_015).T[1], xmax=np.array(TP_015).T[2], ymax=np.array(TP_015).T[3])
        if(len(FP_015)):
            Common.writeCSV(PATH["RESULT"] + "/" + name + "_FP(0.15).csv", xmin=np.array(FP_015).T[0], ymin=np.array(FP_015).T[1], xmax=np.array(FP_015).T[2], ymax=np.array(FP_015).T[3])
        if(len(TP_020)):
            Common.writeCSV(PATH["RESULT"] + "/" + name + "_TP(0.20).csv", xmin=np.array(TP_020).T[0], ymin=np.array(TP_020).T[1], xmax=np.array(TP_020).T[2], ymax=np.array(TP_020).T[3])
        if(len(FP_020)):
            Common.writeCSV(PATH["RESULT"] + "/" + name + "_FP(0.20).csv", xmin=np.array(FP_020).T[0], ymin=np.array(FP_020).T[1], xmax=np.array(FP_020).T[2], ymax=np.array(FP_020).T[3])
        if(len(TP_025)):
            Common.writeCSV(PATH["RESULT"] + "/" + name + "_TP(0.25).csv", xmin=np.array(TP_025).T[0], ymin=np.array(TP_025).T[1], xmax=np.array(TP_025).T[2], ymax=np.array(TP_025).T[3])
        if(len(FP_025)):
            Common.writeCSV(PATH["RESULT"] + "/" + name + "_FP(0.25).csv", xmin=np.array(FP_025).T[0], ymin=np.array(FP_025).T[1], xmax=np.array(FP_025).T[2], ymax=np.array(FP_025).T[3])
        if(len(TP_030)):
            Common.writeCSV(PATH["RESULT"] + "/" + name + "_TP(0.30).csv", xmin=np.array(TP_030).T[0], ymin=np.array(TP_030).T[1], xmax=np.array(TP_030).T[2], ymax=np.array(TP_030).T[3])
        if(len(FP_030)):
            Common.writeCSV(PATH["RESULT"] + "/" + name + "_FP(0.30).csv", xmin=np.array(FP_030).T[0], ymin=np.array(FP_030).T[1], xmax=np.array(FP_030).T[2], ymax=np.array(FP_030).T[3])

        random.shuffle(TP)
        random.shuffle(FP)
        random.shuffle(FN)
        random.shuffle(TN)

        Common.outputImage(PATH["RESULT"] + "/" + name + "_TP.jpg", rawImage, TP[0:min(2000, len(TP))])
        Common.outputImage(PATH["RESULT"] + "/" + name + "_FP.jpg", rawImage, FP[0:min(2000, len(FP))])
        Common.outputImage(PATH["RESULT"] + "/" + name + "_FN.jpg", rawImage, FN[0:min(2000, len(FN))])
        Common.outputImage(PATH["RESULT"] + "/" + name + "_TN.jpg", rawImage, TN[0:min(2000, len(TN))])
        Common.outputImage(PATH["RESULT"] + "/" + name + "_TP(0.15).jpg", rawImage, TP_015)
        Common.outputImage(PATH["RESULT"] + "/" + name + "_FP(0.15).jpg", rawImage, FP_015)
        Common.outputImage(PATH["RESULT"] + "/" + name + "_TP(0.20).jpg", rawImage, TP_020)
        Common.outputImage(PATH["RESULT"] + "/" + name + "_FP(0.20).jpg", rawImage, FP_020)
        Common.outputImage(PATH["RESULT"] + "/" + name + "_TP(0.25).jpg", rawImage, TP_025)
        Common.outputImage(PATH["RESULT"] + "/" + name + "_FP(0.25).jpg", rawImage, FP_025)
        Common.outputImage(PATH["RESULT"] + "/" + name + "_TP(0.30).jpg", rawImage, TP_030)
        Common.outputImage(PATH["RESULT"] + "/" + name + "_FP(0.30).jpg", rawImage, FP_030)

    Common.writeCSV(PATH["RESULT"] + "/summary.csv",
                    name=names, carnum=CARNUM,
                    tp=TPnum,fp=FPnum,fn=FNnum,tn=TNnum,
                    tp15=TP_15num, fp15=FP_15num,
                    tp20=TP_20num, fp20=FP_20num,
                    tp25=TP_25num, fp25=FP_25num,
                    tp30=TP_30num, fp30=FP_30num,
                    identificationcarnum=IDENTIFICATION_CARNUM
                    )