Пример #1
0
def test_image_2d():
    os.environ["CUDA_VISIBLE_DEVICES"] = "1"

    # 图像数据(灰度)
    file_name = "../picture/base_test/dog1.bmp"

    show_file(file_name)

    gray, err = gray_file(file_name)
    show_data(gray, ImageDataType.GRAY)

    # 卷积
    con = Convolution()
    # con = MeanPooling()

    # 输入信息 x
    x = gray

    # 滤波器 w(平滑去噪)
    w = np.asarray([[1 / 16, 1 / 8, 1 / 16], [1 / 8, 1 / 4, 1 / 8],
                    [1 / 16, 1 / 8, 1 / 16]])

    y, err = con.convolution(w, x, Reversal.REV, ConvolutionType.Other, 3, 0,
                             0)

    show_data(y, ImageDataType.GRAY)

    # 滤波器 w(提取边缘特征)
    w = np.asarray([[0, 1, 0], [1, -4, 1], [0, 1, 0]])

    y, err = con.convolution(w, x, Reversal.REV, ConvolutionType.Other, 3, 0,
                             0)

    show_data(y, ImageDataType.GRAY)

    # 滤波器 w(提取边缘特征)
    w = np.asarray([[0, 1, 1], [-1, 0, 1], [-1, -1, 0]])

    y, err = con.convolution(w, x, Reversal.REV, ConvolutionType.Other, 3, 0,
                             0)

    show_data(y, ImageDataType.GRAY)
Пример #2
0
def test_image_3d():
    os.environ["CUDA_VISIBLE_DEVICES"] = "1"

    # 图像数据
    file_name = "../picture/base_test/dog1.bmp"

    show_file(file_name)

    data, image_data_type, err = get_data(file_name)

    # 卷积
    con = Convolution()
    # con = MaxPooling()

    # 输入信息 x
    x = data

    # 滤波器 w(平滑去噪)
    w = np.asarray([[[1 / 16, 1 / 16, 1 / 16], [1 / 8, 1 / 8, 1 / 8],
                     [1 / 16, 1 / 16, 1 / 16]],
                    [[1 / 8, 1 / 8, 1 / 8], [1 / 4, 1 / 4, 1 / 4],
                     [1 / 8, 1 / 8, 1 / 8]],
                    [[1 / 16, 1 / 16, 1 / 16], [1 / 8, 1 / 8, 1 / 8],
                     [1 / 16, 1 / 16, 1 / 16]]])

    y, err = con.convolution(w, x, Reversal.REV, ConvolutionType.Other, 3, 0,
                             0)

    show_data(y, ImageDataType.RGB)

    # 滤波器 w(提取边缘特征)
    w = np.asarray([[[0, 0, 0], [1, 1, 1], [0, 0, 0]],
                    [[1, 1, 1], [-4, -4, -4], [1, 1, 1]],
                    [[0, 0, 0], [1, 1, 1], [0, 0, 0]]])

    y, err = con.convolution(w, x, Reversal.REV, ConvolutionType.Other, 3, 0,
                             0)

    show_data(y, ImageDataType.RGB)

    # 滤波器 w(提取边缘特征)
    w = np.asarray([[[0, 0, 0], [1, 1, 1], [1, 1, 1]],
                    [[-1, -1, -1], [0, 0, 0], [1, 1, 1]],
                    [[-1, -1, -1], [-1, -1, -1], [0, 0, 0]]])

    y, err = con.convolution(w, x, Reversal.REV, ConvolutionType.Other, 3, 0,
                             0)

    show_data(y, ImageDataType.GRAY)
