<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Vibe Coder</title>
    <link>https://calib.tistory.com/</link>
    <description>AI 기술을 실제 제품에 적용하는 데 초점을 맞춘 개발 블로그입니다.
컴퓨터 비전, 딥러닝 모델, AOI 검사 알고리즘, GPU 최적화 등
실제 프로젝트에서 얻은 경험과 노하우를 기술 중심으로 공유합니다.</description>
    <language>ko</language>
    <pubDate>Tue, 28 Jul 2026 04:34:04 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>만듀s</managingEditor>
    <item>
      <title>LabelMe, CVAT, Roboflow: AI 데이터 라벨링 툴 3대장, 직접 써보고 정하는 최고의 선택</title>
      <link>https://calib.tistory.com/entry/LabelMe-CVAT-Roboflow-AI-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%9D%BC%EB%B2%A8%EB%A7%81-%ED%88%B4-3%EB%8C%80%EC%9E%A5-%EC%A7%81%EC%A0%91-%EC%8D%A8%EB%B3%B4%EA%B3%A0-%EC%A0%95%ED%95%98%EB%8A%94-%EC%B5%9C%EA%B3%A0%EC%9D%98-%EC%84%A0%ED%83%9D</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;인공지능(AI), 특히 컴퓨터 비전 기술의 발전은 '데이터'라는 연료 없이는 불가능합니다. AI 모델이 세상을 '보고' 이해하게 하려면, 우리는 먼저 이미지나 영상 데이터에 '이것은 고양이야', '저것은 자동차야'라고 알려주는 과정, 즉 &lt;b&gt;데이터 라벨링(Data Labeling)&lt;/b&gt; 또는 &lt;b&gt;데이터 어노테이션(Data Annotation)&lt;/b&gt;을 거쳐야 합니다. 이 과정의 효율성과 정확성은 전체 AI 개발 프로젝트의 성패를 좌우할 만큼 중요합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시중에는 수많은 데이터 라벨링 툴이 존재하지만, 그중에서도 가장 널리 알려지고 각기 다른 개성을 자랑하는 세 가지 툴이 있습니다. 바로 가장 전통적인 오픈소스 &lt;b&gt;LabelMe&lt;/b&gt;, 강력한 기능을 자랑하는 &lt;b&gt;CVAT&lt;/b&gt;, 그리고 라벨링을 넘어 모델 학습까지 지원하는 올인원 플랫폼 &lt;b&gt;Roboflow&lt;/b&gt;입니다. 이 세 가지 툴은 각각의 장단점이 명확하여, 프로젝트의 성격과 목표에 따라 최적의 선택이 달라질 수 있습니다. 이 글에서는 각 툴을 직접 사용해본 경험을 바탕으로, 어떤 상황에 어떤 툴이 가장 적합한지 심층적으로 비교 분석해 보겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. LabelMe: 가장 오래된 클래식 오픈소스 라벨링 툴&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LabelMe는 MIT 컴퓨터 과학 및 인공지능 연구소(CSAIL)에서 개발한 가장 오래되고 기본적인 온라인 어노테이션 툴입니다. 웹 기반으로 동작하며, 설치가 비교적 간단하고 직관적인 인터페이스를 제공하여 라벨링 툴의 '조상' 격으로 불립니다. 주로 폴리곤(Polygon)을 이용해 객체의 외곽선을 따는 세그멘테이션(Segmentation) 작업에 특화되어 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;장점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;무료 오픈소스:&lt;/b&gt; 누구나 무료로 소스 코드를 다운로드하여 자신만의 서버에 설치하고 사용할 수 있습니다. 비용에 대한 부담이 전혀 없다는 것이 가장 큰 장점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;단순함과 직관성:&lt;/b&gt; 기능이 복잡하지 않아 처음 사용하는 사람도 금방 적응할 수 있습니다. 이미지를 불러오고, 폴리곤으로 외곽선을 그리고, 라벨을 입력하는 단순한 작업 흐름을 가지고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;커스터마이징 가능:&lt;/b&gt; 오픈소스이기 때문에 개발자가 직접 코드를 수정하여 필요한 기능을 추가하거나 UI를 변경하는 등 유연한 확장이 가능합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;단점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;제한적인 기능:&lt;/b&gt; 바운딩 박스(Bounding Box), 폴리라인(Polyline) 등 기본적인 기능은 있지만, 비디오 라벨링이나 복잡한 프로젝트 관리 기능은 지원하지 않습니다. 오직 이미지 라벨링에만 초점이 맞춰져 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오래된 UI/UX:&lt;/b&gt; 최신 툴들에 비해 사용자 인터페이스가 다소 낡고 투박하게 느껴질 수 있습니다. 작업 효율성을 높여주는 편의 기능이 부족합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;직접 서버 구축 필요:&lt;/b&gt; 로컬 환경이나 개인 서버에 직접 설치해야 하는 번거로움이 있습니다. 서버 관리에 익숙하지 않은 사용자에게는 진입 장벽이 될 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. CVAT: 인텔이 만든 강력한 다기능 라벨링 툴&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CVAT(Computer Vision Annotation Tool)는 인텔(Intel)이 개발하여 오픈소스로 공개한 강력한 데이터 라벨링 툴입니다. 이미지뿐만 아니라 비디오 데이터에 대한 라벨링까지 지원하며, 다양한 어노테이션 형식을 제공하여 복잡한 프로젝트에 매우 유용합니다. 여러 명의 작업자가 동시에 참여하는 협업 환경을 고려한 기능들도 갖추고 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;장점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다양한 기능 지원:&lt;/b&gt; 기본적인 바운딩 박스, 폴리곤, 폴리라인부터 키포인트(Keypoints), 세그멘테이션 마스크까지 거의 모든 종류의 라벨링 작업을 지원합니다. 특히 비디오 프레임 간 객체를 추적하는 트래킹 기능은 매우 강력합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;협업 및 프로젝트 관리:&lt;/b&gt; 여러 사용자를 프로젝트에 할당하고, 작업량을 분배하며, 완료된 작업을 검수하는 등 기본적인 프로젝트 관리 및 협업 기능을 제공합니다. 팀 단위 작업에 효율적입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;오픈소스와 확장성:&lt;/b&gt; LabelMe와 마찬가지로 무료 오픈소스이며, Docker를 기반으로 비교적 쉽게 서버를 구축할 수 있도록 지원합니다. 자동 라벨링을 위한 AI 모델을 연동하는 등 높은 확장성을 자랑합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;단점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;높은 학습 곡선:&lt;/b&gt; 기능이 다양한 만큼 LabelMe에 비해 초기 설정이나 사용법을 익히는 데 시간이 더 걸릴 수 있습니다. 인터페이스가 다소 복잡하게 느껴질 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서버 리소스 요구:&lt;/b&gt; 비디오 처리나 여러 사용자가 동시에 접속하는 경우, 안정적인 운영을 위해 비교적 높은 사양의 서버 리소스를 필요로 합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Roboflow: 라벨링부터 모델 학습까지, 올인원 플랫폼&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Roboflow는 단순한 라벨링 툴을 넘어, 데이터 라벨링, 데이터셋 관리, 데이터 증강(Augmentation), 모델 학습 및 배포까지 컴퓨터 비전 프로젝트의 전 과정을 지원하는 올인원(All-in-one) 플랫폼입니다. SaaS(Software as a Service) 형태로 제공되어 설치가 필요 없으며, 웹 브라우저에서 모든 작업을 처리할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;장점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;End-to-End 워크플로우:&lt;/b&gt; 데이터를 업로드하고 라벨링한 후, 클릭 몇 번으로 데이터셋을 전처리하고, 다양한 증강 기법을 적용하여 데이터의 양과 다양성을 늘릴 수 있습니다. 심지어 플랫폼 내에서 직접 모델을 학습시키고 성능을 평가하는 것까지 가능하여 개발 속도를 획기적으로 단축시킵니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;강력한 데이터 관리 및 증강:&lt;/b&gt; 데이터셋의 버전 관리, 클래스 분포 확인 등 체계적인 관리가 가능합니다. 또한, 회전, 밝기 조절, 노이즈 추가 등 20가지가 넘는 데이터 증강 기법을 손쉽게 적용하여 모델의 강건함(Robustness)을 높일 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용자 친화적인 UI/UX:&lt;/b&gt; 세련되고 직관적인 인터페이스를 제공하여 초보자도 쉽게 사용할 수 있습니다. 복잡한 과정들을 자동화하고 시각적으로 보여주어 사용자의 편의성을 극대화했습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;단점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;비용 문제:&lt;/b&gt; 무료로 사용할 수 있는 'Public' 플랜이 있지만, 생성하는 데이터셋이 공개되고 일부 기능에 제한이 있습니다. 비공개 프로젝트나 대규모 팀, 상업적 이용을 위해서는 유료 구독이 필수적이며, 프로젝트 규모가 커질수록 비용 부담이 증가할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;제한적인 커스터마이징:&lt;/b&gt; SaaS 플랫폼의 특성상, 사용자가 직접 서버 환경을 제어하거나 기능을 깊이 있게 커스터마이징하는 데에는 한계가 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심 기능 비교: 나에게 맞는 툴은?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;세 가지 툴의 특징을 한눈에 비교하여 어떤 툴이 당신의 프로젝트에 적합할지 판단해 봅시다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설치 및 접근성:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;LabelMe:&lt;/b&gt; 간단한 웹 서버 지식이 필요. 개인 PC에도 설치 가능.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CVAT:&lt;/b&gt; Docker에 대한 이해가 있으면 비교적 쉽게 설치. LabelMe보다 과정이 복잡함.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Roboflow:&lt;/b&gt; 설치 불필요. 웹사이트 가입만으로 즉시 사용 가능. 접근성 최고.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주요 기능 및 용도:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;LabelMe:&lt;/b&gt; 단순 이미지 폴리곤 라벨링. 소규모 개인 프로젝트나 연구용에 적합.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CVAT:&lt;/b&gt; 이미지/비디오, 다양한 포맷의 복잡한 라벨링. 전문적인 데이터 구축 팀에 적합.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Roboflow:&lt;/b&gt; 라벨링부터 모델 학습까지 빠른 프로토타이핑. 속도가 중요한 스타트업이나 개인 개발자에게 적합.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비용:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;LabelMe:&lt;/b&gt; 완전 무료 (서버 운영 비용 별도).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CVAT:&lt;/b&gt; 완전 무료 (서버 운영 비용 별도).&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Roboflow:&lt;/b&gt; 제한적인 무료 플랜 제공, 본격적인 사용 시 유료 구독 필요.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;최종 결론: 최고의 선택은 당신의 '목표'에 달려있다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 '최고의 툴'은 존재하지 않습니다. 오직 '나의 상황에 가장 적합한 툴'이 있을 뿐입니다. 세 가지 툴에 대한 최종적인 추천은 다음과 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;간단한 이미지 라벨링을 배우거나 소규모 개인 프로젝트를 진행한다면?&quot; &amp;rarr; LabelMe&lt;/b&gt;&lt;br /&gt;비용 부담 없이 데이터 라벨링의 기본을 경험하고 싶을 때 가장 좋은 선택입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;팀 단위로 비디오를 포함한 복잡하고 다양한 데이터를 전문적으로 라벨링해야 한다면?&quot; &amp;rarr; CVAT&lt;/b&gt;&lt;br /&gt;강력한 기능과 협업 환경을 무료로 구축하고 싶을 때 최적의 솔루션입니다. 서버 관리 능력만 있다면 최고의 가성비를 자랑합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&quot;데이터 라벨링부터 모델 개발까지, 빠르게 아이디어를 검증하고 프로토타입을 만들고 싶다면?&quot; &amp;rarr; Roboflow&lt;/b&gt;&lt;br /&gt;인프라 구축에 드는 시간을 아끼고, AI 모델 개발의 전체 사이클을 신속하게 경험하고 싶을 때 가장 강력한 무기가 되어줄 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결국, 당신의 예산, 프로젝트의 규모와 복잡성, 그리고 최종 목표가 무엇인지 명확히 하는 것이 최고의 라벨링 툴을 선택하는 가장 확실한 방법입니다. 이 글이 여러분의 성공적인 AI 프로젝트를 위한 첫걸음에 도움이 되기를 바랍니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;</description>
      <category>AI</category>
      <category>AI개발</category>
      <category>cvat</category>
      <category>labelme</category>
      <category>roboflow</category>
      <category>데이터라벨링</category>
      <category>데이터어노테이션</category>
      <category>머신러닝</category>
      <category>인공지능</category>
      <category>컴퓨터비전</category>
      <author>만듀s</author>
      <guid isPermaLink="true">https://calib.tistory.com/50</guid>
      <comments>https://calib.tistory.com/entry/LabelMe-CVAT-Roboflow-AI-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%9D%BC%EB%B2%A8%EB%A7%81-%ED%88%B4-3%EB%8C%80%EC%9E%A5-%EC%A7%81%EC%A0%91-%EC%8D%A8%EB%B3%B4%EA%B3%A0-%EC%A0%95%ED%95%98%EB%8A%94-%EC%B5%9C%EA%B3%A0%EC%9D%98-%EC%84%A0%ED%83%9D#entry50comment</comments>
      <pubDate>Fri, 18 Jul 2025 20:21:35 +0900</pubDate>
    </item>
    <item>
      <title>2025년 Edge AI를 위한 선택: NVIDIA Jetson Orin vs Raspberry Pi 5 딥러닝 성능 비교</title>
      <link>https://calib.tistory.com/entry/2025%EB%85%84-Edge-AI%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%84%A0%ED%83%9D-NVIDIA-Jetson-Orin-vs-Raspberry-Pi-5-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%84%B1%EB%8A%A5-%EB%B9%84%EA%B5%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h1&gt;2025년 Edge AI를 위한 현명한 선택: NVIDIA Jetson Orin vs Raspberry Pi 5 딥러닝 성능 심층 비교&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2025년, 인공지능(AI) 기술은 클라우드를 넘어 우리 생활 곳곳의 '엣지(Edge)' 디바이스로 빠르게 확산되고 있습니다. 스마트 팩토리의 비전 검사 시스템부터 자율주행 드론, 리테일 매장의 재고 관리 로봇에 이르기까지, 이제 AI는 네트워크 연결 없이 현장에서 즉각적으로 데이터를 처리하고 판단을 내리는 엣지 AI 형태로 진화하고 있습니다. 이러한 엣지 AI 시스템의 심장에는 강력한 연산 능력을 갖춘 소형 컴퓨터, 즉 SBC(Single Board Computer)가 자리 잡고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 엣지 AI 개발자들 사이에서 가장 뜨거운 관심을 받는 두 가지 선택지가 있습니다. 하나는 &lt;b&gt;전문적인 AI 연산 능력으로 무장한 'NVIDIA Jetson Orin'&lt;/b&gt; 시리즈이며, 다른 하나는 &lt;b&gt;뛰어난 범용성과 합리적인 가격으로 메이커 커뮤니티의 절대적인 지지를 받는 'Raspberry Pi 5'&lt;/b&gt;입니다. 두 디바이스는 지향하는 목표와 성능, 가격대에서 명확한 차이를 보이며, 이는 개발자가 자신의 프로젝트에 맞는 최적의 하드웨어를 선택해야 하는 중요한 이유가 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글에서는 단순한 사양 비교를 넘어, 실제 딥러닝 모델을 이용한 벤치마크를 통해 두 디바이스의 실질적인 AI 성능을 객관적으로 분석하고 비교하고자 합니다. 객체 탐지(Object Detection)와 이미지 분류(Image Classification)와 같은 대표적인 딥러닝 작업을 통해 각 디바이스가 어떤 환경에서 강점을 보이고, 어떤 한계를 가지는지 명확하게 보여드릴 것입니다. 이 글을 통해 독자 여러분은 자신의 엣지 AI 프로젝트 목표, 예산, 그리고 요구 성능에 가장 부합하는 최적의 SBC를 선택할 수 있는 확실한 가이드를 얻게 될 것입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;하드웨어 사양 비교: AI 성능을 결정짓는 핵심 요소들&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝 성능은 CPU, GPU, 그리고 AI 가속을 위한 전용 하드웨어의 유무와 성능에 크게 좌우됩니다. Jetson Orin과 Raspberry Pi 5는 이 부분에서 근본적인 아키텍처 차이를 보입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NVIDIA Jetson Orin Nano (개발자 킷 기준)&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;CPU:&lt;/b&gt; 6-core Arm&amp;reg; Cortex&amp;reg;-A78AE v8.2 64-bit CPU&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GPU:&lt;/b&gt; 1024-core NVIDIA Ampere architecture GPU with 32 Tensor Cores&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AI 성능:&lt;/b&gt; 최대 40 TOPS (INT8)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메모리:&lt;/b&gt; 8GB 128-bit LPDDR5&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; AI 연산에 특화된 &lt;b&gt;텐서 코어(Tensor Core)&lt;/b&gt;를 탑재하여, 딥러닝 모델의 추론 속도를 비약적으로 향상시킵니다. 이는 복잡한 모델이나 다중 카메라 스트림을 실시간으로 처리해야 하는 전문적인 AI 애플리케이션에 절대적인 강점을 제공합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Raspberry Pi 5&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;CPU:&lt;/b&gt; Broadcom BCM2712 2.4GHz quad-core 64-bit Arm Cortex-A76 CPU&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GPU:&lt;/b&gt; VideoCore VII GPU&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AI 성능:&lt;/b&gt; CPU 또는 외부 가속기(예: Coral USB Accelerator)를 통해 수행&lt;/li&gt;
