DayBreak-u / chineseocr_lite

超轻量级中文ocr,支持竖排文字识别, 支持ncnn、mnn、tnn推理 ( dbnet(1.8M) + crnn(2.5M) + anglenet(378KB)) 总模型仅4.7M
GNU General Public License v2.0
11.8k stars 2.26k forks source link

InnerProduct速度问题 #271

Open superdu12138 opened 4 years ago

superdu12138 commented 4 years ago

模型参数如下: 7767517 35 35 Input input 0 1 input Convolution 45 1 1 input 45 0=64 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=1728 ReLU 46 1 1 45 46 Pooling 47 1 1 46 47 0=0 1=2 11=2 2=2 12=2 3=0 13=0 14=0 15=0 5=1 Convolution 48 1 1 47 48 0=128 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=73728 ReLU 49 1 1 48 49 Pooling 50 1 1 49 50 0=0 1=2 11=2 2=2 12=2 3=0 13=0 14=0 15=0 5=1 Convolution 51 1 1 50 51 0=256 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=294912 ReLU 52 1 1 51 52 Convolution 53 1 1 52 53 0=256 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=589824 ReLU 54 1 1 53 54 Pooling 55 1 1 54 55 0=0 1=2 11=1 2=1 12=2 3=0 13=0 14=0 15=0 5=1 Convolution 56 1 1 55 56 0=512 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=1179648 BatchNorm 57 1 1 56 57 0=512 ReLU 58 1 1 57 58 Convolution 59 1 1 58 59 0=512 1=3 11=3 2=1 12=1 3=1 13=1 4=1 14=1 15=1 16=1 5=1 6=2359296 BatchNorm 60 1 1 59 60 0=512 ReLU 61 1 1 60 61 Pooling 62 1 1 61 62 0=0 1=2 11=1 2=1 12=2 3=0 13=0 14=0 15=0 5=1 Convolution 63 1 1 62 63 0=512 1=2 11=2 2=1 12=1 3=1 13=1 4=0 14=0 15=0 16=0 5=1 6=1048576 ReLU 64 1 1 63 64 Reshape 65 1 1 64 65 0=-1 1=512 2=-233 Permute 66 1 1 65 66 0=1 LSTM 193 1 1 66 193 0=256 1=1048576 2=2 Permute 196 1 1 193 196 0=2 Reshape 198 1 1 196 198 0=-1 1=0 Reshape 212 1 1 198 212 0=512 InnerProduct 213 1 1 212 213 0=512 1=1 2=262144 Reshape 219 1 1 213 219 0=-1 1=1 LSTM 346 1 1 219 346 0=256 1=1048576 2=2 Permute 349 1 1 346 349 0=2 Reshape 351 1 1 349 351 0=-1 1=0 Reshape 365 1 1 351 365 0=512 InnerProduct 366 1 1 365 366 0=8691 1=1 2=4449792 Reshape output 1 1 366 output 0=-1 1=1

速度问题:倒数第二层 花了总时间的69% 这正常吗 单行图片 总时间270ms 倒数第二层花了190ms layer代码如下: ncnn::Mat blob366(8691, blob346.h); for (int i = 0; i<blob346.h; i++) { ncnn::Extractor crnn_ex_2 = crnn_net->create_extractor(); crnn_ex_2.set_num_threads(num_thread); crnn_ex_2.set_light_mode(false); ncnn::Mat blob243_i = blob346.row_range(i, 1);

    crnn_ex_2.input("365", blob243_i);

    ncnn::Mat blob366_i;
    crnn_ex_2.extract("366", blob366_i);

    memcpy(blob366.row(i), blob366_i, 8691 * sizeof(float));
}
UPmao commented 3 years ago

@superdu12138 大佬,我也遇到同样的问题了,请问您解决了?