Faster RCNN 推理 从头写 Java (一) 图片预处理

目录:

  • 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);

你可能感兴趣的:(Faster RCNN 推理 从头写 Java (一) 图片预处理)