1. 문제 배경 및 기존 방식의 한계

1.1 3D 인체 모델링의 필요성

  • 컴퓨터 비전컴퓨터 그래픽스 분야에서는 3D 사람 모델이 매우 중요한 역할을 함.
    • 예: 애니메이션, 동작 분석(Motion Capture), 가상 피팅(Virtual Try-On), AR/VR 등.
  • 목표: 실제 사람들의 **다양한 체형(Shape)**과 다양한 자세(Pose) 변화를 하나의 통합 모델로 표현하고자 함.

1.2 기존 모델의 문제점

  • SCAPE(Anguelov et al. 2005) 등 과거 모델은 사람 표면 변형을 표현할 수 있지만,
    • 구현 복잡도와 계산 비용이 큼.
    • Pose 변화, Shape 변화가 비선형적으로 뒤섞여서 처리하기 번거로움.
  • Blend Shape 기반 모델들도 존재하지만, 정확한 체형·자세 분리를 효율적으로 구현하기가 쉽지 않음.

2. SMPL의 핵심 개념

SMPL(Skinned Multi-Person Linear model)은 **Linear Blend Skinning(LBS)**을 기반으로,

  • (1) Shape 파라미터 β\beta: 사람마다 다른 체형(Height, Body proportions 등)을 표현
  • (2) Pose 파라미터 θ\theta: 관절 회전(각도)으로 인한 신체 표면 변형을 표현
    이 두 가지를 선형(linear) 형태로 융합하여, 다양한 사람의 자세 + 체형을 하나의 일관된 메시(Mesh)로 재현.

2.1 모델 정의

SMPL은 **단일 메쉬(Topology가 고정된 약 6890개 버텍스)**를 사용:

  1. Template Mesh T\mathbf{T}
    • 기준자세(예: A-포즈나 T-포즈)에 있는 중립형(중성 자세)의 사람 메쉬.
    • 버텍스 개수 N=6890N = 6890이며, 삼각형 패치(면) 연결 구조는 고정.
  2. Shape Blend Shapes
    • 체형 파라미터 β\beta (보통 10~20차원 사용)에 따라 메쉬가 변형되는 선형 모델.
    • Tshape(β)  =  T  +  ∑i=1∣β∣βi Si \mathbf{T}_{\text{shape}}(\beta) \;=\; \mathbf{T} \;+\; \sum_{i=1}^{|\beta|} \beta_i \,\mathbf{S}_i 여기서 Si\mathbf{S}_iShape Blend Shape(각 체형 주성분)에 해당하는 (3N)(3N)-차원 벡터.
  3. Pose Blend Shapes
    • Pose 파라미터 θ\theta (보통 3*(Joint수) = 72차원 등)를 통해 관절 회전에 의한 세부적인 근육·체표 변형을 선형 보정.
    • Δpose(θ)  =  ∑j=1KBj Rj(θ) \Delta_{\text{pose}}(\theta) \;=\; \sum_{j=1}^{K} B_j \,R_j(\theta)
      • KK: 관절 개수.
      • BjB_j: 관절 jj에 대응하는 Pose Blend Shape.
      • Rj(θ)R_j(\theta): 관절 jj 회전에 따른 어떤 사전 정의된 함수(회전 행렬에서 유도되는 특징 벡터 등).
    • 이를 통해, 팔을 굽힐 때 특정 근육 부위가 튀어나오는 등 미세한 Pose 기반 변형을 단순화된 선형 결합으로 모델링.
  4. Linear Blend Skinning (LBS)
    • 각 버텍스를 여러 관절에 가중치(Skinning weight)로 매핑하고, 관절 회전에 따라 해당 버텍스가 선형적으로 따라가도록 함.
    • 최종적으로 vi\mathbf{v}_i번째 버텍스는 vi(β,θ)=∑j=1Kwij Gj(θ)(Tshape(β)i+Δpose(θ)i) \mathbf{v}_i(\beta, \theta) = \sum_{j=1}^{K} w_{ij} \,G_j(\theta) \left(\mathbf{T}_{\text{shape}}(\beta)_i + \Delta_{\text{pose}}(\theta)_i\right)
      • wijw_{ij}: 버텍스 ii가 관절 jj에 할당되는 스키닝 가중치(모두 합하면 1).
      • Gj(θ)G_j(\theta): 관절 jj의 전역 변환(회전 + 위치) 행렬.