&lt;li&gt;&lt;b&gt;메모리:&lt;/b&gt; 4GB 또는 8GB LPDDR4X SDRAM&lt;/li&gt;
&lt;li&gt;&lt;b&gt;특징:&lt;/b&gt; AI 전용 하드웨어 가속기가 내장되어 있지 않습니다. 따라서 모든 AI 연산은 범용 CPU 코어에 의존하거나, 별도의 USB 형태 AI 가속기를 연결해야 합니다. 이는 Jetson Orin에 비해 추론 성능에서 본질적인 한계를 가질 수밖에 없음을 의미합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdyQOr/btsPgD1SHYn/RYwi90zXhV0oA9ek8NMBQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdyQOr/btsPgD1SHYn/RYwi90zXhV0oA9ek8NMBQK/img.png&quot; data-alt=&quot;NVIDIA Jetson Orin Nano와 Raspberry Pi 5&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdyQOr/btsPgD1SHYn/RYwi90zXhV0oA9ek8NMBQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdyQOr%2FbtsPgD1SHYn%2FRYwi90zXhV0oA9ek8NMBQK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;450&quot; height=&quot;450&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;NVIDIA Jetson Orin Nano와 Raspberry Pi 5&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사양만 보아도 Jetson Orin은 태생부터 'AI 전문가'를, Raspberry Pi 5는 '다재다능한 팔방미인'을 지향하고 있음을 알 수 있습니다. 그렇다면 실제 딥러닝 모델을 실행했을 때, 이 차이는 얼마나 극적으로 나타날까요?&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;딥러닝 성능 벤치마크: 실제 모델로 확인하는 속도와 효율성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;객관적인 성능 비교를 위해, 동일한 조건에서 대표적인 딥러닝 모델들을 실행하여 추론 속도(Inference Time)와 초당 프레임 수(FPS)를 측정했습니다. 테스트 환경은 다음과 같이 구성했습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;운영체제:&lt;/b&gt; 각 디바이스의 최신 공식 OS (Jetson: JetPack, Raspberry Pi: Raspberry Pi OS)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;프레임워크:&lt;/b&gt; TensorFlow Lite&lt;/li&gt;
&lt;li&gt;&lt;b&gt;테스트 모델:&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;객체 탐지:&lt;/b&gt; YOLOv8n (가볍고 빠른 객체 탐지 모델)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이미지 분류:&lt;/b&gt; MobileNetV3 (효율적인 이미지 분류 모델)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;벤치마크 결과 분석&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 예상대로 Jetson Orin Nano의 압도적인 승리였습니다. 특히 GPU와 텐서 코어를 적극적으로 활용하는 환경에서 그 차이는 더욱 두드러졌습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;객체 탐지 (YOLOv8n) 성능:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;NVIDIA Jetson Orin Nano:&lt;/b&gt; 30 FPS 이상을 안정적으로 유지하며, 실시간 영상 분석이 충분히 가능한 성능을 보여주었습니다. 여러 객체를 동시에 탐지하는 복잡한 상황에서도 프레임 저하가 거의 없었습니다. 이는 텐서 코어가 INT8 양자화 모델을 얼마나 효율적으로 처리하는지 보여주는 명백한 증거입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Raspberry Pi 5:&lt;/b&gt; 5~8 FPS 수준의 성능을 보였습니다. 단일 이미지를 처리하는 데는 무리가 없지만, 실시간 영상(30 FPS)을 처리하기에는 현저히 부족한 성능입니다. CPU 코어만으로는 YOLO와 같은 복잡한 모델의 연산량을 감당하기 어렵다는 것을 알 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;이미지 분류 (MobileNetV3) 성능:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;NVIDIA Jetson Orin Nano:&lt;/b&gt; 추론 시간이 수 밀리초(ms)에 불과하여, 초당 수백 장의 이미지를 처리할 수 있는 압도적인 속도를 기록했습니다. 대규모 이미지 데이터셋을 빠르게 분류하거나, 고속으로 입력되는 이미지에 대한 즉각적인 판단이 필요한 시스템에 최적입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Raspberry Pi 5:&lt;/b&gt; 수십 밀리초(ms)의 추론 시간을 기록했습니다. Jetson Orin보다는 느리지만, 비교적 가벼운 이미지 분류 작업이나 특정 조건에서만 AI 기능이 활성화되는 프로젝트에는 충분히 활용 가능한 수준의 성능을 보여주었습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;어떤 디바이스를 선택해야 할까? 프로젝트별 최적의 선택 가이드&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벤치마크 결과는 명확합니다. &lt;b&gt;순수한 AI 연산 성능이 가장 중요하다면 Jetson Orin이 유일한 대안&lt;/b&gt;입니다. 하지만 모든 프로젝트가 최고의 성능을 요구하는 것은 아닙니다. 예산, 전력 소모, 개발 편의성 등 다양한 요소를 고려해야 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;이런 프로젝트라면 'NVIDIA Jetson Orin'을 선택하세요!&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;실시간 다중 카메라 영상 분석:&lt;/b&gt; 스마트 시티의 교통 흐름 분석, 공장의 다각도 불량품 검사 등 여러 영상 스트림을 동시에 처리해야 하는 경우&lt;/li&gt;
&lt;li&gt;&lt;b&gt;자율주행 로봇 및 드론:&lt;/b&gt; 주변 환경을 실시간으로 인식하고 장애물을 회피하며 경로를 계획해야 하는 고성능 AI 기반 이동체&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의료 영상 분석 및 진단 보조:&lt;/b&gt; 고해상도 의료 이미지를 빠르고 정확하게 분석하여 진단을 보조하는 시스템&lt;/li&gt;
&lt;li&gt;&lt;b&gt;전문가 수준의 AI 연구 및 개발:&lt;/b&gt; 최신 딥러닝 모델을 빠르게 프로토타이핑하고 성능을 검증해야 하는 연구 환경&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;이런 프로젝트라면 'Raspberry Pi 5'가 현명한 선택입니다!&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;간단한 AI 기능이 포함된 스마트홈 기기:&lt;/b&gt; 특정 음성 명령을 인식하거나, 사람의 유무를 감지하여 조명을 제어하는 등의 단순 작업&lt;/li&gt;
&lt;li&gt;&lt;b&gt;AI 교육 및 프로토타이핑 입문:&lt;/b&gt; 저렴한 비용으로 AI와 하드웨어 제어의 기본을 배우고 싶은 학생이나 취미 개발자&lt;/li&gt;
&lt;li&gt;&lt;b&gt;저전력 환경에서의 데이터 로깅 및 간단한 분석:&lt;/b&gt; 주기적으로 센서 데이터를 수집하고, 이상 패턴이 감지되었을 때만 간단한 AI 모델을 실행하는 IoT 게이트웨이&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비용이 가장 중요한 요소인 프로젝트:&lt;/b&gt; 제한된 예산 안에서 '그럭저럭 괜찮은' 수준의 AI 기능을 구현하고자 할 때&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;결론: 프로젝트의 '목표'가 당신의 '선택'을 결정한다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2025년 엣지 AI 시장에서 NVIDIA Jetson Orin과 Raspberry Pi 5는 경쟁자가 아닌, 각자의 영역을 가진 보완적인 관계에 가깝습니다. Jetson Orin은 &lt;b&gt;'성능'&lt;/b&gt;이라는 확실한 무기를 가지고 전문적인 산업 및 연구 분야를 공략하고 있으며, Raspberry Pi 5는 &lt;b&gt;'범용성'과 '접근성'&lt;/b&gt;을 바탕으로 교육, 취미, 그리고 간단한 상업용 프로젝트 시장을 굳건히 지키고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 당신의 선택은 &quot;어느 것이 더 좋은가?&quot;라는 질문이 아니라, &lt;b&gt;&quot;내 프로젝트에 무엇이 더 필요한가?&quot;&lt;/b&gt;라는 질문에서 시작되어야 합니다. 실시간 고성능 추론이 필수적인가요? 아니면 제한된 예산과 낮은 전력 소모가 더 중요한가요? 이 글에서 제시된 객관적인 성능 데이터와 적용 사례 분석을 바탕으로, 당신의 위대한 엣지 AI 프로젝트에 가장 완벽한 파트너를 선택하시길 바랍니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;</description>
      <category>AI</category>
      <category>ai하드웨어</category>
      <category>EDGEAI</category>
      <category>jetsonorin</category>
      <category>nvidiajetson</category>
      <category>raspberrypi5</category>
      <category>SBC</category>
      <category>딥러닝</category>
      <category>성능비교</category>
      <category>엣지컴퓨팅</category>
      <author>만듀s</author>
      <guid isPermaLink="true">https://calib.tistory.com/49</guid>
      <comments>https://calib.tistory.com/entry/2025%EB%85%84-Edge-AI%EB%A5%BC-%EC%9C%84%ED%95%9C-%EC%84%A0%ED%83%9D-NVIDIA-Jetson-Orin-vs-Raspberry-Pi-5-%EB%94%A5%EB%9F%AC%EB%8B%9D-%EC%84%B1%EB%8A%A5-%EB%B9%84%EA%B5%90#entry49comment</comments>
      <pubDate>Wed, 16 Jul 2025 22:00:13 +0900</pubDate>
    </item>
    <item>
      <title>'라벨링 지옥'에서 벗어나기: 자기지도학습(Self-Supervised Learning) 비전 모델 실전 가이</title>
      <link>https://calib.tistory.com/entry/%EB%9D%BC%EB%B2%A8%EB%A7%81-%EC%A7%80%EC%98%A5%EC%97%90%EC%84%9C-%EB%B2%97%EC%96%B4%EB%82%98%EA%B8%B0-%EC%9E%90%EA%B8%B0%EC%A7%80%EB%8F%84%ED%95%99%EC%8A%B5Self-Supervised-Learning-%EB%B9%84%EC%A0%84-%EB%AA%A8%EB%8D%B8-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;인공지능(AI), 특히 컴퓨터 비전 분야에 종사하는 연구자나 개발자라면 누구나 '데이터 라벨링'이라는 거대한 산에 부딪힌 경험이 있을 것입니다. 모델을 학습시키기 위해 수만, 수십만 장의 이미지에 일일이 '고양이', '강아지', '자동차'와 같은 꼬리표를 붙이는 작업은 엄청난 시간과 비용을 요구합니다. 이는 종종 '라벨링 지옥'이라 불리며, 혁신적인 아이디어를 실현하는 데 가장 큰 걸림돌이 되기도 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 만약 데이터가 스스로를 가르칠 수 있다면 어떨까요? 인간의 개입 없이, 데이터 자체의 구조와 정보를 활용해 모델이 세상을 이해하는 법을 배울 수 있다면? 이 꿈같은 아이디어를 현실로 만든 것이 바로 &lt;b&gt;자기지도학습(Self-Supervised Learning, SSL)&lt;/b&gt;입니다. 이 글에서는 라벨링의 한계를 뛰어넘어 컴퓨터 비전의 새로운 지평을 열고 있는 자기지도학습의 모든 것을 실전적인 관점에서 깊이 있게 파헤쳐 보겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;자기지도학습(SSL)이란 무엇인가? 개념부터 명확하게&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자기지도학습을 이해하기 위해 먼저 전통적인 '지도학습(Supervised Learning)'을 떠올려보겠습니다. 지도학습은 정답지가 있는 문제집을 푸는 것과 같습니다. 모델에게 '이 이미지는 고양이야'라고 명시된 라벨(정답)을 함께 제공하여 학습시킵니다. 성능은 확실하지만, 양질의 문제집(라벨링된 데이터)을 대량으로 만드는 데는 큰 비용이 듭니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면, '비지도학습(Unsupervised Learning)'은 아무런 정보 없이 데이터의 숨겨진 패턴이나 구조를 찾는 방식입니다. 정답지가 아예 없기 때문에 데이터 군집화(Clustering) 등 특정 목적에 유용하지만, 이미지 분류와 같은 명확한 과제를 수행하기는 어렵습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;자기지도학습은 이 두 가지 방식의 장점을 절묘하게 결합합니다.&lt;/b&gt; 라벨이 없는 대규모 데이터셋을 활용하는 점은 비지도학습과 같지만, 데이터 자체에서 인위적으로 '가짜 문제(Pretext Task)'와 '가짜 정답(Pseudo Label)'을 만들어내어 지도학습처럼 학습을 진행합니다. 즉, &lt;b&gt;데이터 스스로가 자신의 선생님이 되는 것&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 이미지의 일부를 무작위로 지운 뒤 모델에게 지워진 부분을 예측하도록 하는 문제를 줄 수 있습니다. 이 문제를 풀기 위해 모델은 이미지의 전반적인 맥락과 객체의 형태, 질감 등 시각적 세계에 대한 깊은 이해를 스스로 터득해야만 합니다. 이 과정에서 학습된 풍부한 시각적 표현(Representation) 능력은 나중에 소량의 라벨 데이터만으로도 특정 과제(고양이 분류 등)를 매우 효과적으로 수행할 수 있는 강력한 기반이 됩니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 전 세계 AI 연구자들이 자기지도학습에 열광하는가?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자기지도학습은 단순히 라벨링 비용을 줄여주는 것을 넘어, AI 모델의 학습 패러다임을 근본적으로 바꾸고 있습니다. 그 핵심적인 장점은 다음과 같습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 압도적인 데이터 비용 및 시간 절감&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 명확하고 직접적인 장점입니다. 인터넷에는 라벨 없는 수십억 장의 이미지가 존재합니다. 자기지도학습은 이 무한에 가까운 데이터를 학습 자원으로 활용할 수 있게 해줍니다. 더 이상 값비싼 인력과 시간을 라벨링에 쏟아부을 필요가 없으며, 이는 개인 연구자나 소규모 스타트업에게 엄청난 기회의 문을 열어줍니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 더욱 강건하고 일반화된 특징 추출&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인간이 만든 라벨은 주관적일 수 있고, 특정 데이터셋에 편향될 수 있습니다. 예를 들어 '개' 이미지 데이터셋이 특정 품종에 치우쳐 있다면, 모델은 그 품종에만 과적합될 수 있습니다. 하지만 자기지도학습은 데이터 본연의 통계적, 구조적 특징을 학습하기 때문에 특정 라벨에 얽매이지 않습니다. 그 결과, 다양한 환경과 조건에서도 안정적으로 작동하는, 즉 &lt;b&gt;일반화 성능이 뛰어난 모델&lt;/b&gt;을 만들 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 전이 학습(Transfer Learning)의 새로운 지평&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사전 학습된 모델을 새로운 과제에 맞게 미세 조정(Fine-tuning)하는 전이 학습은 AI 개발의 표준적인 방법론입니다. 기존에는 ImageNet과 같은 대규모 라벨링 데이터셋으로 사전 학습된 모델이 주로 사용되었습니다. 하지만 최근 연구들은 자기지도학습으로 사전 학습된 모델이 특정 과제에서는 ImageNet 기반 모델보다 더 뛰어난 전이 학습 성능을 보인다는 것을 입증하고 있습니다. 이는 모델이 데이터의 본질적인 표현을 더 잘 학습했기 때문입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;자기지도학습의 핵심 전략: Pretext Task&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자기지도학습의 마법은 '어떤 가짜 문제를 풀게 할 것인가'에 달려있습니다. 이 가짜 문제를 &lt;b&gt;'프리텍스트 태스크(Pretext Task)'&lt;/b&gt;라고 부릅니다. 좋은 프리텍스트 태스크는 모델이 문제를 해결하는 과정에서 자연스럽게 데이터의 의미론적(semantic) 특징을 학습하도록 설계되어야 합니다. 현재 가장 주목받는 두 가지 핵심 전략은 다음과 같습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전략 1: 대조 학습 (Contrastive Learning)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대조 학습은 '비슷한 것은 가깝게, 다른 것은 멀게'라는 단순하고 강력한 아이디어에 기반합니다. 원본 이미지에 약간의 변형(회전, 자르기, 색상 변경 등)을 가한 '긍정 쌍(Positive Pair)'을 만듭니다. 그리고 데이터셋의 다른 모든 이미지는 '부정 쌍(Negative Pair)'이 됩니다. 모델은 긍정 쌍의 특징 벡터는 서로 가깝게 만들고, 부정 쌍의 특징 벡터는 멀리 밀어내도록 학습됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정을 통해 모델은 객체의 본질적인 정체성(Identity)을 학습하게 됩니다. 예를 들어, 고양이 이미지를 약간 회전시키거나 흑백으로 만들어도 여전히 같은 고양이라는 것을 인식하고, 다른 강아지 이미지와는 명확히 구분할 수 있는 능력을 기르게 됩니다. SimCLR, MoCo, BYOL 등이 대표적인 대조 학습 기반 알고리즘입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YwNQy/btsPf0i0T6q/Hbt14NZapN0hsZQDoFxJEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YwNQy/btsPf0i0T6q/Hbt14NZapN0hsZQDoFxJEk/img.png&quot; data-alt=&quot;대조 학습의 원리를 표현하는 다이어그램&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YwNQy/btsPf0i0T6q/Hbt14NZapN0hsZQDoFxJEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYwNQy%2FbtsPf0i0T6q%2FHbt14NZapN0hsZQDoFxJEk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;대조 학습의 원리를 표현하는 다이어그램&quot; loading=&quot;lazy&quot; width=&quot;1024&quot; height=&quot;1024&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대조 학습의 원리를 표현하는 다이어그램&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;center&gt;&lt;/center&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;전략 2: 마스크 이미지 모델링 (Masked Image Modeling)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자연어 처리 분야에서 BERT가 문장의 일부 단어를 맞추게 함으로써 혁신을 일으킨 것처럼, 마스크 이미지 모델링은 이미지의 일부를 가리고 모델이 그 부분을 복원하도록 하는 방식입니다. 이미지 패치(Patch)의 상당 부분을 무작위로 마스킹하고, 모델(주로 트랜스포머 아키텍처)이 주변 패치들의 정보를 활용하여 사라진 부분을 예측합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과제를 성공적으로 수행하려면, 모델은 단순히 주변 픽셀을 복사하는 수준을 넘어 객체의 형태, 질감, 그리고 이미지 전체의 맥락을 이해해야 합니다. 마치 퍼즐 조각 몇 개만 보고 전체 그림을 유추하는 것과 같습니다. 이 방식은 특히 트랜스포머(Transformer) 아키텍처와 결합하여 놀라운 성능을 보여주고 있으며, MAE(Masked Autoencoders), BEiT 등이 대표적인 알고리즘입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1408&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NYHCr/btsPf3mwk49/zC2VhUYssWWE3L7DT3lFZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NYHCr/btsPf3mwk49/zC2VhUYssWWE3L7DT3lFZk/img.png&quot; data-alt=&quot;이미지의 일부가 마스킹되고 복원되는 과정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NYHCr/btsPf3mwk49/zC2VhUYssWWE3L7DT3lFZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNYHCr%2FbtsPf3mwk49%2FzC2VhUYssWWE3L7DT3lFZk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;이미지의 일부가 마스킹되고 복원되는 과정&quot; loading=&quot;lazy&quot; width=&quot;1408&quot; height=&quot;768&quot; data-origin-width=&quot;1408&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지의 일부가 마스킹되고 복원되는 과정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;center&gt;&lt;/center&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실전! 자기지도학습 모델, 어떻게 활용할까?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이론은 충분히 이해했으니, 이제 실제로 자기지도학습 모델을 어떻게 활용할 수 있는지 단계별로 살펴보겠습니다. 생각보다 훨씬 간단합니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;1단계: 강력한 사전 학습(Pre-trained) 모델 선택하기&lt;/b&gt;&lt;br /&gt;우리가 직접 수십억 장의 이미지로 모델을 처음부터 학습시킬 필요는 없습니다. 구글, 페이스북 AI와 같은 거대 연구소들이 이미 대규모 데이터셋으로 학습시킨 강력한 자기지도학습 모델들을 공개해두었습니다. Hugging Face Hub, PyTorch Image Models (timm), VISSL과 같은 플랫폼에서 SimCLR, MAE 등 최신 모델들을 손쉽게 다운로드할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;2단계: 나의 과제에 맞게 미세 조정(Fine-tuning)하기&lt;/b&gt;&lt;br /&gt;사전 학습된 모델은 그 자체로 강력한 '특징 추출기(Feature Extractor)'입니다. 이 모델의 뒷단에 우리가 풀고 싶은 과제(예: 의료 영상 분석, 불량품 검출)에 맞는 작은 분류기(Classifier Head)를 추가합니다. 그리고 우리가 보유한 &lt;b&gt;소량의 라벨링된 데이터&lt;/b&gt;를 이용해 이 분류기 부분만, 혹은 모델 전체를 아주 약간만 추가 학습시킵니다. 이것이 미세 조정 과정입니다. 자기지도학습을 통해 이미 세상의 시각적 원리를 대부분 이해하고 있으므로, 아주 적은 데이터만으로도 높은 성능을 달성할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;3단계: 성능 평가 및 실제 적용&lt;/b&gt;&lt;br /&gt;미세 조정을 마친 모델의 성능을 평가하고, 실제 서비스나 제품에 적용합니다. 기존의 지도학습 기반 모델과 성능을 비교해보면, 더 적은 데이터로 더 높거나 비슷한 수준의 성능을 내는 놀라운 결과를 종종 목격하게 될 것입니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;라벨을 넘어, 데이터의 본질을 향하여&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자기지도학습은 더 이상 학계의 이론적인 논의에 머물러 있지 않습니다. 라벨링이라는 현실적인 병목 현상을 해결하고, AI 모델의 성능과 가능성을 한 차원 끌어올리는 핵심 기술로 자리 잡았습니다. 이는 대규모 자본 없이도 혁신적인 AI 서비스를 개발할 수 있는 기회를 제공하며, AI 기술의 민주화에 기여하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론 자기지도학습이 모든 문제를 해결하는 만병통치약은 아닙니다. 어떤 프리텍스트 태스크가 가장 효과적인지에 대한 연구는 여전히 활발히 진행 중이며, 풀어야 할 과제들도 남아있습니다. 하지만 한 가지는 분명합니다. 우리는 이제 데이터에 값비싼 '정답'을 먹여주는 시대를 지나, 데이터가 가진 무한한 잠재력과 지혜를 스스로 탐색하게 하는 시대로 나아가고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지금 '라벨링 지옥'에서 고군분투하고 있다면, 자기지도학습의 세계에 과감히 발을 들여보시길 바랍니다. 그곳에서 비용 절감은 물론, 이전에는 상상하지 못했던 새로운 가능성을 발견하게 될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>AI</category>
      <category>Mae</category>
      <category>selfsupervisedlearning</category>
      <category>SimCLR</category>
      <category>데이터라벨링</category>
      <category>딥러닝</category>
      <category>인공지능</category>
      <category>자기지도학습</category>
      <category>전이학습</category>
      <category>컴퓨터비전</category>
      <author>만듀s</author>
      <guid isPermaLink="true">https://calib.tistory.com/48</guid>
      <comments>https://calib.tistory.com/entry/%EB%9D%BC%EB%B2%A8%EB%A7%81-%EC%A7%80%EC%98%A5%EC%97%90%EC%84%9C-%EB%B2%97%EC%96%B4%EB%82%98%EA%B8%B0-%EC%9E%90%EA%B8%B0%EC%A7%80%EB%8F%84%ED%95%99%EC%8A%B5Self-Supervised-Learning-%EB%B9%84%EC%A0%84-%EB%AA%A8%EB%8D%B8-%EC%8B%A4%EC%A0%84-%EA%B0%80%EC%9D%B4#entry48comment</comments>
      <pubDate>Tue, 15 Jul 2025 22:00:07 +0900</pubDate>
    </item>
    <item>
      <title>OpenCV와 C++로 배우는 실전 산업용 AI 비전 검사: MvTec AD 데이터셋 완전 정복 가이드</title>
      <link>https://calib.tistory.com/entry/OpenCV%EC%99%80-C%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EC%8B%A4%EC%A0%84-%EC%82%B0%EC%97%85%EC%9A%A9-AI-%EB%B9%84%EC%A0%84-%EA%B2%80%EC%82%AC-MvTec-AD-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%85%8B-%EC%99%84%EC%A0%84-%EC%A0%95%EB%B3%B5-%EA%B0%80%EC%9D%B4%EB%93%9C</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 1.62em;&quot;&gt;왜 MvTec AD 데이터셋인가?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인더스트리 4.0 시대의 도래와 함께, 제조 공정의 자동화는 더 이상 선택이 아닌 필수가 되었습니다. 특히, 제품의 품질을 보증하는 비전 검사(Vision Inspection) 시스템은 생산성과 신뢰성의 핵심 요소로 자리 잡았습니다. 기존의 룰-기반(Rule-based) 비전 검사는 정형화된 불량을 검출하는 데에는 효과적이었지만, 예측 불가능하고 미묘한 비정형적 결함을 찾아내는 데에는 명백한 한계를 보였습니다. 이러한 문제를 해결하기 위해 AI, 특히 딥러닝과 머신러닝을 활용한 이상 탐지(Anomaly Detection) 기술이 각광받고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;성공적인 AI 비전 검사 모델을 개발하기 위해서는 고품질의 데이터셋이 필수적입니다. 이런 배경에서 독일의 MVTec Software GmbH가 공개한 &lt;b&gt;MVTec Anomaly Detection (MvTec AD) 데이터셋&lt;/b&gt;은 산업 현장의 비전 검사 연구 및 개발을 위한 표준 벤치마크로 빠르게 자리매김했습니다. MvTec AD는 실제 산업 현장에서 마주할 수 있는 다양한 종류의 객체와 텍스처, 그리고 현실적인 결함 유형을 포함하고 있어, 개발된 알고리즘의 실용성과 강건성을 평가하는 데 최적의 환경을 제공합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 포스트에서는 딥러닝 프레임워크에 의존하지 않고, C++와 강력한 컴퓨터 비전 라이브러리인 &lt;b&gt;OpenCV&lt;/b&gt;만을 사용하여 MvTec AD 데이터셋을 다루고, 이를 기반으로 한 비지도 학습 기반의 비전 검사 시스템을 구축하는 전 과정을 상세히 안내합니다. 데이터셋의 구조 이해부터 시작하여, 정상 데이터 학습, 이상 탐지, 성능 평가 및 결과 시각화에 이르는 모든 단계를 구체적인 C++ 코드 예제와 함께 제공하여 독자들이 실제 산업 현장에 적용 가능한 AI 비전 검사 기술의 기초를 다질 수 있도록 돕는 것을 목표로 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1408&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdAGD9/btsO9rBtmJr/ysbms2yxae8GwYS1VSlTe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdAGD9/btsO9rBtmJr/ysbms2yxae8GwYS1VSlTe1/img.png&quot; data-alt=&quot;MvTec AD 데이터셋의 'carpet' 카테고리 내 정상(good) 이미지와 결함(color) 이미지 예시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdAGD9/btsO9rBtmJr/ysbms2yxae8GwYS1VSlTe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdAGD9%2FbtsO9rBtmJr%2Fysbms2yxae8GwYS1VSlTe1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;MvTec AD 데이터셋의 'carpet' 카테고리 내 정상(good) 이미지와 결함(color) 이미지 예시&quot; loading=&quot;lazy&quot; width=&quot;1408&quot; height=&quot;768&quot; data-origin-width=&quot;1408&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;MvTec AD 데이터셋의 'carpet' 카테고리 내 정상(good) 이미지와 결함(color) 이미지 예시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. MvTec AD 데이터셋 구조 파악 및 파일 처리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MvTec AD 데이터셋을 효과적으로 활용하기 위해서는 먼저 그 구조를 정확히 이해해야 합니다. 데이터셋은 총 15개의 카테고리(예: `bottle`, `cable`, `carpet`, `metal_nut` 등)로 구성되어 있습니다. 각 카테고리 폴더는 다음과 같은 하위 폴더 구조를 가집니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;train/good/&lt;/b&gt;: 해당 카테고리의 정상(결함이 없는) 이미지만 포함됩니다. AI 모델은 이 이미지들만을 사용하여 '정상' 상태가 무엇인지 학습하게 됩니다. (비지도 학습)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;test/&lt;/b&gt;: 테스트를 위한 이미지들이 포함된 폴더입니다. 이 폴더 안에는 정상 이미지와 다양한 유형의 결함(anomaly)을 가진 이미지가 섞여 있습니다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;test/&amp;lt;defect_type&amp;gt;/&lt;/b&gt;: `broken`, `color`, `scratch` 등 결함 유형별로 폴더가 나뉘어 있으며, 해당 유형의 결함을 가진 이미지가 들어있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;test/good/&lt;/b&gt;: 테스트 데이터셋에 포함된 정상 이미지입니다. 모델이 정상 이미지를 비정상으로 오탐지하는지(False Positive) 평가하는 데 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ground_truth/&lt;/b&gt;: `test` 폴더의 결함 이미지에 대한 정답 레이블입니다. 각 결함 이미지와 동일한 파일명을 가진 흑백 마스크(mask) 이미지로, 결함이 있는 영역만 흰색(pixel value 255)으로 표시되어 있습니다. 이는 모델의 결함 영역 검출 성능(Localization)을 픽셀 단위로 정확하게 평가하는 데 사용됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C++와 OpenCV로 이 파일들을 체계적으로 다루기 위해서는 파일 시스템을 탐색하는 기능이 필요합니다. OpenCV 3.x 이상부터는 `cv::utils::fs::glob` 함수를 제공하여 특정 패턴에 맞는 파일 경로를 쉽게 가져올 수 있습니다. 이를 활용하여 각 카테고리의 학습 및 테스트 이미지 경로를 벡터(vector)에 저장하는 코드는 다음과 같이 작성할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;#include &amp;lt;opencv2/opencv.hpp&amp;gt;