Пример #3
0
def test_cvl_nn_without_train():
    # 1. 构建训练输入样本

    # 图像文件名
    file_name = "../picture/number/1_sx.bmp"

    # 取灰度值
    data, err = gray_file(file_name, ArrayDim.THREE)

    # 将图像数据中的0转换为极小值
    my_image.array_0_tiny(data)

    # 显示灰度图像
    gray = my_image.array_3_2(data)
    show_data(gray, ImageDataType.GRAY)

    # 归一化
    sx = my_image.normalize(data, my_image.NormalizationType.NORMAL)

    # 显示归一化灰度图像
    gray = my_image.array_3_2(sx)
    show_data(gray, ImageDataType.GRAY)

    # 训练输入样本
    sx_list = list()
    sx_list.append(sx)

    # 2. 构建训练输出样本

    # 图像数据
    file_name = "../picture/number/8_sy_2.bmp"

    # 取灰度值
    data, err = gray_file(file_name, ArrayDim.THREE)

    # 将图像数据中的0转换为极小值
    my_image.array_0_tiny(data)

    # 显示灰度图像
    gray = my_image.array_3_2(data)
    # show_data(gray, ImageDataType.GRAY)

    # 归一化
    sy = my_image.normalize(data, my_image.NormalizationType.NORMAL)

    # 显示归一化灰度图像
    gray = my_image.array_3_2(sy)
    show_data(gray, ImageDataType.GRAY)

    # 训练输出样本
    sy_list = list()
    sy_list.append(sy)

    # 3. 卷积神经网络的基本参数
    ''' W, B 参数 begin '''

    # 每一层 w、B 参数,w 是个 matrix,b 是个 vector(数据类型也是一个 matrix)
    W = list()
    B = list()

    # 第1层

    w0 = np.asarray([[[50.113265], [93.826943], [115.373675]],
                     [[59.189640], [119.609671], [104.736651]],
                     [[42.784839], [90.116834], [67.911661]]])

    b0 = np.asarray([[[0.394134], [0.305481], [-0.111563], [0.464680],
                      [-0.044974], [-0.249474], [0.344747], [-0.144516],
                      [0.120547], [-0.120140], [0.096371], [0.073717],
                      [0.044348], [-0.385316], [0.416685], [0.548801],
                      [0.290702], [-0.170383]],
                     [[-0.183913], [0.881344], [0.379849], [0.967322],
                      [0.231840], [0.334352], [0.516944], [0.570409
                                                           ], [0.156349],
                      [0.909234], [0.174547], [0.813966], [0.835244],
                      [0.761143], [1.020271], [0.431555], [0.451456],
                      [-0.165681]],
                     [[0.538315], [1.158434], [0.827443],
                      [1.209531], [0.873020], [1.490418], [-0.321991],
                      [-0.546698], [0.387941], [0.714195], [1.914184],
                      [1.262890], [1.031726], [0.665484], [1.111183],
                      [0.780210], [0.800418], [0.016235]],
                     [[0.598855], [1.493059],
                      [1.128118], [1.443648], [0.734596], [1.172370],
                      [-0.883454], [-4.379097], [-3.697614], [-5.167245],
                      [-3.755237], [1.490307], [0.865462], [1.644435],
                      [1.055617], [1.160021], [0.387357], [0.157360]],
                     [[0.198682], [0.914774],
                      [1.392495], [0.880891], [1.134312], [0.968554],
                      [-4.343983], [-7.116327], [-3.834269], [-5.174044],
                      [-4.161452], [0.151857], [0.922105], [1.161507],
                      [0.595232], [0.990366], [1.075088], [-0.258814]],
                     [[0.477665], [1.602952], [1.181507],
                      [0.665496], [1.279437], [1.439306], [-3.930717],
                      [-2.732151], [0.424828], [-3.961826], [-3.768221],
                      [-0.472824], [1.042067], [0.807338], [1.711559],
                      [0.983939], [0.288783], [-0.418911]],
                     [[0.766438], [1.244276],
                      [1.286307], [0.790951], [0.995913], [0.872906],
                      [-3.827127], [-3.361843], [-1.077353], [-4.582801],
                      [-2.303175], [0.031738], [1.287701], [1.044528],
                      [1.383836], [1.283100], [0.241565], [-0.197527]],
                     [[0.411086], [1.588132],
                      [1.143584], [1.515480], [0.525359], [1.285077],
                      [-4.642499], [-4.682207], [-2.799712], [-7.874153],
                      [-3.598426], [0.163200], [1.050818], [1.072107],
                      [1.647231], [1.297448], [0.472967], [-0.365622]],
                     [[1.140368], [1.331310], [1.039651], [1.444111],
                      [0.588199], [1.074860], [-2.961898], [-3.365907],
                      [-9.275475], [-8.768490], [-5.709736], [0.552231],
                      [0.806262], [0.641553], [0.859427], [1.390415],
                      [-0.017225], [0.395236]],
                     [[1.151735], [0.551786],
                      [1.383289], [0.987141], [1.303332], [0.891473],
                      [-2.649088], [-2.601597], [-4.444745], [-6.328936],
                      [-3.561121], [0.097629], [0.956537], [1.460169],
                      [1.674805], [1.392249], [0.491228], [-0.388936]],
                     [[0.351013], [1.419691], [1.283733], [1.161723],
                      [1.707191], [0.643386], [1.431694], [0.691841],
                      [-1.213639], [-7.302778], [-3.354404], [-0.886146],
                      [0.715025], [0.994340], [0.875995], [1.663526],
                      [0.948911], [0.567744]],
                     [[0.857319], [1.086111], [0.814578], [0.970882],
                      [1.697328], [1.316010], [1.051087], [0.414327],
                      [-5.256378], [-5.877422], [-0.179250], [0.544970],
                      [1.264428], [0.604863], [0.999309], [1.183568],
                      [0.366828], [0.408546]],
                     [[0.746337], [1.342136], [1.351453], [1.447988],
                      [1.473613], [1.172948], [1.625175], [-1.097880],
                      [-7.496154], [-3.486610], [-0.854779], [0.951540],
                      [1.028474], [0.571090], [0.728899], [1.214444],
                      [0.993936], [0.392067]],
                     [[0.834584], [0.852879], [0.819633], [1.100310],
                      [1.119684], [0.838549], [0.308638], [-4.381538],
                      [-5.573656], [-0.240430], [0.531746], [1.503448],
                      [0.747390], [1.253126], [0.905447], [1.262200],
                      [0.442319], [0.442514]],
                     [[0.743176], [0.749403], [1.527007], [1.030668],
                      [1.659595], [0.818656], [0.471315], [-6.560603],
                      [-4.153131], [-0.389991], [0.951427], [1.292622],
                      [1.227982], [0.787592], [1.083349], [1.171198],
                      [0.320301], [0.145997]],
                     [[0.336351], [0.971745], [0.870700], [1.566745],
                      [0.849081], [1.463097], [-2.652546], [-2.183096],
                      [-0.495741], [-0.188252], [0.936387], [0.429778],
                      [1.737350], [1.646101], [0.694978], [1.069849],
                      [0.892659], [-0.138695]],
                     [[0.193120], [0.772601], [0.665977], [0.959221],
                      [1.782215], [1.507661], [1.003219], [1.342632
                                                           ], [0.805974],
                      [1.522182], [0.674850], [0.820031], [0.603524
                                                           ], [0.752671],
                      [0.938834], [1.467478], [0.745415], [0.440291]],
                     [[0.452432], [0.504461], [0.544565], [0.432389],
                      [0.740133], [0.067003], [0.893957], [0.292302
                                                           ], [0.586535],
                      [0.411866], [0.240025], [0.279950], [0.342256],
                      [0.439238], [0.082237], [0.079462], [0.350406],
                      [-0.376255]]])

    W.append(w0)
    B.append(b0)

    # 第2层

    w1 = np.asarray([[[0.496053], [0.142468], [0.692607]],
                     [[-0.152569], [0.746855], [0.665359]],
                     [[-0.078141], [0.187796], [0.004870]]])

    b1 = np.asarray([[[0.738316], [0.558320], [0.616535], [0.563276],
                      [0.397948], [0.403014], [0.623214], [0.648124],
                      [0.499537], [0.477057], [0.458188], [0.620421],
                      [0.698390], [0.680706], [0.483114], [0.579076]],
                     [[0.596898], [0.404650], [0.519849], [0.451572],
                      [0.522308], [0.449322], [0.525448], [0.713798],
                      [0.439633], [0.500006], [0.759672], [0.725525],
                      [0.695965], [0.449514], [0.472447], [0.482284]],
                     [[0.523954], [0.755020], [0.640807], [0.670937],
                      [0.458754], [0.624749], [-4.708748], [-4.716255],
                      [-4.719785], [-4.739897], [0.416815], [0.563930],
                      [0.471036], [0.385172], [0.570061], [0.460100]],
                     [[0.488801], [0.445694], [0.726974], [0.642160],
                      [0.389185], [0.542930], [-4.720975], [0.494188],
                      [0.493539], [-4.720184], [0.369179], [0.534885],
                      [0.693592], [0.757328], [0.404759], [0.510594]],
                     [[0.387318], [0.776344], [0.697167], [0.591275],
                      [0.678695], [0.379232], [-4.735606], [0.372957],
                      [0.629077], [-4.710119], [0.417072], [0.458907],
                      [0.603948], [0.368090], [0.548514], [0.777818]],
                     [[0.386241], [0.504484], [0.492332], [0.515327],
                      [0.734786], [0.410316], [-4.724017], [0.653110],
                      [0.631986], [-4.728177], [0.658651], [0.705176],
                      [0.620827], [0.670017], [0.385353], [0.462904]],
                     [[0.406522], [0.407609], [0.434104], [0.548003],
                      [0.671716], [0.470964], [-4.705063], [0.561526],
                      [-4.714012], [-4.730049], [0.713027], [0.415023],
                      [0.527258], [0.653842], [0.641143], [0.730861]],
                     [[0.399245], [0.624423], [0.586776], [0.640310],
                      [0.531442], [0.522265], [-4.731969], [-4.713455],
                      [-4.737818], [-4.726882], [0.520856], [0.613984],
                      [0.503019], [0.548040], [0.382262], [0.712375]],
                     [[0.604145], [0.507184], [0.657208], [0.454861],
                      [0.526420], [0.715608], [0.425322], [0.525826],
                      [0.519881], [-4.711324], [0.763128], [0.420057],
                      [0.740006], [0.488205], [0.443485], [0.460116]],
                     [[0.546870], [0.772369], [0.414549], [0.415155],
                      [0.480857], [0.598054], [0.432484], [0.766837],
                      [-4.708531], [-4.714308], [0.559024], [0.703133],
                      [0.608846], [0.459609], [0.689914], [0.389198]],
                     [[0.422926], [0.502196], [0.720415], [0.539214],
                      [0.635489], [0.552064], [0.608547], [0.535145],
                      [-4.723283], [0.467894], [0.476116], [0.527392],
                      [0.498777], [0.663084], [0.404508], [0.373993]],
                     [[0.425400], [0.474075], [0.628678], [0.415942],
                      [0.379077], [0.401436], [0.551009], [-4.741356],
                      [-4.714145], [0.649679], [0.422052], [0.414361],
                      [0.758212], [0.771625], [0.563505], [0.599782]],
                     [[0.534033], [0.497468], [0.427890],
                      [0.373989], [0.604646], [0.600752], [0.368556],
                      [-4.724289], [0.513206], [0.409971], [0.700321],
                      [0.451720], [0.419490], [0.556964], [0.546020],
                      [0.482902]],
                     [[0.392839], [0.550031], [0.598946],
                      [0.515958], [0.419458], [0.400969], [-4.713971],
                      [-4.738337], [0.695640], [0.406998], [0.538457],
                      [0.599610], [0.416045], [0.520507], [0.599289],
                      [0.683523]],
                     [[0.586383], [0.436032], [0.651763], [0.542701],
                      [0.438006], [0.594131], [0.400705], [0.745671],
                      [0.656867], [0.559175], [0.689486], [0.520835],
                      [0.385378], [0.659122], [0.651156], [0.470575]],
                     [[0.405100], [0.716354], [0.549392], [0.384638],
                      [0.413940], [0.525830], [0.380278], [0.649017],
                      [0.428349], [0.389288], [0.761551], [0.657696],
                      [0.416118], [0.655166], [0.488445], [0.488434]]])

    W.append(w1)
    B.append(b1)
    ''' W, B 参数 end '''

    # 激活函数
    activation = Sigmoid()
    # activation = ReLU()

    # 最后一跳激活函数
    last_hop_activation = LastHopActivation()

    # 损失函数
    loss = MSELoss()

    # 构建卷积对象
    cvl = Convolution()

    # 构建卷积神经网络对象
    cnn = CVLFNN(cvl, activation, last_hop_activation, loss)

    # 参数赋值
    cnn.stub_set_para(0, None, W, B, activation)

    # 预测
    py_list = cnn.predict(sx_list, sy_list)

    # 将预测结果显示如初
    py = py_list[0]

    py = my_image.normalize(py, my_image.NormalizationType.REV_NORMAL)

    py = my_image.array_3_2(py)

    messagebox.showinfo("提示", "预测结果")

    show_data(py, ImageDataType.GRAY)