결과적으로 SMPL은,

SMPL(β,θ)  =  LBS ⁣(T,β,θ,S,B,W)\text{SMPL}(\beta, \theta) \;=\; \text{LBS}\!\bigl(\mathbf{T}, \beta, \theta, \mathbf{S}, \mathbf{B}, \mathbf{W}\bigr)

형태로 사람이 취할 수 있는 다양 형태/자세를 선형 블렌딩으로 표현한다.


3. 학습 데이터와 파라미터 추정 과정

3.1 데이터 확보

  • 주로 3D 스캐너(예: CAESAR 데이터 등)로부터 수백~수천 명 이상의 전신 스캔을 취득.
  • 각 스캔은 다른 사람, 다른 자세를 포함.

3.2 Template 정렬(Non-rigid Registration)

  • 모든 스캔 데이터를 **동일한 위상(topology)**의 템플릿 메쉬와 정합(Registration)해야 함.
    • 보통 non-rigid ICP(Iterative Closest Point)나 특수 소프트웨어(Fitting pipeline) 사용.
    • 스캔 마다 표면 점 위치가 다르지만, 궁극적으로 동일한 N=6890N=6890 버텍스 인덱스에 맵핑되도록 함.

3.3 Shape Blend Shapes 추출

  • 각기 다른 사람들(다른 체형)을 중립 자세로 노멀라이즈한 뒤, 평균 모델 T\mathbf{T}에서 편차를 PCA 등으로 분해해 Shape Basis(Si\mathbf{S}_i)를 학습.
  • 예: S1\mathbf{S}_1은 “키가 커지는” 주성분, S2\mathbf{S}_2는 “몸통이 두꺼워지는” 주성분 등.

3.4 Pose Blend Shapes 추출

  • 서로 다른 자세를 취한 데이터에서, 단순 LBS만으로 보정되지 않는 추가 표면 변형을 관절 회전에 대한 “블렌드 셰이프”로 학습.
  • 관절 θ\theta 별로 잔차(Residual)를 모아 선형회귀나 주성분 분석으로 Bj\mathbf{B}_j를 구함.

3.5 Skinning Weights(W\mathbf{W})

  • 버텍스-관절 간 가중치는 일반적으로 거리 기반 초기화 후, 최적화/학습을 통해 세부 조정.
  • 합이 1이 되도록 정규화.

4. 모델의 장점과 특성

  1. 통합적(Shape + Pose) 파라메트릭 모델
    • β\beta체형, θ\theta자세로 구분되어 직관적.
    • 비선형 복잡도를 줄이고, 선형 결합 구조로 계산 간소화.
  2. 학습 및 렌더링 효율
    • LBS(Linear Blend Skinning) 메커니즘을 따르므로, 그래픽 엔진 등과 쉽게 통합 가능.
    • 기존 SCAPE 모델보다 파이프라인 간단, 계산량도 적은 편.
  3. 다양한 응용
    • 컴퓨터 비전: 2D 이미지에서 θ,β\theta, \beta를 추정해 3D 재구성.
    • 그래픽스: 게임·영화에서 간단히 모션 캡처 데이터(θ\theta) + 개별 사용자 체형(β\beta) 적용.
  4. 표준화된 메쉬(Topology)
    • 모든 사람·모든 자세에 대해 동일한 버텍스 인덱스를 공유해, 픽셀 단위 대응이나 Texure 매핑 등이 용이.

5. 실험 및 성능 평가

5.1 SCAPE 등 비교

  • SMPL은 SCAPE 대비
    • 학습 과정: SCAPE의 비선형 Deformation Model 대비, SMPL은 Linearity를 강하게 활용 → 학습 안정성, 구현 단순성 향상.
    • 재현력: 논문에서 다양한 체형·자세 샘플링 결과, SMPL이 유사하거나 더 나은 품질을 달성.

5.2 Quantitative Metrics

  • 논문에서는 3D 스캔에 대한 재구성 에러(RMSE of vertex positions), 관절 회전 예측 에러 등을 보고.
  • SMPL이 많은 케이스에서 낮은 재구성 에러를 나타냄.

