Jetpack4.4でCUDNNが使えるOpenCVをビルド

#はじめに
Jetpack4.4DPで以前CUDNNが使えるOpenCVを[ビルド](https://qiita.com/sowd0726/items/57a4e867d358283bdf20)しました。7月に入ってNVIDIAがJetpack4.4をDevelopperPreviewからReleaseにアップデートしたら、CUDNNがイネーブルなOpenCVがビルドできなくなりました。

#現象
CUDNN_CONVOLUTION_FWD_PREFER_FASTESTが未定義だといわれビルドが止まります。

#原因
Jetpack4.4からCUDNNのバージョンが8.0に上がっています。
以前からバージョン番号が取得できないなどありましたが、正式リリースになったところcudnnFindConvolutionForwardAlgorithm()
がAPIから削除されました。
[Add CuDNN 8 release support #17496](https://github.com/opencv/opencv/issues/17496)
これにともなって、Jetpack4.4でCUDNNをイネーブルにするとコンパイル時にエラーとなります。

#対応
修正は、
[cuda4dnn(build): add basic support for cuDNN 8 #17685](https://github.com/opencv/opencv/issues/17685)
として既にmaster ブランチにマージされていました。
masterブランチからビルドするとなにが入ってるかわからないので、
とりあえず
git clone --branch master https://github.com/opencv/opencv.git
して
git reset --hard 62a63021c7cbe44ff429cb5a6f14fbb1485a6c39
して上記のCommitまで戻した後
以下の２つのファイルを
modules/dnn/src/cuda4dnn/csl/cudnn/convolution.hpp
modules/dnn/src/cuda4dnn/csl/cudnn/transpose_convolution.hpp
git clone --branch 4.3.0 https://github.com/opencv/opencv.git
したとこに上書きコピーしてビルドしました。
パッチあてればいいんですが、Dockerfileにするのに面倒くさかったので。

#成果物
For XavierNX

```Dockerfile:Dockerfile
FROM nvcr.io/nvidia/l4t-base:r32.4.3
RUN mkdir /root/opencv430
RUN cd /root
RUN echo "** Install requirement"
RUN apt-get update
RUN apt-get -y upgrade
RUN apt install sudo
RUN sudo apt-get install -y zip
RUN sudo apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
RUN sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
RUN sudo apt-get install -y python3.6-dev python3-numpy
RUN sudo apt-get install -y libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
RUN sudo apt-get install -y libv4l-dev v4l-utils qv4l2 v4l2ucp
RUN sudo apt-get install -y curl
RUN sudo apt-get update
RUN echo "** Download opencv-4.3.0"
RUN cd /root/opencv430 && \
    git clone --branch master https://github.com/opencv/opencv.git && \
    cd opencv && \
    git reset --hard 62a63021c7cbe44ff429cb5a6f14fbb1485a6c39 && \
    cd .. && \
    mv opencv opencv_master &&\
    git clone --depth 1 --branch 4.3.0 https://github.com/opencv/opencv.git && \
    cp -p -f opencv_master/modules/dnn/src/cuda4dnn/csl/cudnn/transpose_convolution.hpp opencv/modules/dnn/src/cuda4dnn/csl/cudnn/transpose_convolution.hpp && \
    cp -p -f opencv_master/modules/dnn/src/cuda4dnn/csl/cudnn/convolution.hpp opencv/modules/dnn/src/cuda4dnn/csl/cudnn/convolution.hpp && \
    git clone --depth 1 --branch 4.3.0 https://github.com/opencv/opencv_contrib.git
RUN cd /root/opencv430 && \
 cd opencv && \
# sed -i 's/{CUDNN_INCLUDE_DIR}\/cudnn.h/{CUDNN_INCLUDE_DIR}\/cudnn_version.h/g' cmake/FindCUDNN.cmake && \
 mkdir release
RUN cd /root/opencv430/opencv/release && \
 cmake -D CUDNN_VERSION='8.0' -D WITH_CUDA=ON -D CUDA_FAST_MATH=ON -D WITH_CUBLAS=ON -D WITH_CUDNN=ON -D CUDA_ARCH_BIN=7.2 -D CUDA_ARCH_PTX=7.2 -D CUDA_ARCH_PTX="" -D OPENCV_DNN_CUDA=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D CUDNN_INCLUDE_DIR=/usr/include -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python3=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. ; exit 0
RUN bash
RUN cd /root/opencv430/opencv/release && \
 make -j4 && \
 sudo make install && \
 echo 'export PYTHONPATH=$PYTHONPATH:'$PWD'/python_loader/' >> ~/.bashrc
RUN echo "** Install opencv-4.3 successfully" && \
 echo "** Bye :)"
CMD ["/bin/bash"]

```

For JetsonNano

```Dockerfile:Dockerfile
<pre>FROM nvcr.io/nvidia/l4t-base:r32.4.3
RUN mkdir /root/opencv430
RUN cd /root
RUN echo &quot;** Install requirement&quot;
RUN apt-get update
RUN apt-get -y upgrade
RUN apt-get install sudo
RUN sudo apt-get install -y zip
RUN sudo apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
RUN sudo apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
RUN sudo apt-get install -y python3.6-dev python3-numpy
RUN sudo apt-get install -y libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
RUN sudo apt-get install -y libv4l-dev v4l-utils qv4l2 v4l2ucp
RUN sudo apt-get install -y curl
RUN sudo apt-get update
RUN echo &quot;** Download opencv-4.3.0&quot;
RUN cd /root/opencv430 &amp;&amp; \
    git clone --branch master https://github.com/opencv/opencv.git &amp;&amp; \
    cd opencv &amp;&amp; \
    git reset --hard 62a63021c7cbe44ff429cb5a6f14fbb1485a6c39 &amp;&amp; \
    cd .. &amp;&amp; \
    mv opencv opencv_master &amp;&amp;\
    git clone --depth 1 --branch 4.3.0 https://github.com/opencv/opencv.git &amp;&amp; \
    cp -p -f opencv_master/modules/dnn/src/cuda4dnn/csl/cudnn/transpose_convolution.hpp opencv/modules/dnn/src/cuda4dnn/csl/cudnn/transpose_convolution.hpp &amp;&amp; \
    cp -p -f opencv_master/modules/dnn/src/cuda4dnn/csl/cudnn/convolution.hpp opencv/modules/dnn/src/cuda4dnn/csl/cudnn/convolution.hpp &amp;&amp; \
    git clone --depth 1 --branch 4.3.0 https://github.com/opencv/opencv_contrib.git
RUN cd /root/opencv430 &amp;&amp; \
 cd opencv &amp;&amp; \
 echo &quot;** Apply patch&quot; &amp;&amp; \
# sed -i &apos;s/{CUDNN_INCLUDE_DIR}\/cudnn.h/{CUDNN_INCLUDE_DIR}\/cudnn_version.h/g&apos; cmake/FindCUDNN.cmake &amp;&amp; \
 mkdir release
RUN cd /root/opencv430/opencv/release &amp;&amp; \
 cmake -D CUDNN_VERSION=&apos;8.0&apos; -D WITH_CUDA=ON -D CUDA_FAST_MATH=ON -D WITH_CUBLAS=ON -D WITH_CUDNN=ON -D CUDA_ARCH_BIN=5.3 -D CUDA_ARCH_PTX=5.3 -D CUDA_ARCH_PTX=&quot;&quot; -D OPENCV_DNN_CUDA=ON -D OPENCV_GENERATE_PKGCONFIG=ON -D CUDNN_INCLUDE_DIR=/usr/include -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules -D WITH_GSTREAMER=ON -D WITH_LIBV4L=ON -D BUILD_opencv_python3=ON -D BUILD_TESTS=OFF -D BUILD_PERF_TESTS=OFF -D BUILD_EXAMPLES=OFF -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local .. ; exit 0
RUN bash
RUN cd /root/opencv430/opencv/release &amp;&amp; \
 make -j4 &amp;&amp; \
 sudo make install &amp;&amp; \
 echo &apos;export PYTHONPATH=$PYTHONPATH:&apos;$PWD&apos;/python_loader/&apos; &gt;&gt; ~/.bashrc
RUN echo &quot;** Install opencv-4.3 successfully&quot; &amp;&amp; \
 echo &quot;** Bye :)&quot;
CMD [&quot;/bin/bash&quot;]

```