Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Communicate in Chinese!中文交流! #86

Open
i4yyds opened this issue Jan 10, 2019 · 11 comments
Open

Communicate in Chinese!中文交流! #86

i4yyds opened this issue Jan 10, 2019 · 11 comments

Comments

@i4yyds
Copy link

i4yyds commented Jan 10, 2019

去他娘的英文!
我对代码中的loss层有4个疑问,目前已经解决3个。分享一些自己的观点,一起交流!

  1. 为什么使用 offset ?
  2. 为什么对 w和h 开根号 ?
  3. 为什么使用 offset_tran ?
  4. 四个loss的含义 ?
@i4yyds
Copy link
Author

i4yyds commented Jan 10, 2019

confidence loss :

  1. A = 有物体的格子 * (预测 - IOU) #目的是让A减小,即预测=IOU
  2. B = 没有物体的格子 * 预测 #目的是让B减小,即没有物体的格子预测值为0

class loss:
C = 有物体的格子 * (预测 - 真实值) #目的是让C减小,即预测=真实值

box loss:
D = 有物体的格子 * (预测[位移x,位移y, w比例,h比例] - 真实[位移x,位移y, w比例,h比例]) #目的使得预测=真实
D说明:一张图片被划分为7x7个格子,yolo_net输出的是每个格子的4个值,四个分别为:相对每个格子左上角的偏移量x和y,相对原始图片长和宽的比例w和h。因此offset=[[0,0],[1,1],...,[6,6]],的目的是让每个格子的偏移量x和y映射到原始图片的位置。比如第2行第1列的格子x=22,y=33。则2和1由offset表示,xy代表偏移量,就可以算出目标在原始图片中的位置。

@Yao-x
Copy link

Yao-x commented Jan 19, 2019

为什么 读数据 没用到xml文件

@i4yyds
Copy link
Author

i4yyds commented Jan 19, 2019

为什么 读数据 没用到xml文件

用到了 /utils/pascal_voc.py 中的load_pascal_annotation函数

@Benzzzxxx
Copy link

Benzzzxxx commented Jan 23, 2019

请问,如何训练自己的数据?数据集也用labelimage做成了VOC格式放入了相应的位置, 我从零开始训练时,出现问题
ValueError:Cannot feed value of shape (45,7,7,25) for tensor 'placeholder:0' ,which has shape '(?,7,7,9)'

我仔细检查了能够训练的VOC2007数据 feed_dict
images.shape={45,448,448,3}
labels.shape={45,7,7,25}
而换成我自己的数据训练时,shape也是一致的,这样来看数据接口是没有啥问题了,不知道问题出现在哪里呢?
根据源代码,yolo_net.py中
self.labels = tf.placeholder( tf.float32, [None, self.cell_size, self.cell_size, 5 + self.num_class])
我所使用的数据是四类,最后一维为9,而VOC2007数据类别为20类,故为25,应该是标签数据这块有误,还得好好看看。

pascal_voc.py文件中,
第一处
def get(self): images = np.zeros( (self.batch_size, self.image_size, self.image_size, 3)) labels = np.zeros( (self.batch_size, self.cell_size, self.cell_size, 25))
第二处
def load_pascal_annotation(self, index): imname = os.path.join(self.data_path, 'JPEGImages', index + '.jpg') im = cv2.imread(imname) h_ratio = 1.0 * self.image_size / im.shape[0] w_ratio = 1.0 * self.image_size / im.shape[1] # im = cv2.resize(im, [self.image_size, self.image_size]) label = np.zeros((self.cell_size, self.cell_size, 25))
这两处地方被固定地写为25,而我需要的是9,将其改为9,训练程序成功执行。

@Lijiatu321
Copy link

你好,我还是不是很理解你对offset的解释,能说的在详细一点么?谢谢

@zhuhui100
Copy link

请问,如何训练自己的数据?数据集也用labelimage做成了VOC格式放入了相应的位置, 我从零开始训练时,出现问题

ValueError:Cannot feed value of shape (45,7,7,25) for tensor 'placeholder:0' ,which has shape '(?,7,7,9)'

我仔细检查了能够训练的VOC2007数据 feed_dict

images.shape={45,448,448,3}
labels.shape={45,7,7,25}
而换成我自己的数据训练时,shape也是一致的,这样来看数据接口是没有啥问题了,不知道问题出现在哪里呢?
根据源代码,yolo_net.py中
self.labels = tf.placeholder( tf.float32, [None, self.cell_size, self.cell_size, 5 + self.num_class])
我所使用的数据是四类,最后一维为9,而VOC2007数据类别为20类,故为25,应该是标签数据这块有误,还得好好看看。
pascal_voc.py文件中,
第一处
def get(self): images = np.zeros( (self.batch_size, self.image_size, self.image_size, 3)) labels = np.zeros( (self.batch_size, self.cell_size, self.cell_size, 25))
第二处
def load_pascal_annotation(self, index): imname = os.path.join(self.data_path, 'JPEGImages', index + '.jpg') im = cv2.imread(imname) h_ratio = 1.0 * self.image_size / im.shape[0] w_ratio = 1.0 * self.image_size / im.shape[1] # im = cv2.resize(im, [self.image_size, self.image_size]) label = np.zeros((self.cell_size, self.cell_size, 25))
这两处地方被固定地写为25,而我需要的是9,将其改为9,训练程序成功执行。

那请问 你 有没有加载 原来的权重?

@Benzzzxxx
Copy link