Пример #4
0
def test_cvl_nn():
    # 1. 构建训练输入样本/输出样本

    sx_list = list()  # 输入样本列表
    sy_list = list()  # 输出样本列表

    for i in range(0, 10):
        # 1.1 输入样本

        # 图像文件名
        file_name = "../picture/number/"
        file_name += "%d_sx.bmp" % i

        # 取灰度值
        data, err = gray_file(file_name, ArrayDim.THREE)

        # 将图像数据中的0转换为极小值
        my_image.array_0_tiny(data)

        # 显示灰度图像
        gray = my_image.array_3_2(data)
        # show_data(gray, ImageDataType.GRAY)

        # 归一化
        sx = my_image.normalize(data, my_image.NormalizationType.NORMAL)

        # 显示归一化灰度图像
        gray = my_image.array_3_2(sx)
        # show_data(gray, ImageDataType.GRAY)

        # 加入训练输入样本列表
        sx_list.append(sx)

        # 1.2 输出样本

        # 图像文件名
        file_name = "../picture/number/"
        file_name += "%d_sy_2.bmp" % i

        # 取灰度值
        data, err = gray_file(file_name, ArrayDim.THREE)

        # 将图像数据中的0转换为极小值
        my_image.array_0_tiny(data)

        # 显示灰度图像
        gray = my_image.array_3_2(data)
        # show_data(gray, ImageDataType.GRAY)

        # 归一化
        sy = my_image.normalize(data, my_image.NormalizationType.NORMAL)

        # 显示归一化灰度图像
        gray = my_image.array_3_2(sy)
        # show_data(gray, ImageDataType.GRAY)

        # 加入训练输出样本列表
        sy_list.append(sy)

    # 2. 卷积神经网络的基本参数

    # 每一层网络的神经元个数(这个参数,对于卷积网络而言,没意义)
    neuron_count_list = None

    # 最大循环训练次数
    loop_max = 1

    # 学习效率
    rate = 0.01

    # 卷积核数组大小
    w_shape_list = list()

    w1_shape = [3, 3, 1]
    w2_shape = [3, 3, 1]

    w_shape_list.append(w1_shape)
    w_shape_list.append(w2_shape)

    # 激活函数
    activation = Sigmoid()
    # activation = ReLU()

    # 最后一跳激活函数
    last_hop_activation = LastHopActivation()

    # 损失函数
    loss = MSELoss()

    # 构建卷积对象
    cvl = Convolution()

    # 构建卷积神经网络对象
    cnn = CVLFNN(cvl, activation, last_hop_activation, loss)

    # 3. 训练
    cnn.train(sx_list, sy_list, loop_max, neuron_count_list, rate,
              w_shape_list)

    # 4. 预测
    py_list = cnn.predict(sx_list, sy_list)

    # 将预测结果显示如初
    count = len(py_list)

    for i in range(0, count):
        py = py_list[i]

        py = my_image.normalize(py, my_image.NormalizationType.REV_NORMAL)

        py = my_image.array_3_2(py)

        show_data(py, ImageDataType.GRAY)
