profile
viewpoint
Tobias Würfl wuerflts Siemens Healthineers

tristandeleu/pytorch-meta 1503

A collection of extensions and data-loaders for few-shot learning & meta-learning in PyTorch

tristandeleu/pytorch-maml 174

An Implementation of Model-Agnostic Meta-Learning in PyTorch with Torchmeta

kbreininger/tutorial-dlframework 30

Step-by-step tutorial to improve understanding of common operators in Deep Learning frameworks.

wuerflts/Deep-Learning-Computed-Tomography 2

Caffe implementation of the novel layers and weight fillters, for our paper "Deep Learning Computed Tomography".

wuerflts/AdvancedCPP 0

Template Metaprogramming Examples

wuerflts/caffe 0

Caffe: a fast open framework for deep learning.

wuerflts/CONRAD 0

CONRAD Repository

wuerflts/CV 0

Exercises of the Computervision Course

pull request commentonnx/onnx

Add Signal Operator definitions

Besides audio processing the FFT is an integral component of MRI reconstruction. See this open challenge by NYU / Meta: https://fastmri.org/ One important caveat is that the N-dimensional FFT is needed for those applications which can be implemented by successive 1D FFTs. However, it would make for a cleaner interface in ONNX to simply define only one Operator which is N-dimensional by default since tensorflows and pytorchs special 1D, 2D, 3D and ND cases can be represented by that. This would provide a more concise ONNX graph.

smk2007

comment created time in 19 days

Pull request review commentonnx/onnx

Add Signal Operator definitions

 ONNX_OPERATOR_SET_SCHEMA(             propagateShapeFromInputToOutput(ctx, 0, 1);           }         }));+++template <typename T>+static T get_scalar_value_from_tensor(const ONNX_NAMESPACE::TensorProto* t) {+  if (t == nullptr) {+    return T{};+  }++  auto data_type = t->data_type();+  switch (data_type) {+    case ONNX_NAMESPACE::TensorProto::FLOAT:+      return static_cast<T>(ONNX_NAMESPACE::ParseData<float>(t).at(0));+    case ONNX_NAMESPACE::TensorProto::DOUBLE:+      return static_cast<T>(ONNX_NAMESPACE::ParseData<double>(t).at(0));+    case ONNX_NAMESPACE::TensorProto::INT32:+      return static_cast<T>(ONNX_NAMESPACE::ParseData<int32_t>(t).at(0));+    case ONNX_NAMESPACE::TensorProto::INT64:+      return static_cast<T>(ONNX_NAMESPACE::ParseData<int64_t>(t).at(0));+    default:+      fail_shape_inference("Unsupported input data type of ", data_type);+  }+}++static const char* DFT_ver13_doc =+    R"DOC(Computes the discrete Fourier transform of input.)DOC";++    ONNX_OPERATOR_SET_SCHEMA(DFT,+        13,+        OpSchema()+            .SetDoc(DFT_ver13_doc)+            .Attr(+                "onesided",+                "If onesided is 1, only values for ω in [0, 1, 2, ..., floor(n_fft/2) + 1] are returned because "+                "the real-to-complex Fourier transform satisfies the conjugate symmetry, i.e., X[m, ω] = X[m,ω]=X[m,n_fft−ω]*. "+                "Note if the input or window tensors are complex, then onesided output is not possible. "+                "Enabling onesided with real inputs performs a Real-valued fast Fourier transform (RFFT)."+                "When invoked with real or complex valued input, the default value is 0. "+                "Values can be 0 or 1.",+                AttributeProto::INT,+                static_cast<int64_t>(0))+            .Input(+                0,+                "input",+                "Input tensor representing a real or complex valued signal. "+                "For real input, the following shape is expected: [batch_size][n_fft]. "+                "For complex input, the following shape is expected: [batch_size][n_fft][2], where " +                "[batch_size][n_fft][0] represents the real component and [batch_size][n_fft][1] represents the imaginary component of the signal.",+                "T",+                OpSchema::Single,+                true,+                1,+                OpSchema::NonDifferentiable)+            .Output(+                0,+                "output",+                "The discrete Fourier transform of input. "+                "If onesided is 1, the output has the shape: [batch_size][floor(n_fft/2)+1][2]. " +                "If onesided is 0, the output has the shape: [batch_size][n_fft][2]"+                "For all types of input, the last dimension of the output represents the components of a complex number.",+                "T")+            .TypeConstraint(+                "T",+                {"tensor(float16)", "tensor(float)", "tensor(double)"},+                "Constrain input and output types to float tensors.")+            .TypeAndShapeInferenceFunction([](ONNX_NAMESPACE::InferenceContext& ctx) {+                propagateElemTypeFromInputToOutput(ctx, 0, 0);+                // To support multidimensional DFT the signal_ndim may != 1

Please extend it to multi-dimensional now before adding it to ONNX. Otherwise image processing applications like magnetic resonance image reconstruction (https://fastmri.org/) will have to resort to weird workarounds which will break in upates.

smk2007

comment created time in 19 days

PullRequestReviewEvent

PR opened ismrmrd/ismrmrd

Added automatic creation of schema documentation.

This is my new attempt of adding documentation for the MRD header. The documentation is now added as annotations to the schema itself. I developed a XSLT to create a SVG out of that that depicts the content of the header in a simpler way than reading the schema.

What is missing from this pull request is some automation to call the XSLT whenever a new commit is performed. Additionally the md file which gets rendered by github is not yet linked anywhere from this repo.

+1243 -86

0 comment

4 changed files

pr created time in a month

push eventwuerflts/ismrmrd

wuerflts

commit sha 2cd17d239e35a32c0b93a4dbd1ac8303f7a06291

Added automatic creation of schema documentation.

view details

push time in a month

fork wuerflts/ismrmrd

ISMRM Raw Data Format

fork in a month

more