6. 한계 및 후속 연구 방향

  1. 극단적인 체형: 예를 들어, 임산부, 몸이 매우 뚱뚱하거나 매우 마른 경우, PCA 기반 Shape Basis가 잘 커버하지 못할 수 있음(추가 주성분 필요).
  2. 근육 수축/이완 표현: Pose Blend Shapes가 선형 결합이긴 하나, 실제 인체의 근육/지방 움직임을 완전히 재현하기엔 제한.
  3. Face/Hand/Foot 세분화: SMPL 기본 모델은 얼굴/손가락/발가락의 디테일이 낮음. 후속 연구(SMPL-X, SMPL+H 등)에서 세분화 모델을 제안.
  4. 동적 변화(Soft-tissue Dynamics): 달릴 때 살이 흔들리는 등 동적 물리 효과는 SMPL이 직접적으로 모델링하지 않음(추가 물리 시뮬레이션 필요).

7. 결론 및 의의

SMPL은 “인체의 Shape(체형)과 Pose(자세)를 분리하여 선형적으로 표현”하는 강력하면서도 간단한 3D 파라메트릭 모델이다.

  • 영상 처리·AI 관점에서, 2D 관찰(예: 이미지, 비디오)로부터 β\betaθ\theta를 역추정(Inverse Rendering)하면, 사람의 3D 구조를 효율적으로 복원 가능.
  • 그래픽스 관점에서도, Linear Blend Skinning 구조가 GPU에서 쉽게 렌더링·애니메이션 가능하다는 실용적 장점.

SMPL은 이후 확장 모델들(SMPL-X, STAR, VPoser 등)의 기반을 마련했고, 오늘날의 3D Human Modeling 연구에서 사실상의 표준(De-facto standard) 역할을 하고 있다.

  • 예) DensePose, HMR(Human Mesh Recovery), VIBE, SPIN 등과 결합해 2D 영상에서 직접 β,θ\beta, \theta를 예측하는 시도가 활발함.

참고 문헌

개발 생산성을 높이는 Aider AI를 Windows 환경에서 설치하고 사용하는 방법을 정리해보았다.

AI Pair programming이 가능한 Aider AI를 통해 효율적인 개발을 해보자.

 

이글은 다음의 환경을 가진 독자를 가정하여 설명한다.

  1. Windows의 Powershell을 사용한다.
  2. Chocolatey가 깔려있지 않다.
  3. Git이 깔려있지 않다.
  4. aider ai의 모델은 open ai를 사용한다.

1. Chocolatey 설치

Chocolatey는 Windows에서 패키지 관리를 편리하게 해주는 도구다. Chocolatey 설치는 아래 단계를 따르면 된다:

  1. PowerShell 관리자 권한 실행
    시작 메뉴에서 "PowerShell"을 검색하고, 관리자 권한으로 실행을 선택한다.
  2. 명령어 입력
    아래 명령어를 복사해서 PowerShell 창에 붙여넣고 실행한다
Set-ExecutionPolicy Bypass -Scope Process -Force; [System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString('https://community.chocolatey.org/install.ps1'))

 

   3. 설치가 완료되면 Chocolatey가 정상적으로 작동하는지 확인한다

choco -v

2. Git 설치

Chocolatey가 설치되었으면, 이제 Git을 설치할 차례다.

  1. Git 설치 명령어 입력
    아래 명령어를 PowerShell에 입력하고 실행한다
choco install git

    2. 설치 과정 중 "Y"를 입력해 설치를 진행한다. 설치가 완료되면 PowerShell 창을 다시 열고 아래 명령어로 Git이 정상적 으로 설치되었는지 확인한다

git --version

    3. Git 버전이 출력되면 설치가 완료된 것이다.


3. Git 기본 설정

Git 설치 후에는 사용자 이름과 이메일 같은 기본 설정을 진행해야 한다. 아래 명령어를 차례대로 입력한다

git config --global user.name "사용자이름"
git config --global user.email "이메일주소"

Git 설정에 대한 자세한 내용은 Git 공식 가이드를 참고하면 된다.


4. Aider 사용법

Aider는 OpenAI API를 기반으로 작동하며, 모델에 따라 가격과 코드 품질이 다르다.

4o 버전 (현재 모델)

4o 버전은 상대적으로 저렴하면서도 적당한 코드 품질을 제공한다.

아래 명령어를 사용하여 적용한다.

