Kria KV260 Vision AI 스타터 키트 시작하기에서는 AMD Xilinx의 Kria KV260 Vision AI 스타터 키트를 개봉하고 이것저것 시도해 보았습니다. 이 보드는 우분투의 전체 배포판을 실행할 수 있을 만큼 강력한 FPGA와 ARM 프로세서를 제공합니다. 이 글에서는 라즈베리 파이 카메라를 사용하여 SmartCam 애플리케이션을 구축하고 실행할 것입니다. 이 애플리케이션은 실시간으로 얼굴을 감지할 수 있으며, 그 결과를 컴퓨터 모니터에서 확인할 수 있습니다.
이 튜토리얼은 AMD Xilinx에서 제작한 원본 튜토리얼을 따릅니다. 이 튜토리얼의 상당 부분이 그들의 것과 매우 유사하거나 동일함을 알 수 있습니다. 이 튜토리얼을 처음 접했을 때, 저는 압도당하는 기분이었습니다. FPGA 설계에 관한 꽤 괜찮은 배경 지식이 있지만, 그들의 튜토리얼을 일일이 따라가는 것은 때때로 도전적이고 다소 위협적일 수 있습니다. 저는 좀 더 직관적이고 따라하기 쉬운 것을 찾고 있었습니다. 다른 사람들이 다시 쓴 튜토리얼을 꼼꼼히 살펴본 후, 저는 그 결과에 전혀 만족하지 못했습니다; 그래서 제가 직접 작성하기로 결정했습니다.
모든 자세한 내용을 원하신다면, 원본 튜토리얼을 검토하는 것이 좋습니다. 몇몇 단계들이 명확하지 않을 수 있지만, 이 튜토리얼에서 그 단계들을 통과하거나 (또는 심지어 우회하려고) 시도합니다. 가장 중요한 것은, 이 글을 쓰는 시점에서, 샘플 SmartCam 애플리케이션이 최신 펌웨어와 작동하지 않는 것처럼 보였습니다. 제가 포크한 저장소에서는, 데모를 문제없이 실행할 수 있도록 자동화된 스크립트(심지어 필요한 최종 플래시 파일까지)를 만들었습니다. 이 튜토리얼을 가지고 있으면, 가능한 한 빨리 하드웨어 타겟에서 AI로 뛰어들 수 있기를 바라며, 데모를 성공적으로 실행한 후 제가 경험한 그 "우와" 순간을 경험하시기를 바랍니다.
물론, AMD Xilinx의 Kria KV260 Vision Starter Kit이 필요할 것입니다. 보드를 설정해야 하며, 이는 제 이전 튜토리얼인 Kria KV260 Vision AI Starter Kit 시작하기를 따라 하면 됩니다. 또한 Raspberry Pi Camera Module V2가 필요합니다. V2 부분이 매우 중요합니다. 저는 저렴한 V1 버전의 카메라와 다른 모조 카메라로 데모를 실행하려고 시도했지만 실패했으며(이 데모와 호환되지 않는다는 것을 증명할 수 있습니다), 카메라의 리본 케이블을 보드의 J9 포트에 연결해야 합니다. 마지막으로, KV260 키트에 연결할 HDMI 지원 모니터(또는 TV)와 당연히 HDMI 케이블이 필요합니다.
데모를 시작하기 전에 Docker와 SmartCam 예제를 귀하의 Kria KV260 장치에 설치해야 합니다(비록 SmartCam 애플리케이션을 사용하지 않을 예정이지만). 또한 Xilinx Vitis (전체 설치) 버전 2022.1이 필요합니다. Xilinx Vitis의 버전 번호가 매우 중요하다는 점을 유의하세요. 이 튜토리얼은 특정 버전을 위해 구축되었습니다.
Convenience Script 방법을 사용하여 Docker를 설치할 수 있습니다. 그렇게 하려면 터미널을 열고 다음 줄을 실행하세요:
curl -fsSL https://get.docker.com -o get-docker.sh sudo sh ./get-docker.sh --dry-run sudo usermod -aG docker $USER
SmartCam 애플리케이션 패키지를 설치하려면 터미널에서 다음 명령어를 실행하세요:
sudo apt install -y xlnx-firmware-kv260-smartcam
또한 원본 저장소의 내 포크를 복제해야 합니다:
git clone --recursive --branch rpi-camera-demo-clean https://github.com/amahpour/kria-vitis-platforms.git
가능한 한 간단하게 만들기 위해, 빌드 과정을 자동으로 진행하는 자동 스크립트를 작성했습니다. 원본 튜토리얼의 스크린샷을 따라 블록 디자인을 업데이트하거나 코드를 변경할 필요가 없습니다. 이 튜토리얼은 Vitis 사용자 인터페이스로 들어가지 않고도 빌드를 실행하려고 합니다. 빌드 스크립트를 실행하려면, 클론한 저장소로 cd하여 다음 명령어를 실행하세요:
cd kv260 ./build_demo.sh
이 스크립트는 리눅스를 염두에 두고 작성되었습니다. 윈도우에서 실행 중이라면, WSL 2에 우분투를 설정하고 거기에 Xilinx Vitis를 설치하는 것을 강력히 권장합니다(윈도우 대신).
Vivado를 찾을 수 없다는 오류가 발생하면, Xilinx 설정을 소스하지 않은 것을 잊었을 가능성이 큽니다. 이 명령어를 실행하기만 하면 됩니다:
source /tools/Xilinx/Vivado/2022.1/settings64.sh
build_demo.sh 스크립트를 실행하면, 저장소의 kv260/extras/ 폴더에 업데이트된 블록 디자인, 핀 제약 파일, 프로젝트 구성이 포함되어 있기 때문에 전체 튜토리얼을 완전히 우회할 수 있습니다. 튜토리얼을 단계별로 진행하고 싶다면, 원본을 살펴보는 것이 좋습니다.
모든 것이 올바르게 실행되었다면,
kv260/overlays/examples/smartcam/binary_container_1/link/int/kv260-raspi-dpu.bit.bin
에 비트스트림 파일이 생성됩니다. 빌드 과정은 1-2시간 정도 소요될 수 있습니다. 모두가 그 시간을 가질 수 있는 것은 아니므로, kv260/extras/ 폴더에 비트스트림 파일을 백업으로 포함시켜 두었습니다.
이 시점에서, 우리는 파일을 KV260 보드로 복사하고 데모를 실행할 준비가 되었습니다. 파일을 전송하는 방법으로는 USB 플래시 드라이브를 사용하거나 SCP 명령어(보안 복사)를 사용할 수 있습니다. 다음 파일들을 전송해야 합니다:
kv260/extras/kv260-raspi-dpu.bit.bin (또는 위에서 언급한 생성된 파일)
kv260/extras/kv260-raspi-dpu.dtbo
kv260/extras/kv260-raspi-dpu.xclbin
KV260 장치로 돌아온 후, 이 파일들을 펌웨어가 일반적으로 로드되는 라이브러리 섹션으로 이동해야 합니다:
sudo mkdir /lib/firmware/xilinx/kv260-raspi-dpu sudo mv kv260-raspi-dpu.bit.bin /lib/firmware/xilinx/kv260-raspi-dpu/ sudo mv kv260-raspi-dpu.dtbo /lib/firmware/xilinx/kv260-raspi-dpu/ sudo mv kv260-raspi-dpu.xclbin /lib/firmware/xilinx/kv260-raspi-dpu/kv260-raspi-dpu.xclbin sudo cp /lib/firmware/xilinx/kv260-smartcam/shell.json /lib/firmware/xilinx/kv260-raspi-dpu/
이제 애플리케이션을 실행할 준비가 되었습니다. 이 작업을 수행하면 모니터가 꺼지므로 SSH 또는 USB 직렬 인터페이스(즉, USB 포트를 사용하고 PuTTY 또는 TeraTerm을 사용함)를 통해 실행해야 합니다.
sudo xmutil listapps sudo xmutil unloadapp sudo xmutil loadapp kv260-raspi-dpu sudo xmutil desktop_disable docker run \ --env="DISPLAY" \ -h "xlnx-docker" \ --env="XDG_SESSION_TYPE" \ --net=host \ --privileged \ --volume="$HOME/.Xauthority:/root/.Xauthority:rw" \ -v /tmp:/tmp \ -v /dev:/dev \ -v /sys:/sys \ -v /etc/vart.conf:/etc/vart.conf \ -v /lib/firmware/xilinx:/lib/firmware/xilinx \ -v /run:/run \ -it xilinx/smartcam:latest bash
Docker 컨테이너에서는 파일에 약간의 수정이 필요합니다. 그렇게 하기 위해서는 먼저 vim을 설치해야 합니다:
apt-get update -y && apt-get install -y vim vim /opt/xilinx/kv260-smartcam/share/vvas/facedetect/preprocess.json
vim에서 "i" 키(삽입 모드로 전환)를 눌러 파일 편집을 시작합니다. "xclbin" 파일을 가리키는 줄을 찾아 이 경로로 업데이트하세요:
/lib/firmware/xilinx/kv260-raspi-dpu/kv260-raspi-dpu.xclbin
Esc 키를 누릅니다. ":wq" (저장 후 종료)를 입력한 다음, Enter 키를 누릅니다. 그 후, 다음과 같은 (매우 긴) 명령어로 애플리케이션을 실행할 수 있습니다:
gst-launch-1.0 mediasrcbin name=videosrc media-device=/dev/media0 v4l2src0::io-mode=mmap v4l2src0::stride-align=256 ! video/x-raw, width=1920, height=1080, format=NV12, framerate=30/1 ! tee name=t ! queue ! vvas_xmultisrc kconfig="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/preprocess.json" ! queue ! vvas_xfilter kernels-config="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/aiinference.json" ! ima.sink_master vvas_xmetaaffixer name=ima ima.src_master ! fakesink t. ! queue max-size-buffers=1 leaky=2 ! ima.sink_slave_0 ima.src_slave_0 ! queue ! vvas_xfilter kernels-config="/opt/xilinx/kv260-smartcam/share/vvas/facedetect/drawresult.json" ! queue ! kmssink driver-name=xlnx plane-id=39 sync=false fullscreen-overlay=true
모든 것이 올바르게 작동했다면, 모니터(또는 TV)가 Raspberry Pi 카메라의 피드로 다시 켜져야 합니다. 실시간으로 비디오 피드에서 감지한 모든 얼굴 주위에 파란색 상자를 표시합니다.
이 기사에서는 Raspberry Pi 카메라와 함께 SmartCam 튜토리얼을 검토했으며 "그냥 작동하게 만들기" 위해 필요한 단축키를 살펴보았습니다. 이 시점에서, 여러분은 이제 Kria KV260에서 실시간으로 얼굴을 감지하는 자신만의 SmartCam을 가동시킬 수 있어야 합니다. 제 목표는 원래 튜토리얼을 통해 헤매는 대신 AI가 작동하는 재미에 더 집중할 수 있도록 과정을 단순화하는 것이었습니다. 이 가이드가 여러분에게 "작동한다"는 순간을 얻기 위해 더 명확하고 빠르게 만들어 주었기를 바랍니다. 이제 여러분의 차례입니다. 창의력을 발휘하여 이 강력한 스타터 키트로 무엇을 할 수 있는지 탐색해 보세요.
참고: 이 프로젝트의 모든 코드는 이 저장소에서 찾을 수 있습니다.