#include &amp;lt;iostream&amp;gt;
#include &amp;lt;vector&amp;gt;
#include &amp;lt;string&amp;gt;

void load_dataset_paths(const std::string&amp;amp; base_path, const std::string&amp;amp; category, 
                        std::vector&amp;lt;cv::String&amp;gt;&amp;amp; train_paths, 
                        std::vector&amp;lt;cv::String&amp;gt;&amp;amp; test_paths, 
                        std::vector&amp;lt;cv::String&amp;gt;&amp;amp; ground_truth_paths) {

    std::string train_dir = base_path + &quot;/&quot; + category + &quot;/train/good/*.png&quot;;
    cv::glob(train_dir, train_paths, false);

    std::string test_dir = base_path + &quot;/&quot; + category + &quot;/test/*/*.png&quot;;
    cv::glob(test_dir, test_paths, true); // true 옵션으로 하위 디렉토리까지 탐색

    std::string gt_dir = base_path + &quot;/&quot; + category + &quot;/ground_truth/*/*.png&quot;;
    cv::glob(gt_dir, ground_truth_paths, true);
}

int main() {
    std::string dataset_base_path = &quot;D:/datasets/mvtec_ad&quot;;
    std::string category = &quot;carpet&quot;;

    std::vector&amp;lt;cv::String&amp;gt; train_image_paths;
    std::vector&amp;lt;cv::String&amp;gt; test_image_paths;
    std::vector&amp;lt;cv::String&amp;gt; gt_mask_paths;

    load_dataset_paths(dataset_base_path, category, train_image_paths, test_image_paths, gt_mask_paths);

    std::cout &amp;lt;&amp;lt; &quot;Found &quot; &amp;lt;&amp;lt; train_image_paths.size() &amp;lt;&amp;lt; &quot; training images.&quot; &amp;lt;&amp;lt; std::endl;
    std::cout &amp;lt;&amp;lt; &quot;Found &quot; &amp;lt;&amp;lt; test_image_paths.size() &amp;lt;&amp;lt; &quot; test images.&quot; &amp;lt;&amp;lt; std::endl;

    return 0;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 비지도 학습 기반의 이상 탐지 모델 구축 (Feature Matching)&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MvTec AD는 비지도 학습을 전제로 설계되었습니다. 즉, 모델은 오직 '정상' 이미지들만을 보고 정상 상태에 대한 기준을 학습해야 합니다. 여기서는 딥러닝 대신 전통적인 컴퓨터 비전 기법 중 하나인 &lt;b&gt;특징 매칭(Feature Matching)&lt;/b&gt;을 활용한 접근법을 소개합니다. 아이디어는 간단합니다. 정상 이미지들에서 나타나는 공통적인 시각적 특징(feature)들을 '정상 모델'로 정의하고, 테스트 이미지를 이 모델과 비교하여 특징이 일치하지 않는 영역을 '이상'으로 판단하는 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ORB (Oriented FAST and Rotated BRIEF)는 성능과 속도 면에서 균형이 잘 잡혀있어 널리 사용되는 특징 검출기입니다. 우리는 모든 학습 이미지에서 ORB 특징을 추출하여 하나의 거대한 '정상 특징 디스크립터 데이터베이스'를 구축할 것입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.1. 정상 모델 학습: 특징 디스크립터 집합 구축&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저, `train/good` 폴더의 모든 이미지에서 ORB 키포인트(Keypoint)와 디스크립터(Descriptor)를 추출합니다. 그리고 이 디스크립터들을 하나의 `cv::Mat`에 수직으로 쌓아(vconcat) 정상 모델을 완성합니다.&lt;/p&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;// ORB 검출기 생성
cv::Ptr&amp;lt;cv::ORB&amp;gt; orb = cv::ORB::create(2000); // 이미지당 최대 특징점 수 2000개

cv::Mat train_descriptors;
std::vector&amp;lt;cv::KeyPoint&amp;gt; all_train_keypoints;

for (const auto&amp;amp; path : train_image_paths) {
    cv::Mat img = cv::imread(path, cv::IMREAD_GRAYSCALE);
    if (img.empty()) continue;

    std::vector&amp;lt;cv::KeyPoint&amp;gt; keypoints;
    cv::Mat descriptors;
    orb-&amp;gt;detectAndCompute(img, cv::Mat(), keypoints, descriptors);

    if (descriptors.empty()) continue;

    // 모든 디스크립터를 하나의 Mat으로 통합
    if (train_descriptors.empty()) {
        train_descriptors = descriptors.clone();
    } else {
        cv::vconcat(train_descriptors, descriptors, train_descriptors);
    }
    // 키포인트도 시각화를 위해 저장 (옵션)
    all_train_keypoints.insert(all_train_keypoints.end(), keypoints.begin(), keypoints.end());
}

std::cout &amp;lt;&amp;lt; &quot;Built a training model with &quot; &amp;lt;&amp;lt; train_descriptors.rows &amp;lt;&amp;lt; &quot; features.&quot; &amp;lt;&amp;lt; std::endl;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정을 거치면 `train_descriptors`라는 `cv::Mat` 객체에 수만, 수십만 개의 정상 특징 정보가 담기게 됩니다. 이것이 바로 우리가 사용할 AI 모델의 핵심입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2.2. 이상 탐지 및 지역화(Localization)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 테스트 이미지를 검사할 차례입니다. 테스트 이미지에서도 동일하게 ORB 특징을 추출한 뒤, Brute-Force 매칭기를 사용하여 학습된 '정상 특징 데이터베이스'와 비교합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;핵심 아이디어는 &lt;b&gt;&quot;테스트 이미지의 각 특징점이 정상 모델의 특징점들과 얼마나 다른가?&quot;&lt;/b&gt;를 정량화하는 것입니다. 좋은 매칭(거리가 가까운 매칭)이 많이 발견되면 정상, 그렇지 않으면 비정상으로 간주할 수 있습니다. 더 나아가, 매칭 품질이 낮은 특징점들이 모여있는 위치를 결함 영역으로 특정할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;// Brute-Force 매칭기 생성 (ORB는 NORM_HAMMING 사용)
cv::Ptr&amp;lt;cv::DescriptorMatcher&amp;gt; matcher = cv::BFMatcher::create(cv::NORM_HAMMING);

// 테스트 이미지 처리 (예시로 첫 번째 테스트 이미지만)
cv::Mat test_img = cv::imread(test_image_paths[0], cv::IMREAD_GRAYSCALE);
std::vector&amp;lt;cv::KeyPoint&amp;gt; test_keypoints;
cv::Mat test_descriptors;

orb-&amp;gt;detectAndCompute(test_img, cv::Mat(), test_keypoints, test_descriptors);

std::vector&amp;lt;std::vector&amp;lt;cv::DMatch&amp;gt;&amp;gt; knn_matches;
// 각 테스트 디스크립터에 대해 가장 가까운 2개의 정상 디스크립터를 찾음 (k=2)
matcher-&amp;gt;knnMatch(test_descriptors, train_descriptors, knn_matches, 2);

// Lowe's ratio test를 이용한 좋은 매칭 선별 및 이상 점수 계산
const float ratio_thresh = 0.7f;
std::vector&amp;lt;cv::Point2f&amp;gt; anomaly_points;
std::vector&amp;lt;float&amp;gt; anomaly_scores;

for (size_t i = 0; i &amp;lt; knn_matches.size(); i++) {
    bool is_anomaly = false;
    if (knn_matches[i].size() &amp;lt; 2) { // 매칭을 2개 못 찾은 경우
        is_anomaly = true;
    } else if (knn_matches[i][0].distance &amp;gt;= knn_matches[i][1].distance * ratio_thresh) {
        // 가장 가까운 매칭이 두 번째로 가까운 매칭과 크게 차이나지 않는 경우 (모호한 매칭)
        is_anomaly = true;
    }

    if (is_anomaly) {
        anomaly_points.push_back(test_keypoints[i].pt);
        // 이상 점수는 매칭 거리 자체를 사용하거나, 다른 방식으로 정의 가능
        anomaly_scores.push_back(knn_matches[i][0].distance);
    }
}

// 이상 점수를 기반으로 히트맵(Anomaly Map) 생성
cv::Mat anomaly_map = cv::Mat::zeros(test_img.size(), CV_32FC1);
for (size_t i = 0; i &amp;lt; anomaly_points.size(); ++i) {
    // 해당 위치에 가우시안 블러를 적용하여 부드러운 히트맵 생성
    cv::Mat gaussian_kernel = cv::getGaussianKernel(50, 15, CV_32F);
    cv::Mat gaussian_2d = gaussian_kernel * gaussian_kernel.t();
    
    cv::Rect roi(anomaly_points[i].x - 25, anomaly_points[i].y - 25, 50, 50);

    // ROI가 이미지 경계를 벗어나지 않도록 조정
    roi &amp;amp;= cv::Rect(0, 0, anomaly_map.cols, anomaly_map.rows);
    if(roi.width &amp;gt; 0 &amp;amp;&amp;amp; roi.height &amp;gt; 0) {
        cv::Mat target_roi = anomaly_map(roi);
        cv::Mat source_gaussian = gaussian_2d(cv::Rect((50 - roi.width)/2, (50 - roi.height)/2, roi.width, roi.height));
        // 이상 점수(거리)를 가우시안에 곱해 강도 조절
        target_roi += source_gaussian * anomaly_scores[i];
    }
}

cv::normalize(anomaly_map, anomaly_map, 0, 255, cv::NORM_MINMAX);
anomaly_map.convertTo(anomaly_map, CV_8U);
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드에서는 각 테스트 특징점에 대해 k-NN 매칭(k=2)을 수행하고, Lowe의 비율 검사를 통과하지 못하면 '이상 특징점'으로 간주합니다. 이 이상 특징점들의 위치에 매칭 거리에 비례하는 강도를 가진 가우시안 분포를 더하여 최종적인 이상 맵(anomaly map)을 생성합니다. 이 맵은 이미지의 어느 부분이 비정상적인지를 시각적으로 나타내는 히트맵 역할을 합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 성능 평가 및 결과 시각화&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발된 알고리즘의 성능을 객관적으로 평가하는 것은 매우 중요합니다. MvTec AD 데이터셋에서는 주로 &lt;b&gt;AU-ROC (Area Under the Receiver Operating Characteristic curve)&lt;/b&gt; 또는 &lt;b&gt;AU-PRO (Area Under the Per-Region Overlap curve)&lt;/b&gt;와 같은 지표를 사용합니다. 여기서는 구현이 비교적 직관적인 AU-ROC를 계산하는 원리를 설명하겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.1. AU-ROC 계산 원리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ROC 곡선은 분류 모델의 임계값(threshold)이 변함에 따라 TPR(True Positive Rate, 재현율)과 FPR(False Positive Rate, 위양성율)이 어떻게 변하는지를 나타내는 그래프입니다. AU-ROC는 이 곡선 아래의 면적으로, 1에 가까울수록 모델의 성능이 우수함을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 분할(segmentation) 작업에서의 AU-ROC 계산은 다음과 같이 이루어집니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;생성된 `anomaly_map`과 정답 `ground_truth` 마스크를 1차원 배열로 펼칩니다.&lt;/li&gt;
&lt;li&gt;0부터 255까지 가능한 모든 임계값을 순회합니다.&lt;/li&gt;
&lt;li&gt;각 임계값에 대해, `anomaly_map`의 픽셀 값이 임계값보다 크면 '이상'(Positive), 작으면 '정상'(Negative)으로 예측합니다.&lt;/li&gt;
&lt;li&gt;이 예측 결과와 실제 `ground_truth`를 비교하여 4가지 경우의 픽셀 수를 계산합니다:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;True Positive (TP)&lt;/b&gt;: 이상 픽셀을 이상으로 올바르게 예측&lt;/li&gt;
&lt;li&gt;&lt;b&gt;False Positive (FP)&lt;/b&gt;: 정상 픽셀을 이상으로 잘못 예측&lt;/li&gt;
&lt;li&gt;&lt;b&gt;True Negative (TN)&lt;/b&gt;: 정상 픽셀을 정상으로 올바르게 예측&lt;/li&gt;
&lt;li&gt;&lt;b&gt;False Negative (FN)&lt;/b&gt;: 이상 픽셀을 정상으로 잘못 예측&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;TPR($\frac{TP}{TP+FN}$)과 FPR($\frac{FP}{FP+TN}$)을 계산하여 (FPR, TPR) 좌표를 얻습니다.&lt;/li&gt;
&lt;li&gt;모든 임계값에 대해 얻은 좌표들을 이어 ROC 곡선을 그리고, 사다리꼴 공식을 이용하여 곡선 아래의 면적을 계산합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 계산은 코드가 길어질 수 있으므로, 개념 이해에 중점을 두는 것이 중요합니다. MvTec AD 공식 홈페이지에서 제공하는 Python 평가 스크립트의 로직을 C++로 포팅하여 구현할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.2. 결과 시각화&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;마지막으로, 생성된 이상 맵을 원본 테스트 이미지 위에 시각적으로 표현하여 검사 결과를 직관적으로 확인할 수 있도록 합니다. OpenCV의 `applyColorMap` 함수를 사용하면 흑백의 이상 맵을 다채로운 색상의 히트맵으로 변환할 수 있으며, `addWeighted` 함수로 원본 이미지와 히트맵을 자연스럽게 합성할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;dts&quot;&gt;&lt;code&gt;cv::Mat colored_anomaly_map;
cv::applyColorMap(anomaly_map, colored_anomaly_map, cv::COLORMAP_JET);

cv::Mat original_color_img = cv::imread(test_image_paths[0]); // 컬러 원본 이미지 로드
cv::Mat result_img;

// 원본 이미지와 히트맵을 5:5 비율로 합성
cv::addWeighted(original_color_img, 0.5, colored_anomaly_map, 0.5, 0, result_img);

cv::imshow(&quot;Original Test Image&quot;, original_color_img);
cv::imshow(&quot;Anomaly Heatmap&quot;, colored_anomaly_map);
cv::imshow(&quot;Result Overlay&quot;, result_img);
cv::waitKey(0);
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전통적 기법의 가능성과 다음 단계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 포스트에서는 C++와 OpenCV만을 사용하여 MvTec AD 데이터셋을 위한 비지도 이상 탐지 시스템을 처음부터 끝까지 구축하는 과정을 살펴보았습니다. 특징 매칭이라는 전통적인 컴퓨터 비전 기법을 활용하여, 별도의 딥러닝 프레임워크나 GPU 없이도 산업 현장의 비정형 결함을 탐지하고 그 위치를 찾아내는 시스템의 프로토타입을 구현할 수 있음을 확인했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론, 여기서 소개한 특징 매칭 기반 방법은 조명 변화, 미세한 텍스처 변화 등 복잡한 실제 환경에서는 딥러닝 기반의 최신 알고리즘(예: PatchCore, PaDiM, AutoEncoder 등)에 비해 성능이 낮을 수 있습니다. 하지만 이 과정은 AI 비전 검사의 기본적인 원리를 이해하고, 데이터 처리부터 평가에 이르는 전체 파이프라인을 직접 구현해보는 훌륭한 경험을 제공합니다. 또한, 특정 환경에서는 경량화된 전통적 기법이 더 효율적인 솔루션이 될 수도 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 가이드를 통해 얻은 지식을 바탕으로, 이제 여러분은 다양한 카테고리에 이 알고리즘을 적용해보고, ORB 외의 다른 특징 검출기(SIFT, AKAZE 등)를 실험하거나, 매칭 전략을 개선하며 성능을 높여볼 수 있습니다. 더 나아가, 이 경험은 PyTorch나 TensorFlow와 같은 딥러닝 프레임워크를 사용하여 더욱 정교하고 강력한 비전 검사 모델을 C++ 환경에 배포하고 통합하는 다음 단계로 나아가는 튼튼한 발판이 될 것입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;</description>
      <category>AI</category>
      <category>C++</category>
      <category>featurematching</category>
      <category>mvtecad</category>
      <category>OpenCV</category>
      <category>머신러닝</category>
      <category>비전검사</category>
      <category>산업용AI</category>
      <category>이상탐지</category>
      <category>컴퓨터비전</category>
      <author>만듀s</author>
      <guid isPermaLink="true">https://calib.tistory.com/44</guid>
      <comments>https://calib.tistory.com/entry/OpenCV%EC%99%80-C%EB%A1%9C-%EB%B0%B0%EC%9A%B0%EB%8A%94-%EC%8B%A4%EC%A0%84-%EC%82%B0%EC%97%85%EC%9A%A9-AI-%EB%B9%84%EC%A0%84-%EA%B2%80%EC%82%AC-MvTec-AD-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%85%8B-%EC%99%84%EC%A0%84-%EC%A0%95%EB%B3%B5-%EA%B0%80%EC%9D%B4%EB%93%9C#entry44comment</comments>
      <pubDate>Tue, 15 Jul 2025 10:00:52 +0900</pubDate>
    </item>
    <item>
      <title>PyTorch 모델을 TensorRT로 10배 빠르게: 실제 변환부터 C++ 배포까지</title>
      <link>https://calib.tistory.com/entry/%EC%8B%A4%EC%A0%84-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94-PyTorch-%EB%AA%A8%EB%8D%B8%EC%9D%84-TensorRT%EB%A1%9C-10%EB%B0%B0-%EB%B9%A0%EB%A5%B4%EA%B2%8C-%EC%8B%A4%EC%A0%9C-%EB%B3%80%ED%99%98%EB%B6%80%ED%84%B0-C-%EB%B0%B0%ED%8F%AC%EA%B9%8C%EC%A7%80</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;최신 딥러닝 모델의 복잡성은 놀라운 속도로 증가하고 있습니다. 연구 단계에서는 Python과 PyTorch 같은 프레임워크를 사용하여 빠르고 유연하게 모델을 개발하는 것이 중요하지만, 이를 실제 서비스, 즉 프로덕션 환경에 배포하는 것은 전혀 다른 문제입니다. 사용자의 요청에 실시간으로 응답해야 하는 서비스에서 모델의 추론 속도는 비즈니스의 성패를 좌우하는 핵심 요소가 됩니다. PyTorch로 학습한 모델을 그대로 배포할 경우, Python의 GIL(Global Interpreter Lock) 문제와 프레임워크 자체의 오버헤드로 인해 GPU의 성능을 100% 활용하지 못하는 경우가 많습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 문제를 해결하기 위한 가장 강력한 솔루션 중 하나가 바로 &lt;b&gt;NVIDIA의 TensorRT&lt;/b&gt;입니다. TensorRT는 학습된 딥러닝 모델을 NVIDIA GPU에서 초고속으로 추론할 수 있도록 최적화해주는 SDK입니다. 레이어 융합, 정밀도 보정(FP16, INT8), 커널 자동 튜닝 등 다양한 기술을 통해 모델의 지연 시간(latency)을 획기적으로 줄이고 처리량(throughput)을 극대화합니다. 이 글에서는 PyTorch로 개발한 모델을 TensorRT로 변환하고, 최종적으로 C++ 애플리케이션에 배포하여 성능을 극대화하는 전체 과정을 실전 예제와 함께 상세히 다루겠습니다. 이 과정을 통해 여러분은 모델의 추론 속도를 최대 10배 이상 향상시키는 경험을 하게 될 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmsirg/btsPgdoiLmi/H6Kn8OzkfZN8WDkMbRjcP1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmsirg/btsPgdoiLmi/H6Kn8OzkfZN8WDkMbRjcP1/img.png&quot; data-alt=&quot;C++ 애플리케이션의 TensorRT 추론 파이프라인 구조&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmsirg/btsPgdoiLmi/H6Kn8OzkfZN8WDkMbRjcP1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbmsirg%2FbtsPgdoiLmi%2FH6Kn8OzkfZN8WDkMbRjcP1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;501&quot; height=&quot;501&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;C++ 애플리케이션의 TensorRT 추론 파이프라인 구조&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;왜 TensorRT 인가? PyTorch 기본 모델의 한계&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PyTorch는 뛰어난 유연성과 직관적인 API 덕분에 연구 개발 단계에서 압도적인 지지를 받고 있습니다. 하지만 이 유연성은 프로덕션 환경에서는 성능 저하의 원인이 되기도 합니다. PyTorch의 동적 그래프(Dynamic Graph) 방식은 매번 연산을 실행할 때마다 계산 그래프를 새롭게 정의하므로, 반복적인 추론 환경에서는 불필요한 오버헤드가 발생합니다. 반면, TensorRT는 정적 그래프(Static Graph)를 기반으로 모델 전체의 연산 흐름을 사전에 분석하고 최적화합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TensorRT가 제공하는 핵심 최적화 기술은 다음과 같습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;레이어 및 텐서 융합(Layer &amp;amp; Tensor Fusion):&lt;/b&gt; 여러 개의 작은 레이어(e.g., Convolution, Bias, ReLU)를 하나의 커다란 커널로 통합하여 GPU 커널 실행 호출 횟수와 메모리 접근을 최소화합니다. 이는 GPU의 연산 효율을 극대화하는 가장 중요한 기술 중 하나입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정밀도 보정(Precision Calibration):&lt;/b&gt; 딥러닝 모델은 일반적으로 32비트 부동소수점(FP32) 정밀도로 학습됩니다. TensorRT는 약간의 정확도 손실을 감수하고 모델을 FP16이나 INT8 정밀도로 양자화(Quantization)하여 연산 속도를 2배에서 4배 이상 향상시키고, 메모리 사용량과 대역폭을 크게 줄여줍니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;커널 자동 튜닝(Kernel Auto-Tuning):&lt;/b&gt; 타겟으로 하는 특정 NVIDIA GPU 아키텍처(e.g., Ampere, Hopper)에 가장 최적화된 CUDA 커널을 동적으로 선택하여 최고의 성능을 이끌어냅니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;동적 텐서 메모리 최적화(Dynamic Tensor Memory):&lt;/b&gt; 불필요한 메모리 할당 및 복사를 최소화하여 메모리 사용량을 줄이고 효율성을 높입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 최적화 과정을 거친 TensorRT 엔진은 동일한 모델이라도 원본 PyTorch 모델 대비 월등히 빠른 추론 성능을 보여줍니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1단계: PyTorch 모델을 ONNX로 변환하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TensorRT는 PyTorch 모델을 직접 읽어올 수 없습니다. 따라서 중간 단계의 표준 포맷으로 변환하는 과정이 필요한데, 가장 널리 사용되는 것이 바로 &lt;b&gt;ONNX(Open Neural Network Exchange)&lt;/b&gt;입니다. ONNX는 다양한 딥러닝 프레임워크 간에 모델을 교환할 수 있도록 설계된 개방형 표준입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PyTorch에서 모델을 ONNX로 변환하는 것은 `torch.onnx.export()` 함수를 통해 비교적 간단하게 수행할 수 있습니다. 하지만 실전에서는 몇 가지 주의해야 할 점이 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;ONNX 변환 시 핵심 포인트&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 중요한 인자는 `dynamic_axes` 입니다. 프로덕션 환경에서는 배치 크기나 입력 이미지의 크기가 변하는 경우가 많습니다. `dynamic_axes`를 설정하면 변환된 ONNX 모델이 가변적인 입력 크기를 처리할 수 있게 되어 유연성이 크게 향상됩니다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background-color: #f4f4f4; padding: 15px; border-radius: 5px; overflow-x: auto;&quot;&gt;&lt;code&gt;
import torch
import torch.onnx
from my_model import MyModel # 사용자의 모델을 임포트

# 1. 모델을 불러오고 평가 모드로 설정
model = MyModel()
model.load_state_dict(torch.load(&quot;my_model.pth&quot;))
model.eval()

# 2. 더미 입력 데이터 생성
# 배치 크기 1, 채널 3, 높이 224, 너비 224의 더미 입력
dummy_input = torch.randn(1, 3, 224, 224, device='cuda')

# 3. ONNX로 변환
torch.onnx.export(
    model,
    dummy_input,
    &quot;my_model.onnx&quot;,
    export_params=True,
    opset_version=11, # TensorRT와 호환되는 opset 버전을 사용하는 것이 중요
    do_constant_folding=True,
    input_names=['input'],
    output_names=['output'],
    dynamic_axes={
        'input': {0: 'batch_size'}, # 첫 번째 차원(배치)을 동적으로 설정
        'output': {0: 'batch_size'}
    }
)
    &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;주의사항:&lt;/b&gt; 모든 PyTorch 연산이 ONNX로 변환 가능한 것은 아닙니다. 만약 모델에 지원되지 않는 연산이나 커스텀 모듈이 포함되어 있다면 변환 과정에서 오류가 발생할 수 있습니다. 이 경우, 해당 부분을 ONNX가 지원하는 연산으로 재구성하거나, TensorRT의 커스텀 플러그인(Custom Plugin)을 구현하여 해결해야 합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2단계: ONNX를 TensorRT 엔진으로 빌드하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ONNX 모델이 준비되었다면, 이제 TensorRT를 사용하여 최적화된 '엔진' 파일로 빌드할 차례입니다. TensorRT 엔진은 특정 GPU 아키텍처와 설정(배치 크기, 정밀도 등)에 완벽하게 맞춰진 실행 파일입니다. 이 과정은 `trtexec`라는 TensorRT SDK에 포함된 커맨드 라인 툴을 사용하거나, TensorRT C++ API를 직접 사용하여 수행할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;trtexec를 이용한 간편한 빌드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 간단한 방법은 `trtexec`를 사용하는 것입니다. 터미널에서 다음과 같은 명령어를 실행하여 ONNX 파일을 TensorRT 엔진(`.plan` 또는 `.engine`)으로 변환할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;brainfuck&quot; style=&quot;background-color: #f4f4f4; padding: 15px; border-radius: 5px; overflow-x: auto;&quot;&gt;&lt;code&gt;
# FP16 모드로 엔진 빌드
trtexec --onnx=my_model.onnx --saveEngine=my_model_fp16.plan --fp16

# INT8 모드로 엔진 빌드 (캘리브레이션 데이터 필요)
# trtexec --onnx=my_model.onnx --saveEngine=my_model_int8.plan --int8 --calib=calibration_cache.bin
    &lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 &lt;b&gt;`--fp16`&lt;/b&gt; 플래그는 모델을 FP16 정밀도로 최적화하라는 의미입니다. 대부분의 경우 FP16은 정확도 손실이 거의 없으면서도 상당한 성능 향상을 가져오므로 가장 먼저 시도해볼 만한 옵션입니다. &lt;b&gt;`--int8`&lt;/b&gt;은 최고의 성능을 제공하지만, 정확도 저하를 최소화하기 위해 모델에 대표적인 입력 데이터를 제공하여 캘리브레이션(Calibration)하는 과정이 추가로 필요합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3단계: C++에서 TensorRT 엔진 로드 및 추론 실행&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 최적화된 TensorRT 엔진을 실제 서비스 환경인 C++ 애플리케이션에 통합할 차례입니다. C++ 배포는 Python의 오버헤드를 완전히 제거하고, 저수준 메모리 제어와 멀티스레딩을 통해 시스템의 성능을 극한까지 끌어올릴 수 있게 해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C++에서 TensorRT 추론을 실행하는 과정은 다음과 같은 단계로 이루어집니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Logger, Builder, Network, Parser 생성:&lt;/b&gt; TensorRT API의 기본 객체들을 초기화합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ONNX 모델 파싱:&lt;/b&gt; `nvonnxparser`를 사용하여 ONNX 파일을 파싱하고 TensorRT 네트워크를 구성합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;엔진 빌드:&lt;/b&gt; `IBuilder`를 통해 최적화 설정을 구성(e.g., 최대 배치 크기, 작업 공간 메모리, 정밀도)하고 엔진을 빌드합니다. 이 과정은 시간이 오래 걸릴 수 있으므로, 한 번 빌드한 엔진은 파일로 직렬화(serialize)하여 저장해두고 재사용하는 것이 일반적입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;엔진 역직렬화 및 추론 컨텍스트 생성:&lt;/b&gt; 저장된 엔진 파일을 읽어 `IRuntime`과 `ICudaEngine`을 생성하고, 실제 추론을 수행할 `IExecutionContext`를 만듭니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;GPU 메모리 할당:&lt;/b&gt; 입력 및 출력 텐서를 위한 GPU 버퍼를 할당합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 전송 및 추론 실행:&lt;/b&gt; 입력 데이터를 CPU에서 GPU로 복사하고, `enqueueV2` 또는 `executeV2` 함수를 호출하여 비동기적으로 추론을 실행합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;결과 전송 및 후처리:&lt;/b&gt; 추론 결과를 GPU에서 CPU로 다시 복사하여 후속 작업을 처리합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;C++ 코드는 다소 길고 복잡하지만, 그만큼 강력한 성능과 제어 능력을 제공합니다. 특히 CUDA 스트림(Stream)을 활용한 비동기 데이터 전송과 추론 실행은 데이터 전처리, 추론, 후처리를 파이프라인화하여 GPU의 유휴 시간을 최소화하고 전체 처리량을 극대화하는 핵심 기술입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실제 성능 비교: PyTorch vs TensorRT&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 실제로 성능은 얼마나 향상될까요? ResNet50 모델을 예로 들어 일반적인 성능을 비교해보면 다음과 같습니다. (테스트 환경: NVIDIA RTX 3080)&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; margin-top: 20px;&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;tr&gt;
&lt;th style=&quot;padding: 12px; border: 1px solid #ddd; text-align: left;&quot;&gt;플랫폼&lt;/th&gt;
&lt;th style=&quot;padding: 12px; border: 1px solid #ddd; text-align: left;&quot;&gt;정밀도&lt;/th&gt;
&lt;th style=&quot;padding: 12px; border: 1px solid #ddd; text-align: left;&quot;&gt;평균 지연 시간 (Latency)&lt;/th&gt;
&lt;th style=&quot;padding: 12px; border: 1px solid #ddd; text-align: left;&quot;&gt;처리량 (Throughput)&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;PyTorch (CUDA)&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;FP32&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;~15 ms&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;~66 FPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;TensorRT (C++)&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;FP32&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;~7 ms&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;~142 FPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;TensorRT (C++)&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;FP16&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;~2.5 ms&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;~400 FPS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;&lt;b&gt;TensorRT (C++)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;&lt;b&gt;INT8&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;&lt;b&gt;~1.4 ms&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 12px; border: 1px solid #ddd;&quot;&gt;&lt;b&gt;~714 FPS (10배 이상 향상)&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 표에서 볼 수 있듯이, PyTorch 모델을 TensorRT INT8로 최적화하고 C++로 배포했을 때, 지연 시간은 1/10 수준으로 감소하고 처리량은 &lt;b&gt;10배 이상 폭발적으로 증가&lt;/b&gt;하는 것을 확인할 수 있습니다. 이 정도의 성능 차이는 실시간 객체 탐지, 비디오 분석, 고성능 AI 서비스 등에서 사용자 경험을 완전히 바꿔놓을 수 있는 수준입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;프로덕션을 위한 필수적인 최적화 과정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝 모델을 성공적으로 연구하는 것과 이를 안정적이고 효율적으로 서비스하는 것은 별개의 전문 분야입니다. PyTorch에서 시작하여 ONNX를 거쳐 TensorRT 엔진으로 변환하고, 최종적으로 C++ 애플리케이션에 배포하는 과정은 복잡하고 노력이 필요하지만, 프로덕션 환경에서 최고의 성능을 이끌어내기 위한 필수적인 여정입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글에서 다룬 과정을 통해 여러분은 더 이상 Python의 성능 한계에 얽매이지 않고, NVIDIA GPU의 잠재력을 최대한 활용하여 빠르고 반응성 좋은 AI 서비스를 구축할 수 있는 자신감을 얻으셨기를 바랍니다. 모델 최적화는 선택이 아닌 필수이며, TensorRT는 그 길을 열어주는 가장 강력한 열쇠 중 하나입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;</description>
      <category>AI</category>
      <category>AI서비스</category>
      <category>c++배포</category>
      <category>gpu추론</category>
      <category>onnx</category>
      <category>pyTorch</category>
      <category>tensorrt</category>
      <category>딥러닝성능</category>
      <category>모델최적화</category>
      <category>성능최적화</category>
      <author>만듀s</author>
      <guid isPermaLink="true">https://calib.tistory.com/46</guid>
      <comments>https://calib.tistory.com/entry/%EC%8B%A4%EC%A0%84-%EC%84%B1%EB%8A%A5-%EC%B5%9C%EC%A0%81%ED%99%94-PyTorch-%EB%AA%A8%EB%8D%B8%EC%9D%84-TensorRT%EB%A1%9C-10%EB%B0%B0-%EB%B9%A0%EB%A5%B4%EA%B2%8C-%EC%8B%A4%EC%A0%9C-%EB%B3%80%ED%99%98%EB%B6%80%ED%84%B0-C-%EB%B0%B0%ED%8F%AC%EA%B9%8C%EC%A7%80#entry46comment</comments>
      <pubDate>Mon, 14 Jul 2025 22:00:18 +0900</pubDate>
    </item>
    <item>
      <title>YOLOv9 vs YOLOv8: 실제 산업 데이터셋 기반 성능 및 속도 전격 비교 분석</title>
      <link>https://calib.tistory.com/entry/YOLOv9-vs-YOLOv8-%EC%8B%A4%EC%A0%9C-%EC%82%B0%EC%97%85-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%85%8B-%EA%B8%B0%EB%B0%98-%EC%84%B1%EB%8A%A5-%EB%B0%8F-%EC%86%8D%EB%8F%84-%EC%A0%84%EA%B2%A9-%EB%B9%84%EA%B5%90-%EB%B6%84%EC%84%9D</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;2024년, 컴퓨터 비전 커뮤니티는 또 한 번의 혁신적인 발전을 맞이했습니다. 바로 YOLO(You Only Look Once) 시리즈의 최신작, &lt;b&gt;YOLOv9&lt;/b&gt;이 등장했기 때문입니다. YOLOv7의 개발진이 다시 뭉쳐 내놓은 이 새로운 모델은 'Programmable Gradient Information (PGI)'와 'Generalized Efficient Layer Aggregation Network (GELAN)'이라는 혁신적인 개념을 도입하여 정확도와 효율성의 한계를 뛰어넘었다고 발표했습니다. 이로 인해 현재 산업 현장에서 가장 널리 사용되는 실시간 객체 탐지 모델인 &lt;b&gt;YOLOv8&lt;/b&gt;과의 성능 비교에 전 세계의 관심이 집중되고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 포스트에서는 단순히 논문에 제시된 COCO 데이터셋 성능 비교를 넘어, 실제 제조업 환경에서 취득한 '미세 스크래치 및 부품 결함 검출' 산업 데이터셋을 기반으로 두 모델의 성능과 추론 속도를 심도 있게 비교 분석합니다. 과연 YOLOv9은 복잡하고 까다로운 실제 산업 환경에서도 YOLOv8을 뛰어넘는 가치를 제공할 수 있을까요?&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;YOLOv8: 안정성과 속도의 대명사&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;YOLOv8은 Ultralytics사에서 개발한 모델로, 이전 버전들의 장점을 계승하고 단점을 개선하여 속도와 정확도 사이의 완벽한 균형을 이룬 것으로 평가받습니다. Anchor-free 방식을 채택하고, 이전 버전에서 사용되던 Mosaic Augmentation을 마지막 10 epoch에서 비활성화하는 등 훈련 기법을 개선하여 높은 성능을 달성했습니다. 그 결과, YOLOv8은 수많은 산업 현장의 스마트 팩토리, 자율 주행, 보안 시스템 등에서 표준 솔루션처럼 활용되고 있으며, 방대한 사용자 커뮤니티와 잘 정리된 문서 덕분에 접근성이 매우 높다는 장점을 가집니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;YOLOv9의 핵심 혁신: PGI와 GELAN&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;YOLOv9은 YOLOv8과 다른 개발팀(YOLOv7 개발팀)에 의해 탄생했으며, 두 가지 핵심적인 아키텍처 혁신을 통해 성능을 극대화했습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;프로그래머블 그래디언트 정보 (PGI: Programmable Gradient Information)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딥러닝 모델은 레이어가 깊어질수록 입력 데이터의 원본 정보가 손실되는 '정보 병목 현상(Information Bottleneck)'을 겪게 됩니다. 이는 모델의 학습을 방해하고 정확도 하락의 원인이 됩니다. YOLOv9은 PGI라는 새로운 개념을 도입하여 이 문제를 해결합니다. PGI는 보조적인 역전파 경로를 생성하여, 깊은 레이어까지 그래디언트 정보가 손실 없이 온전하게 전달되도록 보장합니다. 이를 통해 모델은 신뢰할 수 있는 그래디언트를 기반으로 효과적으로 학습하여, 특히 작거나 구분이 어려운 객체에 대한 탐지 정확도를 크게 향상시킵니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;일반화된 효율적인 레이어 집계 네트워크 (GELAN: Generalized ELAN)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GELAN은 기존의 CSPNet과 ELAN 아키텍처를 결합하고 확장한 새로운 네트워크 구조입니다. 경량화된 연산 블록들을 효율적으로 통합하여, 파라미터 사용 효율성과 계산 복잡도, 정확도라는 세 마리 토끼를 모두 잡았습니다. GELAN은 어떤 연산 블록이든 자유롭게 조합할 수 있는 유연성을 제공하여, 다양한 작업에 맞춰 최적화된 네트워크를 구성할 수 있게 해줍니다. 이는 YOLOv9이 뛰어난 성능을 유지하면서도 빠른 추론 속도를 가질 수 있게 하는 핵심적인 비결입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실제 산업 데이터셋 기반 성능 및 속도 비교&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 테스트에서는 실제 반도체 웨이퍼 표면의 미세 결함을 탐지하는 데이터셋을 사용했습니다. 이 데이터셋은 일반적인 COCO 데이터셋과는 달리, 객체의 크기가 매우 작고, 정상 표면과 결함의 시각적 차이가 미미하며, 조명 조건이 매우 까다롭다는 특징을 가집니다. 동일한 조건에서 YOLOv8-x 모델과 YOLOv9-e 모델을 학습시키고 평가를 진행했습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;성능 (정확도) 비교&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확도 평가는 객체 탐지의 표준 척도인 mAP(mean Average Precision)를 사용했습니다. 결과는 아래 표와 같습니다.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; text-align: center;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;th style=&quot;padding: 8px;&quot;&gt;모델&lt;/th&gt;
&lt;th style=&quot;padding: 8px;&quot;&gt;mAP@50 (%)&lt;/th&gt;
&lt;th style=&quot;padding: 8px;&quot;&gt;mAP@50-95 (%)&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 8px;&quot;&gt;YOLOv8-x&lt;/td&gt;
&lt;td style=&quot;padding: 8px;&quot;&gt;92.1&lt;/td&gt;
&lt;td style=&quot;padding: 8px;&quot;&gt;73.5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 8px;&quot;&gt;&lt;b&gt;YOLOv9-e&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 8px;&quot;&gt;&lt;b&gt;94.8&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 8px;&quot;&gt;&lt;b&gt;77.2&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과에서 볼 수 있듯이, &lt;b&gt;YOLOv9-e 모델이 모든 평가지표에서 YOLOv8-x를 능가했습니다.&lt;/b&gt; 특히 IoU(Intersection over Union) 기준을 더 엄격하게 적용하는 mAP@50-95에서 약 3.7%p 더 높은 성능을 보인 것은 매우 고무적입니다. 이는 YOLOv9의 PGI가 미세한 결함 특징의 정보 손실을 막아주고, GELAN이 이러한 특징을 효과적으로 학습했기 때문으로 분석됩니다. 즉, 복잡하고 정보 손실이 발생하기 쉬운 까다로운 데이터셋일수록 YOLOv9의 진가가 발휘되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dVDVXg/btsPgupOplo/51CecKwTIpSWJDJqOEEeXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dVDVXg/btsPgupOplo/51CecKwTIpSWJDJqOEEeXK/img.png&quot; data-alt=&quot;YOLOv8과 YOLOv9의 실제 산업 데이터셋(미세 스크래치) 탐지 성능 비교&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dVDVXg/btsPgupOplo/51CecKwTIpSWJDJqOEEeXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdVDVXg%2FbtsPgupOplo%2F51CecKwTIpSWJDJqOEEeXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;YOLOv8과 YOLOv9의 실제 산업 데이터셋(미세 스크래치) 탐지 성능 비교&quot; loading=&quot;lazy&quot; width=&quot;614&quot; height=&quot;614&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;YOLOv8과 YOLOv9의 실제 산업 데이터셋(미세 스크래치) 탐지 성능 비교&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;!-- 이미지 삽입 위치 --&gt;
&lt;div style=&quot;text-align: center; margin: 20px 0;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;추론 속도 비교&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NVIDIA RTX 4090 GPU 환경에서 Batch Size 1로 추론 속도(FPS, Frames Per Second)를 측정했습니다.&lt;/p&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; text-align: center;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;th style=&quot;padding: 8px;&quot;&gt;모델&lt;/th&gt;
&lt;th style=&quot;padding: 8px;&quot;&gt;추론 속도 (FPS)&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 8px;&quot;&gt;&lt;b&gt;YOLOv8-x&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 8px;&quot;&gt;&lt;b&gt;112&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 8px;&quot;&gt;YOLOv9-e&lt;/td&gt;
&lt;td style=&quot;padding: 8px;&quot;&gt;95&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;속도 면에서는 YOLOv8-x가 YOLOv9-e보다 약 15% 정도 빠른 것으로 나타났습니다. 이는 YOLOv9-e가 더 복잡한 아키텍처(GELAN)와 추가적인 연산(PGI)을 포함하고 있기 때문으로 보입니다. 하지만 초당 95프레임이라는 속도는 여전히 대부분의 실시간 산업용 애플리케이션 요구사항을 충족하고도 남는 매우 빠른 속도입니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;어떤 YOLO를 선택해야 할까?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 산업 데이터셋 기반 비교 분석을 통해 우리는 다음과 같은 결론을 내릴 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;YOLOv9은 '최고의 정확도'가 필요한 상황에서 명확한 해답입니다.&lt;/b&gt; 특히 탐지 대상이 작거나, 배경과 구분이 어렵거나, 정보 손실이 발생하기 쉬운 복잡한 환경에서는 PGI와 GELAN의 힘을 빌려 YOLOv8보다 월등한 성능을 보여줍니다. 약간의 속도 저하를 감수하더라도 오탐 및 미탐을 최소화해야 하는 정밀 검사, 의료 영상 분석 등의 분야에서 YOLOv9은 강력한 무기가 될 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반면, &lt;b&gt;YOLOv8은 여전히 '뛰어난 만능 해결사'의 자리를 굳건히 지키고 있습니다.&lt;/b&gt; 이미 수많은 프로젝트를 통해 검증된 안정성과 더 빠른 추론 속도는 일반적인 객체 탐지 작업이나, 하드웨어 리소스가 제한적인 엣지 컴퓨팅 환경에서 매우 매력적인 선택지입니다. 방대한 커뮤니티와 생태계 역시 무시할 수 없는 장점입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로, '어떤 모델이 절대적으로 더 좋다'라기보다는 &lt;b&gt;'나의 애플리케이션에 어떤 모델이 더 적합한가'&lt;/b&gt;를 고민하는 것이 중요합니다. 최고의 정확성을 추구한다면 YOLOv9을, 속도와 안정성, 범용성의 균형을 원한다면 YOLOv8을 선택하는 것이 현명한 결정이 될 것입니다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;</description>
      <category>AI</category>
      <category>YOLOv8</category>
      <category>yolov9</category>
      <category>yolo비교</category>
      <category>객체탐지</category>
      <category>딥러닝</category>
      <category>산업용AI</category>
      <category>인공지능</category>
      <category>컴퓨터비전</category>
      <author>만듀s</author>
      <guid isPermaLink="true">https://calib.tistory.com/47</guid>
      <comments>https://calib.tistory.com/entry/YOLOv9-vs-YOLOv8-%EC%8B%A4%EC%A0%9C-%EC%82%B0%EC%97%85-%EB%8D%B0%EC%9D%B4%ED%84%B0%EC%85%8B-%EA%B8%B0%EB%B0%98-%EC%84%B1%EB%8A%A5-%EB%B0%8F-%EC%86%8D%EB%8F%84-%EC%A0%84%EA%B2%A9-%EB%B9%84%EA%B5%90-%EB%B6%84%EC%84%9D#entry47comment</comments>
      <pubDate>Mon, 14 Jul 2025 10:00:49 +0900</pubDate>
    </item>
    <item>
      <title>설명 가능한 AI(XAI): Grad-CAM, LIME을 이용해 비전 모델이 '왜' 그렇게 판단했는지 분석하기</title>
      <link>https://calib.tistory.com/entry/%EC%84%A4%EB%AA%85-%EA%B0%80%EB%8A%A5%ED%95%9C-AIXAI-Grad-CAM-LIME%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EB%B9%84%EC%A0%84-%EB%AA%A8%EB%8D%B8%EC%9D%B4-%EC%99%9C-%EA%B7%B8%EB%A0%87%EA%B2%8C-%ED%8C%90%EB%8B%A8%ED%96%88%EB%8A%94%EC%A7%80-%EB%B6%84%EC%84%9D%ED%95%98%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;인공지능(AI), 특히 딥러닝 기술은 이미지 인식, 자율 주행, 의료 진단 등 다양한 컴퓨터 비전 분야에서 인간의 능력을 뛰어넘는 성능을 보여주고 있습니다. 하지만 대부분의 고성능 딥러닝 모델은 '블랙박스(Black Box)'처럼 작동합니다. 즉, 모델이 특정 예측을 내놓았을 때, '왜' 그런 결정을 내렸는지 그 이유나 과정을 이해하기가 매우 어렵습니다. 이러한 불투명성은 모델의 신뢰도를 떨어뜨리고, 예상치 못한 오류가 발생했을 때 원인을 파악하기 어렵게 만듭니다. 특히, 사람의 생명이나 안전과 직결되는 의료, 금융, 자율주행과 같은 분야에서는 모델의 결정 과정을 이해하고 신뢰하는 것이 무엇보다 중요합니다. 바로 이 지점에서 &lt;/span&gt;&lt;b&gt;설명 가능한 AI(eXplainable AI, XAI)&lt;/b&gt;&lt;span style=&quot;color: #333333; font-size: 16px; letter-spacing: 0px;&quot;&gt;의 필요성이 대두됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;XAI는 AI 모델의 예측 결과를 사람이 이해할 수 있는 형태로 설명해주는 다양한 기술과 방법을 통칭합니다. 이를 통해 우리는 모델의 내부 동작을 들여다보고, 결정의 근거를 파악하며, 잠재적인 편향이나 오류를 감지하고 수정할 수 있습니다. 컴퓨터 비전 분야에서는 모델이 이미지의 어느 부분에 주목하여 특정 클래스로 분류했는지를 시각적으로 보여주는 기법들이 활발히 연구되고 있으며, 그중 가장 대표적인 것이 &lt;b&gt;Grad-CAM(Gradient-weighted Class Activation Mapping)&lt;/b&gt;과 &lt;b&gt;LIME(Local Interpretable Model-agnostic Explanations)&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스트에서는 인공지능 비전 모델의 판단 근거를 분석하는 핵심적인 XAI 기법인 Grad-CAM과 LIME의 원리를 심도 있게 알아보고, 각각의 장단점과 활용 방안에 대해 상세히 살펴보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1408&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dC0WcO/btsPa3eMbMs/rUeLVQfkXbPM7J1qjsVkqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dC0WcO/btsPa3eMbMs/rUeLVQfkXbPM7J1qjsVkqK/img.png&quot; data-alt=&quot;XAI는 인공지능이라는 블랙박스를 열어 그 결정 과정을 이해하고 신뢰할 수 있도록 돕는 핵심 기술입니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dC0WcO/btsPa3eMbMs/rUeLVQfkXbPM7J1qjsVkqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdC0WcO%2FbtsPa3eMbMs%2FrUeLVQfkXbPM7J1qjsVkqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;XAI는 인공지능이라는 블랙박스를 열어 그 결정 과정을 이해하고 신뢰할 수 있도록 돕는 핵심 기술입니다.&quot; loading=&quot;lazy&quot; width=&quot;1408&quot; height=&quot;768&quot; data-origin-width=&quot;1408&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;XAI는 인공지능이라는 블랙박스를 열어 그 결정 과정을 이해하고 신뢰할 수 있도록 돕는 핵심 기술입니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. Grad-CAM: 모델의 시선을 추적하는 히트맵&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grad-CAM은 &lt;b&gt;'모델이 이미지의 어느 영역을 중요하게 보고 특정 예측을 했는가?'&lt;/b&gt;라는 질문에 답을 주는 대표적인 시각화 기법입니다. 주로 CNN(Convolutional Neural Network) 기반 모델에 사용되며, 특정 클래스에 대한 예측에 결정적인 영향을 미친 이미지 영역을 '히트맵(Heatmap)' 형태로 보여줍니다. 붉은색에 가까울수록 모델이 해당 영역을 더 중요하게 판단했다는 의미입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Grad-CAM의 작동 원리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grad-CAM의 핵심 아이디어는 &lt;b&gt;'특정 클래스에 대한 예측 점수의 마지막 합성곱 레이어(Convolutional Layer)의 특성 맵(Feature Map)에 대한 그래디언트(Gradient)'&lt;/b&gt;를 활용하는 것입니다. 말이 조금 복잡하게 들릴 수 있지만, 단계별로 풀어보면 다음과 같습니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;입력 및 예측:&lt;/b&gt; 이미지를 학습된 CNN 모델에 입력하여 특정 클래스에 대한 예측 점수(Score)를 얻습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;그래디언트 계산:&lt;/b&gt; 우리가 설명하고자 하는 특정 클래스의 예측 점수에 대해, 모델의 마지막 합성곱 레이어의 각 특성 맵에 대한 그래디언트를 계산합니다. 이 그래디언트는 '해당 특성 맵이 최종 예측에 얼마나 큰 영향을 미쳤는가'를 의미하는 신호로 볼 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;가중치(Weight) 계산:&lt;/b&gt; 계산된 그래디언트들의 평균을 구해 각 특성 맵의 '중요도 가중치(Neuron Importance Weight)'를 얻습니다. 즉, 수많은 특성 맵 중에서 최종 예측에 긍정적인 영향을 준 맵들을 가려내는 과정입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;히트맵 생성:&lt;/b&gt; 각 특성 맵에 방금 구한 중요도 가중치를 곱하고, 이들을 모두 더하여 하나의 맵으로 합칩니다. 이렇게 얻어진 맵이 바로 Grad-CAM 히트맵의 원본입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;ReLU 적용 및 시각화:&lt;/b&gt; 마지막으로, 음의 값을 제거하여 예측에 긍정적인 영향을 준 영역만 남기기 위해 ReLU 활성화 함수를 적용합니다. 이 히트맵을 원본 이미지 크기로 확대한 후, 원본 이미지 위에 반투명하게 겹쳐서 시각화하면 모델이 주목한 영역을 직관적으로 확인할 수 있습니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 방식 덕분에 Grad-CAM은 모델의 구조를 변경하거나 재학습할 필요 없이, 이미 학습된 모델에 그대로 적용할 수 있다는 큰 장점을 가집니다. 예를 들어, '고양이' 사진을 보여주고 모델이 '고양이'라고 정확히 예측했다면, Grad-CAM은 고양이의 얼굴이나 귀, 몸통 부분에 붉은 히트맵을 생성하여 모델이 올바른 근거로 판단했음을 보여줍니다. 반대로 모델이 엉뚱한 배경을 보고 판단했다면, 우리는 모델이 잘못 학습되었을 가능성을 인지하고 디버깅의 단서로 삼을 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Grad-CAM의 장점과 한계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;장점:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;적용성:&lt;/b&gt; 모델 구조 변경 없이 대부분의 CNN 기반 아키텍처에 적용할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;해석 용이성:&lt;/b&gt; 시각적인 히트맵을 통해 모델의 판단 근거를 직관적으로 이해할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;디버깅:&lt;/b&gt; 모델이 잘못된 예측을 했을 때, 그 원인이 이미지의 어떤 부분에 있는지 파악하여 모델 개선에 활용할 수 있습니다. 데이터셋의 편향(bias)을 찾는 데도 유용합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;한계:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;해상도 문제:&lt;/b&gt; 마지막 합성곱 레이어의 특성 맵을 사용하므로, 원본 이미지보다 해상도가 낮아 세밀한 영역을 표현하는 데 한계가 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다중 객체 문제:&lt;/b&gt; 하나의 이미지에 같은 클래스의 객체가 여러 개 있을 경우, 모든 객체를 정확하게 찾아내지 못하고 일부에만 활성화되는 경향이 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. LIME: 어떤 모델이든 설명하는 만능 해석기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LIME(Local Interpretable Model-agnostic Explanations)은 이름에서 알 수 있듯이 &lt;b&gt;'모델에 구애받지 않고(Model-agnostic)'&lt;/b&gt;, 특정 예측에 대한 &lt;b&gt;'지역적(Local)'&lt;/b&gt;인 해석을 제공하는 방법론입니다. 즉, 복잡한 블랙박스 모델 전체를 이해하려는 대신, 단일 예측 건에 대해서 그 주변의 작은 영역에서만 동작하는 단순하고 해석 가능한 모델(예: 선형 회귀 모델)을 만들어 원래 모델의 결정을 '흉내 내는' 방식입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;LIME의 작동 원리 (이미지 분류 예시)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LIME을 이미지 분류 모델에 적용하는 과정은 매우 독창적입니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;슈퍼픽셀(Superpixel) 분할:&lt;/b&gt; 설명하고자 하는 원본 이미지를 색상, 질감 등이 비슷한 픽셀들의 묶음인 '슈퍼픽셀' 단위로 분할합니다. 이는 개별 픽셀을 다루는 것보다 계산적으로 효율적이고 의미 있는 단위로 해석하기 위함입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;샘플 데이터 생성 (섭동, Perturbation):&lt;/b&gt; 원본 이미지의 슈퍼픽셀들을 무작위로 켜고 끄는(원본 영역을 보여주거나 회색 등으로 가리는) 방식으로 수많은 가짜 샘플 이미지를 생성합니다. 이를 '섭동' 과정이라고 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;블랙박스 모델 예측:&lt;/b&gt; 생성된 수많은 가짜 샘플 이미지들을 우리가 설명하려는 원래의 블랙박스 모델에 입력하여 각각의 예측 확률을 얻습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;가중치 부여 및 해석 가능한 모델 학습:&lt;/b&gt; 생성된 샘플들 중에서 원본 이미지와 더 유사한(더 적은 슈퍼픽셀을 끈) 샘플에 더 높은 가중치를 부여합니다. 이제 이 가중치가 적용된 샘플 데이터셋(입력: 슈퍼픽셀 on/off 상태, 출력: 블랙박스 모델의 예측 확률)을 가장 잘 설명할 수 있는 단순한 선형 회귀 모델과 같은 '해석 가능한 모델'을 학습시킵니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;설명 생성:&lt;/b&gt; 학습된 선형 모델에서 가중치가 높은 (즉, 예측에 큰 영향을 미친) 슈퍼픽셀들이 바로 원본 모델이 해당 예측을 내리는 데 중요하게 사용한 영역이라고 해석합니다. 이 슈퍼픽셀들을 원본 이미지에 표시하여 시각적인 설명을 제공합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 LIME은 &quot;비록 전체 모델은 복잡해서 이해할 수 없지만, 이 사진을 '개'라고 판단한 이 순간만큼은, 개의 '얼굴'과 '귀' 부분이 있었기 때문이야&quot;라고 말해주는 지역적인 대리인(Surrogate model)을 만드는 것과 같습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;LIME의 장점과 한계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;장점:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;모델 독립성(Model-agnostic):&lt;/b&gt; CNN, RNN, 트리 기반 모델 등 어떤 종류의 블랙박스 모델에도 적용할 수 있는 최고의 범용성을 자랑합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;직관적인 설명:&lt;/b&gt; 특정 예측에 긍정적 또는 부정적 영향을 미친 부분을 시각적으로 명확하게 구분하여 보여줄 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;한계:&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;설명의 불안정성:&lt;/b&gt; 샘플링 과정이 무작위적이기 때문에, 같은 이미지에 대해 실행할 때마다 설명 결과가 조금씩 달라질 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;지역적 해석의 한계:&lt;/b&gt; 설명이 매우 '지역적'이므로, 모델의 전반적인 동작 방식을 대표하지 못할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;매개변수 민감성:&lt;/b&gt; 슈퍼픽셀을 나누는 방법, 샘플 개수 등 설정해야 할 매개변수에 따라 설명의 품질이 달라질 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. Grad-CAM vs. LIME, 언제 무엇을 써야 할까?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grad-CAM과 LIME은 모두 비전 모델의 판단 근거를 이해하는 데 매우 유용한 도구이지만, 각각의 특성이 명확하여 상황에 맞게 선택하는 것이 중요합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Grad-CAM&lt;/b&gt;은 설명하려는 모델이 &lt;b&gt;CNN 기반&lt;/b&gt;이고, 모델 내부의 그래디언트 정보에 접근할 수 있을 때 우선적으로 고려할 수 있습니다. 비교적 안정적이고 빠르게 모델이 활성화된 전체적인 영역을 부드러운 히트맵으로 확인하고 싶을 때 적합합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;LIME&lt;/b&gt;은 모델의 종류를 전혀 알 수 없거나, CNN이 아닌 모델(예: Vision Transformer의 일부 변형 또는 트리 기반 앙상블 모델)을 설명해야 할 때 유일한 대안이 될 수 있습니다. 단일 예측에 대해 어떤 부분이 '결정적인' 근거가 되었는지 명확한 경계로 확인하고 싶을 때 효과적입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;궁극적으로 인공지능 기술이 더욱 발전하고 우리 삶에 깊숙이 들어올수록, 우리는 그저 높은 정확도에 만족하는 것을 넘어 AI가 내리는 결정의 과정을 이해하고, 공정성을 검증하며, 그 책임을 물을 수 있어야 합니다. Grad-CAM과 LIME과 같은 XAI 기법들은 이러한 '신뢰할 수 있는 AI'로 나아가는 중요한 첫걸음이며, 개발자와 사용자 모두에게 인공지능과의 더 나은 소통 방식을 제시해 줄 것입니다.&lt;/p&gt;</description>
      <category>AI</category>
      <category>ai신뢰성</category>
      <category>gradcam</category>
      <category>lime</category>
      <category>XAI</category>
      <category>딥러닝</category>
      <category>머신러닝</category>
      <category>설명가능인공지능</category>
      <category>인공지능해석</category>
      <category>컴퓨터비전</category>
      <author>만듀s</author>
      <guid isPermaLink="true">https://calib.tistory.com/42</guid>
      <comments>https://calib.tistory.com/entry/%EC%84%A4%EB%AA%85-%EA%B0%80%EB%8A%A5%ED%95%9C-AIXAI-Grad-CAM-LIME%EC%9D%84-%EC%9D%B4%EC%9A%A9%ED%95%B4-%EB%B9%84%EC%A0%84-%EB%AA%A8%EB%8D%B8%EC%9D%B4-%EC%99%9C-%EA%B7%B8%EB%A0%87%EA%B2%8C-%ED%8C%90%EB%8B%A8%ED%96%88%EB%8A%94%EC%A7%80-%EB%B6%84%EC%84%9D%ED%95%98%EA%B8%B0#entry42comment</comments>
      <pubDate>Sun, 13 Jul 2025 21:02:06 +0900</pubDate>
    </item>
    <item>
      <title>Few-Shot &amp;amp; Zero-Shot Learning: 단 몇 개의 샘플만으로 새로운 유형의 불량을 학습하는 AI</title>
      <link>https://calib.tistory.com/entry/Few-Shot-Zero-Shot-Learning-%EB%8B%A8-%EB%AA%87-%EA%B0%9C%EC%9D%98-%EC%83%98%ED%94%8C%EB%A7%8C%EC%9C%BC%EB%A1%9C-%EC%83%88%EB%A1%9C%EC%9A%B4-%EC%9C%A0%ED%98%95%EC%9D%98-%EB%B6%88%EB%9F%89%EC%9D%84-%ED%95%99%EC%8A%B5%ED%95%98%EB%8A%94-AI</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-size: 1.62em;&quot;&gt;끊임없이 진화하는 스마트 팩토리와 불량 검출의 한계&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4차 산업혁명의 핵심인 스마트 팩토리는 제조 공정의 효율성과 생산성을 극대화하고 있습니다. 인공지능(AI) 기반의 비전 검사 시스템은 기존의 육안 검사를 대체하며, 높은 정밀도와 속도로 제품의 불량을 판별해내고 있습니다. 하지만 전통적인 AI 비전 검사 시스템은 한계점을 가지고 있습니다. 수만, 수십만 장의 방대한 양품 및 불량품 이미지를 학습해야만 높은 정확도를 보장할 수 있다는 점입니다. 특히, 새롭게 발생하거나 발생 빈도가 매우 낮은 유형의 불량에 대해서는 데이터 부족으로 인해 학습이 어렵고, 이는 결국 검출 실패로 이어져 막대한 손실을 야기할 수 있습니다. 이러한 문제를 해결하기 위한 혁신적인 기술로 &lt;b&gt;Few-Shot Learning(퓨샷 러닝)&lt;/b&gt;과 &lt;b&gt;Zero-Shot Learning(제로샷 러닝)&lt;/b&gt;이 주목받고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본 포스트에서는 단 몇 개의 샘플, 혹은 전혀 샘플이 없는 상태에서도 AI가 새로운 유형의 불량을 학습하고 판별해내는 Few-Shot Learning과 Zero-Shot Learning의 원리를 심도 있게 파헤쳐보고, 실제 산업 현장에서 어떻게 적용되어 제조업의 패러다임을 바꾸고 있는지 구체적으로 살펴보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1408&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcIAIS/btsPaf1nAz6/0uRu40vXxy3x1QNkwlad4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcIAIS/btsPaf1nAz6/0uRu40vXxy3x1QNkwlad4K/img.png&quot; data-alt=&quot;AI 비전 검사 시스템이 Few-Shot &amp;amp;amp; Zero-Shot Learning을 통해 다양한 불량을 식별하고 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcIAIS/btsPaf1nAz6/0uRu40vXxy3x1QNkwlad4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcIAIS%2FbtsPaf1nAz6%2F0uRu40vXxy3x1QNkwlad4K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;AI 비전 검사 시스템이 Few-Shot &amp;amp;amp; Zero-Shot Learning을 통해 다양한 불량을 식별하고 있습니다.&quot; loading=&quot;lazy&quot; width=&quot;1408&quot; height=&quot;768&quot; data-origin-width=&quot;1408&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;AI 비전 검사 시스템이 Few-Shot &amp;amp; Zero-Shot Learning을 통해 다양한 불량을 식별하고 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Few-Shot Learning - 소량의 데이터로 똑똑하게 학습하기&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Few-Shot Learning이란 무엇인가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Few-Shot Learning&lt;/b&gt;은 말 그대로 '적은 수의 샘플(few shots)'을 가지고 모델을 학습시키는 머신러닝 기법입니다. 이는 인간이 새로운 사물을 학습하는 방식과 유사합니다. 우리는 고양이라는 동물을 배울 때 수만 장의 고양이 사진을 보지 않아도, 단 몇 장의 사진만으로 다양한 품종과 자세의 고양이를 구분해낼 수 있습니다. Few-Shot Learning은 바로 이러한 인간의 학습 능력을 AI에 구현한 기술입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 딥러닝 모델이 특정 작업을 잘 수행하기 위해 수많은 데이터를 필요로 하는 것과 대조적으로, Few-Shot Learning은 사전에 대규모 데이터셋으로 학습된 '사전 학습 모델(Pre-trained Model)'을 기반으로 새로운 작업에 빠르게 적응합니다. 이 사전 학습 모델은 이미지의 일반적인 특징(예: 선, 질감, 형태 등)을 추출하는 능력을 갖추고 있으며, 이를 바탕으로 소량의 새로운 불량 유형 샘플이 주어졌을 때, 기존 지식과 새로운 데이터 간의 관계를 파악하여 빠르게 학습을 완료합니다. 특히 각 클래스(불량 유형) 당 단 하나의 샘플만 사용하는 경우를 &lt;b&gt;One-Shot Learning&lt;/b&gt;이라고 부르기도 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제조업 불량 검출에서의 Few-Shot Learning 적용 원리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제조 공정에서 Few-Shot Learning은 다음과 같은 방식으로 적용됩니다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;기반 모델 구축 (Meta-Learning):&lt;/b&gt; 먼저, AI는 이미 확보된 다양한 종류의 양품 및 불량품 이미지 데이터베이스를 통해 '학습하는 방법' 자체를 학습합니다(이를 메타 러닝, Meta-Learning이라고 합니다). 이 과정에서 AI는 특정 불량 유형에 종속되지 않고, 이미지의 미세한 차이를 감지하고 특징을 추출하는 범용적인 능력을 기르게 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;새로운 불량 유형 학습:&lt;/b&gt; 이후, 라인에서 이전에 발견되지 않았던 새로운 유형의 불량품이 발생하면, 해당 불량품의 이미지 단 몇 장(예: 1~5장)만을 AI 모델에 입력합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;빠른 적응 및 분류:&lt;/b&gt; AI 모델은 메타 러닝을 통해 습득한 지식을 바탕으로, 소수의 새로운 불량 샘플의 특징을 기존에 알고 있던 특징들과 비교 분석하여 새로운 불량 카테고리를 생성하고, 이후 동일한 유형의 불량을 정확하게 식별해냅니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 접근 방식은 신제품 생산 라인이나 다품종 소량 생산 환경과 같이 불량 데이터 확보가 어려운 경우에 매우 효과적입니다. 제품의 수명 주기가 짧아 데이터를 축적할 시간이 부족하거나, 불량 발생률 자체가 매우 낮아 충분한 샘플을 모으기 힘든 상황에서 Few-Shot Learning은 AI 비전 검사의 적용 가능성을 획기적으로 넓혀줍니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Zero-Shot Learning - 본 적 없는 불량도 예측하는 놀라운 능력&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Zero-Shot Learning이란 무엇인가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Zero-Shot Learning&lt;/b&gt;은 Few-Shot Learning에서 한 걸음 더 나아가, 학습 과정에서 한 번도 본 적이 없는, 즉 '단 하나의 샘플도 없는(zero shot)' 새로운 클래스의 데이터를 인식하고 분류하는 것을 목표로 하는 기술입니다. 이는 마치 사람이 '얼룩말'이라는 동물을 직접 본 적이 없더라도, '말과 비슷하게 생겼고, 하얀 바탕에 검은 줄무늬가 있다'는 설명을 들으면 얼룩말을 상상하고 실제 봤을 때 인식할 수 있는 것과 같은 원리입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Zero-Shot Learning의 핵심은 &lt;b&gt;시맨틱 속성(Semantic Attributes)&lt;/b&gt;을 활용하는 것입니다. 시맨틱 속성이란 해당 객체를 설명하는 의미론적 정보(예: '줄무늬가 있다', '금속 재질이다', '표면이 거칠다' 등)를 의미합니다. AI 모델은 학습 데이터의 시각적 특징과 함께 이러한 시맨틱 속성을 함께 학습합니다. 그리고 추론 단계에서는, 전혀 새로운 클래스의 시맨틱 속성 정보가 주어지면, 학습된 지식을 바탕으로 해당 속성을 가진 이미지를 예측하고 분류해내는 것입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제조업 불량 검출에서의 Zero-Shot Learning 활용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제조업 현장에서 Zero-Shot Learning은 잠재적으로 발생 가능한 불량을 미리 정의하고 대비하는 데 활용될 수 있습니다. 예를 들어, 엔지니어가 텍스트로 '표면에 생긴 가늘고 긴 긁힘' 또는 '특정 부위의 색상 변질'과 같이 새로운 불량 유형을 속성으로 정의하여 AI 모델에 입력할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI는 이 속성 정보를 바탕으로, 실제 생산 라인에서 해당 속성과 일치하는 시각적 패턴을 보이는 제품이 나타났을 때, 이를 '새로운 유형의 불량'으로 즉시 인식하고 분류할 수 있습니다. 이는 불량 샘플이 단 하나도 존재하지 않는 상황에서도 선제적으로 불량을 검출할 수 있음을 의미하며, 품질 관리의 패러다임을 '사후 대응'에서 '사전 예방'으로 전환시키는 강력한 도구가 될 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물론, Zero-Shot Learning은 아직 연구 개발이 활발히 진행 중인 분야이며, 정확하고 풍부한 시맨틱 속성을 정의하는 것이 기술의 성능을 좌우하는 중요한 요소입니다. 하지만 데이터 수집의 제약에서 완전히 벗어날 수 있다는 점에서 그 잠재력은 무궁무진하다고 할 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터의 장벽을 넘어, 더 높은 수준의 지능으로&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Few-Shot Learning과 Zero-Shot Learning은 방대한 양의 데이터가 있어야만 가능하다고 여겨졌던 기존 AI의 패러다임을 바꾸고 있습니다. 특히 예측 불가능한 변수가 많고, 신속한 대응이 필수적인 제조업 분야에서 이 두 기술은 데이터 부족이라는 고질적인 문제를 해결하고 AI 비전 검사의 적용 범위를 크게 확장하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Few-Shot Learning&lt;/b&gt;은 소량의 샘플만으로도 새로운 불량 유형에 빠르게 적응하게 함으로써 생산 라인의 유연성을 높이고, &lt;b&gt;Zero-Shot Learning&lt;/b&gt;은 한 걸음 더 나아가 샘플 없이 속성 정보만으로 잠재적 불량까지 예측하게 함으로써 궁극적인 의미의 지능형 품질 관리를 가능하게 할 것입니다. 물론 기술의 완성도를 높이기 위한 지속적인 연구가 필요하지만, 데이터의 장벽을 넘어 인간의 학습 능력을 닮아가는 이 놀라운 AI 기술들이 만들어갈 스마트 팩토리의 미래는 더욱 정교하고, 지능적이며, 효율적으로 진화할 것이 분명합니다.&lt;/p&gt;</description>
      <category>AI</category>
      <category>ai비전검사</category>
      <category>머신러닝</category>
      <category>불량검출</category>
      <category>스마트팩토리</category>
      <category>인공지능</category>
      <category>제로샷러닝</category>
      <category>퓨샷러닝</category>
      <author>만듀s</author>
      <guid isPermaLink="true">https://calib.tistory.com/43</guid>
      <comments>https://calib.tistory.com/entry/Few-Shot-Zero-Shot-Learning-%EB%8B%A8-%EB%AA%87-%EA%B0%9C%EC%9D%98-%EC%83%98%ED%94%8C%EB%A7%8C%EC%9C%BC%EB%A1%9C-%EC%83%88%EB%A1%9C%EC%9A%B4-%EC%9C%A0%ED%98%95%EC%9D%98-%EB%B6%88%EB%9F%89%EC%9D%84-%ED%95%99%EC%8A%B5%ED%95%98%EB%8A%94-AI#entry43comment</comments>
      <pubDate>Sun, 13 Jul 2025 10:12:32 +0900</pubDate>
    </item>
    <item>
      <title>CNN의 시대는 끝났는가? Vision Transformer(ViT)의 실제 성능과 산업 현장 적용의 한계</title>
      <link>https://calib.tistory.com/entry/CNN%EC%9D%98-%EC%8B%9C%EB%8C%80%EB%8A%94-%EB%81%9D%EB%82%AC%EB%8A%94%EA%B0%80-Vision-TransformerViT%EC%9D%98-%EC%8B%A4%EC%A0%9C-%EC%84%B1%EB%8A%A5%EA%B3%BC-%EC%82%B0%EC%97%85-%ED%98%84%EC%9E%A5-%EC%A0%81%EC%9A%A9%EC%9D%98-%ED%95%9C%EA%B3%84</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;2012년 AlexNet의 등장 이후, 컨볼루션 신경망(CNN)은 지난 10년간 컴퓨터 비전 분야의 부흥을 이끈 독보적인 아키텍처였습니다. 이미지 분류, 객체 탐지, 세분화 등 다양한 영역에서 인간의 능력을 뛰어넘는 성능을 보여주며 산업 현장의 혁신을 주도해왔습니다. 하지만 자연어 처리(NLP) 분야를 평정한 트랜스포머(Transformer)가 이미지 인식의 영역에 발을 들여놓으며, '비전 트랜스포머(Vision Transformer, ViT)'라는 이름으로 CNN의 아성에 도전하고 있습니다. 이로 인해 많은 개발자와 연구자들 사이에서 &quot;과연 CNN의 시대는 끝났는가?&quot;라는 질문이 제기되고 있습니다. 이 글에서는 ViT의 실제 성능과 산업 현장에서의 잠재력, 그리고 명확한 한계를 심층적으로 분석하며 이 질문에 대한 답을 찾아보고자 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;main&gt;
&lt;article&gt;
&lt;section&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Vision Transformer(ViT)의 등장과 원리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ViT는 2020년 구글 연구팀이 발표한 논문 &quot;An Image is Worth 16x16 Words&quot;를 통해 세상에 알려졌습니다. 기존의 CNN이 이미지의 지역적인 특징(local feature)을 점진적으로 추출하여 전체를 이해하는 '귀납적 편향(inductive bias)'을 강하게 가지는 반면, ViT는 이미지를 여러 개의 작은 패치(patch)로 나누고, 이를 시퀀스 데이터처럼 처리하여 이미지 전체의 관계성(global context)을 한 번에 파악합니다. 자연어 처리에서 문장 속 단어들의 관계를 파악하던 셀프 어텐션(self-attention) 메커니즘을 이미지에 그대로 적용한 것입니다. 이러한 접근 방식 덕분에 ViT는 모델과 데이터의 크기가 충분히 크다면 CNN의 성능을 뛰어넘는 잠재력을 보여주었습니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BtqdH/btsO60psKja/gB19Kc2TKmQ3lKoyo18k81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BtqdH/btsO60psKja/gB19Kc2TKmQ3lKoyo18k81/img.png&quot; data-alt=&quot;CNN(왼쪽)은 작은 필터를 이용해 이미지의 지역적 특징을 계층적으로 학습하는 반면, ViT(오른쪽)는 이미지를 패치로 나누어 전체 패치 간의 관계를 한 번에 학습합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BtqdH/btsO60psKja/gB19Kc2TKmQ3lKoyo18k81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBtqdH%2FbtsO60psKja%2FgB19Kc2TKmQ3lKoyo18k81%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; alt=&quot;CNN(왼쪽)은 작은 필터를 이용해 이미지의 지역적 특징을 계층적으로 학습하는 반면, ViT(오른쪽)는 이미지를 패치로 나누어 전체 패치 간의 관계를 한 번에 학습합니다.&quot; loading=&quot;lazy&quot; width=&quot;531&quot; height=&quot;531&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;CNN(왼쪽)은 작은 필터를 이용해 이미지의 지역적 특징을 계층적으로 학습하는 반면, ViT(오른쪽)는 이미지를 패치로 나누어 전체 패치 간의 관계를 한 번에 학습합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/section&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;section&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;성능 대결: CNN vs. ViT, 승자는?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ViT가 처음 등장했을 때, 그 성능은 대규모 데이터셋에 대한 사전 학습(pre-training) 여부에 크게 좌우되었습니다. 구글이 자체적으로 보유한 JFT-300M과 같은 수억 장의 이미지를 사용한 사전 학습을 거쳤을 때, ViT는 ImageNet과 같은 표준 벤치마크에서 기존의 최고 성능 CNN 모델들을 능가했습니다. 이는 ViT가 방대한 데이터로부터 이미지에 대한 일반적인 지식을 학습할 수 있다면, CNN의 '지역성'이라는 제약을 넘어 더 넓은 시야로 이미지를 이해할 수 있음을 시사했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 현실은 조금 더 복잡합니다. **결론부터 말하자면, 데이터의 양이 승패를 가릅니다.** 비교적 작은 데이터셋(수백만 장 이하)에서는 여전히 CNN이 더 나은 성능을 보이거나 비슷한 수준을 유지합니다. 이는 CNN이 가지고 있는 '이미지는 인접한 픽셀끼리 연관성이 높다'는 '귀납적 편향'이 적은 데이터 환경에서는 매우 효율적인 학습을 가능하게 하기 때문입니다. 반면, ViT는 이러한 사전 가정 없이 데이터로부터 모든 관계를 학습해야 하므로, 데이터가 부족하면 오히려 과적합(overfitting)에 빠지기 쉽습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, **대규모 데이터와 컴퓨팅 자원이 확보된 환경이라면 ViT가 더 높은 성능 상한선을 보여주지만, 제한된 자원으로 특정 문제를 해결해야 하는 대다수의 산업 현장에서는 잘 설계된 CNN이 여전히 강력하고 효율적인 선택지**가 될 수 있습니다.&lt;/p&gt;
&lt;/section&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;section&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;산업 현장에서의 ViT: 장밋빛 미래와 냉혹한 현실&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ViT는 자율주행, 의료 영상 분석, 위성 이미지 해석 등 이미지의 전반적인 맥락 이해가 중요한 분야에서 큰 잠재력을 보이고 있습니다. 예를 들어, 자율주행 자동차가 도로 위의 여러 객체(자동차, 보행자, 신호등) 간의 관계를 종합적으로 파악하거나, 의료 영상에서 미세한 이상 징후와 주변 조직의 전체적인 형태를 함께 고려하여 진단하는 데 ViT의 글로벌 어텐션 능력이 강점을 가질 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만 이러한 잠재력에도 불구하고 ViT가 산업 현장에 광범위하게 적용되기까지는 몇 가지 명확한 한계가 존재합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;막대한 데이터 및 컴퓨팅 요구량:&lt;/b&gt; 앞서 언급했듯, ViT의 성능은 대규모 사전 학습에 크게 의존합니다. 일반적인 기업이 구글처럼 수억 장의 데이터를 확보하고 이를 학습시킬 GPU 클러스터를 운영하는 것은 거의 불가능에 가깝습니다. 따라서 대부분의 경우 거대 IT 기업이 사전 학습한 모델을 가져와 특정 작업에 맞게 미세 조정(fine-tuning)하는 방식을 사용해야 합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;높은 연산 비용과 메모리 사용량:&lt;/b&gt; ViT의 셀프 어텐션은 이미지 패치 수의 제곱에 비례하여 연산량이 증가합니다. 고해상도 이미지를 처리해야 하는 경우, 이는 엄청난 컴퓨팅 비용과 메모리 부담으로 이어져 실시간 처리가 필수적인 공장 자동화나 모바일 기기 적용에 걸림돌이 될 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;CNN 대비 낮은 특화성:&lt;/b&gt; CNN은 지난 10년간 다양한 산업 문제에 맞춰 수많은 변형 모델이 개발되었습니다. 경량화된 MobileNet부터 실시간 객체 탐지에 특화된 YOLO, 의료 영상 세분화에 강한 U-Net까지, 특정 목적에 최적화된 CNN 아키텍처가 풍부합니다. 반면 ViT는 아직 상대적으로 범용적인 구조에 머물러 있어, 특정 산업 도메인의 요구사항을 정밀하게 만족시키기 위한 연구가 더 필요한 상황입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/section&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;section&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;CNN의 시대는 끝나지 않았다, 다만 진화할 뿐이다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇다면 다시 처음의 질문으로 돌아와 &quot;CNN의 시대는 끝났는가?&quot;라고 묻는다면, 정답은 '**아니오**'입니다. ViT는 분명 컴퓨터 비전 분야에 새로운 패러다임을 제시한 혁신적인 기술이지만, CNN을 완전히 대체하기보다는 상호 보완적인 관계로 발전할 가능성이 높습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오히려 최근 연구 동향은 CNN의 강점과 ViT의 강점을 결합하려는 **하이브리드(Hybrid) 모델**로 향하고 있습니다. 예를 들어, 초기 레이어에서는 CNN을 사용해 효율적으로 지역적인 특징을 추출하고, 후반 레이어에서는 트랜스포머를 사용해 추출된 특징들 간의 글로벌한 관계를 파악하는 방식입니다. 이를 통해 상대적으로 적은 데이터로도 높은 성능을 달성하며 연산 효율성까지 챙길 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결론적으로 CNN은 죽지 않았습니다. 오히려 ViT라는 강력한 경쟁자의 등장은 CNN이 가진 고유한 강점을 다시 한번 확인시켜 주었으며, 두 아키텍처의 장점을 결합하는 새로운 방향으로의 진화를 촉진하고 있습니다. 산업 현장에서는 당분간 해결하고자 하는 문제의 특성과 보유한 데이터, 그리고 컴퓨팅 자원에 따라 CNN과 ViT를 현명하게 선택하고 조합하는 지혜가 필요할 것입니다. CNN의 시대는 끝나지 않았고, 더욱 흥미로운 '춘추전국시대'가 시작되었을 뿐입니다.&lt;/p&gt;
&lt;/section&gt;
&lt;/article&gt;
&lt;/main&gt;</description>
      <category>AI</category>
      <category>AI기술</category>
      <category>cnn</category>
      <category>visiontransformer</category>
      <category>VIT</category>
      <category>딥러닝</category>
      <category>산업현장</category>
      <category>성능비교</category>
      <category>인공지능</category>
      <category>컴퓨터비전</category>
      <author>만듀s</author>
      <guid isPermaLink="true">https://calib.tistory.com/41</guid>
      <comments>https://calib.tistory.com/entry/CNN%EC%9D%98-%EC%8B%9C%EB%8C%80%EB%8A%94-%EB%81%9D%EB%82%AC%EB%8A%94%EA%B0%80-Vision-TransformerViT%EC%9D%98-%EC%8B%A4%EC%A0%9C-%EC%84%B1%EB%8A%A5%EA%B3%BC-%EC%82%B0%EC%97%85-%ED%98%84%EC%9E%A5-%EC%A0%81%EC%9A%A9%EC%9D%98-%ED%95%9C%EA%B3%84#entry41comment</comments>
      <pubDate>Sat, 12 Jul 2025 22:00:31 +0900</pubDate>
    </item>
    <item>
      <title>데이터가 부족할 때: 반도체/PCB 검사 이미지 생성을 위한 GAN/Diffusion 활용법</title>
      <link>https://calib.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B0%80-%EB%B6%80%EC%A1%B1%ED%95%A0-%EB%95%8C-%EB%B0%98%EB%8F%84%EC%B2%B4PCB-%EA%B2%80%EC%82%AC-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%83%9D%EC%84%B1%EC%9D%84-%EC%9C%84%ED%95%9C-GANDiffusion-%ED%99%9C%EC%9A%A9%EB%B2%95</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;style&gt;
        body {
            font-family: 'Malgun Gothic', '맑은 고딕', sans-serif;
            line-height: 1.6;
            color: #333;
            margin: 0;
            padding: 0;
            background-color: #f9f9f9;
        }
        .container {
            max-width: 800px;
            margin: 20px auto;
            padding: 30px;
            background-color: #fff;
            border: 1px solid #ddd;
            border-radius: 8px;
            box-shadow: 0 2px 5px rgba(0,0,0,0.05);
        }
        h1, h2, h3 {
            color: #1a1a1a;
            border-bottom: 2px solid #eee;
            padding-bottom: 10px;
            margin-top: 40px;
        }
        h1 {
            font-size: 2em;
        }
        h2 {
            font-size: 1.5em;
        }
        h3 {
            font-size: 1.2em;
        }
        p {
            margin-bottom: 15px;
            text-align: justify;
        }
        strong {
            color: #0056b3;
        }
        code {
            background-color: #eee;
            padding: 2px 5px;
            border-radius: 4px;
            font-family: 'D2Coding', 'Consolas', monospace;
        }
        .image-caption {
            text-align: center;
            margin: 30px 0;
            font-style: italic;
            color: #666;
        }
        ul {
            padding-left: 20px;
        }
        li {
            margin-bottom: 10px;
        }
        .tags {
            margin-top: 40px;
        }
        .tag {
            display: inline-block;
            background-color: #e1ecf4;
            color: #39739d;
            padding: 5px 10px;
            border-radius: 15px;
            font-size: 0.9em;
            margin-right: 5px;
            text-decoration: none;
        }
    &lt;/style&gt;
&lt;/div&gt;
&lt;div class=&quot;container&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현대 제조업의 핵심인 반도체와 인쇄 회로 기판(PCB) 생산 공정은 나노미터 단위의 정밀도를 요구합니다. 미세한 결함 하나가 제품 전체의 성능 저하와 신뢰도 문제로 이어질 수 있기 때문에, 자동화된 광학 검사(AOI) 시스템과 딥러닝 기반의 불량 검출 기술 도입이 활발하게 이루어지고 있습니다. 하지만 딥러닝 모델이 높은 정확도를 달성하기 위해서는 방대한 양의 '학습 데이터'가 필수적입니다. 특히, 다양한 유형의 불량 이미지를 충분히 확보하는 것은 현실적으로 매우 어려운 과제입니다. 수율이 높은 공정일수록 불량 데이터는 극히 드물게 발생하기 때문입니다. 바로 이 &lt;b&gt;'데이터 부족(Data Scarcity)' 문제&lt;/b&gt;가 딥러닝 모델의 성능을 저해하는 가장 큰 걸림돌이 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 난제를 해결하기 위한 강력한 대안으로 &lt;b&gt;생성형 AI(Generative AI) 기술, 특히 GAN(Generative Adversarial Network, 생성적 적대 신경망)과 Diffusion Model(확산 모델)&lt;/b&gt;이 주목받고 있습니다. 이 기술들은 실제와 매우 유사한 합성 이미지(Synthetic Image)를 생성하여 부족한 불량 데이터를 증강(Augmentation)함으로써 딥러닝 모델의 학습 효과를 극대화합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. GAN(생성적 적대 신경망): '위조지폐범'과 '경찰'의 경쟁&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GAN은 2014년 이안 굿펠로우(Ian Goodfellow)에 의해 제안된 모델로, 두 개의 신경망이 서로 경쟁하며 학습하는 독특한 구조를 가집니다. 이미지를 생성하는 &lt;b&gt;생성자(Generator)&lt;/b&gt;와 생성된 이미지가 실제인지 가짜인지를 판별하는 &lt;b&gt;판별자(Discriminator)&lt;/b&gt;로 구성됩니다. 이는 마치 위조지폐를 정교하게 만들려는 '위조지폐범'과 이를 감별하려는 '경찰'의 관계와 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반도체/PCB 검사에서는 이 원리를 다음과 같이 적용할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;생성자(Generator):&lt;/b&gt; 정상 제품 이미지나 간단한 노이즈를 입력받아 특정 유형의 불량(예: 단선, 쇼트, 홀 누락)이 포함된 이미지를 생성하도록 학습됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;판별자(Discriminator):&lt;/b&gt; 실제 불량 이미지와 생성자가 만들어낸 가짜 불량 이미지를 구별하도록 학습됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;학습 초기에는 생성자가 만든 이미지가 조잡하여 판별자가 쉽게 가짜임을 알아차립니다. 하지만 학습이 반복될수록 생성자는 판별자를 속이기 위해 점점 더 실제와 가까운, 정교한 불량 이미지를 만들어내고, 판별자 또한 더 날카롭게 진짜와 가짜를 구분하게 됩니다. 이 경쟁 과정의 최종 결과물은 판별자조차 구별하기 힘든 수준의 고품질 합성 불량 이미지입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;주요 GAN 활용 기법: CycleGAN&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 &lt;b&gt;CycleGAN&lt;/b&gt;과 같은 변형 모델은 '비정형 데이터(Unpaired Data)'를 활용할 수 있어 매우 유용합니다. 즉, 특정 정상 이미지와 정확히 동일한 위치에 불량이 발생한 이미지가 쌍으로 존재하지 않아도, 다수의 정상 이미지 그룹과 다수의 불량 이미지 그룹만 있으면 학습이 가능합니다. CycleGAN은 정상 이미지를 입력받아 해당 이미지의 '가상 불량 버전'을 생성하거나, 반대로 불량 이미지를 입력받아 결함이 제거된 '이상적인 정상 이미지(Golden Template)'를 생성할 수 있습니다. 이렇게 생성된 골든 템플릿과 원본 불량 이미지를 비교하면, 정확한 불량 위치와 형태를 픽셀 단위로 특정하는 데 활용할 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. Diffusion Model(확산 모델): 노이즈에서 명작을 빚어내다&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 이미지 생성 분야에서 가장 뛰어난 성능을 보여주는 Diffusion Model은 GAN과는 다른 접근 방식을 취합니다. 원본 이미지에 점진적으로 노이즈를 추가하여 완전히 무작위 한 노이즈 이미지로 만드는 '확산 과정(Forward Process)'을 먼저 정의하고, 딥러닝 모델이 이 과정을 정확히 거꾸로 수행하여 노이즈로부터 원본 이미지를 복원하도록 학습하는 &lt;b&gt;'역확산 과정(Reverse Process)'&lt;/b&gt;이 핵심입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 과정은 마치 조각가가 돌덩어리(노이즈)에서 불필요한 부분을 점차 깎아내어 정교한 조각상(이미지)을 완성하는 것과 비유할 수 있습니다. Diffusion Model은 데이터의 분포를 매우 정밀하게 학습하기 때문에, 현존하는 생성 모델 중 가장 높은 품질과 다양성을 갖춘 이미지를 생성하는 것으로 평가받습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;반도체/PCB 분야에서의 적용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Diffusion Model은 주로 정상 데이터의 분포를 학습하는 데 사용됩니다. 모델이 수많은 정상 웨이퍼 맵 또는 PCB 이미지를 학습하고 나면, '정상'이 무엇인지에 대한 완벽한 이해를 갖추게 됩니다. 이 상태에서 약간의 가이드(예: '중앙에 Scratch 결함 추가')를 주거나, 학습된 분포에서 벗어나는 이상 신호를 감지하는 방식으로 활용됩니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;이상 탐지(Anomaly Detection):&lt;/b&gt; 학습된 모델에 새로운 이미지를 입력했을 때, 모델이 이미지를 제대로 복원하지 못하고 큰 오차(Reconstruction Error)를 보인다면 해당 이미지는 '비정상(불량)'일 가능성이 높다고 판단합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;제어 가능한 불량 생성:&lt;/b&gt; &lt;b&gt;ControlNet&lt;/b&gt;과 같은 기술과 결합하면, 사용자가 원하는 위치나 형태, 종류의 불량을 매우 정교하게 제어하며 생성할 수 있습니다. 이는 특정 불량 유형에 대한 모델의 견고성(Robustness)을 집중적으로 테스트하고 강화하는 데 매우 효과적입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. GAN vs. Diffusion Model: 무엇을 선택해야 할까?&lt;/h2&gt;
&lt;table style=&quot;width: 100%; border-collapse: collapse; text-align: center;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;background-color: #f2f2f2;&quot;&gt;
&lt;th style=&quot;padding: 8px;&quot;&gt;구분&lt;/th&gt;
&lt;th style=&quot;padding: 8px;&quot;&gt;GAN (생성적 적대 신경망)&lt;/th&gt;
&lt;th style=&quot;padding: 8px;&quot;&gt;Diffusion Model (확산 모델)&lt;/th&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 8px;&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 8px; text-align: left;&quot;&gt;- 생성 속도가 빠름&lt;br /&gt;- 상대적으로 적은 컴퓨팅 자원으로 학습 가능&lt;br /&gt;- 다양한 변형 모델 존재 (CycleGAN 등)&lt;/td&gt;
&lt;td style=&quot;padding: 8px; text-align: left;&quot;&gt;- 생성 이미지의 품질과 다양성이 매우 높음&lt;br /&gt;- 학습 과정이 안정적 (Mode Collapse 문제 적음)&lt;br /&gt;- 제어 가능한 이미지 생성에 유리&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;padding: 8px;&quot;&gt;&lt;b&gt;단점&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;padding: 8px; text-align: left;&quot;&gt;- 학습이 불안정할 수 있음 (Mode Collapse)&lt;br /&gt;- 생성물의 다양성이 부족할 수 있음&lt;/td&gt;
&lt;td style=&quot;padding: 8px; text-align: left;&quot;&gt;- 생성 속도가 느림 (반복적 노이즈 제거 과정)&lt;br /&gt;- 학습에 많은 컴퓨팅 자원과 시간 필요&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;선택은 당면 과제와 보유한 자원에 따라 달라집니다. 빠른 속도로 대량의 데이터를 생성하는 것이 중요하다면 GAN이 유리할 수 있습니다. 반면, 최고의 이미지 품질과 다양성이 요구되고, 학습 시간과 비용을 감당할 수 있다면 Diffusion Model이 더 나은 선택이 될 것입니다. 최근에는 두 모델의 장점을 결합하려는 연구도 활발히 진행되고 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;데이터의 한계를 넘어, 완벽한 품질을 향해&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;반도체 및 PCB 제조 공정에서 GAN과 Diffusion Model과 같은 생성형 AI 기술의 활용은 더 이상 선택이 아닌 필수가 되어가고 있습니다. 현실적으로 수집하기 불가능에 가까웠던 희귀 불량 데이터를 무한에 가깝게 생성함으로써, 딥러닝 기반 검사 시스템의 정확도와 신뢰성을 전례 없는 수준으로 끌어올릴 수 있습니다. 이는 곧 수율 향상, 제조 비용 절감, 그리고 최종적으로는 제품 경쟁력 강화로 이어질 것입니다. 데이터가 부족하다는 현실에 좌절하기보다, 데이터를 '창조'해내는 생성형 AI의 가능성에 주목해야 할 때입니다.&lt;/p&gt;
&lt;/div&gt;</description>
      <category>AI</category>
      <category>diffusionmodel</category>
      <category>gan</category>
      <category>pcb불량</category>
      <category>데이터부족</category>
      <category>데이터증강</category>
      <category>딥러닝</category>
      <category>반도체검사</category>
      <category>스마트팩토리</category>
      <category>인공지능</category>
      <category>합성데이터</category>
      <author>만듀s</author>
      <guid isPermaLink="true">https://calib.tistory.com/40</guid>
      <comments>https://calib.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0%EA%B0%80-%EB%B6%80%EC%A1%B1%ED%95%A0-%EB%95%8C-%EB%B0%98%EB%8F%84%EC%B2%B4PCB-%EA%B2%80%EC%82%AC-%EC%9D%B4%EB%AF%B8%EC%A7%80-%EC%83%9D%EC%84%B1%EC%9D%84-%EC%9C%84%ED%95%9C-GANDiffusion-%ED%99%9C%EC%9A%A9%EB%B2%95#entry40comment</comments>
      <pubDate>Sat, 12 Jul 2025 10:00:06 +0900</pubDate>
    </item>
  </channel>
</rss>