目录:
1. 图片预处理
- 2. RPN网络预测
- 3. RPN to ROIs
- 4. Classifier 网络预测
- 5. Classifier网络输出对 ROIs过滤与修正
- 6. NMS (非最大值抑制)
- 7. 坐标转换为原始图片维度
一: 输入输出
输入: 图像,shape为 [1080, 1440, 3]
输出: 图像,shape为 [1, 600, 800, 3]
二: 流程
- 图片BGR 格式转换为 RGB 格式。
- 图片缩放。
- 图片均值中值化。
三: code by code
使用opencv 读取图片格式为RGB, shape 为 (height = 1080, weight = 1440, channels = 3)
shape = [1080, 1440, 3]
Mat rgb_mat = ImageProcess.imreadOfRGB(fileName);
将图片的宽高最小值缩放到600.
resize 的差值算法使用 INTER_CUBIC
shape = [600, 800, 3]
Mat resized_rgb_mat = ImageProcess.faster_rcnn_format_size(rgb_mat);
将opencv 的Mat 数据转换为 Nd4j的 INDArray, 维度一致.
shape = [600, 800, 3]
INDArray ind = TypeConvertor.matToNDArray(resized_rgb_mat);
图片均值中值化.
RGB 分别减去 [103.939, 116.779, 123.68]
shape = [600, 800, 3]
INDArray mean_center_ind = ImageProcess.imageOfMeanCenter(ind);
水平扩展维度
将 shape = [600, 800, 3] 转换为 [1, 600, 800, 3]
long[] expandShape = new long[]{1, mean_center_ind.shape()[0], mean_center_ind.shape()[1], mean_center_ind.shape()[2]};
INDArray expand_ind = mean_center_ind.reshape(expandShape);