aider --4o --openai-api-key sk-proj-xxxxxxxxxxxxxxx

 

당연하지만 'sk-proj-xxxxxxxxxxxxxxx' 는 본인의 open ai api key를 사용한다.
(api key 발급은 여기서: https://platform.openai.com/api-keys)

 

o1 버전 (최고 품질)

o1 버전은 현재 preview로 나온 최신 모델이며 비용이 높지만 뛰어난 코드 품질을 제공한다.

아래 명령어를 사용하여 적용한다.

aider --o1-preview --openai-api-key sk-proj-xxxxxxxxxxxxxxx

 

OAuth token을 만드는 도중, 권한을 물어보는 항목이 뜨길래, 이곳을 참고하여 권한 범위에 대해 공부 해보기위해 이 글을 작성한다.

 

 

OAuth token 사용 가능한 범위

메인 속성 서브 속성 설명
(no scope)   공개 정보에 대한 읽기 전용 액세스 권한을 부여합니다
(사용자 프로필 정보, 리포지토리 정보 및 gist 포함).
repo   코드, 커밋 상태, 리포지토리 초대, 협력자, 배포 상태 및 리포지토리 웹후크에 대한 읽기 및 쓰기 권한을 포함하여 퍼블릭 및 프라이빗 리포지토리에 대한 모든 권한을 부여합니다.
  repo:status 퍼블릭 및 프라이빗 리포지토리의 커밋 상태에 대한 읽기/쓰기 권한을 부여합니다. 
  repo_deployment 퍼블릭 및 프라이빗 리포지토리의 배포 상태에 대한 액세스 권한을 부여합니다. 
  public_repo 퍼블릭 리포지토리에 대한 액세스 권한 부여합니다. 

  repo:invite 리포지토리에서 협업하는 초대의 수락/거절 기능을 부여합니다. 
  security_events code scanning API의 보안 이벤트에 대한 읽기 및 쓰기 액세스를 부여합니다.
admin:repo_hook   퍼블릭 또는 프라이빗 리포지토리의 후크에 대한 읽기, 쓰기, ping 및 삭제 권한을 부여합니다. 
  write:repo_hook 퍼블릭 또는 프라이빗 리포지토리의 후크에 대한 쓰기 및 ping 액세스 권한을 부여합니다.
  read:repo_hook 퍼블릭 또는 프라이빗 리포지토리의 후크에 대한 읽기 및 ping 액세스 권한을 부여합니다.
admin:org   조직 및 해당 팀, 프로젝트, 멤버십을 전부 관리합니다.
  write:org 조직 멤버십 및 조직 프로젝트에 대한 쓰기 권한입니다.
  read:org 조직 멤버십, 조직 프로젝트 및 팀 멤버십에 대한 읽기 전용 권한입니다.
admin:public_key   공개 키를 전부 관리합니다.
  write:public_key 공개 키에 대한 세부 정보를 생성합니다.
  read:public_key 공개 키에 대한 세부 정보를 나열하고 봅니다.
admin:org_hook   조직 후크에 대한 읽기, 쓰기, ping 및 삭제 권한을 부여합니다.
gist   gist에 대한 쓰기 권한을 부여합니다.
notifications   다음 권한을 부여합니다.
    * 사용자의 알림에 대한 읽기 권한
    * 스레드에 대한 읽기 권한
    * 리포지토리에 대한 조사식 및 비조사식 액세스 권한
    * 스레드 구독에 대한 읽기, 쓰기 및 삭제 액세스 권한
user   프로필 정보에 대한 읽기/쓰기 권한을 부여합니다. 
  read:user 사용자 프로필 데이터를 읽을 수 있는 액세스 권한을 부여합니다.
  user:email 사용자의 이메일 주소에 대한 읽기 권한을 부여합니다.
  user:follow 다른 사용자를 팔로우하거나 팔로우를 취소할 수 있는 액세스 권한을 부여합니다.
project   사용자 및 조직에 프로젝트에 대한 읽기/쓰기 권한을 부여합니다.
  read:project 사용자 및 조직에 프로젝트에 대한 읽기 전용 액세스 권한을 부여합니다.
delete_repo   관리 가능한 리포지토리에 대한 삭제 권한을 부여합니다.
write:packages   GitHub Packages에서 패키지를 업로드하거나 게시할 수 있는 액세스 권한을 부여합니다. 
read:packages   GitHub Packages에서 패키지를 다운로드하거나 설치할 수 있는 액세스 권한을 부여합니다. 
delete:packages   GitHub Packages에서 패키지를 삭제할 수 있는 액세스 권한을 부여합니다. 
admin:gpg_key   GPG 키를 전부 관리합니다.
  write:gpg_key GPG 키에 대한 세부 정보를 생성하고 나열하며 봅니다.
  read:gpg_key GPG 키에 대한 세부 정보를 나열하고 봅니다.
codespace   Codespaces를 생성하고 관리하는 기능을 부여합니다. codespace는 다른 범위 집합이 있을 수 있는 GITHUB_TOKEN을 노출할 수 있습니다.
workflow   GitHub Actions 워크플로 파일을 추가하고 업데이트하는 기능을 부여합니다. 경로와 내용이 모두 동일한 파일이 동일한 리포지토리의 다른 분기에 있는 경우 이 범위 없이 워크플로 파일을 커밋할 수 있습니다.

 

'소프트웨어 > Git' 카테고리의 다른 글

[Git] 로컬폴더를 원격 저장소와 연결  (0) 2022.03.13

이미 로컬에서 많은 작업이 이루어진 프로젝트를 Git 원격 저장소와 연동하는 경우, 다음의 방법을 사용한다.

 

git init

git remote add origin [깃 원격 저장소 URL]

'소프트웨어 > Git' 카테고리의 다른 글

Git OAuth token access 범위 설명  (5) 2024.11.10

가끔 유니티로 작업하다보면 Unity Editor에서 관리자 권한으로 켜야할 때가 있다.

그럴때 Unity hub를 관리자권한으로 실행해봤자 Editor까지 권한이 이양되지 않거나 에러가 생기게 된다.

방법은 다음과 같다.

 

Windows 명령 프롬프트 사용

1. 명령 프롬프트를 관리자권한으로 켠다.

2. 명령 프롬프트에 다음을 입력하여 Unity 프로젝트를 시작한다.

-> "<PathToEditor>" -projectPath "<PathToProject>"

 

명령 프롬프트 사용 예시.

 

Supervised Learning

In supervised learning, we are given a data set and already know what our correct output should look like, having the idea that there is a relationship between the input and the output.

Supervised learning problems are categorized into "regression" and "classification" problems. In a regression problem, we are trying to predict results within a continuous output, meaning that we are trying to map input variables to some continuous function. In a classification problem, we are instead trying to predict results in a discrete output. In other words, we are trying to map input variables into discrete categories.

Example 1:

Given data about the size of houses on the real estate market, try to predict their price. Price as a function of size is a continuous output, so this is a regression problem.

We could turn this example into a classification problem by instead making our output about whether the house "sells for more or less than the asking price." Here we are classifying the houses based on price into two discrete categories.

Example 2:

(a) Regression - Given a picture of a person, we have to predict their age on the basis of the given picture

(b) Classification - Given a patient with a tumor, we have to predict whether the tumor is malignant or benign.

Arthur Samuel의 머신러닝 정의

- 최초의 머신러닝 기반 체커게임을 만든 사람.

  • 컴퓨터가 명시적(explicit) 프로그램 없이도 스스로 학습할 수 있는 것.

 

Tom Michell의 머신러닝 정의

- Carnegi Mellon 대학교 교수

  • 학습과제(well-posed learning problem) 중심으로 정의
  • 프로그램이 일정 수준의 작업 성능(P)을 가지고 작업(T)을 수행한다고 했을 때 경험(E)이 증가함에 따라 작업(T)를 수행하는 성능(P)이 향상될 때 이 프로그램이 경험(E)으로부터 학습(learn)을 했다고 표현함.

 

객체지향 프로그래밍 언어로 기술된 프로그램의 기본 구성 요소는 객체(object)이다.

객체는 다시 데이터와 함수들로 구성되는데 이와 같은 환경에서 프로그램이 하는 일은 그 안에서 기술되어 있는 객체들 간의 관계로 설명된다.

 

객체지향 언어들은 모두 캡슐화(encapsulation), 다형성(polymorphism), 상속성(inheritance)의 세가지 특징을 공통으로 가지고 있다.

 

1.캡슐화란,

데이터와 그것을 다루는 코드를 연관시키는 구조를 말한다. 이렇게 연관된 데이터와 코드를 객체라고 부른다.

객체 안에 있는 데이터와 코드는 공개(public)될 수도 있고, 비공개(private)될 수도 있다.

비공개된 데이터와 코드는 해당 객체 안에서만 액세스가 가능하다.

공개된 데이터와 코드는 외부에서 액세스가 가능하다.

일반적으로, 객체의 공개 부분은 객체의 비공개 부분과 외부와의 인터페이스 역할을 수행한다.

 

2. 다형성이란,

다양한 형태라는 의미를 가지며 하나의 이름을 연관된 두가지 이상의 용도로 사용할 수 있게 하는 성질이다.

객체지향 프로그래밍에서 다형성은 하나의 이름으로 여러 동작들을 저장할 수 있게 해준다.

여러 동작 중에서 특정 동작을 선택하는 것은 주어진 데이터 타입에 의해 결정된다.

보다 일반적인 다형성의 개념은 "하나의 인터페이스에 여러 방법들"로 설명할 수 있다.

이 말은 비슷한 종류의 동작들을 같은 인터페이스로 설계함으로써 복잡성을 줄여주는 이점을 가진다.

 

3. 상속성이란,

하나의 객체가 다른 객체의 특성을 이어 받을 수 있게 해주는 것이다.

하나의 객체는 다른 객체로부터 일반적인 성질들을 상속받고, 이에 자신에게 필요한 특징들을 추가할 수 있다.

'소프트웨어 > C++' 카테고리의 다른 글

[C++] 객체지향의 개념  (0) 2021.12.01
[C++] 연산자  (0) 2020.04.29
[C++] 데이터 타입  (0) 2020.04.25

객체지향(Object-Oriented Programming, OOP)이란,

컴퓨터 프로그램을 명령어의 목록으로 (절차지향적으로) 보지 않고 여러개의 독립단위(객체)들의 모임으로 파악하고자 하는 컴퓨터 프로그래밍의 한 패러다임이다. C++은 1970년대 후반 미국 벨연구소의 비얀 스트라우스트럽(Bjarne Stroustrup)이 당시 유행하던 객체지향 개념을 C에 도입하여 'C with classes'를 개발하게되는데, 이것이 C++이다.

다시 돌아와서, 객체지향은 다음을 구현하는 방법이다.

    1. 객체는 기본적인 구성요소이다.
2. 각 객체는 어떤 클래스(class)의 인스턴스(instance)이다.
3.클래스들은 상속성 관계에 의해 서로 연관되어 있다.

언어가 다음의 조건들을 만족할 때 객체지향 언어라 부른다.

 

1. 언어가 객체를 지원한다.
2. 언어에서 객체는 클래스에 속한다.

3. 언어가 상속성을 지원한다.

객체(Object)는,

연산을 수행하고 지역적인 상태를 갖는 개체(entity)이다. 따라서 객체는 데이터와 프로시저(procedure)의 결합으로 볼 수 있다.

 

인스턴스(Instance)는,

같은 클래스에 속하는 객체로, 하나의 클래스에서 생성된 객체를 말한다. 이때 추상적인 개념인 클래스에서 실제 객체를 생성하는 것을 인스턴스화(instantiation)라고 한다.

 

클래스(Class)는,

속성과 메서드를 공유하는 유사한 성질들의 객체들을 하나로 그룹화한 것이다.

 

Reference

'소프트웨어 > C++' 카테고리의 다른 글

[C++] 객체지향 언어  (0) 2021.12.01
[C++] 연산자  (0) 2020.04.29
[C++] 데이터 타입  (0) 2020.04.25

원인

해당 에러코드의 해결책은 ML.NET 이미지 분류 튜토리얼 코드에만 한정된다.

다른 해결책은 이 링크를 참조하면 좋다. (https://creon.tistory.com/540)

 

Microsoft.ML.TensorFlow.Redist 패키지가 설치되지 않아서 발생한 문제.


해결책

 

  1. 도구 > Nuget 패키지 관리자 > 솔루션용 Nuget 패키기 관리... 클릭
  2. 찾아보기 탭에서 Microsoft.ML.TensorFlow.Redist 검색
  3. 최신버전 설치

 

 

+ Recent posts