1、将利用tf.slice函数提取cost_volume的部分都去掉。在生成cost_volume的部分取消和Disparity相关的那次迭代。
实验结果:运行正常,且不同的cost_volume的权值不再相同,达到预期效果。遗留的还不清楚原因。问题是训练的效果还很差,而且整体的像素值都很小。
2、实验:将get_batch函数中的per_picture_standarlization去掉。看看能不能使得像素强度大一些
部分像素结果如下:.
[[[ 1.54285169 0.933927 1.47258127]
[ 0.18207826 0.22060575 0.08451674]
[ 1.03088057 0.11117508 0.19160177]
...,
[ 0.35692829 0.32839873 0.16750905]
[ 1.05116034 0.13198015 0.36493447]
[ 0.2625978 0.20416011 0.12823176]]
[[ 0.3860575 0.20895129 0.265073 ]
[ 0.0403722 0.03014125 0.00384803]
[ 0.0151044 0.07537584 0.01479994]
...,
[ 0.04567728 0.05214696 0.01129383]
[ 0.02521723 0.13180308 0.0209306 ]
[ 0.02408953 0.0227813 0.00365678]]
[[ 1.027174 0.61219567 0.23092042]
[ 0.04974696 0.02318765 0.00461498]
[ 1.00026262 0.04449522 0.01210062]
...,
[ 0.16489761 0.1579753 0.04708993]
[ 1.00086021 0.07266132 0.01164706]
[ 0.06365518 0.03242689 0.00899804]]
可以看到像素大小还是非常小,不知道是不是训练不够的问题。
3、实验三:将输出的大小乘以100,试着看看视觉效果。
可以看到效果已经不是非常规律的方格,说明每一个权重都在学习,但是还是出现了很多很规则的点点,不知道是为什么。
4 将输出的dispary乘以300再看看视觉效果.,
5、 现在将训练集从viz_flow_occ改回disp_noc_0,并且将输出通道改回单通道,看看深度图结果是否有进步。
部分实验结果如下:
[[ 3.40333544e-02 5.69506519e-05 2.48991432e-06 ..., 4.63277753e-03
2.80782206e-05 3.48242669e-04]
[ 4.70794330e-05 3.34092731e-09 9.17497883e-11 ..., 1.76127151e-06
2.62155764e-09 4.37388223e-08]
[ 2.87549233e-06 1.52223467e-09 1.26440701e-13 ..., 9.30134411e-06
6.21862700e-11 2.40355167e-08]
...,
[ 5.11044115e-02 9.99674085e-05 7.98715919e-04 ..., 3.29265208e-06
2.07200878e-06 6.11510040e-05]
[ 1.36528717e-04 3.21911784e-07 8.04712919e-09 ..., 1.33634458e-05
1.05197735e-08 2.18457217e-06]
[ 5.79223561e-04 2.78921561e-07 2.23914014e-07 ..., 7.12920810e-05
6.08705761e-07 3.78783056e-06]]
[[ 1.85363144e-02 6.05983842e-05 2.08838060e-06 ..., 3.23573872e-03
1.32183186e-05 2.73108453e-04]
[ 2.73683308e-05 3.24031557e-09 2.81839191e-10 ..., 1.11970405e-06
1.10107701e-09 3.00957836e-08]
[ 1.27066949e-06 8.96879571e-10 7.00045152e-14 ..., 6.33006402e-06
1.63468891e-11 9.96947325e-09]
可以看到,输出的预测值非常的小,感觉还是存在问题的。
6,将实验结果乘以30000输出,希望得到一个可视化效果。
dispmap=dispmap*30000
[[ 3.40333544e-02 5.69506519e-05 2.48991432e-06 ..., 4.63277753e-03
2.80782206e-05 3.48242669e-04]
[ 4.70794330e-05 3.34092731e-09 9.17497883e-11 ..., 1.76127151e-06
2.62155764e-09 4.37388223e-08]
[ 2.87549233e-06 1.52223467e-09 1.26440701e-13 ..., 9.30134411e-06
6.21862700e-11 2.40355167e-08]
结果依旧很小,不知道是不是自己设置出问题了
7,将学习率退化率更改为每20个epoch退化一次
8,我明明已经在disparity输出之前乘以了一个很大的输300000,但是神经网络还是将我的值强行的拉到了很小,我怀疑不是网络训练的问题,而是视差的训练标签根本就不能够进行标准化。
9,我准备做一个实验,看看tf.image.per_image_standardization函数对数值的影响。
代码如下:
import os
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt#这个可以用来
from tensorflow.python.training import moving_averages
from tensorflow.python.ops import control_flow_ops
from tflearn.layers.conv import global_avg_pool
import operator
from PIL import Image
import time#record runing time
"""
Created on Sat Oct 6 11:02:20 2018
@author: Administrator
"""
groundtruth_dir = 'E:/study/graduate_document/my_densematching_program/train//disp_noc_0//000058_10.png'
image_contents_left=tf.read_file(groundtruth_dir)
image_left=tf.image.decode_png(image_contents_left,channels=3)
image_left = tf.image.resize_image_with_crop_or_pad(image_left, IMG_H,IMG_W)
image_left_stand = tf.image.per_image_standardization(image_left)
image_left_float32 = tf.cast(image_left, tf.float32)
image_left_stand_float=tf.cast(tf.image.per_image_standardization(image_left), tf.float32)
f = open("DATA2.txt", "w") #将值输出来看一下
f2 = open("DATA3.txt", "w") #将值输出来看一下
f3 = open("DATA4.txt", "w") #将值输出来