请问,如何训练自己的数据?数据集也用labelimage做成了VOC格式放入了相应的位置, 我从零开始训练时,出现问题

ValueError:Cannot feed value of shape (45,7,7,25) for tensor 'placeholder:0' ,which has shape '(?,7,7,9)'

我仔细检查了能够训练的VOC2007数据 feed_dict

images.shape={45,448,448,3}
labels.shape={45,7,7,25}
而换成我自己的数据训练时,shape也是一致的,这样来看数据接口是没有啥问题了,不知道问题出现在哪里呢?
根据源代码,yolo_net.py中
self.labels = tf.placeholder( tf.float32, [None, self.cell_size, self.cell_size, 5 + self.num_class])
我所使用的数据是四类,最后一维为9,而VOC2007数据类别为20类,故为25,应该是标签数据这块有误,还得好好看看。
pascal_voc.py文件中,
第一处
def get(self): images = np.zeros( (self.batch_size, self.image_size, self.image_size, 3)) labels = np.zeros( (self.batch_size, self.cell_size, self.cell_size, 25))
第二处
def load_pascal_annotation(self, index): imname = os.path.join(self.data_path, 'JPEGImages', index + '.jpg') im = cv2.imread(imname) h_ratio = 1.0 * self.image_size / im.shape[0] w_ratio = 1.0 * self.image_size / im.shape[1] # im = cv2.resize(im, [self.image_size, self.image_size]) label = np.zeros((self.cell_size, self.cell_size, 25))
这两处地方被固定地写为25,而我需要的是9,将其改为9,训练程序成功执行。

那请问 你 有没有加载 原来的权重?
有,恢复模型时不要恢复输出层的权重就好,其他层权重就用原来的再进行训练。

@zhuhui100
Copy link

请问,如何训练自己的数据?数据集也用labelimage做成了VOC格式放入了相应的位置, 我从零开始训练时,出现问题

ValueError:Cannot feed value of shape (45,7,7,25) for tensor 'placeholder:0' ,which has shape '(?,7,7,9)'

我仔细检查了能够训练的VOC2007数据 feed_dict

images.shape={45,448,448,3}
labels.shape={45,7,7,25}
而换成我自己的数据训练时,shape也是一致的,这样来看数据接口是没有啥问题了,不知道问题出现在哪里呢?
根据源代码,yolo_net.py中
self.labels = tf.placeholder( tf.float32, [None, self.cell_size, self.cell_size, 5 + self.num_class])
我所使用的数据是四类,最后一维为9,而VOC2007数据类别为20类,故为25,应该是标签数据这块有误,还得好好看看。
pascal_voc.py文件中,
第一处
def get(self): images = np.zeros( (self.batch_size, self.image_size, self.image_size, 3)) labels = np.zeros( (self.batch_size, self.cell_size, self.cell_size, 25))
第二处
def load_pascal_annotation(self, index): imname = os.path.join(self.data_path, 'JPEGImages', index + '.jpg') im = cv2.imread(imname) h_ratio = 1.0 * self.image_size / im.shape[0] w_ratio = 1.0 * self.image_size / im.shape[1] # im = cv2.resize(im, [self.image_size, self.image_size]) label = np.zeros((self.cell_size, self.cell_size, 25))
这两处地方被固定地写为25,而我需要的是9,将其改为9,训练程序成功执行。

那请问 你 有没有加载 原来的权重?
有,恢复模型时不要恢复输出层的权重就好,其他层权重就用原来的再进行训练。

我也尝试这样加载,就最后一层的权重不加载。但是这样的损失值和不加载差距不大。因此我不是很确定我是否加载成功。还是这样加载,损失就是很大。下面是我对应的程序。不知道你的这部分程序如何写的。如果可以,方便发我一下吗?QQ:837006859 , 微信: zhuhui-zhuhui 。姓名:朱辉
variables_to_restore = tf.contrib.framework.get_variables_to_restore(
exclude=['yolo/fc_36', 'global_step'])
init_fn = tf.contrib.framework.assign_from_checkpoint_fn(self.weights_file,
variables_to_restore)
fc3_variables = tf.contrib.framework.get_variables('yolo/fc_36')
fc3_init = tf.variables_initializer(fc3_variables)
init_fn(self.sess)
self.sess.run(fc3_init)

@liujiahao11
Copy link

去他娘的英文!
我对代码中的loss层有4个疑问,目前已经解决3个。分享一些自己的观点,一起交流!

  1. 为什么使用 offset ?
  2. 为什么对 w和h 开根号 ?
  3. 为什么使用 offset_tran ?
  4. 四个loss的含义 ?

为什么开根号你认真的吗,读过论文吗?

@i4yyds
Copy link
Author

i4yyds commented Jun 2, 2020

去他娘的英文!
我对代码中的loss层有4个疑问,目前已经解决3个。分享一些自己的观点,一起交流!

  1. 为什么使用 offset ?
  2. 为什么对 w和h 开根号 ?
  3. 为什么使用 offset_tran ?
  4. 四个loss的含义 ?

为什么开根号你认真的吗,读过论文吗?
@liujiahao11 注意言辞,不要太激进
https://arxiv.org/pdf/1506.02640.pdf
第四面公式(3)

@QingyangZhang
Copy link

无论是否加载YOLO-small.ckpt,训练出来的模型都无法检测到任何物体。
No matter if I use the pretrained model Yolo-small.ckpt, no thing can be detected with the model I trained by myself.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

7 participants