eric612 / MobileNet-YOLO

A caffe implementation of MobileNet-YOLO detection network
Other
865 stars 442 forks source link

请教mobilenetv3_voc网络 #161

Open Dawson-huang opened 5 years ago

Dawson-huang commented 5 years ago

博主,您好,非常感谢您很有意义的工作! 我想请教一下,对于您的mobilenetv3_voc网络中您采用mobilenetv3作为yolov3的backbone网络,从网络结构上看,您是对mobilenetv3网络结构进行了裁剪去掉了部分网络层吧,并没有用原始的mobilenetv3,同时yoloV3你也只是采用两种特征图大小进行输出,去掉了54×52的输出特征图。麻烦博主帮我解答一下,谢谢!

eric612 commented 5 years ago
  1. 我的mobilenetv3 是從這個專案轉過來的,轉完後的model放在,有部分修改但應該沒有裁減,但因為pytorch 的模型是非官方的,或許會跟paper有些出入,比如說後面的fc ,但基本不影響backbone。

  2. 一般我在做小型網路的偵測時,不太用到1/8 scale,雖然可以增加不少小物件偵測率,但upsample會耗費太多計算,但如果不用upsample做特徵融合,1/8 scale的layer太淺層反而對精準度沒有幫助

Dawson-huang commented 4 years ago

博主,您好,如果train.prototxt采用的是416416的分辨率计算出来的anchors,那么deploy.prototxt采用同样的anchors在实际检测352352的分辨率时不会影响检测效果吗?

eric612 commented 4 years ago

當然會影響檢測效果,但當初作者用意是在於 multi-scale的訓練,可以在inferernce時根據狀況調整輸入解析度,調控精準度與速度,有這方面的疑問,你可以用416訓練一次,再用352訓練一次測試mAP,就知道差異,一般voc2007 可能會差到1%左右

Dawson-huang commented 4 years ago

1, 那如果训练的时候采用416的anchors,推理的时候采用352的anchors,这样是否会更好?

2, 请问mobilenetv3-yolov3网络训练的时候loss2会产生波动,时而为2或3或4,时而loss2却跳到11或15,但是验证集的evaluation 值会慢慢提升到0.30以上,其中我采用的是coco数据集训练,这样算正常吗

eric612 commented 4 years ago
  1. Training 跟 test的anchor 要一致

  2. 試者把會random的參數範圍調小,如jitter , expand ratio ... 等 。另外也可以把batch size加大。

Dawson-huang commented 4 years ago

参数调节我根据您的wiki一篇调节参数的文章尝试过,我把expand-ratio调节为1.5或1.2,jitter -ratio调节为0.5或0.2,同样是loss2波动,我增大total batch size为64以及调节or multi为0.1也是于事无补。

  1. 我的mobilenet v3网络不是采用您的,而是其他github用caffe实现的结构,所以我没有采用预训练

  2. 我的数据集是在coco当中提取出来的几类目标,数据应该没错,或许我应该检查一下

eric612 commented 4 years ago

沒有採用預訓練的話,建議是先訓練imagenet 1000類網路,訓練完之後再訓練coco,沒有預訓練即使能訓練得起來,mAP也會很低

Dawson-huang commented 4 years ago

Ok,我先尝试预训练,看看是否能解决不收敛的问题

Dawson-huang commented 4 years ago

博主,请问您是怎么把pytorch版本的mobilenetV3转换成功的,我采用PytorchToCaffe来转换您使用的专案,但是一致不成功,报错卡在这一步:

140601658362400:add_blob1 was added to blobs
Add blob       add_blob1       : torch.Size([1, 16, 112, 112])
140601658363048:batch_norm_blob1 getting
Traceback (most recent call last):
  File "example/mobilenetV3_pytorch_to_caffe.py", line 21, in <module>
    pytorch_to_caffe.trans_net(net, input, name)
  File "/home/sonny/PytorchToCaffe/pytorch_to_caffe.py", line 658, in trans_net
    out = net.forward(input_var)
  File "mobilenetv3.pytorch/mobilenetv3.py", line 169, in forward
    x = self.features(x)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 493, in __call__
    result = self.forward(*input, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/container.py", line 92, in forward
    input = module(input)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 493, in __call__
    result = self.forward(*input, **kwargs)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/container.py", line 92, in forward
    input = module(input)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 493, in __call__
    result = self.forward(*input, **kwargs)
  File "mobilenetv3.pytorch/mobilenetv3.py", line 50, in forward
    return x * self.sigmoid(x)
  File "/usr/local/lib/python3.6/dist-packages/torch/nn/modules/module.py", line 493, in __call__
    result = self.forward(*input, **kwargs)
  File "mobilenetv3.pytorch/mobilenetv3.py", line 41, in forward
    return self.relu(x + 3) / 6
  File "/home/sonny/PytorchToCaffe/pytorch_to_caffe.py", line 486, in _add
    bottom=[log.blobs(input),log.blobs(args[0])], top=top_blobs)
  File "/home/sonny/PytorchToCaffe/pytorch_to_caffe.py", line 88, in blobs
    print("{}:{} getting".format(var, self._blobs[var]))
  File "/home/sonny/PytorchToCaffe/pytorch_to_caffe.py", line 31, in __getitem__
    return self.data[key]
KeyError: 10914560

您是怎么转换成功的,可以告诉一下吗,谢谢

Serissa commented 4 years ago
  1. Training 跟 test的anchor 要一致
  2. 試者把會random的參數範圍調小,如jitter , expand ratio ... 等 。另外也可以把batch size加大。

你好!我现在想训练320X320,请问需要修改哪些地方?

zpge commented 4 years ago

借楼问个问题, https://github.com/eric612/MobileNet-YOLO/blob/master/models/mobilenetv2_voc/yolo_lite/train.prototxt 这个里面,有一段是这样的

10,14, 23,27, 37,58, 81,82, 135,169, 344,319

biases: 20
biases: 37
biases: 49
biases: 94
biases: 73
biases: 201
biases: 143
biases: 265
biases: 153
biases: 121
biases: 280
biases: 279

这个代表在416*416图像上kmeans得到的6个anchor大小吗?为什么下面bias的数值跟上面#后面的不一样?