更多文章参考:自己动手实现darknet预测分类动态库
预测112张图片,调用预测接口总时间为:25658毫秒(约为26秒)
各个过程耗时分析:
1)分析cfg网络文件:parse_network_cfg: 7789 millis_seconds
2)加载权重文件:load_weights: 45 millis_seconds
3)计算batchnorm:fuse_conv_batchnorm: 324 millis_seconds
4)计算网络权重:calculate_binary_weights: 0 millis_seconds
112张图片没16张图片加载和预测一次,加载和预测时间分别为:
第一批:
pthread_join: 2475 millis_seconds
network_predict_data: 268 millis_seconds
第二批:
pthread_join: 2199 millis_seconds
network_predict_data: 153 millis_seconds
第三批:
pthread_join: 2323 millis_seconds
network_predict_data: 156 millis_seconds
第四批:
pthread_join: 2320 millis_seconds
network_predict_data: 154 millis_seconds
第五批:
pthread_join: 2310 millis_seconds
network_predict_data: 152 millis_seconds
第六批:
pthread_join: 2323 millis_seconds
network_predict_data: 155 millis_seconds
第七批:
pthread_join: 2312 millis_seconds
network_predict_data: 157 millis_seconds
时间分析及性能提升方案说明:
1.上面的时间都是三通道时间,因为单通道数据调用net_predict_data时会报错,所以现在还不能测单通道时间
2.1)-4)为固定时间(约8秒)执行一次,与图片数据没有关系
3.整个预测时间,加载和预测图片占总时间的70%,而加载图片(pthread_in)占每批图片加载预测总时间的90%。
4.pthread_in耗时长,主要因为转换格式是一张一张转换的,没有像network_predict_data那样使用GPU加速,network_predict_data加速前耗时约是现在的28倍,所以如果加载图片也使用GPU加速时间可以减少到82秒,七批数据可以减少约15秒,最终时间减少到11秒。
5.三通道数据改成单通道数据,因为数据量减少三分之二,如果按理论加载预测时间减少三分之二的话,加载预测时间(80+157)毫秒可以减少到80毫秒,七批数据可以减少1秒,最终时间减少到10秒。
6.分析cfg网络文件:parse_network_cfg耗时比较长约8秒,目前还没有分析内部代码,希望能够可以加速。