Пример #5
0
def test_cvl_nn_2():
    # 1. 构建训练输入样本/输出样本

    train_sx_list = list()  # 训练样本列表(输入)
    train_sy_list = list()  # 训练样本列表(输出)

    test_sx_list = list()  # 测试样本列表(输入)
    test_sy_list = list()  # 测试样本列表(输入)

    max_count = 1000

    image_path = "../picture/number_cnn/"

    for count in range(0, max_count):
        for number in range(0, 2):
            # 1.1 输入样本

            # 图像路径
            path = image_path + "/" + str(number)

            # 文件名
            sx_file_name = path + "/" + "sx_" + str(number) + "_" + str(
                count) + ".bmp"

            # 取灰度值
            data, err = gray_file(sx_file_name, ArrayDim.THREE)

            # 将图像数据中的0转换为极小值
            my_image.array_0_tiny(data)

            # 显示灰度图像
            # gray = my_image.array_3_2(data)
            # show_data(gray, ImageDataType.GRAY)

            # 归一化
            sx = my_image.normalize(data, my_image.NormalizationType.NORMAL)

            sx = sx / 40

            # 显示归一化灰度图像
            # gray = my_image.array_3_2(sx)
            # show_data(gray, ImageDataType.GRAY)

            # 加入训练样本列表(输入)
            if count < (max_count - 1):
                train_sx_list.append(sx)
            # 加入测试样本列表(输入)
            else:
                test_sx_list.append(sx)

            # 1.2 输出样本

            # sy 文件名
            sy_file_name = path + "/" + "sy_" + str(number) + ".bmp"

            # 取灰度值
            data, err = gray_file(sy_file_name, ArrayDim.THREE)

            # 将图像数据中的0转换为极小值
            my_image.array_0_tiny(data)

            # 显示灰度图像
            # gray = my_image.array_3_2(data)
            # show_data(gray, ImageDataType.GRAY)

            # 归一化
            sy = my_image.normalize(data, my_image.NormalizationType.NORMAL)

            # 显示归一化灰度图像
            # gray = my_image.array_3_2(sy)
            # show_data(gray, ImageDataType.GRAY)

            # 加入训练样本列表(输出)
            if count < (max_count - 1):
                train_sy_list.append(sy)
            # 加入训练样本列表(输出)
            else:
                test_sy_list.append(sy)

    # 2. 卷积神经网络的基本参数

    # 每一层网络的神经元个数(这个参数,对于卷积网络而言,没意义)
    neuron_count_list = None

    # 最大循环训练次数
    loop_max = 1

    # 学习效率
    rate = 0.01

    # 卷积核数组大小
    w_shape_list = list()

    w1_shape = [3, 3, 1]
    w2_shape = [3, 3, 1]

    w_shape_list.append(w1_shape)
    w_shape_list.append(w2_shape)

    # 激活函数
    activation = Sigmoid()
    # activation = ReLU()

    # 最后一跳激活函数
    last_hop_activation = LastHopActivation()

    # 损失函数
    loss = MSELoss()

    # 构建卷积对象
    cvl = Convolution()

    # 构建卷积神经网络对象
    cnn = CVLFNN(cvl, activation, last_hop_activation, loss)

    # 3. 训练
    # train_sx_group = get_sample_group(train_sx_list)
    # train_sy_group = get_sample_group(train_sy_list)
    # cnn.train(train_sx_group, train_sy_group, loop_max, neuron_count_list, rate, w_shape_list)
    cnn.train(train_sx_list, train_sy_list, loop_max, neuron_count_list, rate,
              w_shape_list)

    # 4. 预测
    py_list = cnn.predict(test_sx_list, test_sy_list)

    # 将预测结果显示如初
    count = len(py_list)

    for number in range(0, count):
        py = py_list[number]

        py = my_image.normalize(py, my_image.NormalizationType.REV_NORMAL)

        py = my_image.array_3_2(py)

        show_data(py, ImageDataType.GRAY)