Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

OpenCV inference #332

Merged

Conversation

AlibekovMurad5202
Copy link
Contributor

No description provided.

self._converting = converting

def _transform(self, image):
return cv2.dnn.blobFromImage(image, **self._converting)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

надо импорт cv2 добавить, а то

name 'cv2' is not defined

выполняется один проход по сети.
- `--raw_output` - работа скрипта без логов. По умолчанию не установлен.
- `-in / --input_name` - название входного узла модели. По умолчанию установлено значение `input_`.
- `--scalefactor` - коэффициент масштабирования изображения. По умолчанию равен `1.0`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

почему не input_scale, для единообразия с другими фреймворками?

- `--raw_output` - работа скрипта без логов. По умолчанию не установлен.
- `-in / --input_name` - название входного узла модели. По умолчанию установлено значение `input_`.
- `--scalefactor` - коэффициент масштабирования изображения. По умолчанию равен `1.0`.
- `--size` - параметры размера входного изображения.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

тут аналогично, везде для этого есть input shape

@valentina-kustikova
Copy link
Contributor

@AlibekovMurad5202, поправьте, пожалуйста, замечания + надо влить мастер, чтобы исправить проблему со стилем кодирования.

@@ -249,3 +250,4 @@ pip install openvino_dev[mxnet,caffe,caffe2,onnx,pytorch,tensorflow2]==<your ver
[tensorflow-lite]: https://www.tensorflow.org/lite
[onnx-runtime]: https://onnxruntime.ai
[mxnet]: https://mxnet.apache.org
[opencv]: https://opencv.org/
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Слэш в конце ссылки надо удалить.

@@ -5,3 +5,4 @@ class KnownFrameworks:
onnx_runtime = 'ONNX Runtime'
tensorflow_lite = 'TensorFlowLite'
mxnet = 'MXNet'
opencv = 'OpenCV'
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Предлагаю назвать как-то OpenCV (Python API), потому что имеет смысл различать инференс средствами C++ и Python, т.к. поддерживаются оба интерфейса.

def create_process(test, executor, log):
return OpenCVProcess(test, executor, log)

def get_performance_metrics(self):
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Реализация этого метода дублируется во всех классах-наследниках ProcessHandler, кроме OnnxRuntimeProcess. Возможно, имеет смысл пробросить эту общую реализацию в базовый класс, а в OnnxRuntimeProcess переопределить. Это имеет смысл сделать в отдельной таске, не здесь.

@maslovaz, что думаете?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

я за, в отдельной таске

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Создала таску #353

common_params = OpenCVProcess._add_optional_argument_to_cmd_line(common_params, '--backend', backend)

input_scale = self._test.dep_parameters.input_scale
common_params = self._add_optional_argument_to_cmd_line(common_params, '--input_scale', input_scale)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Вызов статического метода в строке 38 делается через имя класса OpenCVProcess._add_optional_argument_to_cmd_line, а в строке 41, 44 и т.д. через self. Надо это сделать единообразно.

@maslovaz, есть ли какие-то рекомендация в плане стиля кодирования в подобных ситуациях?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

по рекомендациям - не нашла, но думаю, предпочтительнее self

<Path></Path>
</Dataset>
<FrameworkIndependent>
<InferenceFramework>OpenCV</InferenceFramework>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

К вопросу о том, что у нас будет поддержка двух видов программных интерфейсов C++ и Python. Может OpenCV (Python API)?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

давайте дообсудим тут #343 (comment)

log.info('Result for image {0}'.format(batch + 1))
for id_ in top_ind:
det_label = labels_map[id_] if labels_map else '#{0}'.format(id_)
log.info('{:.7f} {}'.format(probs[id_], det_label)) # noqa: P101
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Аналогичная функция реализована в IOAdapter для задачи классификации. Для MXNet я удалила такую функцию, добавила функцию конвертации результата в формат, который принимает IOAdapter, там обрабатывается словарь <ключ>: <значение>, где <ключ> - это название выхода, <значение> - вектор (для задачи классификации). Надо сделать по аналогии.

src/inference/inference_opencv.py Show resolved Hide resolved
set_device_to_infer(net, args.device)
log.info('The device has been assigned: {0}'.format(args.device))

log.info('Prepare input data')
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Preparing

output_names = args.output_names[0] if args.output_names else '_output'
io.process_output({output_names: np.array(result).reshape(args.batch_size, -1)}, log)
else:
print_topK_preds(np.array(result).reshape(args.batch_size, -1), args.number_top, log)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Уйдет этот вызов, если сделаете конвертацию выхода в словарь.

else:
raw_result_output(average_time, fps, latency)
except Exception as ex:
print('ERROR! : {0}'.format(str(ex)))
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Здесь необходимо сделать печать трассы по аналогии с реализацией инференса для MXNet.

@valentina-kustikova
Copy link
Contributor

@AlibekovMurad5202, необходимо влить мастер-ветку в текущую реализацию + нужен smoke-тест.

@@ -435,6 +435,70 @@ python3 inference_tensorflowlite.py \
-i <path_to_image>/<image_name>
```

## Вывод глубоких моделей с использованием OpenCV
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OpenCV (Python API)

- `--crop` - флаг, указывающий на то, будет ли входное изображение обрезано после изменения размера.
По умолчанию `False`.
- `--layout` - требуемый формат преобразованмя входного тензора. По умолчанию `None`.
Рекомендуется использовать `NWCH` для TensorFlow-моделей сконвертированных в IR (OpenVINO).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Запятая после TensorFlow-модедей

@AlibekovMurad5202 AlibekovMurad5202 marked this pull request as ready for review March 30, 2023 09:46
@valentina-kustikova valentina-kustikova merged commit 3572f00 into itlab-vision:master Mar 31, 2023
@AlibekovMurad5202 AlibekovMurad5202 deleted the opencv_inference branch April 14, 2023 15:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants