<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Dev &#8211; KGG Studio</title>
	<atom:link href="https://blog.kggstudio.com/category/dev/feed/" rel="self" type="application/rss+xml" />
	<link>https://blog.kggstudio.com</link>
	<description>개발자 테크 블로그</description>
	<lastBuildDate>Fri, 17 Apr 2026 09:11:16 +0000</lastBuildDate>
	<language>ko-KR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://blog.kggstudio.com/wp-content/uploads/2025/05/cropped-K-1-32x32.png</url>
	<title>Dev &#8211; KGG Studio</title>
	<link>https://blog.kggstudio.com</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">244941309</site>	<item>
		<title>CV (3) &#8211; Grad-CAM</title>
		<link>https://blog.kggstudio.com/cv-3-grad-cam/</link>
					<comments>https://blog.kggstudio.com/cv-3-grad-cam/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Fri, 17 Apr 2026 09:11:08 +0000</pubDate>
				<category><![CDATA[CV]]></category>
		<category><![CDATA[Dev]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=491</guid>

					<description><![CDATA[Gradient-weighted Class Activation Mapping (Grad-CAM)이란 설명 가능한 인공지능 (eXplainable Artifical Intelligence, XAI) 기술중 하나로, 딥러닝 내부 동작 원리를 시각화 하는 방법. CAM vs Grad-CAM 장단점 비교 구분 CAM (Class Activation Map) Grad-CAM (Gradient-weighted CAM) 구조 제약 매우 높음. (반드시 GAP 구조여야 함) 없음. (모든 CNN 기반 모델 가능) 재학습 여부 구조 변경 시 재학습 필요 ... <a title="CV (3) &#8211; Grad-CAM" class="read-more" href="https://blog.kggstudio.com/cv-3-grad-cam/" aria-label="CV (3) &#8211; Grad-CAM에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<p>Gradient-weighted Class Activation Mapping (Grad-CAM)이란 설명 가능한 인공지능 (eXplainable Artifical Intelligence, XAI) 기술중 하나로, <strong>딥러닝 내부 동작 원리를 시각화</strong> 하는 방법.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="408" data-attachment-id="493" data-permalink="https://blog.kggstudio.com/cv-3-grad-cam/image-75/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-15.png" data-orig-size="1048,418" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-15-1024x408.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-15-1024x408.png" alt="" class="wp-image-493" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-15-1024x408.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-15-300x120.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-15-768x306.png 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-15.png 1048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>Class Activation Map (CAM): 딥러닝 모델에서 특정 클래스와 관련된 <strong>입력 이미지 영역</strong>을 시각화. <br>GAP을 통해 <strong>각 채널의 정보를 하나의 값으로 요약함.</strong><br>FC Layer를 통해 어떤채널이 중요했는지 판단함.</li>



<li>Grad-CAM: <br>GAP 구조가 없이 미분을 통해 어떤채널이 결정적이었는지 역으로 계산함.</li>
</ul>



<h2 class="wp-block-heading">CAM vs Grad-CAM 장단점 비교</h2>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>구분</strong></td><td><strong>CAM (Class Activation Map)</strong></td><td><strong>Grad-CAM (Gradient-weighted CAM)</strong></td></tr></thead><tbody><tr><td><strong>구조 제약</strong></td><td><strong>매우 높음.</strong> (반드시 GAP 구조여야 함)</td><td><strong>없음.</strong> (모든 CNN 기반 모델 가능)</td></tr><tr><td><strong>재학습 여부</strong></td><td>구조 변경 시 재학습 필요</td><td>재학습 없이 기존 모델 그대로 사용 가능</td></tr><tr><td><strong>정교함</strong></td><td>히트맵이 비교적 단순하고 큼직함</td><td>CAM보다 더 세밀한 시각화가 가능함</td></tr><tr><td><strong>장점</strong></td><td>구조가 단순할 때 이론적으로 명확함</td><td>범용성이 압도적임 (YOLO, GAN 등에도 가능)</td></tr><tr><td><strong>단점</strong></td><td>모델 구조를 마음대로 바꿀 수 없음</td><td>미분 값을 계산해야 하므로 연산이 한 단계 더 필요</td></tr></tbody></table></figure>



<h2 class="wp-block-heading">Global Average Pooling(GAP, 전역 평균 풀링)</h2>



<p>하나의 Feature Map(채널) 전체를 평균내어 하나의 숫자로 만드는 기술.각 픽셀에 대한 정보를 1차원으로 펴고 이를 출력으로 사용.</p>



<figure class="wp-block-image size-large is-resized"><img decoding="async" width="1024" height="594" data-attachment-id="492" data-permalink="https://blog.kggstudio.com/cv-3-grad-cam/image-74/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-14.png" data-orig-size="1392,808" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-14-1024x594.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-14-1024x594.png" alt="" class="wp-image-492" style="width:507px;height:auto" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-14-1024x594.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-14-300x174.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-14-768x446.png 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-14.png 1392w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">FC Layer (완전 연결 계층)</h2>



<p>CAM에서 FC는 1차원 정보 (예: 512개의 특징을 얼마나 강하게 나타내는지 숫자로 나타낸다면. 512길이의 1차원배열)를 가지고 그래서 이게 뭔데?</p>



<p>고양이인가 강아지인가 판단하는 분류기(Classifier) 역할을 함.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/cv-3-grad-cam/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">491</post-id>	</item>
		<item>
		<title>CV (2) &#8211; ArexNet, VGG, ResNet</title>
		<link>https://blog.kggstudio.com/cv-2/</link>
					<comments>https://blog.kggstudio.com/cv-2/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Thu, 16 Apr 2026 10:07:54 +0000</pubDate>
				<category><![CDATA[CV]]></category>
		<category><![CDATA[Dev]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=482</guid>

					<description><![CDATA[CV에서 사용되는 모델들 CV는 컴퓨터 비전의 약자로 컴퓨터(인공지능)에 눈에 해당하는 기술이라고 보면됩니다. CG는 컴퓨터 그래픽으로 사람들이 정보를 다넣어준걸 컴퓨터를통해 가공하고 보여주는 기술이었다면. CV는 딥러닝을통해 인공지능이 사물을 구분하게하거나 심지어 요즘에는 생성형 AI기술을통해 이렇게 학습한것을 토대로 새로운 이미지를 만들어내기까지합니다. 2023년부터 2026년 현재까지 매우 급속도로 발전하고있습니다. 아래 영상은 윌스미스가 스파게티 먹는 영상을 생성형AI로 만든것인데 2년만에 엄청난 발전을 한것을 ... <a title="CV (2) &#8211; ArexNet, VGG, ResNet" class="read-more" href="https://blog.kggstudio.com/cv-2/" aria-label="CV (2) &#8211; ArexNet, VGG, ResNet에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">CV에서 사용되는 모델들</h2>



<p>CV는 컴퓨터 비전의 약자로 컴퓨터(인공지능)에 눈에 해당하는 기술이라고 보면됩니다. CG는 컴퓨터 그래픽으로 사람들이 정보를 다넣어준걸 컴퓨터를통해 가공하고 보여주는 기술이었다면. CV는 딥러닝을통해 인공지능이 사물을 구분하게하거나 심지어 요즘에는 생성형 AI기술을통해 이렇게 학습한것을 토대로 새로운 이미지를 만들어내기까지합니다. 2023년부터 2026년 현재까지 매우 급속도로 발전하고있습니다.</p>



<p>아래 영상은 윌스미스가 스파게티 먹는 영상을 생성형AI로 만든것인데 2년만에 엄청난 발전을 한것을 한눈에 봐도 알 수 있습니다. 참고로 2025년 예시는 출력이 엄청 잘 된 케이스이고 평균적으로는 저런 영상 만드는게 쉽지 않았었습니다. 2024년 12월에 는 Sora AI가 나와서 높은 퀄리티에 세상을 놀래켰는데 이후 2025년 2월 X의 Grok 5월에 구글의 Veo등이 나오면서 Sora AI는 서비스종료 절차에 들어갔을정도로 지금 현재 발전속도는 매우 빠르게 바뀌고있습니다.</p>



<p>이 글에서는 생성형 AI 모델을 다루지는 않습니다.</p>



<figure class="wp-block-video"><video height="1080" style="aspect-ratio: 1920 / 1080;" width="1920" controls src="https://blog.kggstudio.com/wp-content/uploads/2026/04/m2-res_1080p.mp4"></video></figure>



<h3 class="wp-block-heading">ArexNet, VGG, ResNet</h3>



<p>ArexNet, VGG, ResNet은 각각 2012, 2014, 2015년에 높은성적을 거두며 유명해진 모델입니다. 이 모델들의 특징은 </p>



<ul class="wp-block-list">
<li>ArexNet: Deep Learning의 서막 GPU사용으로 속도가 급속도로 빨라졌고 <strong>ReLU 활성화 함수</strong>와 <strong>Dropout</strong>을 대중화 시킴.</li>



<li>VGG: Convolutional layer에서 <strong>3&#215;3 작은 필터</strong>만 깊게 쌓아도 성능이 좋아진다는것을 증명하고, 구조가 간단하여 오랫동안 기본 모델(Backbone)으로 사랑받았습니다.</li>



<li>ResNet: 층을 너무 깊게 쌓으면 기울기소실문제로 학습이 안되는 문제를 Skip Connection으로 해결해서 성능을 더욱 높였습니다 최고 높은 층은 152층인데 깊은 층이 항상 좋은결과를 내놓는것은 아니라서 여러 층으로된 다양한 모델이 있습니다.</li>
</ul>



<p>현재 ArexNet과 VGG는 사실상 Baseline 학습용 으로 사용되고, ResNet은 여전히 <strong>현역이자 산업계의 표준</strong>이라고 봐도 될정도입니다. 다만 VGG는 모델 자체를 추론용으로 사용하지는 않지만 VGG의 학습과정에서 사용되는 특성추출기나 이미지 스타일 변환 알고리즘은 2026년 현재까지도 사용되고 있습니다. 학습된 모델 용량이 크다는 단점도 있습니다.</p>



<p>최근에는 Vision Transformer (ViT)와 EfficientNet 계열이 그 자리를 대체하고 있는 추세입니다. 하지만 <strong>ResNet이 여전히 ViT보다 속도는 빠르면서 정확도는 큰차이가 없는 경우가 많습</strong>니다. 이런 이유로, <strong>의료Ai, 자율주행, 보안시스템 </strong>등 안정성이 중요한 도메인에서는 <strong>ResNet50이나 ResNet101이 가장 먼저 고려</strong>된다고 합니다.</p>



<h3 class="wp-block-heading">2026년 현재 잘 나가는 모델</h3>



<p><strong>Vision Transformer (ViT) &amp; Swin Transformer:</strong> * 이미지를 조각(Patch)으로 나눠 &#8216;어텐션(Attention)&#8217; 메커니즘을 적용합니다.</p>



<ul class="wp-block-list">
<li><strong>특징:</strong> 데이터가 아<strong>주 많을 때 CNN 계열보다 훨씬 정교한 성능</strong>을 냅니다. 현재 컴퓨터 비전 연구의 주류입니다.</li>
</ul>



<p><strong>EfficientNetV2 &amp; ConvNeXt:</strong> * <strong>특징:</strong> ResNet의 안정성과 ViT의 효율성을 합친 모델들입니다. 연산량 대비 성능이 <strong>압도적이라 가성비를 따지는 상용 서비스에서 가장 많이 채택</strong>됩니다.</p>



<p><strong>MobileNetV3 / FastViT:</strong> * <strong>특징:</strong> 스마트폰이나 <strong>임베디드 </strong>기기에서 <strong>실시간으로 돌아가야 할 때</strong> 씁니다.</p>



<h2 class="wp-block-heading">CV 관련 용어 + 개념정리</h2>



<p>Tensor: n차원의 데이터를 담는 데이터타입 (그냥 머신러닝의 텐서와 같음)</p>



<p>Convolution 연산 (합성곱 연산): 필터를 통해 데이터에서 의미 있는 특징(Feature)을 추출하는 과정</p>



<ul class="wp-block-list">
<li><strong>선(Edge) 추출:</strong> 수직 필터를 쓰면 세로선이 강조된 결과물이 나옵니다.</li>



<li><strong>블러(Blur) / 샤프닝(Sharpen):</strong> 주변 픽셀을 뭉개거나 차이를 벌려 이미지의 질감을 바꿉니다.</li>



<li><strong>핵심:</strong> 필터에 어떤 숫자가 적혀 있느냐에 따라 &#8220;고양이 귀 모양&#8221;, &#8220;강아지 코 모양&#8221; 등을 찾아내는 감지기가 됩니다.</li>
</ul>



<p>Convolution 연산중 가중치</p>



<p>Filter (CNN): 이미지에서 특정 패턴을 찾아내는 <strong>돋보기</strong> or <strong>특성 추출기</strong></p>



<p>Stride (CNN): 필터로 이미지 구석 구석을 검사할 때,  한번에 이동하는 보폭 (픽셀단위)</p>



<h4 class="wp-block-heading">Stride의 동작 방식</h4>



<ul class="wp-block-list">
<li><strong>Stride = 1 (기본값):</strong> 필터를 오른쪽으로 1픽셀씩 이동시킵니다. 이미지를 아주 꼼꼼하게 훑기 때문에 정보 손실이 적지만, 연산량이 많고 출력 결과물(Feature Map)의 크기가 크게 줄어들지 않습니다.</li>



<li><strong>Stride = 2 이상:</strong> 필터를 2픽셀(또는 그 이상)씩 건너뛰며 이동시킵니다. 이미지를 듬성듬성 보기 때문에 출력물의 크기가 절반 이하로 확 줄어듭니다.</li>
</ul>



<h4 class="wp-block-heading"> 왜 Stride를 조절하나요? (역할)</h4>



<ul class="wp-block-list">
<li><strong>이미지 크기 축소 (Downsampling):</strong> Pooling(풀링) 층과 비슷하게 이미지의 해상도를 줄이는 역할을 합니다. 층이 깊어질수록 Stride를 키워 이미지 크기를 줄이고, 대신 더 중요한 &#8220;추상적인 특징&#8221;에 집중하게 만듭니다.</li>



<li><strong>연산 효율성:</strong> 보폭을 크게 하면 계산해야 할 지점이 줄어들기 때문에 학습 및 추론 속도가 빨라집니다.</li>



<li><strong>넓은 시야 (Receptive Field):</strong> 보폭을 크게 가져가면 같은 횟수의 연산으로도 이미지의 더 넓은 영역을 한눈에 파악할 수 있게 됩니다.</li>
</ul>



<p>Receptive field:</p>



<p>Padding: 패딩이란 필터로 이미지를 스캔할때 학습 이미지를 감싸는 것을 말합니다. </p>



<figure class="wp-block-image size-full"><img decoding="async" width="234" height="216" data-attachment-id="484" data-permalink="https://blog.kggstudio.com/cv-2/image-72/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-12.png" data-orig-size="234,216" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-12.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-12.png" alt="" class="wp-image-484"/></figure>



<ul class="wp-block-list">
<li>Border 정보 손실 방지: 그림을 보면 3&#215;3필터가있을때 패딩이 없다면, 가장 구석의 픽셀은 1번밖에 참조 되지 않습니다. 중앙쪽 다른 픽셀들은 3&#215;3필터 사용시 9번씩 참조되는데 비교하자면 코너의 픽셀은 거의 무시된다고 생각해도 될 정도입니다.</li>



<li>이미지 크기 감소 방지: 단순히 코너의 픽셀이 무시되는것 뿐만 아니라, 패딩이 없다면 필터를 사용할때마다 이미지 크기가 급격히 줄어듭니다. 크기가 너무 빨리 줄어들면 Deep Network를 유지하기 힘듭니다.</li>
</ul>



<p>Feature map: 합성곱 연산의 최종 결과물 aka Activation Map</p>



<p>Channel: 각 필터 레이어 연산의 결과물</p>



<p>Inductive bias(귀납적 편향): 머신러닝 모델이 학습 데이터에서 보지 못한 새로운 데이터(Unseen Data)에 대해 예측할 때, <strong>&#8220;아마 이럴 것이다&#8221;라고 미리 가정하고 들어가는 일종의 &#8216;사전 지식&#8217; 또는 &#8216;선입견&#8217;</strong>을 의미합니다. 학습 데이터는 유한하지만 우리가 예측해야 할 미래의 상황은 무한하기 때문에, 모델이 <strong>올바른 방향으로 학습하려면 적절한 고정관념(Bias)이 반드시 필요</strong>합니다.</p>



<h4 class="wp-block-heading">모델별 Inductive Bias의 차이</h4>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>모델 종류</strong></td><td><strong>Inductive Bias의 강도</strong></td><td><strong>주요 가정 (Assumptions)</strong></td></tr></thead><tbody><tr><td><strong>Fully Connected (MLP)</strong></td><td><strong>매우 약함</strong></td><td>데이터 간의 특별한 관계가 없다고 가정 (모든 입력이 연결됨)</td></tr><tr><td><strong>CNN</strong></td><td><strong>강함</strong></td><td>데이터가 <strong>공간적</strong>인 특징(이미지 등)을 가진다고 가정</td></tr><tr><td><strong>RNN</strong></td><td><strong>강함</strong></td><td>데이터가 <strong>시간적</strong>인 순서(문장, 주식 등)를 가진다고 가정</td></tr><tr><td><strong>Transformer (ViT)</strong></td><td><strong>약함</strong></td><td>특별한 가정 없이 데이터 전체의 관계(Attention)를 스스로 학습</td></tr></tbody></table></figure>



<div>
<h3 class="wp-block-heading">Layer마다 여러개의 Filter가 필요한 이유?</h3>



<p>&#8220;필터 개수 = 모델이 한 번에 고려할 수 있는 특징의 종류 수&#8221;</p>



<h4 class="wp-block-heading">다양한 관점의 특징 추출 (Feature Diversity)</h4>



<p>필터 하나는 오직 <strong>한 가지 종류의 패턴</strong>만 찾을 수 있습니다.</p>



<ul class="wp-block-list">
<li><strong>필터 A:</strong> 가로선($-$)만 찾음</li>



<li><strong>필터 B:</strong> 세로선($|$)만 찾음</li>



<li><strong>필터 C:</strong> 대각선($/$)만 찾음</li>
</ul>



<p>만약 레이어에 필터가 하나뿐이라면, 그 레이어는 이미지에서 오직 &#8216;가로선&#8217; 정보만 남기고 나머지는 다 버리게 됩니다. 강아지의 눈, 코, 입을 모두 인식하려면 각각의 모양을 담당할 수 있는 <strong>수십, 수백 개의 다양한 필터</strong>가 동시에 필요합니다.</p>



<h4 class="wp-block-heading">고차원적 정보의 조합 (Hierarchical Representation)</h4>



<p>층(Layer)이 깊어질수록 필터들이 하는 일은 점점 더 복잡해집니다.</p>



<ul class="wp-block-list">
<li><strong>초반 레이어 (예: 64개 필터):</strong> 아주 기본적인 선이나 색상의 방향을 찾습니다.</li>



<li><strong>중반 레이어 (예: 128~256개 필터):</strong> 앞 단계에서 찾은 선들을 조합해 &#8216;곡선&#8217;, &#8216;삼각형&#8217;, &#8216;질감&#8217; 등을 찾습니다.</li>



<li><strong>후반 레이어 (예: 512개 필터):</strong> 더 복잡해진 정보들을 조합해 &#8216;귀 모양&#8217;, &#8216;꼬리 모양&#8217;, &#8216;눈동자&#8217; 같은 <strong>구체적인 부품</strong>들을 인식합니다.</li>
</ul>
</div>



<p>Filter 각각의 수치는 무엇을 의미하나요? 필터 안의 수치는 <strong>&#8220;특정 패턴에 대한 가중치(Weight)&#8221;</strong>를 의미합니다. 다르게 말하면 <strong>특정 특징에대한 점수</strong> 라고 생각하면됩니다. 예를들어 고양이 귀를 판별하는 필터가 있다고 하면 그 필터를 거쳐서 나온 채널의 픽셀값(즉 필터값)은 해당 위치마다 고양이귀 형태가 있는 또는 있는것으로 보이는 확률이 남아있다고 보면 될거같네요.</p>



<h3 class="wp-block-heading">CNN 연산 결과 출력은 무엇을 의미하나요? 여러개의 출력은 왜 생기고, 어떻게 활용되나요?</h3>



<p>CNN 연산의 최종 출력은 한마디로 <strong>&#8220;입력 이미지에 대한 다각도의 분석 보고서&#8221;</strong>라고 할 수 있습니다. 따라서 CNN의 중간 연산 결과물인 Feature Map은 이미지의 특정 위치에 우리가 찾는 Feature가 얼마나 강하게 나타나는지를 숫자로 나타낸것</p>



<ul class="wp-block-list">
<li>높은 숫자: 내가 찾는 패턴(고양이 귀) 가 여기 거의 확실히 있다!!</li>



<li>0에 가까운 숫자: 해당 패턴이 전혀 보이지 않는다.</li>
</ul>



<h3 class="wp-block-heading">이미지에서 패턴은 이미지 안에 존재하고, CNN에서는 Filter를 사용해서 패턴을 감지하고, 이를 잘 감지하는 방향으로 수정된다. </h3>



<h3 class="wp-block-heading">CNN에서 각 Layer별 수행되는 기법들은 어떤 의미가 있나요?</h3>



<ul class="wp-block-list">
<li>Convolution Layer: 특징 추출</li>



<li>Activation(ReLU 등): 합성곱 연산 결과에 활성화 함수 적용하는 단계</li>



<li>Pooling: 요약 과 불변성: Feature Map의 크기를 줄여 핵심만 남기는 과정</li>



<li>Flatten: 여러 filter를 거치면 3차원덩어리가 길게 펼쳐지는 과정. Flatten 이후 Dense Layer에 넣어서 1D Vector가 되면 이때부터는 Feature Map이 아니라 Feature Vector 라고함.</li>



<li>FC Layer: 최종 판단 (Classification) 모델의 맨 마지막에 위치하며, 추출된 모든 정보를 종합합니다.</li>
</ul>



<h3 class="wp-block-heading">최종 판단하는 방법</h3>



<p><strong>종합 보고서:</strong> 앞선 층들이 &#8220;눈이 있고, 귀가 있고, 털이 있다&#8221;는 단서들을 찾아냈다면, FC Layer는 이 단서들의 점수를 다 합쳐서 **&#8221;결국 이 사진은 95% 확률로 강아지다&#8221;**라는 결론을 내립니다.</p>



<h2 class="wp-block-heading">ResNet</h2>



<h3 class="wp-block-heading">용어 정리</h3>



<p><strong>잔차 연결 (residual connection)</strong> (aka 스킵 연결, 단축 연결): 층을 통과할때 공부한 내용만 넘기지 말고, 공부하기 전 원본 데이터도 같이 넘기는 방식. 아무리작아져도 1에 수렴하지 0에 가까워지지 않아서, 기울기 소실 문제를 막을수 있음.</p>



<pre class="wp-block-code"><code># Output = F(x) + x

def forward(self, x):
    identity = x  # 1. 일단 원본(x)을 따로 보관해둔다 (Identity)

    out = self.conv1(x)
    out = self.bn1(out)
    out = self.relu(out)
    out = self.conv2(out)
    out = self.bn2(out) # 2. 두 번의 컨볼루션을 거친 결과물 (F(x))

    out += identity  # 3. 핵심! 보관해둔 원본을 결과에 그냥 '더해준다' (Skip Connection)
    out = self.relu(out)

    return out</code></pre>



<p><strong>병목 블록 (Bottleneck Block)</strong>:</p>



<p><strong>&#8220;비싼 연산을 싸게 하기 위해, 데이터를 좁은 길(병목)로 통과시켜서 연산량을 다이어트하는 구조&#8221;</strong>입니다.</p>



<ul class="wp-block-list">
<li>목적: 연산량 다이어트</li>
</ul>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="564" data-attachment-id="485" data-permalink="https://blog.kggstudio.com/cv-2/image-73/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-13.png" data-orig-size="1280,705" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-13-1024x564.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-13-1024x564.png" alt="" class="wp-image-485" style="width:686px;height:auto" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-13-1024x564.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-13-300x165.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-13-768x423.png 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-13.png 1280w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">일반 블록 vs 병렬 블록 비교</h2>



<h3 class="wp-block-heading">1. 전제 조건 (Input &amp; Output)</h3>



<ul class="wp-block-list">
<li><strong>입력 데이터:</strong> 256개 채널 (<strong>가로 28 x 세로 28</strong> 크기의 특징 맵)</li>



<li><strong>출력 데이터:</strong> 동일하게 <strong>256개 채널</strong>로 내보내야 함</li>



<li><strong>커널 크기:</strong> 가장 비싼 <strong>3&#215;3</strong> 연산을 기준으로 함</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">2. [기본 블록] 연산량 계산</h3>



<p>기본 블록은 <strong>3 x 3</strong> 컨볼루션을 두 번 수행합니다. (256 -&gt; 256 -&gt; 256)</p>



<ol start="1" class="wp-block-list">
<li><strong>첫 번째 3 x 3 Conv:</strong> 3 x 3 x 256(입력) x 256(출력) x 28 x 28 = <strong>약 4.62</strong> 억 번</li>



<li><strong>두 번째 3 x 3 Conv:</strong> 위와 동일하게 <strong>4.62 억</strong> 번</li>
</ol>



<ul class="wp-block-list">
<li><strong>총합:</strong> <strong>약 9.24억 번 연산</strong></li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">3. [병목 블록] 연산량 계산 (다이어트 시작)</h3>



<p>병목 블록은 채널을 $1/4$로 줄였다가($64$) 다시 늘립니다. ($256 \rightarrow 64 \rightarrow 64 \rightarrow 256$)</p>



<ol start="1" class="wp-block-list">
<li><strong>첫 번째 1 x 1 Conv (축소):</strong> 1 x 1 x 256 x 64 x 28 x 28 <strong>약 0.13 억</strong> 번</li>



<li><strong>두 번째 3 x 3 Conv (핵심):</strong> 3 x 3 x 64 x 64 x 28 x 28 <strong>약 0.29 억</strong> 번 (채널이 줄어서 확 싸짐!)</li>



<li><strong>세 번째 1 x 1 Conv (확장):</strong> 1 x 1 x 64 x 256 x 28 x 28 <strong>약 0.13 억</strong> 번</li>
</ol>



<ul class="wp-block-list">
<li><strong>총합:</strong> <strong>약 0.55억 번 연산</strong></li>
</ul>



<p></p>



<p></p>



<p></p>



<h2 class="wp-block-heading">AlexNet, VGG, ResNet 실습코드</h2>



<p>AlexNet VGG ResNet (파이썬을 통해 직접구현) 모델훈련을해보고 사용해보는 예시가 있다.</p>



<p><a href="https://github.com/ohmanbo/AIFFEL_study/blob/main/CV/ch08.ipynb">https://github.com/ohmanbo/AIFFEL_study/blob/main/CV/ch08.ipynb</a></p>



<pre class="wp-block-code"><code>https:&#47;&#47;github.com/ohmanbo/AIFFEL_study/blob/main/CV/ch08.ipynb</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/cv-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		<enclosure url="https://blog.kggstudio.com/wp-content/uploads/2026/04/m2-res_1080p.mp4" length="19985689" type="video/mp4" />

		<post-id xmlns="com-wordpress:feed-additions:1">482</post-id>	</item>
		<item>
		<title>CV (1) &#8211; Computer Vision</title>
		<link>https://blog.kggstudio.com/cv-1/</link>
					<comments>https://blog.kggstudio.com/cv-1/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Wed, 15 Apr 2026 20:45:51 +0000</pubDate>
				<category><![CDATA[CV]]></category>
		<category><![CDATA[Dev]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=474</guid>

					<description><![CDATA[합성곱 신경망을 통한 시각 인식의 구조적 변천과 기술적 분석 컴퓨터 비전 분야는 지난 10년 동안 수동으로 설계된 특징 추출 방식에서 데이터 기반의 엔드투엔드(End-to-End) 학습 시스템으로의 근본적인 패러다임 전환을 경험했다. 이러한 변화의 중심에는 스탠퍼드 대학교의 CS231n 강의가 있으며, 2025년으로 10주년을 맞이한 이 교육 과정은 딥러닝의 기초부터 시각적 세계의 심층적인 이해에 이르기까지 광범위한 지식을 다룬다. 특히 저스틴 ... <a title="CV (1) &#8211; Computer Vision" class="read-more" href="https://blog.kggstudio.com/cv-1/" aria-label="CV (1) &#8211; Computer Vision에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<h1 class="wp-block-heading">합성곱 신경망을 통한 시각 인식의 구조적 변천과 기술적 분석</h1>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-19">컴퓨터 비전 분야는 지난 10년 동안 수동으로 설계된 특징 추출 방식에서 데이터 기반의 엔드투엔드(End-to-End) 학습 시스템으로의 근본적인 패러다임 전환을 경험했다. 이러한 변화의 중심에는 스탠퍼드 대학교의 CS231n 강의가 있으며, 2025년으로 10주년을 맞이한 이 교육 과정은 딥러닝의 기초부터 시각적 세계의 심층적인 이해에 이르기까지 광범위한 지식을 다룬다. 특히 저스틴 존슨(Justin Johnson) 교수가 주도하는 제5강 &#8216;합성곱 신경망을 이용한 이미지 분류&#8217;는 선형 분류기와 완전 연결 신경망(Fully Connected Networks)의 한계를 극복하고, 이미지의 <strong>공간적 구조를 보존하는 합성곱 연산</strong>의 도입을 통해 현대 시각 지능의 기틀을 마련한 과정을 상세히 분석한다. 본 보고서는 강의 스크립트와 관련 연구 자료를 바탕으로 합성곱 신경망(CNN)의 기술적 메커니즘, 역사적 진화, 그리고 최신 아키텍처로의 전환에 대해 심층적으로 고찰한다.</p>



<h2 class="wp-block-heading">딥러닝 기반 이미지 분류의 기초와 전이점</h2>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-20">딥러닝 시스템을 구축하는 첫 번째 단계는 문제를 텐서(Tensor)의 입출력 형식으로 공식화하는 것이다. 이미지 분류 설정에서 입력은 픽셀 값의 그리드로 구성된 3차원 텐서이며, 출력은 미리 정의된 각 카테고리에 대한 유사도 또는 점수를 나타내는 텐서다. 초기 학습 과정은 선형 분류기를 통해 가중치 행렬 <strong>W</strong>와 이미지 픽셀 간의 곱연산으로 점수를 예측하는 간단한 구조에서 시작되었다. 그러나 선형 분류기는 두 가지 결정적인 결함을 가지고 있다. 첫째, 시각적 관점에서 선형 분류기는 각 카테고리에 대해 단 하나의 이미지 템플릿만을 학습할 수 있다. 예를 들어, &#8216;자동차&#8217; 카테고리의 템플릿이 붉은색 덩어리 형태로 학습되었다면, 파란색이나 녹색 자동차를 인식하는 데 한계가 발생한다. 둘째, 기하학적 관점에서 선형 분류기는 고차원 공간에서 하이퍼플레인(Hyperplane)으로 공간을 분할하는데, 데이터가 선형적으로 분리 가능하지 않은 경우에는 제대로 작동하지 않는다.</p>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-21">이러한 한계를 극복하기 위해 두 개의 가중치 행렬 사이에 비선형성(Non-linearity)을 추가한 신경망 구조가 정의되었다.<sup></sup> 신경망은 $f = W_2 \max(0, W_1 x)$와 같은 기능적 형태를 취하며, 여기서 ReLU(Rectified Linear Unit)와 같은 활성화 함수가 도입되어 모델의 표현력을 비약적으로 향상시킨다.<sup></sup> 이러한 복잡한 모델을 최적화하기 위해 연산 그래프(Computational Graph)라는 데이터 구조가 사용되며, 각 노드는 행렬 곱셈이나 ReLU와 같은 기능적 원시 단위를 담당한다.<sup></sup> 데이터는 그래프를 따라 왼쪽에서 오른쪽으로 흐르며 손실 함수(Loss Function)를 계산하고, 이후 역전파(Backpropagation) 알고리즘을 통해 오른쪽에서 왼쪽으로 이동하며 각 매개변수에 대한 그래디언트(Gradient)를 계산한다.<sup></sup></p>



<h3 class="wp-block-heading">최적화 알고리즘의 진화와 커뮤니티의 인정</h3>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-22">가중치 행렬을 갱신하여 손실을 최소화하는 최적화 과정은 딥러닝의 핵심이다. SGD(Stochastic Gradient Descent), Momentum, RMSprop, 그리고 Adam과 같은 알고리즘들이 널리 사용된다. 특히 Adam 최적화 도구는 2015년 ICLR(International Conference on Learning Representations)에서 처음 발표된 이후 10년이 지난 2025년에 &#8216;Test of Time Award&#8217;를 수상하며 그 영향력을 입증했다.<sup></sup> 이는 학계가 10년 전의 연구 중 가장 혁신적이고 지속적인 가치를 지닌 기술을 공식적으로 인정한 사례로 볼 수 있다.</p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>최적화 알고리즘</strong></td><td><strong>주요 메커니즘</strong></td><td><strong>특징 및 영향</strong></td></tr></thead><tbody><tr><td>SGD</td><td>현재 기울기 방향으로 가중치 업데이트</td><td>가장 기본적인 최적화 방식</td></tr><tr><td>Momentum</td><td>과거 기울기 방향을 유지하여 가속도 부여</td><td>지역 최솟값(Local Minima) 탈출 용이</td></tr><tr><td>Adam</td><td>RMSprop과 Momentum의 결합</td><td>ICLR 2025 Test of Time Award 수상, 범용적 성능 <sup></sup></td></tr></tbody></table></figure>



<h2 class="wp-block-heading">전통적 특징 표현과 엔드투엔드 학습의 대조</h2>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-24">신경망이 시각 인식의 주류가 되기 이전, 이른바 &#8216;암흑기&#8217;에는 인간 설계자가 지능적으로 고안한 특징 추출(Feature Extraction) 방식이 지배적이었다.<sup></sup> 이 방식에서는 이미지의 픽셀을 직접 신경망에 넣는 대신, 색상 히스토그램(Color Histogram)이나 HOG(Histogram of Oriented Gradients)와 같은 변환 기능을 통해 의미 있는 표현을 먼저 추출했다.</p>



<h3 class="wp-block-heading">주요 전통적 특징 추출 기법 분석</h3>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-25">색상 히스토그램은 이미지 내의 색상 분포를 포착하는 방식이다. 모든 가능한 색상 공간을 이산적인 버킷으로 나누고, 각 버킷에 해당하는 픽셀의 수를 카운트하여 특징 벡터를 형성한다.<sup></sup> 이 방식은 이미지의 공간적 구조를 완전히 파괴하고 색상 분포만을 고려하기 때문에, 물체의 위치 변화에는 강인하지만 형태 정보는 손실된다. 반면, HOG는 색상 정보를 버리고 구조적 정보에 집중한다. 이미지를 작은 픽셀 영역(예: 8&#215;8)으로 나누고, 각 영역 내에서 가장 강한 가장자리(Edge)의 방향을 양자화하여 히스토그램을 작성한다.<sup></sup> 이는 개별 픽셀의 세부 사항보다는 지역적인 형태의 특징을 잡아내는 데 유용하며, 특히 인간 탐지(Human Detection) 분야에서 큰 성과를 거두었다.<sup></sup></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>특징 추출 방식</strong></td><td><strong>핵심 원리</strong></td><td><strong>데이터 손실/보존 특성</strong></td></tr></thead><tbody><tr><td>색상 히스토그램</td><td>색상 공간의 이산화 및 픽셀 카운팅</td><td>공간 구조 파괴, 색상 정보 보존 <sup></sup></td></tr><tr><td>HOG</td><td>지역 가장자리 방향의 양자화</td><td>색상 정보 파괴, 지역 구조 정보 보존 <sup></sup></td></tr><tr><td>Bag of Words</td><td>무작위 패치 추출 및 시각적 코드북 구축</td><td>중간 수준의 패턴 인식, 변형에 강함 <sup></sup></td></tr></tbody></table></figure>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-27">전통적인 시스템과 신경망 시스템의 가장 큰 차이점은 &#8216;인간의 설계&#8217; 대 &#8216;데이터의 학습&#8217; 비율에 있다.<sup></sup> 전통적인 패러다임에서는 특징 추출 부분이 고정된 코드(C++이나 Matlab 등)로 작성되며, 분류기 부분만 학습된다. 반면, 신경망 접근 방식은 원시 픽셀부터 최종 분류 점수에 이르기까지 시스템의 모든 부분이 그래디언트 데센트를 통해 데이터로부터 학습된다.<sup></sup> 이는 인간의 직관이 가질 수 있는 병목 현상을 제거하고, 대규모 데이터와 컴퓨팅 자원을 통해 최적의 함수를 스스로 찾아내도록 유도한다.</p>



<h2 class="wp-block-heading">합성곱 신경망(CNN)의 기술적 아키텍처</h2>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-28">완전 연결 신경망(FC)의 가장 큰 문제점은 이미지의 2차원 또는 3차원 공간 구조를 무시하고 1차원 벡터로 펼쳐서 처리한다는 점이다.<sup></sup> 합성곱 신경망은 이러한 한계를 보완하기 위해 이미지의 공간적 구조를 보존하는 새로운 연산 노드를 도입했다. CNN의 전형적인 구조는 합성곱 층(Convolutional Layer), 활성화 층(Activation Layer), 그리고 풀링 층(Pooling Layer)의 반복적인 조합으로 구성된다.<sup></sup></p>



<h3 class="wp-block-heading">합성곱 층의 작동 원리</h3>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-29">합성곱 층은 입력 이미지 위를 슬라이딩하는 작은 필터(또는 커널)를 사용한다. 예를 들어, 32x32x3 크기의 RGB 이미지 입력에 대해 5x5x3 크기의 필터를 적용할 수 있다. 여기서 필터의 깊이(3)는 항상 입력 채널의 깊이와 일치해야 한다.<sup></sup> 필터는 이미지의 각 지역 영역과 내적(Dot Product)을 수행하여 하나의 스칼라 값을 생성하며, 이 과정을 이미지 전체에 대해 반복하여 활성화 맵(Activation Map)을 형성한다.<sup></sup></p>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-30">필터는 일종의 &#8216;템플릿 매칭&#8217; 기능을 수행한다. 학습된 필터들을 시각화해보면, 첫 번째 층의 필터들은 주로 특정 방향의 가장자리나 특정 색상 대조를 찾는 Gabor 필터와 유사한 형태를 띤다.<sup></sup> 층이 깊어질수록 네트워크는 이러한 기초적인 특징들을 조합하여 눈, 바퀴, 텍스트 조각과 같은 더 복잡한 구조를 인식하게 된다.<sup></sup></p>



<h3 class="wp-block-heading">공간적 차원 결정과 하이퍼파라미터</h3>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-31">합성곱 연산 후 출력 텐서의 크기는 입력 크기(<strong>W</strong>), 필터 크기(<strong>K</strong>), 스트라이드(<strong>S</strong>), 그리고 제로 패딩(<strong>P</strong>)에 의해 결정된다. 출력 크기를 계산하는 공식은 다음과 같다.</p>



<div class="wp-block-math"><math display="block"><semantics><mrow><msub><mi>W</mi><mrow><mi>o</mi><mi>u</mi><mi>t</mi></mrow></msub><mo>=</mo><mfrac><mrow><mi>W</mi><mo>−</mo><mi>K</mi><mo>+</mo><mn>2</mn><mi>P</mi></mrow><mi>S</mi></mfrac><mo>+</mo><mn>1</mn></mrow><annotation encoding="application/x-tex">W_{out} = \frac{W &#8211; K + 2P}{S} + 1</annotation></semantics></math></div>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-32">여기서 패딩($P$)은 특징 맵이 층을 통과할 때마다 급격히 작아지는 것을 방지하기 위해 이미지 가장자리에 가상의 픽셀(주로 0)을 추가하는 기법이다.<sup></sup> 스트라이드($S$)는 필터가 한 번에 이동하는 칸수를 의미하며, 스트라이드가 커질수록 출력 크기는 작아지고 수용장(Receptive Field)은 빠르게 확대된다.<sup></sup></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>하이퍼파라미터</strong></td><td><strong>역할</strong></td><td><strong>설정 전략</strong></td></tr></thead><tbody><tr><td>필터 크기 ($K$)</td><td>지역 수용장의 크기 결정</td><td>보통 3&#215;3 또는 5&#215;5 사용 <sup></sup></td></tr><tr><td>스트라이드 ($S$)</td><td>출력 공간 해상도 조절</td><td>다운샘플링을 위해 2 이상 사용 <sup></sup></td></tr><tr><td>패딩 ($P$)</td><td>경계 정보 보존 및 크기 유지</td><td>$P = (K-1)/2$로 설정하여 크기 보존 <sup></sup></td></tr><tr><td>필터 개수</td><td>출력 채널의 깊이 결정</td><td>모델의 용량(Capacity) 조절 <sup></sup></td></tr></tbody></table></figure>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-34">수용장의 개념은 개별 뉴런이 입력 이미지의 어느 영역에 영향을 받는지를 설명한다. 단일 층의 합성곱은 필터 크기만큼의 좁은 수용장을 가지지만, 층을 쌓아 올릴수록 하위 층의 정보가 집약되어 상위 층 뉴런의 유효 수용장(Effective Receptive Field)은 선형적으로 또는 스트라이드에 의해 기하급수적으로 확장된다.<sup></sup> 이는 모델이 전역적인 이미지 맥락을 파악할 수 있게 하는 핵심 메커니즘이다.</p>



<h2 class="wp-block-heading">풀링 층을 통한 다운샘플링과 효율성</h2>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-35">풀링 층은 네트워크 내에서 공간 차원을 줄이기 위한 저비용 연산이다. 합성곱 층도 스트라이드를 통해 차원을 줄일 수 있지만, 풀링은 별도의 학습 매개변수 없이 고정된 함수를 각 채널에 독립적으로 적용함으로써 계산 효율성을 극대화한다.<sup></sup></p>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-36">가장 널리 사용되는 방식은 맥스 풀링(Max Pooling)으로, 지정된 영역(예: 2&#215;2) 내에서 가장 큰 값만을 추출한다.<sup></sup> 이는 이미지 내의 특정 특징이 해당 영역 어딘가에 존재한다는 정보만을 남기고 정확한 위치 정보에 대한 의존도를 낮춤으로써, 작은 이동에 대한 불변성(Invariance)을 제공한다.<sup></sup> 일반적으로 풀링 층에는 패딩을 사용하지 않으며, 2&#215;2 필터와 스트라이드 2를 사용하여 공간 해상도를 정확히 절반으로 줄이는 설정이 표준적이다.<sup></sup></p>



<h2 class="wp-block-heading">CNN의 역사적 진화와 현대적 위상</h2>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-37">CNN의 개념적 뿌리는 1959년 휴벨(Hubel)과 비젤(Wiesel)의 고양이 시각 피질 연구로 거슬러 올라간다. 그들은 시각 피질의 뉴런들이 특정 방향의 선에 반응하고, 계층적인 구조를 통해 복잡한 시각 정보를 처리한다는 것을 발견했다.<sup></sup> 이를 공학적으로 구현한 것이 1980년대의 네오코그니트론(Neocognitron)이며, 현대적인 형태의 CNN은 1998년 얀 르쿤(Yann LeCun)의 LeNet-5에서 완성되었다.<sup></sup></p>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-38">LeNet-5는 필기체 숫자 인식에서 탁월한 성능을 보였으나, 당시의 컴퓨팅 자원 한계로 인해 대규모 이미지 처리에는 어려움이 있었다.<sup></sup> 이후 2012년 알렉스 넷(AlexNet)의 등장은 딥러닝의 폭발적인 성장을 이끌었다. 알렉스 넷은 기본적으로 LeNet과 유사한 구조를 가졌으나, 더 깊은 층, GPU 활용, 그리고 ImageNet이라는 대규모 데이터셋을 통해 성능을 극대화했다.<sup></sup> 2012년부터 2020년까지 CNN은 객체 탐지(Detection), 세그멘테이션(Segmentation), 이미지 캡셔닝(Image Captioning) 등 컴퓨터 비전의 거의 모든 과제를 지배했다.<sup></sup></p>



<h3 class="wp-block-heading">트랜스포머의 등장과 새로운 국면</h3>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-39">2020년경부터 비전 트랜스포머(ViT)가 등장하며 CNN의 독점적 위치에 변화가 생겼다. 원래 자연어 처리(NLP)를 위해 개발된 트랜스포머 아키텍처는 이미지를 패치 단위로 나누어 처리하며, 자기 주의(Self-Attention) 메커니즘을 통해 이미지 내 모든 영역 간의 관계를 직접 모델링한다.<sup></sup> 데이터와 컴퓨팅 자원이 방대할 경우 트랜스포머는 CNN보다 더 높은 성능을 보이기도 한다. 그러나 CNN은 여전히 효율성, 국소적 특징 추출 능력, 그리고 중소규모 데이터셋에서의 강력한 성능 덕분에 널리 사용되며, 최근에는 CNN과 트랜스포머의 장점을 결합한 하이브리드 시스템도 활발히 연구되고 있다.<sup></sup></p>



<h2 class="wp-block-heading">이동 등변성(Translation Equivariance)의 수학적 의미</h2>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-40">CNN이 이미지 처리에 적합한 이유 중 하나는 이동 등변성이라는 특성 때문이다. 이는 입력 이미지가 이동하면 출력 특징 맵도 동일하게 이동한다는 성질을 의미한다.<sup></sup> 수학적으로 이는 합성곱 연산과 이동(Translation) 연산의 순서를 바꾸어도 결과가 동일함을 시사하는 &#8216;교환 법칙&#8217;과 유사한 개념이다. 이 구조적 특성은 물체가 이미지의 어디에 위치하든 동일한 필터가 적용되도록 보장함으로써, 모델이 위치 정보에 구애받지 않고 특징을 학습할 수 있게 한다.<sup></sup> 이는 인간의 시각적 직관을 연산자 설계 단계에서 반영한 대표적인 사례다.</p>



<h2 class="wp-block-heading">결론 및 향후 전망</h2>



<p id="p-c_3b4b46869c9a8111_0d46e929-656e-4a24-99d6-c4202ecf1f9d-41">합성곱 신경망은 이미지의 공간적 구조를 존중하고, 공유 가중치를 통해 매개변수 효율성을 확보하며, 계층적 학습을 통해 복잡한 시각 패턴을 정복했다. 2025년 현재, 비록 트랜스포머와 같은 새로운 아키텍처가 도전장을 내밀고 있으나, CNN이 정립한 공간적 국소성(Locality)과 계층적 특징 구성의 원리는 여전히 유효하다.<sup></sup> 딥러닝의 기초 위에서 구축된 이러한 구조적 혁신은 향후 자율 주행, 의료 영상 분석, 생성형 AI 등 시각 지능이 필요한 모든 분야에서 핵심적인 역할을 지속할 것으로 전망된다. 데이터와 연산 능력이 향상됨에 따라 모델은 더욱 깊고 복잡해지겠지만, 그 근간을 이루는 역전파와 합성곱의 원리는 앞으로도 시각적 세계를 이해하는 가장 강력한 도구로 남을 것이다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong>보고서 요약 데이터 테이블</strong></p>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>분석 차원</strong></td><td><strong>주요 내용</strong></td><td><strong>관련 근거</strong></td></tr></thead><tbody><tr><td><strong>모델 구조</strong></td><td>합성곱(CONV) -&gt; 활성화(RELU) -&gt; 풀링(POOL)의 반복 및 말단 FC 층</td><td><sup></sup></td></tr><tr><td><strong>학습 메커니즘</strong></td><td>연산 그래프 기반의 순전파 및 역전파(Backpropagation)</td><td><sup></sup></td></tr><tr><td><strong>역사적 이정표</strong></td><td>LeNet-5 (1998) -&gt; AlexNet (2012) -&gt; ViT (2021)</td><td><sup></sup></td></tr><tr><td><strong>수학적 특성</strong></td><td>이동 등변성(Translation Equivariance), 수용장 확장</td><td><sup></sup></td></tr><tr><td><strong>최적화 도구</strong></td><td>Adam (ICLR 2025 Test of Time Award 수상)</td><td><sup></sup></td></tr></tbody></table></figure>



<p>본 보고서는 CS231n 강의의 핵심 내용을 체계적으로 분석하여 합성곱 신경망의 기술적 가치와 역사적 맥락을 재조명했다. 시각 지능의 진화는 단순히 연산의 복잡도를 높이는 과정이 아니라, 데이터의 본질적인 구조를 가장 잘 반영할 수 있는 수학적 도구를 찾아가는 과정임을 확인할 수 있다.</p>



<h2 class="wp-block-heading">이미지 분류에 사용되는 기술</h2>



<ol class="wp-block-list">
<li>Support Vector Machine (SVM)</li>



<li>K-nearest Neighbors Algorithm (KNN)</li>



<li>Decision Tree</li>



<li>Artificial Neural Network (ANN)</li>



<li>Convolutional Neural Network (CNN)</li>
</ol>



<h4 class="wp-block-heading">참고 영상</h4>



<pre class="wp-block-code"><code>https:&#47;&#47;www.youtube.com/watch?v=f3g1zGdxptI</code></pre>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/cv-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">474</post-id>	</item>
		<item>
		<title>PyTorch파이토치 기초</title>
		<link>https://blog.kggstudio.com/pytorch-basic/</link>
					<comments>https://blog.kggstudio.com/pytorch-basic/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Wed, 15 Apr 2026 05:53:28 +0000</pubDate>
				<category><![CDATA[Deep Learning]]></category>
		<category><![CDATA[Dev]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=393</guid>

					<description><![CDATA[용어정리 PyTorch &#8211; GPU 가속 가능한 강력한 텐서 연산과, 동적 계산 그래프나 자동미분을 지원하는 딥러닝 프레임워크. Tensor(텐서) &#8211; n차원 배열을 수학적으로 나타낸 기본 단위. 머신러닝에서는 PyTorch가 지원하는 기능 즉 GPU 가속연산을 지원하고 자동미분 정보를 포함하는 핵심 객체. 단일 가설(Hypothesis, h) &#8211; 데이터의 입력(x)과 출력(y) 사이의 함수를 의미한다. (X*W+b 같은 함수) 가설 집합(Hypothesis Set) &#8211; 모델이 ... <a title="PyTorch파이토치 기초" class="read-more" href="https://blog.kggstudio.com/pytorch-basic/" aria-label="PyTorch파이토치 기초에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">용어정리</h2>



<p>PyTorch &#8211; GPU 가속 가능한 강력한 텐서 연산과, 동적 계산 그래프나 자동미분을 지원하는 <strong>딥러닝 프레임워크</strong>.</p>



<ul class="wp-block-list">
<li>동적 계산 그래프(<strong>DCG, Dynamic Computational Graph 중요특징</strong>): 코드를 실행하는 시점에 그래프가 생성되는 &#8216;define-by-run&#8217; 방식. Python의 제어문(if, for)을 쓰듯 모델을 작성할수 있고 디버깅이 쉬움.</li>



<li>자동미분 (<strong>Autograd</strong>): 머신러닝의 핵심은 역전파(Backpropagation)인데, PyTorch는 연산에 대해 미분 값을 자동으로 계산해 준다.</li>



<li>Pythonic: NumPy와 유사한 문법을 가지고있어 친숙하고 가독성이 뛰어남.</li>
</ul>



<p>Tensor(텐서) &#8211; n차원 배열을 수학적으로 나타낸 기본 단위. 머신러닝에서는 PyTorch가 지원하는 기능 <strong>즉 GPU 가속연산</strong>을 지원하고 <strong>자동미분 </strong>정보를 포함하는 <strong>핵심 객체</strong>.</p>



<p>단일 가설(Hypothesis, h) &#8211; 데이터의 입력(x)과 출력(y) 사이의 <strong>함수를</strong> 의미한다. (X*W+b 같은 함수)</p>



<p>가설 집합(Hypothesis Set) &#8211; 모델이 가질 수 있는 <strong>모든 가능한 가설 후보</strong>들.</p>



<p>통계량(statistics, T-value): 아래 남녀 키차이 분포도 예시에서 T값이 31.96이 나왔다면, 두 그룹의 <strong>평균 차이</strong>가 <strong>표준 오차</strong>(noise크기)에 비해 약 32배나 크다는 뜻.</p>



<div class="wp-block-math"><math display="block"><semantics><mrow><mi>T</mi><mo>−</mo><mi>v</mi><mi>a</mi><mi>l</mi><mi>u</mi><mi>e</mi><mo>=</mo><mfrac><mrow><mtext>두</mtext><mtext>&nbsp;</mtext><mtext>그</mtext><mtext>룹</mtext><mtext>의</mtext><mtext>&nbsp;</mtext><mtext>평</mtext><mtext>균</mtext><mtext>차</mtext><mtext>이</mtext></mrow><mrow><mtext>표</mtext><mtext>준</mtext><mtext>&nbsp;</mtext><mtext>오</mtext><mtext>차</mtext></mrow></mfrac><mtext>&nbsp;</mtext><mtext>&nbsp;</mtext><mo>∴</mo><mtext>&nbsp;</mtext><mtext>&nbsp;</mtext><mtext>표</mtext><mtext>준</mtext><mtext>&nbsp;</mtext><mtext>오</mtext><mtext>차</mtext><mo>=</mo><mfrac><mrow><mtext>평</mtext><mtext>균</mtext><mtext>&nbsp;</mtext><mtext>차</mtext><mtext>이</mtext><mo form="prefix" stretchy="false">(</mo><mn>20</mn><mo form="postfix" stretchy="false" lspace="0em" rspace="0em">)</mo></mrow><mrow><mi>T</mi><mo form="prefix" stretchy="false">(</mo><mn>32</mn><mo form="postfix" stretchy="false" lspace="0em" rspace="0em">)</mo></mrow></mfrac><mo>=</mo><mn>0.625</mn><mi>c</mi><mi>m</mi></mrow><annotation encoding="application/x-tex">T-value= \frac {두\space그룹의\space평균 차이}{표준\space오차}\space\space\therefore\space\space표준\space오차=\frac{평균\space차이(20)}{T(32)}=0.625cm</annotation></semantics></math></div>



<p>유의 확률(p-value): 데이터가 <strong>우연히 이렇게 뽑혔을 확률</strong>.  6.2285854381989205e-155는 $0.000&#8230;$ (0이 154개) 뒤에 6이 나오는 소수입니다. 즉, 남녀의 키차이가 없는데, <strong>우연히 이런 데이터가 뽑혔을 확률이 0%</strong>에 가깝다는 이야기 입니다. (즉, <strong>낮을수록 신뢰도 높은</strong> 데이터)</p>



<figure class="wp-block-image size-full is-resized"><img loading="lazy" decoding="async" width="598" height="490" data-attachment-id="399" data-permalink="https://blog.kggstudio.com/pytorch-basic/image-66/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-7.png" data-orig-size="598,490" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-7.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-7.png" alt="" class="wp-image-399" style="aspect-ratio:1.2204151918109634;width:489px;height:auto" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-7.png 598w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-7-300x246.png 300w" sizes="auto, (max-width: 598px) 100vw, 598px" /></figure>



<pre class="wp-block-code"><code>statistic, pvalue = stats.ttest_ind(man_height, woman_height, equal_var=True)

print("statistic:", statistic)
print("pvalue :", pvalue)
print("*:", pvalue &lt; 0.05)
print("**:", pvalue &lt; 0.001)</code></pre>



<pre class="wp-block-preformatted">statistic: 31.96162891312776
pvalue : 6.2285854381989205e-155
*: True
**: True</pre>



<p>손실 함수(Loss Function): 실제 값(검증 데이터의, y)과, 예측 값(prediction)에 차이가 발생했을때 오차가 얼마인지 계산하는 함수. MSE, MAE, RMSE, Huber Loss 등이 있다. 손실 함수는 <strong>목적 함수(Objective Function) 비용 함수(Cost Function</strong>) 라고 부르기도 한다.</p>



<p>교차 엔트로피(Cross-Entropy): <strong>두 확률 분포가 얼마나 다른지</strong>를 측정하는 도구. 머신러닝 분류 문제에서 모델의 출력은 보통 &#8220;이 데이터가 각 클래스에 속할 확률(예: 개일 확률 80%, 고양이일 확률 20%)&#8221;로 나옵니다. 이때 모델이 예측한 확률 분포와 실제 정답의 확률 분포(개 100%, 고양이 0%) 사이의 거리를 계산하는 것이 교차 엔트로피입니다.</p>



<h2 class="wp-block-heading">실습</h2>



<h3 class="wp-block-heading">1. 파이토치 &#8211; 단순 선형 회귀 예제</h3>



<pre class="wp-block-code"><code>import torch
from torch import optim

# x, y 데이터 입력

# requires_grad: 각 텐서에 대한 연산추척, 역전파메서드 호출해 기울기를 계산하고 저장. PyTorch에서 자동으로 미분해주는 autograd 기능 사용여부
weight = torch.zeros(1, requires_grad=True) 
bias = torch.zeros(1, requires_grad=True)
learning_rate = 0.001

#optim은 최적화 함수들이 모여있는 패키지
optimizer = optim.SGD(&#91;weight, bias], lr=learning_rate)

for epoch in range(10000):
    hypothesis = weight * x + bias                 #가설
    cost = torch.mean((hypothesis - y) ** 2)      #오차계산 MSE

    optimizer.zero_grad()                               #기울기값 0으로 초기화
    cost.backward()                                      #역전파 함수: 여기서 가중치와 편향에대한 기울기를 계산함.
    optimizer.step()                                      #여기서 학습률을 사용해 경사하강법 연산을 수행

    if (epoch + 1) % 1000 == 0:
        print(f"Epoch : {epoch+1:4d}, 가중치: {weight.item():.3f}, 편향: {bias.item():.3f}, 오차: {cost:.3f}")</code></pre>



<h3 class="wp-block-heading">2. zero_grad(), cost.backward(), optimizer.step()</h3>



<ul class="wp-block-list">
<li>zero_grad(): 기울기를 <strong>0으로 초기화</strong>해주는 함수</li>



<li>cost.backward(): 역전파과정을 수행하며 <strong>기울기를 계산</strong>하는 함수</li>



<li>optimizer.step(): 기울기를통해 경사하강법을수행하며 <strong>가중치를 조정</strong>하는 함수</li>
</ul>



<pre class="wp-block-code"><code>for epoch in range(10000):
    hypothesis = weight * x + bias
    cost = torch.mean((hypothesis - y) ** 2)

    print(f"Epoch : {epoch+1:4d}")

    # &#91;1]현재상태 출력
    print(f"&#91;1] : 기울기: {weight.grad}, 가중치: {weight.item():.3f}") # weight.grad, weight.item()

    optimizer.zero_grad() 
    # &#91;2]기울기 0으로 초기화
    print(f"&#91;2] : 기울기: {weight.grad}, 가중치: {weight.item():.3f}")

    cost.backward() 
    # &#91;3]기울기 계산
    print(f"&#91;3] : 기울기: {weight.grad}, 가중치: {weight.item():.3f}")

    optimizer.step()
    # &#91;4]가중치 계산
    print(f"&#91;4] : 기울기: {weight.grad}, 가중치: {weight.item():.3f}")
    
    if epoch == 3:
        break</code></pre>



<h3 class="wp-block-heading">3. 신경망 적용</h3>



<p>PyTorch에서는 신경망 패키지를 제공한다. 기본적으로 bias는 사용함(True)로 되어있고 device나 dtype은 사용하지 않도록 되어있고<br>in_features와 out_features에는 입력 데이터 개수와 출력 데이터 개수를 지정해준다.</p>



<p>bias변수나 weight변수는 따로 필요없다 모델이 가지고 있기 때문에.</p>



<pre class="wp-block-code"><code>nnLinear = torch.nn.Linear(
    in_features,
    out_features,
    bias=True,
    device=None,
    dtype=None
)</code></pre>



<pre class="wp-block-code"><code>import torch
from torch import nn # 신경망 import
from torch import optim

# 데이터 준비 (생략)

# device = "cuda" if torch.cuda.is_available() else "cpu" # Nvidia 그래픽카드
device = "mps" if torch.backends.mps.is_available() and torch.backends.mps.is_built() else "cpu" # MacOS GPU

model = nn.Linear(1, 1, device=device)
criterion = nn.MSELoss()                               # 위에서 우리가 계산했던 MSE오차를 계산해준다.
optimizer = optim.SGD(model.parameters(), lr=0.001)    # 다른값들은 포함되어있으므로 lr만 추가로 지정해준다.

for epoch in range(10000):
    output = model(x)                                  # model에 입력값을 전달해주면 가설(함수)를 계산해 output변수에 넣어준다.
    cost = criterion(output, y)                        # 위에서 지정해준 MSELoss()를 사용해 오차를 계산해준다.

    optimizer.zero_grad()
    cost.backward()
    optimizer.step()

    if (epoch + 1) % 1000 == 0:
        print(f"Epoch : {epoch+1:4d}, Model : {list(model.parameters())}, Cost : {cost:.3f}")</code></pre>



<h3 class="wp-block-heading">4. 가속기 자동선택 함수</h3>



<pre class="wp-block-code"><code>def FindBestDevice():
    """
    현재 시스템 환경에서 가장 성능이 좋은 디바이스를 반환합니다.
    우선순위: CUDA(Nvidia) -> MPS(Apple) -> XPU(Intel) -> CPU
    """
    # 1. Nvidia GPU (CUDA) 확인
    if torch.cuda.is_available():
        return torch.device("cuda")
    
    # 2. Apple Silicon GPU (MPS) 확인
    elif hasattr(torch.backends, "mps") and torch.backends.mps.is_available():
        return torch.device("mps")
    
    # 3. Intel GPU (XPU) 확인 - 리눅스/윈도우 서버 환경 대응
    elif hasattr(torch, "xpu") and torch.xpu.is_available():
        return torch.device("xpu")
    
    # 4. 모든 조건이 안 맞으면 CPU 사용
    else:
        return torch.device("cpu")

# 위 함수를 사용하면

device = FindBestDevice() #구문을 이용해 device를 찾고
nn.Linear(1, 1, device=device) 이렇게 바로 넣어주면된다. 

# 아래처럼 내장기능을 사용할수도있는데 현재 호환성 문제가 있음
if hasattr(torch, "accelerator"):
    device = torch.accelerator.current_accelerator().type if torch.accelerator.is_available() else "cpu"</code></pre>



<h2 class="wp-block-heading">5. DataSet &amp; DataLoader</h2>



<p>DataLoader는 Data를 불러오는 방식(batch_size, shuffle, num_workers)<br>DataSet은 불러온 데이터를 활용하기위해 정의된 클래스<br>DataSet과 DataLoader는 torch.utils.data 안에 포함되어있다.</p>



<p>DataLoader</p>



<ul class="wp-block-list">
<li>TensorDataset 인스턴스를 받음</li>



<li>batch_size는 한번에 처리할 데이터 수</li>



<li>shuffle은 학습데이터 순서를 섞을지 여부</li>



<li>drop_last는 (배치 수)/(데이터 수) 했을때 나머지가있으면 이걸 버릴지 학습에 사용할지 여부</li>
</ul>



<h4 class="wp-block-heading">Batch Size</h4>



<p>batch size는 모델 훈련에 큰 영향을 끼치는 요소기 때문에 신중하게 정해야한다. 보통은 8, 16은 작은사이즈, <strong>32, 64는 보통(국룰)</strong> 128 256 512 1024는 큰 사이즈 로 본다. 당연히 데이터 크기도 고려되야한다.  데이터가 500갠데 batch size를 1024로 할수는 없는 법. 배치 사이즈를 키우면 LR도 같이 올려주기. (batch size가 2배가되면 데이터 양도 2배가되서 LR을 같이 늘려줘야 비슷하게 작동, <strong>절대적인건 아님</strong>)</p>



<p>batch size를 키우면</p>



<ul class="wp-block-list">
<li>학습 속도가 빨라짐 </li>



<li>GPU메모리를 초과하게되면 에러발생</li>



<li>과적합 발생 가능성 높음</li>
</ul>



<p>batch size를 낮추면</p>



<ul class="wp-block-list">
<li>학습 성능(모델의 예측 능력)면에서 유리함</li>



<li>일반화에 유리 (새로운 데이터에도 잘 적응하도록 만듬)</li>



<li>학습 속도는 느림</li>
</ul>



<h4 class="wp-block-heading">Bias (편향)</h4>



<p>bias는 일반적으로 true를 씁니다 데이터 평균값을 0으로만들어주는 batch normalization(BN)을 쓸경우는 false를 쓰는것이 관례. </p>



<pre class="wp-block-code"><code>import torch
import pandas as pd
from torch import nn
from torch import optim
from torch.utils.data import Dataset, DataLoader, random_split, TensorDataset

# 데이터 준비 (생략)

# 데이터를 파이토치 DataSet으로 변환
train_dataset = TensorDataset(train_x, train_y)
# shuffle 훈련할때 사용하는 데이터 섞기
# drop_last 데이터크기가 5 배치크기가 2일때 나머지가 1개가 발생할경우 버릴지, 아니면 훈련데이터로 사용할지 여부. 
# 특정상황에서 에러가날수있어서 사실상 거의 True 고정
train_dataloader = DataLoader(train_dataset, batch_size=2, shuffle=True, drop_last=True)

model = nn.Linear(2, 2, bias=True, device=device)
criterion = nn.MSELoss()
optimizer = optim.SGD(model.parameters(), lr=0.001)

for epoch in range(20000):
    cost = 0.0
    
    for batch in train_dataloader: # 배치마다 따로계산하기위해 반복문이 추가됨
        x, y = batch
        output = model(x)
        
        loss = criterion(output, y)
        
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        
        cost += loss # 1 epoch의 손실을 계산하기위해 데이터 누적

    cost = cost / len(train_dataloader) # 데이터는 6개 배치사이즈는 2 -> 3으로 나눔
    
    if (epoch + 1) % 1000 == 0:
        print(len(train_dataloader))
        print(f"Epoch : {epoch+1:4d}, Model : {list(model.parameters())}, Cost : {cost:.3f}")</code></pre>



<h2 class="wp-block-heading">6. CustomDataset, CustomModel</h2>



<p>우리는 위에서 Dataset이 뭔지 Model이 뭔지 이미 사용해봤다. Custom은 이들은 내 사용용도에 맞게 개조 및 자동화 시키기 위해 사용된다. 아래 코드의 주석부분을 읽어보면 자동화되는부분을 예시로 볼수있다.</p>



<h4 class="wp-block-heading">CustomModel</h4>



<pre class="wp-block-code"><code>class CustomModel(nn.Module):  # nn.Module 상속
    def __init__(self):
        super().__init__()               #부모 클래스의 생성자 호출
        self.layer = nn.Linear(2, 1)

    def forward(self, x):
        x = self.layer(x)
        return x</code></pre>



<h4 class="wp-block-heading">CustomDataset</h4>



<pre class="wp-block-code"><code>class CustomDataset(Dataset):      #  Dataset 상속
    def __init__(self, file_path):        # 파일경로를 인자로받아서
        df = pd.read_csv(file_path)   # read_csv()로 불러온다
        self.x = df.iloc&#91;:, 0].values     # 0번 column의 데이터를 self.x에 저장
        self.y = df.iloc&#91;:, 1].values     # 1번 column의 데이터를 self.y의 저장
        self.length = len(df)

    def __getitem__(self, index):
        x = torch.FloatTensor(&#91;self.x&#91;index] ** 2, self.x&#91;index]])
        y = torch.FloatTensor(&#91;self.y&#91;index]])
        return x, y

    def __len__(self):
        return self.length</code></pre>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/pytorch-basic/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">393</post-id>	</item>
		<item>
		<title>uv (of Python env)</title>
		<link>https://blog.kggstudio.com/uv-of-python/</link>
					<comments>https://blog.kggstudio.com/uv-of-python/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Tue, 14 Apr 2026 13:38:16 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Python]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=466</guid>

					<description><![CDATA[프로젝트에 가상환경 만들기 가상환경 비활성화 아무 메시지가없으면 비활성화가 잘된것이고 이미 비활성화 되있으면 아래명령어를 찾을수 없다고 나온다. 가상환경 활성화 여부 확인 기본적으로는 터미널에서 가상환경이 표시가되지만, 터미널에 테마적용등으로 가상환경이 표시가 안되는경우도 있습니다. 1회성 가상환경 세팅 아래처럼 설치하면 가상환경 초기화 없이 1회성으로 설치됨 uv로부터 프로젝트 관리받기 conda에 있는 가상환경 uv로 바꾸기 먼저 아래처럼 requirements.txt 파일을 만듬]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">프로젝트에 가상환경 만들기</h2>



<pre class="wp-block-code"><code># 1. 프로젝트 폴더로 이동
cd your_project_folder

# 2. uv 가상환경 생성 (.venv 폴더가 생성됨)
uv venv --python 3.10  # 원하는 파이썬 버전 지정 가능

# 3. 가상환경 활성화 (맥/리눅스)
source .venv/bin/activate</code></pre>



<h2 class="wp-block-heading">가상환경 비활성화</h2>



<p>아무 메시지가없으면 비활성화가 잘된것이고 이미 비활성화 되있으면 아래명령어를 찾을수 없다고 나온다.</p>



<pre class="wp-block-code"><code>deactivate</code></pre>



<h2 class="wp-block-heading">가상환경 활성화 여부 확인</h2>



<p>기본적으로는 터미널에서 가상환경이 표시가되지만, 터미널에 테마적용등으로 가상환경이 표시가 안되는경우도 있습니다.</p>



<ul class="wp-block-list">
<li><strong>성공 시:</strong> <code>/Users/사용자이름/프로젝트경로/.venv/bin/python</code> 처럼 내가 만든 폴더 안의 경로가 뜹니다.</li>



<li><strong>실패 시:</strong> <code>/opt/homebrew/bin/python</code>이나 <code>/usr/bin/python</code> 같은 시스템 경로가 뜹니다.</li>
</ul>



<pre class="wp-block-code"><code>which python</code></pre>



<h2 class="wp-block-heading">1회성 가상환경 세팅</h2>



<p>아래처럼 설치하면 가상환경 초기화 없이 1회성으로 설치됨</p>



<pre class="wp-block-code"><code># requirements.txt 기반으로 광속 설치
uv pip install -r requirements.txt</code></pre>



<h2 class="wp-block-heading">uv로부터 프로젝트 관리받기</h2>



<pre class="wp-block-code"><code>uv init
uv add -r requirements.txt</code></pre>



<h2 class="wp-block-heading">conda에 있는 가상환경 uv로 바꾸기</h2>



<p>먼저 아래처럼 requirements.txt 파일을 만듬</p>



<pre class="wp-block-code"><code># 1. 기존 콘다 환경 활성화
conda activate your_env_name

# 2. pip를 이용해 의존성 리스트 생성 (conda list보다 호환성이 좋음)
pip list --format=freeze > requirements.txt</code></pre>



<p></p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/uv-of-python/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">466</post-id>	</item>
		<item>
		<title>딥러닝(2) &#8211; 심화 학습</title>
		<link>https://blog.kggstudio.com/deep-learning-2-intermediate/</link>
					<comments>https://blog.kggstudio.com/deep-learning-2-intermediate/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Tue, 14 Apr 2026 06:47:36 +0000</pubDate>
				<category><![CDATA[Deep Learning]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[딥러닝]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=449</guid>

					<description><![CDATA[과대적합과 과소적합 딥러닝 기초에서는 각종 용어들과 파이토치 기본 사용법을 알아보았습니다 심화 학습에서는 과대적합 과소적합때문에 발생하는 성능저하를 어떻게 개선할것인지 알아보도록 하겠습니다. 또 새로운용어들도 존재하지만 대부분 기초학습때 배웠던것이니 걱정하지 않으셔도 됩니다. 편향-분산 트레이드 오프 실제로는 아래 그래프와 완전히 동일하진 않겠지만 편향과 분산은 서로 트레이드 오프관계이므로 적절한 조절을통해 Total error를 줄이는것이 중요합니다. 과대적합과 과소적합 문제 해결 Standardization 표준화 ... <a title="딥러닝(2) &#8211; 심화 학습" class="read-more" href="https://blog.kggstudio.com/deep-learning-2-intermediate/" aria-label="딥러닝(2) &#8211; 심화 학습에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">과대적합과 과소적합</h2>



<div>
<p>딥러닝 기초에서는 각종 용어들과 파이토치 기본 사용법을 알아보았습니다 심화 학습에서는 과대적합 과소적합때문에 발생하는 성능저하를 어떻게 개선할것인지 알아보도록 하겠습니다. 또 새로운용어들도 존재하지만 대부분 기초학습때 배웠던것이니 걱정하지 않으셔도 됩니다.</p>
</div>



<h3 class="wp-block-heading">편향-분산 트레이드 오프</h3>



<p>실제로는 아래 그래프와 완전히 동일하진 않겠지만 편향과 분산은 서로 트레이드 오프관계이므로 적절한 조절을통해 Total error를 줄이는것이 중요합니다.</p>



<ul class="wp-block-list">
<li>Variance = 분산: 훈련 데이터셋이 조금만 바뀌어도 모델의 예측값이 크게 요동치는 정도. <strong>차이가 클수록 더욱 과적합</strong> 된것. 가중치 값이 크다는것은 입력값에 대해 모델이 매우 민감하게 반응 한다는 뜻이기도함. L2 정규화 (Weight Decay)로 가중치 크기를 줄이면 Variance도 같이 낮아지는 효과가 있음.</li>



<li>Feature의 종류 수가 많아지만 Variance 도 높아짐.</li>



<li>Bias = 편향</li>
</ul>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1056" height="792" data-attachment-id="452" data-permalink="https://blog.kggstudio.com/image-69/" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-9-edited.png" data-orig-size="1056,792" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-9-edited-1024x768.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-9-edited.png" alt="" class="wp-image-452" style="width:668px;height:auto" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-9-edited.png 1056w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-9-edited-300x225.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-9-edited-1024x768.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-9-edited-768x576.png 768w" sizes="auto, (max-width: 1056px) 100vw, 1056px" /></figure>



<h3 class="wp-block-heading">과대적합과 과소적합 문제 해결</h3>



<ol class="wp-block-list">
<li><strong>데이터 수집</strong>: 과소적합이 발생한경우 데이터 양이 부족한것이므로 데이터를 늘려줘야한다. 혹은 데이터 양이 부족하더라도 모델 변경을통해 개선이 되기도한다.</li>



<li><strong>피처 엔지니어링</strong>: 추가 데이터 수집이 어려운 경우, 기존 훈련 데이터에서 <strong>변수나 특징을 추출</strong>하거나, <strong>피처를 더 작은 차원</strong>으로 축소한다.</li>



<li><strong>모델 변경</strong>: <strong>잘못된 모델 선택</strong>으로 <strong>과대적합이나 과소적합</strong>이 발생할 수 있는데 데이터 세트에비해 너무 강력한 모델을 쓴다거나 너무 간단한 모델을 사용 하는경우.</li>



<li><strong>조기 중단</strong>: 모델 학습 시 검증 데이터세트로 성능을 <strong>지속적으로 평가해 모델의 성능이 저하되기 전</strong>에 모델 학습을 <strong>조기 중단</strong> 하는 방법(Early Stopping)</li>



<li><strong>배치 정규화</strong>: 모델의 계층마다 <strong>편향과 분산을 조정</strong>해 내부 공변량 변화를 줄여 과대적합을 방지한다.</li>



<li><strong>가중치 초기화</strong>: 모델의 매개변수를 최적화 하기 전에 가중치 초기값을 설정하는 프로세스를 의미한다. 학습 시 기울기가 매우 작아지거나 커지는 문제가 발생할 수 있다. 이러한 문제는 학습을 어렵게 만들거나 불가능 하게 만든다. 그러므로 <strong>적절한 초기 가중치</strong>를 설정해 과대 적합을 방지할 수 있다.</li>



<li><strong>정칙화</strong>: 모델에 정칙화를 적용해 목적 함수에 패널티를 부여하는 방법이다. 모델을 일부 제한해 과대적합을 방지할 수 있다. 정칙화에는 학습 조기 중단, L1 정칙화, L2정칙화, 드롭아웃, 가중치 감쇠 등이 있다.</li>
</ol>



<h2 class="wp-block-heading">Standardization 표준화 &#8211; 표준편차를 1로 만드는 과정</h2>



<h3 class="wp-block-heading">Instance Normalization</h3>



<p>만약 배열에 데이터가 [1, 0.01, 0.01]이 있으면 배열의 <strong>표준화 결과</strong>는 [1.4142, -0.707, -0.707]이 된다.</p>



<h4 class="wp-block-heading">1. 평균계산</h4>



<div class="wp-block-math"><math display="block"><semantics><mrow><mtext>평</mtext><mtext>균</mtext><mo form="prefix" stretchy="false">(</mo><mi>μ</mi><mo form="postfix" stretchy="false">)</mo><mo>=</mo><mfrac><mrow><mn>1</mn><mo>+</mo><mn>0.01</mn><mo>+</mo><mn>0.01</mn></mrow><mn>3</mn></mfrac><mo>=</mo><mfrac><mn>1.02</mn><mn>3</mn></mfrac><mo>=</mo><mn>0.34</mn></mrow><annotation encoding="application/x-tex">평균(\mu)=\frac{1+0.01+0.01}
{3}=\frac{1.02}{3}=0.34</annotation></semantics></math></div>



<h4 class="wp-block-heading">2. 분산 및 표준편차 계산</h4>



<p>각 데이터에서 편균값을 뺀 값의 제곱합을 구하여 분산</p>



<div class="wp-block-math"><math display="block"><semantics><mrow><mtext>분</mtext><mtext>산</mtext><mo form="prefix" stretchy="false">(</mo><msup><mi>σ</mi><mn>2</mn></msup><mo form="postfix" stretchy="false">)</mo><mo lspace="0.2222em" rspace="0.2222em">:</mo><mfrac><mn>1</mn><mi>n</mi></mfrac><mrow><mi mathvariant="normal">Σ</mi></mrow><mo form="prefix" stretchy="false">(</mo><mn>1</mn><mo>−</mo><mi>x</mi><msup><mo form="postfix" stretchy="false">)</mo><mn>2</mn></msup><mo separator="true">,</mo><mtext>&nbsp;</mtext><mtext>&nbsp;</mtext><mtext>표</mtext><mtext>준</mtext><mtext>편</mtext><mtext>차</mtext><mo form="prefix" stretchy="false">(</mo><mi>σ</mi><mo form="postfix" stretchy="false">)</mo><mo lspace="0.2222em" rspace="0.2222em">:</mo><msqrt><mi>σ</mi></msqrt></mrow><annotation encoding="application/x-tex">분산(\sigma^2):\frac{1}{n}\Sigma(1-x)^2,\space\space표준편차(\sigma):\sqrt{\sigma}</annotation></semantics></math></div>



<div class="wp-block-math"><math display="block"><semantics><mrow><mo>∴</mo><mtext>&nbsp;</mtext><mtext>표</mtext><mtext>준</mtext><mtext>편</mtext><mtext>차</mtext><mo form="prefix" stretchy="false">(</mo><mi>σ</mi><mo form="postfix" stretchy="false">)</mo><mo lspace="0.2222em" rspace="0.2222em">:</mo><msqrt><mrow><mfrac><mn>1</mn><mn>3</mn></mfrac><mo form="prefix" stretchy="false">(</mo><mo form="prefix" stretchy="false">(</mo><mn>1</mn><mo>−</mo><mn>0.34</mn><msup><mo form="postfix" stretchy="false">)</mo><mn>2</mn></msup><mo>+</mo><mo form="prefix" stretchy="false">(</mo><mn>0.01</mn><mo>−</mo><mn>0.34</mn><msup><mo form="postfix" stretchy="false">)</mo><mn>2</mn></msup><mo>+</mo><mo form="prefix" stretchy="false">(</mo><mn>0.01</mn><mo>−</mo><mn>0.34</mn><msup><mo form="postfix" stretchy="false">)</mo><mn>2</mn></msup><mo form="postfix" stretchy="false" lspace="0em" rspace="0em">)</mo></mrow></msqrt><mo>=</mo><msqrt><mn>0.2178</mn></msqrt><mo>=</mo><mn>0.4667</mn></mrow><annotation encoding="application/x-tex">\therefore\space표준편차(\sigma):\sqrt{\frac{1}{3}((1-0.34)^2+(0.01-0.34)^2+(0.01-0.34)^2)}=\sqrt{0.2178} = 0.4667</annotation></semantics></math></div>



<h4 class="wp-block-heading">3. 표준화화 마무리</h4>



<div class="wp-block-math"><math display="block"><semantics><mrow><mi>Z</mi><mo>=</mo><mfrac><mrow><mi>x</mi><mo>−</mo><mi>μ</mi></mrow><mi>σ</mi></mfrac></mrow><annotation encoding="application/x-tex">Z=\frac{x-\mu}{\sigma}</annotation></semantics></math></div>



<div class="wp-block-math"><math display="block"><semantics><mrow><mo>∴</mo><mtext>&nbsp;</mtext><msub><mi>Z</mi><mn>1</mn></msub><mo>=</mo><mfrac><mrow><mn>1</mn><mo>−</mo><mn>0.34</mn></mrow><mn>0.4667</mn></mfrac><mo>=</mo><mn>1.4142</mn><mtext>&nbsp;</mtext><mtext>&nbsp;</mtext></mrow><annotation encoding="application/x-tex">\therefore\space Z_1=\frac{1-0.34}{0.4667}=1.4142\space\space</annotation></semantics></math></div>



<div class="wp-block-math"><math display="block"><semantics><mrow><mo>∴</mo><mtext>&nbsp;</mtext><msub><mi>Z</mi><mn>2</mn></msub><mo>=</mo><mfrac><mrow><mn>0.01</mn><mo>−</mo><mn>0.34</mn></mrow><mn>0.4667</mn></mfrac><mo>=</mo><mo form="prefix" stretchy="false">−</mo><mn>0.7071</mn></mrow><annotation encoding="application/x-tex">\therefore \space Z_2=\frac{0.01-0.34}{0.4667}=-0.7071</annotation></semantics></math></div>



<p>정규화를 하는 이유는 <strong>내부 공변량 변화를 억제</strong> + <strong>기울기 소실 방지</strong> 하기 위해서다.</p>



<h3 class="wp-block-heading">정규화의 종류</h3>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="267" data-attachment-id="458" data-permalink="https://blog.kggstudio.com/deep-learning-2-intermediate/image-70/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-10.png" data-orig-size="2358,614" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-10-1024x267.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-10-1024x267.png" alt="" class="wp-image-458" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-10-1024x267.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-10-300x78.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-10-768x200.png 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-10-1536x400.png 1536w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-10-2048x533.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<ul class="wp-block-list">
<li>N (Batch Size): 배치 크기, 한번에 학습 시킬 데이터 수</li>



<li>C (Channels): 채널 수, 컬러 사진은 보통 RGB 3개의 채널을 가짐</li>



<li>H (Height): 이미지의 세로 픽셀수</li>



<li>W (Width): 이미지의 가로 픽셀수</li>
</ul>



<ul class="wp-block-list">
<li>Batch Norm(배치 정규화) &#8211; 배치정규화는 이미지 분류 모델에서 적용시 <strong>14배 더 적은 학습</strong>으로도 동일한 정확도를 달성. <strong>이미지 분류</strong>에서 <strong>학습 빠름</strong>. CNN(합성곱) MLP 같은 순방향 신경망 (Feedforward Neural Network, FNN)에서 주로 사용.</li>



<li>Layer Norm(계층 정규화) &#8211; 이미지 데이터 전체를 정규화 하지않고 <strong>채널별로 정규화</strong> 수행. <strong>미니 배치 샘플과 의존관계</strong>가 없음. 샘플이 전혀 다른 길이를 가지더라도 정규화 가능. 자연어처리 (NLP), 순환신경망(RNN)이나 트랜스포머(Transformer)기반 모델에서 주로 사용.</li>



<li>Instance Norm(인스턴스 정규화) &#8211; <strong>채널과 샘플 기준</strong>으로 정규화. 정규화가 각 샘플에 대해 개별적으로 수행되므로 입력이 다른 분포를 갖는 작업에 적합하다. 그래서, 인스턴스 정규화는 생성적 적대 신경망 (GAN)이나 이미지의 스타일을 변환하는 스타일 변환(Style Transfer) 모델에서 주로 사용된다.</li>



<li>Group Norm(그룹 정규화) &#8211; 채널을 N개의 그룹으로 나누고, 각 그룹내에서 정규화 수행. 그룹을 하나로 설정하면 인스턴스 정규화와 동일. <strong>배치의 크기가 작거나 채널 수가 매우 많은 경우</strong>에 주로 사용된다. <strong>합성곱 신경망(CNN)의 배치 크기가 작으면</strong> 배치 정규화가 <strong>데이터셋을 대표한다고 보기 어렵기때문에</strong> 배치정규화 대안으로 사용된다.</li>
</ul>



<h2 class="wp-block-heading">가중치 감쇠</h2>



<p>다양한 방법으로 가중치를 초기화 할수있음</p>



<h2 class="wp-block-heading">정칙화 (Regularization)</h2>



<p>과대적합되지 않도록 손실 함수에 패널티를 가하는 방식이다.</p>



<ul class="wp-block-list">
<li>L1 정칙화 (Lasso): L1 Norm은 벡터 또는 행렬값의 절댓값 합계를 계산한다. 이러한 방식을 차용해 L1 정칙화는 <strong>손실 함수에 가중치 절댓값의 합을 추가</strong>해 과대적합을 방지한다. 일부 가중치를 정확히 0으로 만들어 <strong>희소(Sparse) 모델</strong>을 만듭니다.<br>단점: <strong>무거움</strong>, <strong>미분 사용 불가</strong></li>



<li>L2 정칙화 (Ridge): L2 Norm은 벡터 또는 행렬의 크기를 계산한다. 이러한 방식을 차용해 L2 정칙화는 <strong>손실함수에 가중치 제곱의 합을 추가</strong>해서 과대적합 방지한다.<br>가중치를 0에 가깝지 만들지만 완전히 0으로 만들지는 않아 <strong>모든 특성을 고르게</strong> 합니다.</li>



<li>가중치 감쇠: 가중치 감쇠는 <strong>loss function</strong>이 아닌<strong>optimizer에 weight_decay 계수</strong>를 이용해서 적용한다. L2 정규화와 동일한 방식인데 파이토치 에서는 가중치 감쇠 방식을 권장함.</li>



<li>모멘텀: 이전 기울기를 고려해 가중치를 갱신 (관성 때문에 보폭이 커짐). 변경된 가중치로 local minima 뛰어넘기 가 목표</li>



<li>엘라스틱 넷: L1 L2 정칙화를 결합해서 <strong>희소성 안정성 </strong>둘다 얻을수 있음.</li>



<li>드롭아웃: 훈련중 일부 노드를 일정 비율로 제거하거나 0으로 설정해 과대적합을 막음.</li>



<li>그래디언트 클리핑: 기울기가 너무 커지는 현상을 방지</li>
</ul>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="373" data-attachment-id="464" data-permalink="https://blog.kggstudio.com/deep-learning-2-intermediate/image-71/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-11.png" data-orig-size="2048,745" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-11-1024x373.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-11-1024x373.png" alt="" class="wp-image-464" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-11-1024x373.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-11-300x109.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-11-768x279.png 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-11-1536x559.png 1536w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-11.png 2048w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h2 class="wp-block-heading">데이터 증강 및 변환</h2>



<p>머신러닝은 비슷해도 다른데이터라면 데이터가 더많은쪽이 모델 훈련에 도움이 된다. 머신러닝은 사람과 달라서 &#8220;1 + 3&#8221; 이랑 &#8220;3 + 1&#8221; 을 다르게 인식한다. 다른 예를 들자면 손 사진을 학습시켜서 이미지가 손인지 아닌지 구분하는 모델을 만들어도 이미지가 90도 회전하면 구분하지 못한다. 그래서 데이터를 지지고 볶으면서 변형시켜서 뻥튀기해주면 모델훈련에 도움이 된다는 이야기.</p>



<p>데이터 증강은 과대적합을 줄이고 <strong>일반화 능력</strong>을 향상시킴</p>



<h3 class="wp-block-heading">텍스트 데이터</h3>



<p>문서 분류 및 요약 문장 번역 과 같은 자연어 처리 모델을 구성할 때, 데이터 셋의 크기를 늘리기위해 사용. 예를들면, 자연어 처리 데이터 증간(NLPAUG) 라이브러리가 있음.</p>



<h4 class="wp-block-heading">Aug 목록</h4>



<p>삽입은 <strong>단어 또는 문장의 의미에 영향을 끼치지않는 수식어 등을 추가</strong>하는 방법. 삭제는 반대로 의미에 영향을 끼치지않는 수식어를 삭제 하는 방법.</p>



<p>너무 적은량을 삽입하거나 삭제하면 (기존 데이터와 큰 차이가 없으면) 과대적합이 발생함</p>



<ul class="wp-block-list">
<li>ContextualWordEmbsAug (삽입): BERT 모델을 활용해 단어를 삽입하는 기능 <strong>부사 형용사등을 추가</strong>.</li>



<li>RandomCharAug (삭제): 단어중 알파벳 일부분을 랜덤하게 삭제 (약 75%단어는 그대로) <strong>문장이 망가짐</strong>.</li>



<li>RandomWordAug (대체): 문장내 단어들의 랜덤하게 교체되서 순서가 바뀜 <strong>문장이 망가짐</strong>.</li>



<li>SynonymAug (대체): 단어를 유의어로 대체하거나 관계대명사처럼 who that 같이 줄여진걸 랜덤하게 명시화시켜줌. <strong>문장이 구체적으로 변함.</strong> 하지만 문맥을 파악하지않고 단순히 DB에서 유의어로 정의된 단어들로 교체되는거라 <strong>문맥이 변할수있음</strong>.</li>



<li>ReservedAug (대체): can cannot 등의 단어가 reserved_tokens에 존재하는 값으로 변경됨. (cannot -> can&#8217;t) 케이스도 있어서 <strong>항상 의미가 반대가 되는건 아님</strong>.</li>



<li>BackTranslationAug (역번역): 예를들어 원문이 영어일때 <strong>영어->한국어->영어로 번역</strong>해서 비슷한의미의 다른 문장으로 바꿔버림.</li>
</ul>



<h3 class="wp-block-heading">이미지 데이터</h3>



<p>텍스트 데이터와 마찬가지로 데이터셋의 크기를 키우기위해 사용된다.</p>



<p><strong>torchvision </strong>라이브러리와 이미지 증강(<strong>imgaug</strong>) 라이브러리 둘다 클래스들을 가지고있다.</p>



<h4 class="wp-block-heading">타입 변환 방법</h4>



<p>라이브러리가 여러종류이다보니 각각의 클래스가 있다.</p>



<p>torchvision에는 transforms 라는 모듈이 변환 기능을 가지고있다. </p>



<h4 class="wp-block-heading">회전 및 대칭</h4>



<p>데이터 수집시 모든 방향의 회전되거나 대칭되는 이미지를 수집하기 어렵기때문에 회전및 대칭으로 데이터 증강을 하면 데이터의 크기를 늘릴수있다. 모든 경우의수를 만들지는 않는것 같다 </p>



<h4 class="wp-block-heading">자르기 및 패딩</h4>



<p>&#8230; 너무 예시가 많고 다양한데 데이터를 다양하게해서 크기를 키우는거말고는 특징을 알기힘들어 스킵하겠음. 책을 보세요. 검색하거나 이미지증강모델 이런식으로 검색 하세요.</p>



<h2 class="wp-block-heading">전이학습</h2>



<p>사전에 학습된 모델(업스트림) 시스템에 맞는 새로운 모델로 <strong>추가 학습하는 과정</strong>. 이렇게 전이학습이 완료된 모델을 (다운스트림) 이라고 한다.</p>



<h4 class="wp-block-heading">미세조정 (Fine-tuning)</h4>



<p>사전학습된 모델을 불러와서 일부 특징을 freeze(동결)시키고 나머지부분을 새로운 문제에맞게 수정합니다. 이 후 fit을 돌리면 모델이 새로만든 뒷부분만 수정하게됩니다.</p>



<p>어느정도 학습이 되면 앞부분을 다시 Unfreeze 시키고 모델 전체 혹은 일부를 다시 fit을 시키면 이게 <strong>미세조정</strong> 입니다.</p>



<p>결론적으로 이미 학습된 모델을 <strong>살짝 조정</strong>해주는겁니다.</p>



<h4 class="wp-block-heading">귀납적 전이 학습</h4>



<p>기존에 존재하는 모델을 새로운 모델로 수정해주는것으로 두 종류가 있다.</p>



<h5 class="wp-block-heading">자기주도적 학습(Self-taught Learning) &#8211; 비지도 전이학습</h5>



<p>소스 도메인의 데이터셋의 크기는 크지만 레이블링 된 데이터수가 매우 적거나 없을때 사용.</p>



<h5 class="wp-block-heading">다중 작업 학습(Multi-task Learning)</h5>



<p>모델에게 여러 작업을 동시에 가르치는 방법을 말한다. 예를들어 자동주행 모델같은경우는 영상이미지를 가지고 차선도 찾고, 표지만도 읽고, 사물도 동시에 인식해야하는 경우를 말함.</p>



<p>다중 작업 모델의경우 계층이 두가지로 나뉘는데</p>



<ul class="wp-block-list">
<li><strong>공유계층</strong>: 모델 입력층 부분에서 공통적으로 사용하는 부분. 공용 특징이있다면 (General Features) 라고 부름.</li>



<li><strong>작업별 계층</strong>: 반대로 각 작업에 특화된 특징들도 존재하고 각 작업마다 </li>
</ul>



<h4 class="wp-block-heading">변환 전이 학습 (Inductive Transfer Learning)</h4>



<p>가장 일반적인 형태의 전이 학습입니다. 출발지(Source)와 목적지(Target)의 <strong>작업(Task)이 서로 다를 때</strong> 사용합니다.</p>



<ul class="wp-block-list">
<li><strong>언제 쓰나?:</strong> 내가 해결하려는 문제의 데이터(라벨링 된 것)가 부족하지만, 비슷한 구조의 대규모 데이터로 학습된 사전 모델이 있을 때 씁니다.</li>



<li><strong>특징:</strong> 이미 학습된 모델(예: 사물 인식 모델)을 가져와서 새로운 작업(예: 암 세포 진단)에 맞게 미세조정(Fine-tuning)합니다.</li>



<li><strong>차이점:</strong> 목적지 데이터에 **라벨(Label)**이 반드시 있어야 합니다.</li>
</ul>



<h2 class="wp-block-heading">비지도 전이 학습 (Unsupervised Transfer Learning)</h2>



<p>출발지와 목적지 모두 <strong>라벨이 없는(Unlabeled)</strong> 상태에서 지식을 전달하는 방식입니다.</p>



<ul class="wp-block-list">
<li><strong>특징:</strong> 데이터의 정답을 맞히는 게 아니라, 데이터 자체의 **표현(Representation)**이나 구조를 학습하는 데 집중합니다.</li>



<li><strong>차이점:</strong> 라벨링 비용이 전혀 들지 않지만, 학습이 까다롭습니다. 최근에는 자기지도학습(Self-supervised learning)과 결합되어 많이 쓰입니다.</li>



<li><strong>언제 쓰나?:</strong> 데이터는 산더미처럼 많지만, 일일이 정답(라벨)을 달기 어려운 상황에서 데이터의 핵심 특징만 먼저 뽑아내고 싶을 때 씁니다.</li>
</ul>



<h2 class="wp-block-heading">제로-샷 전이 학습 (Zero-shot Learning)</h2>



<p>모델이 학습 과정에서 <strong>단 한 번도 본 적 없는 클래스</strong>를 추론하는 놀라운 방식입니다.</p>



<ul class="wp-block-list">
<li><strong>특징:</strong> 사물의 &#8216;이름&#8217; 대신 &#8216;속성(Attribute)&#8217;을 학습합니다. 예를 들어 &#8220;줄무늬가 있고, 말처럼 생겼어&#8221;라는 설명을 들으면, 얼룩말을 본 적 없어도 &#8220;아, 저게 얼룩말이구나&#8221;라고 맞히는 식입니다.</li>



<li><strong>차이점:</strong> 학습 데이터와 테스트 데이터의 클래스가 완전히 겹치지 않습니다.</li>



<li><strong>언제 쓰나?:</strong> 새로운 카테고리가 계속 추가되어서 매번 다시 학습시키기 불가능한 경우(예: 신종 상품 분류)나 데이터 구하기가 하늘의 별 따기인 경우에 씁니다.</li>
</ul>



<h2 class="wp-block-heading">원-샷 전이 학습 (One-shot Learning)</h2>



<p>새로운 클래스에 대해 **단 한 개의 데이터(이미지/텍스트)**만 보고도 학습을 완료하는 방식입니다.</p>



<ul class="wp-block-list">
<li><strong>특징:</strong> 주로 &#8216;비교&#8217;를 배웁니다. 두 데이터가 &#8220;같은가, 다른가&#8221;를 판단하는 능력을 길러서, 처음 보는 데이터라도 기준점과 비교해 정체를 파악합니다.</li>



<li><strong>차이점:</strong> 제로-샷보다는 낫지만, 여전히 극도로 적은 데이터로 성능을 내야 합니다.</li>



<li><strong>언제 쓰나?:</strong> 지문 인식, 얼굴 인식처럼 한 사람당 데이터가 한두 개뿐인 보안 시스템에서 주로 사용됩니다.</li>
</ul>



<figure class="wp-block-table"><table class="has-fixed-layout"><thead><tr><td><strong>구분</strong></td><td><strong>목적지 데이터(Target)</strong></td><td><strong>핵심 전략</strong></td><td><strong>대표 사례</strong></td></tr></thead><tbody><tr><td><strong>변환</strong></td><td>라벨 있음 (적음)</td><td>미세조정 (Fine-tuning)</td><td>개 분류 모델 → 고양이 분류</td></tr><tr><td><strong>비지도</strong></td><td>라벨 없음</td><td>특징 추출 (Feature Extraction)</td><td>뉴스 텍스트 자동 군집화</td></tr><tr><td><strong>제로-샷</strong></td><td>라벨 없음 (설명만 있음)</td><td>속성/텍스트 연관 학습</td><td>&#8220;날개 달린 말&#8221; 설명으로 페가수스 찾기</td></tr><tr><td><strong>원-샷</strong></td><td>라벨 1개 있음</td><td>유사도 비교 (Similarity)</td><td>스마트폰 얼굴 인식 잠금 해제</td></tr></tbody></table></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/deep-learning-2-intermediate/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">449</post-id>	</item>
		<item>
		<title>AI로 단편 영화 만들기 (1) &#8211; 스토리, 콘티, 캐릭터</title>
		<link>https://blog.kggstudio.com/making-a-movie-with-ai-1/</link>
					<comments>https://blog.kggstudio.com/making-a-movie-with-ai-1/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Fri, 10 Apr 2026 21:12:07 +0000</pubDate>
				<category><![CDATA[AI-Tools]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[AI Movie]]></category>
		<category><![CDATA[AI단편영화]]></category>
		<category><![CDATA[AI영화]]></category>
		<category><![CDATA[Hailuo]]></category>
		<category><![CDATA[Nano Banana]]></category>
		<category><![CDATA[나노바나나]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=406</guid>

					<description><![CDATA[1. 스토리 작성. 1-1. 베이스 스토리 작성 AI에게 대충 장르나 어떤느낌의 영화인지만 말하고 스토리 짜달라고하면 맘에드는게 없고 너무 흔한 그런 스토리가 나와서 직접 어느정도 스토리를 작성한 다음 이후 스토리를 완성시켜달라고 해보았다. 1-2. 나머지 스토리 AI 사용해 작성 한번에 맘에드는 스토리가 나와서 사용하기로 결정. AI의 답변: 작성해주신 전반부 스토리가 첫사랑의 풋풋함과 엇갈림을 아주 잘 보여주고 있습니다. ... <a title="AI로 단편 영화 만들기 (1) &#8211; 스토리, 콘티, 캐릭터" class="read-more" href="https://blog.kggstudio.com/making-a-movie-with-ai-1/" aria-label="AI로 단편 영화 만들기 (1) &#8211; 스토리, 콘티, 캐릭터에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading">1. 스토리 작성.</h2>



<h3 class="wp-block-heading">1-1. 베이스 스토리 작성</h3>



<p>AI에게 대충 장르나 어떤느낌의 영화인지만 말하고 스토리 짜달라고하면 맘에드는게 없고 너무 흔한 그런 스토리가 나와서 직접 어느정도 스토리를 작성한 다음 이후 스토리를 완성시켜달라고 해보았다.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="383" data-attachment-id="407" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/image-67/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8.png" data-orig-size="1130,423" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8-1024x383.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8-1024x383.png" alt="" class="wp-image-407" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8-1024x383.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8-300x112.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8-768x287.png 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-8.png 1130w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">1-2. 나머지 스토리 AI 사용해 작성</h3>



<p><strong>한번에 맘에드는 스토리가 나와서 사용하기로 결정.</strong></p>



<p>AI의 답변:</p>



<p><br>작성해주신 전반부 스토리가 첫사랑의 풋풋함과 엇갈림을 아주 잘 보여주고 있습니다. 특히 처음에 조형물에서 찌질하게 다치며 시작된 로맨스가, 현실의 벽(부모님, 군대, 새로운 남자친구)에 부딪히며 차갑게 식어버린 남자의 태도로 이어지는 대비가 훌륭합니다.</p>



<p>요청하신&nbsp;<strong>&#8216;애절하고 눈물 없이는 볼 수 없는&#8217;</strong>&nbsp;후반부 스토리를 전개해 드립니다. 감정선을 극대화하기 위해 **&#8217;오해 &#8211; 절절한 진실의 발견 &#8211; 도피 &#8211; 뼈아픈 희생&#8217;**의 구조로 구성했습니다.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading">[후반부 스토리 전개: 너를 지키기 위한 이별]</h3>



<h4 class="wp-block-heading">1. 차가운 재회, 그리고 폭발하는 감정</h4>



<p>복학 후, 남자(이하 남주)는 여자(이하 여주)를 철저히 투명인간 취급합니다. 여주는 새 남자친구의 권위적이고 통제적인 태도에 지쳐가던 중, 과거 자신에게 한없이 따뜻하고 자유로웠던 남주를 보며 매일 밤 남몰래 눈물을 흘립니다.<br>어느 날, 대학 축제(혹은 동문 모임)에서 세 사람이 마주칩니다. 새 남자친구는 남주의 초라한 행색(아르바이트를 하며 고학생으로 지냄)을 교묘하게 무시하며 모욕을 줍니다. 남주는 덤덤히 돌아서려 하지만, 참다못한 여주가 새 남자친구에게 소리를 지르며 남주를 감싸고 돕니다. 분노한 새 남자친구가 여주를 거칠게 끌고 가려 하자, 결국 남주가 참지 못하고 주먹을 날립니다. 이 사건으로 남주는 징계를 받을 위기에 처합니다.</p>



<h4 class="wp-block-heading">2. 밝혀지는 과거의 진실 (눈물의 1차 폭발)</h4>



<p>남주의 징계를 막기 위해 여주가 동분서주하던 중, 남주는 우연히 여주의 가장 친한 친구를 통해 **&#8217;그녀가 휴학하고 자신을 떠나야만 했던 진짜 이유&#8217;**를 듣게 됩니다.<br>과거, 여주의 부모님은 단순히 반대한 것이 아니었습니다. 남주가 평범하고 가난한 집안의 아들이라는 것을 알고,&nbsp;<strong>남주의 부모님이 운영하는 작은 식당의 상가 계약을 해지시키고 남주의 학자금 대출까지 막아버리겠다고 여주를 협박</strong>했던 것입니다. 여주는 남주의 인생을 망칠 수 없어서, 자신이 모든 죗값을 지고 부모님이 점지해 준 부자 남자친구의 &#8216;인형&#8217;으로 살기를 선택했던 것이었습니다.<br>모든 진실을 알게 된 남주는 비가 쏟아지는 밤, 여주의 집 앞으로 달려갑니다. 우산도 없이 비를 맞으며 서 있는 남주를 발견한 여주. 남주는 무너져 내리며 오열합니다.<br><em>&#8220;왜 말 안 했어&#8230; 나 하나 지키겠다고, 너는 그 지옥에서 어떻게 버텼어&#8230;!&#8221;</em><br>결국 두 사람은 빗속에서 서로를 끌어안고 참아왔던 감정을 터뜨립니다.</p>



<h4 class="wp-block-heading">3. 목숨 건 도피, 짧고도 눈부신 행복</h4>



<p>여주는 새 남자친구에게 이별을 통보하고 부모님과의 연을 끊은 채 집을 나옵니다. 두 사람은 아무도 모르는 바닷가 작은 마을로 도망칩니다. 돈은 없지만 과거 처음 만났을 때처럼 매일 웃고 떠들며, 세상에서 가장 행복한 며칠을 보냅니다. 남주는 공사장에서 막노동을 하면서도 여주에게 줄 싸구려 반지를 사며 행복해하고, 여주는 남주가 퇴근할 시간에 맞춰 된장찌개를 끓이며 영원한 사랑을 약속합니다. 하지만 이 행복은 폭풍 전야에 불과했습니다.</p>



<h4 class="wp-block-heading">4. 가혹한 현실과 마지막 선택 (절정)</h4>



<p>여주의 집안과 권력자인 새 남자친구가 가만히 있지 않았습니다. 새 남자친구는 남주를 절도 및 폭행으로 엮어 경찰에 고발하고, 남주의 가족들을 철저하게 파멸로 몰아넣기 시작합니다.<br>어느 날, 시장에 나갔던 여주는 낡은 텔레비전 뉴스를 통해 남주의 아버지가 억울한 누명을 쓰고 쓰러져 중환자실에 실려 갔다는 소식을 접합니다. 집으로 돌아온 여주는, 고된 노동으로 손이 다 까진 채 곤히 잠든 남주의 얼굴을 보며 무너져 내립니다.&nbsp;<strong>자신이 이 사람의 곁에 있는 한, 이 사람의 세상은 지옥이 될 것</strong>임을 깨닫습니다.<br>여주는 남주의 손에 자신이 샀던 싸구려 반지를 쥐여주고, 눈물로 편지를 남긴 채 새벽에 홀로 그 작은 집을 떠납니다.<br>편지 내용:&nbsp;<em>&#8220;네 덕분에 내 인생에 진짜 숨을 쉬어봤어. 하지만 난 가난이 무서워. 네가 다치는 건 더 무서워. 그러니까 우리, 이번 생에서는 여기서 끝내자.&#8221;</em></p>



<h4 class="wp-block-heading">5. 에필로그 (애절한 결말)</h4>



<p>시간이 흘러 7년 후.<br>남주는 독하게 공부하고 일하여 성공한 건축가(혹은 디자이너)가 되어 있습니다. 그는 자신의 첫 개인 전시회를 엽니다. 전시회장 한가운데에는&nbsp;<strong>과거 대학교 시절, 자신이 여주를 부르기 위해 올라갔던 &#8216;그 높은 조형물&#8217;을 본뜬 거대한 작품</strong>이 전시되어 있습니다.</p>



<p>오픈파티가 끝난 늦은 밤, 남주가 홀로 전시회장을 정리하고 있을 때 문이 열립니다. 고급스러운 옷을 입었지만, 어딘가 생기를 잃고 텅 빈 눈동자를 한 여주가 들어옵니다. (여주는 결국 새 남자친구와 애정 없는 쇼윈도 부부로 살아가고 있습니다.)<br>두 사람의 시선이 허공에서 부딪힙니다. 다가가지도, 인사를 건네지도 못합니다.<br>여주는 남주의 작품(조형물)을 가만히 올려다봅니다. 그녀의 시선 끝에, 작품 구석에 아주 작게 새겨진 글귀가 보입니다.<br><strong>[나의 첫 세상이자 마지막 숨이었던, 영원히 내려오지 못할 나의 그곳에게.]</strong></p>



<p>여주의 눈에서 소리 없이 굵은 눈물이 툭, 떨어집니다. 남주 역시 붉어진 눈시울로 억지로 눈물을 삼키며 옅은 미소를 지어 보입니다.<br>서로를 미치도록 사랑하지만, 서로를 지키기 위해 영원히 타인으로 살아야만 하는 두 사람. 닿을 수 없는 거리를 둔 채, 하염없이 서로를 바라보는 두 사람의 슬픈 미소를 끝으로 영화는 막을 내립니다.</p>



<h3 class="wp-block-heading">1-3. 최종 스토리</h3>



<p>스토리: 남녀가 대학교에서 입학후 같은 강의를 들으면 만나게됨. 남자는 여자가 맘에들어서 보자마자 전화번호를 알려달라고 하지만 여자는 당연히 거절함. 이 후로도 수차례 거절. 어느 날, 남자는 여자의 관심을 끌고싶어서 학교에있는 높은 조형물에 올라가서 수업을 마치고 나오는 여학생에 소리를 지르며 공개적으로 고백 여자는 무시하고 지나가려하지만, 남자는 여자를 쫒아가려고 높은 조형물에서 내려오다가 살짝 다침. 여자는 결국 창피함 반 또 자기때문에 남자가 다친것같아 미안한 마음도 들어서 어쩔수없이 전화번호를 줘버림. 남자는 뻔뻔하게도 &#8220;번호줬으니까 당연히 데이트 한번쯤은 해야하는거 아니냐&#8221;며 졸라서 데이트까지 하게됨. 여자는 공부밖에 모르는 모범생이었는데 남자는 다양한 취미가있고 재밌게 인생을 사는거같아서 관심을 갖게됨. 몇번에 데이트를하며 서로 애정이 깊어져갔음. 어느날 여자의 부모님이 둘이 데이트하는걸 목격하고 남자친구를 집으로 초대하라고하여 남자는 여자의 집을 방문하게됨. 여자의 부모님은 남자에대해 여러질문을하고 부모님에대해서도 물어봄. 식사중 내색은 하지않았지만 속으로는 남자가 맘에들지 않았던 여자의 부모님들. 결국 남자가 떠난뒤에, 여자는 부모님에게 당장 헤어지라고 말함. 여자 이를 거절하고 계속해서 몰래 만나려했지만 또다시 데이트장면을 들키게되고, 만난지 얼마안된 남자친구때문에 부모님의 강력한 요구를 거절할수없어서 휴학을 하게됨. 남자는 갑자기 연락이 끊긴 여자때문에 힘들어하던중 친구로부터 둘이 연인사이인것을 부모님이 반대해서 휴학한 사실을 알게됨. 결국 남자도 여자를 잊기 위해 군입대를 결정함. 군 제대 후, 학교를 복학했는데 여자에게는 이미 다른 남자친구가 있었고, 여자는 남자를 반가워하지만 남자는 다른남자와 함께있는 여자를보고 냉소적으로 인사만하고 지나감. 알고보니 여자의 새 남자친구는 부자인데다 공부도잘하고 여자의 부모님도 마음에들어하지만, 권위적인 태도때문에 여자는 습관처럼 만나고 있을뿐 엄청 사랑하는 상태는 아니었고, 그중 첫사랑을 다시만나니 마음이 흔들리기 시작함.</p>



<p>[후반부 스토리 전개: 너를 지키기 위한 이별]</p>



<ol class="wp-block-list">
<li>차가운 재회, 그리고 폭발하는 감정</li>
</ol>



<p>복학 후, 남자(이하 남주)는 여자(이하 여주)를 철저히 투명인간 취급합니다. 여주는 새 남자친구의 권위적이고 통제적인 태도에 지쳐가던 중, 과거 자신에게 한없이 따뜻하고 자유로웠던 남주를 보며 매일 밤 남몰래 눈물을 흘립니다.</p>



<p>어느 날, 대학 축제(혹은 동문 모임)에서 세 사람이 마주칩니다. 새 남자친구는 남주의 초라한 행색(아르바이트를 하며 고학생으로 지냄)을 교묘하게 무시하며 모욕을 줍니다. 남주는 덤덤히 돌아서려 하지만, 참다못한 여주가 새 남자친구에게 소리를 지르며 남주를 감싸고 돕니다. 분노한 새 남자친구가 여주를 거칠게 끌고 가려 하자, 결국 남주가 참지 못하고 주먹을 날립니다. 이 사건으로 남주는 징계를 받을 위기에 처합니다.</p>



<ol class="wp-block-list">
<li>밝혀지는 과거의 진실 (눈물의 1차 폭발)</li>
</ol>



<p>남주의 징계를 막기 위해 여주가 동분서주하던 중, 남주는 우연히 여주의 가장 친한 친구를 통해 **&#8217;그녀가 휴학하고 자신을 떠나야만 했던 진짜 이유&#8217;**를 듣게 됩니다.</p>



<p>과거, 여주의 부모님은 단순히 반대한 것이 아니었습니다. 남주가 평범하고 가난한 집안의 아들이라는 것을 알고, 남주의 부모님이 운영하는 작은 식당의 상가 계약을 해지시키고 남주의 학자금 대출까지 막아버리겠다고 여주를 협박했던 것입니다. 여주는 남주의 인생을 망칠 수 없어서, 자신이 모든 죗값을 지고 부모님이 점지해 준 부자 남자친구의 &#8216;인형&#8217;으로 살기를 선택했던 것이었습니다.</p>



<p>모든 진실을 알게 된 남주는 비가 쏟아지는 밤, 여주의 집 앞으로 달려갑니다. 우산도 없이 비를 맞으며 서 있는 남주를 발견한 여주. 남주는 무너져 내리며 오열합니다.</p>



<p>&#8220;왜 말 안 했어&#8230; 나 하나 지키겠다고, 너는 그 지옥에서 어떻게 버텼어&#8230;!&#8221;</p>



<p>결국 두 사람은 빗속에서 서로를 끌어안고 참아왔던 감정을 터뜨립니다.</p>



<ol class="wp-block-list">
<li>목숨 건 도피, 짧고도 눈부신 행복</li>
</ol>



<p>여주는 새 남자친구에게 이별을 통보하고 부모님과의 연을 끊은 채 집을 나옵니다. 두 사람은 아무도 모르는 바닷가 작은 마을로 도망칩니다. 돈은 없지만 과거 처음 만났을 때처럼 매일 웃고 떠들며, 세상에서 가장 행복한 며칠을 보냅니다. 남주는 공사장에서 막노동을 하면서도 여주에게 줄 싸구려 반지를 사며 행복해하고, 여주는 남주가 퇴근할 시간에 맞춰 된장찌개를 끓이며 영원한 사랑을 약속합니다. 하지만 이 행복은 폭풍 전야에 불과했습니다.</p>



<ol class="wp-block-list">
<li>가혹한 현실과 마지막 선택 (절정)</li>
</ol>



<p>여주의 집안과 권력자인 새 남자친구가 가만히 있지 않았습니다. 새 남자친구는 남주를 절도 및 폭행으로 엮어 경찰에 고발하고, 남주의 가족들을 철저하게 파멸로 몰아넣기 시작합니다.</p>



<p>어느 날, 시장에 나갔던 여주는 낡은 텔레비전 뉴스를 통해 남주의 아버지가 억울한 누명을 쓰고 쓰러져 중환자실에 실려 갔다는 소식을 접합니다. 집으로 돌아온 여주는, 고된 노동으로 손이 다 까진 채 곤히 잠든 남주의 얼굴을 보며 무너져 내립니다. 자신이 이 사람의 곁에 있는 한, 이 사람의 세상은 지옥이 될 것임을 깨닫습니다.</p>



<p>여주는 남주의 손에 자신이 샀던 싸구려 반지를 쥐여주고, 눈물로 편지를 남긴 채 새벽에 홀로 그 작은 집을 떠납니다.</p>



<p>편지 내용: &#8220;네 덕분에 내 인생에 진짜 숨을 쉬어봤어. 하지만 난 가난이 무서워. 네가 다치는 건 더 무서워. 그러니까 우리, 이번 생에서는 여기서 끝내자.&#8221;</p>



<ol class="wp-block-list">
<li>에필로그 (애절한 결말)</li>
</ol>



<p>시간이 흘러 7년 후.</p>



<p>남주는 독하게 공부하고 일하여 성공한 건축가(혹은 디자이너)가 되어 있습니다. 그는 자신의 첫 개인 전시회를 엽니다. 전시회장 한가운데에는 과거 대학교 시절, 자신이 여주를 부르기 위해 올라갔던 &#8216;그 높은 조형물&#8217;을 본뜬 거대한 작품이 전시되어 있습니다.</p>



<p>오픈파티가 끝난 늦은 밤, 남주가 홀로 전시회장을 정리하고 있을 때 문이 열립니다. 고급스러운 옷을 입었지만, 어딘가 생기를 잃고 텅 빈 눈동자를 한 여주가 들어옵니다. (여주는 결국 새 남자친구와 애정 없는 쇼윈도 부부로 살아가고 있습니다.)</p>



<p>두 사람의 시선이 허공에서 부딪힙니다. 다가가지도, 인사를 건네지도 못합니다.</p>



<p>여주는 남주의 작품(조형물)을 가만히 올려다봅니다. 그녀의 시선 끝에, 작품 구석에 아주 작게 새겨진 글귀가 보입니다.</p>



<p>[나의 첫 세상이자 마지막 숨이었던, 영원히 내려오지 못할 나의 그곳에게.]</p>



<p>여주의 눈에서 소리 없이 굵은 눈물이 툭, 떨어집니다. 남주 역시 붉어진 눈시울로 억지로 눈물을 삼키며 옅은 미소를 지어 보입니다.</p>



<p>서로를 미치도록 사랑하지만, 서로를 지키기 위해 영원히 타인으로 살아야만 하는 두 사람. 닿을 수 없는 거리를 둔 채, 하염없이 서로를 바라보는 두 사람의 슬픈 미소를 끝으로 영화는 막을 내립니다.</p>



<h2 class="wp-block-heading">2. 영상 제작용 콘티 작성</h2>



<h3 class="wp-block-heading">2-1. 콘티 제작 프롬프트</h3>



<p>영상 제작은 제 분야가 아니라 용어를 잘 모릅니다만 대충 궁금한 내용을 AI에게 부탁해봅니다.</p>



<p>위에 1-3의 스토리를 먼저 프롬프트에 넣고 아래를 명령해줍니다. (Gemini Pro 사용)</p>



<pre class="wp-block-code"><code>5분 분량의 영화 trailer를 만들려고해
프로세스: nano banana로 장면 하나하나 만든다음 이걸 이용해서, 사진과 사진 사이를 채우는방법으로 veo3.1모델로 동영상을 만들거임. (더좋은방법있으면 제안해줘, 확실한게아니면 그냥 제안하지마)
한씬은 짧으면 5~7초 길면 35초정도됨 (영상제작하면 한번에 8초인데 살짝식 잘라내면 7초정도나옴)
예고편에 나올 장면을 시간단위로쪼개서 알려줘. 장면의 장소는어디고 어떤 대사를 주고받는지 내래이션이 필요하다면 뭐라고 말하면 좋을지 영화 전체 내용은 알수없지만 대충 어떤느낌이구나는 알수있게 하려면 예고편을 어떻게 구성하는게 좋을까?</code></pre>



<h3 class="wp-block-heading">2-2. 콘티 결과물.</h3>



<p><br>제안해주신 AI 영상 제작 워크플로우(이미지 생성 후 Veo 3.1로 Image-to-Video 변환)는&nbsp;<strong>현재 AI 영화 제작에서 가장 일관성 높고 퀄리티를 보장하는 최적의 정석적인 방법</strong>입니다.</p>



<p>한 가지 팁을 드리자면, AI 영상은 입모양을 맞추는 립싱크(Lip-sync) 기술이 아직 완벽하지 않아 어색해질 수 있습니다. 따라서&nbsp;<strong>예고편은 등장인물들의 감정이 담긴 표정과 행동을 &#8216;슬로우 모션&#8217;이나 &#8216;시네마틱 룩&#8217;으로 보여주면서, 대사는 화면 밖에서 들리는 내레이션(Voice Over, VO) 형식으로 구성</strong>하는 것이 훨씬 고급스럽고 영화처럼 보입니다. (음성은 ElevenLabs 같은 AI 성우 툴을 추천합니다.)</p>



<p>5분이라는 시간은 예고편치고는 꽤 긴 &#8216;확장판(Extended) 트레일러&#8217; 분량이므로,<br><strong>[1막: 풋풋한 로맨스] -&gt; [2막: 균열과 이별] -&gt; [3막: 재회와 폭발] -&gt; [4막: 도피와 가혹한 현실] -&gt; [여운을 남기는 엔딩]</strong>&nbsp;순서로 감정을 천천히 끌어올리도록 장면을 쪼개어 구성했습니다. (스포일러를 방지하면서도 본편을 보고 싶게 만드는 데 집중했습니다.)</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h3 class="wp-block-heading"><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f3ac.png" alt="🎬" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 영화 예고편 스토리보드 (5분 분량)</h3>



<h4 class="wp-block-heading"><strong>[도입부 &#8211; 0:00 ~ 1:00] 찬란했던 우리의 첫 세상 (장르: 청춘 로맨스)</strong></h4>



<p><em>음악: 밝고 경쾌하지만 어딘가 아련한 어쿠스틱 기타 선율</em></p>



<ul class="wp-block-list">
<li><strong>[0:00 &#8211; 0:08]</strong> 장소: 봄 햇살이 비치는 대학교 강의실.
<ul class="wp-block-list">
<li><strong>화면:</strong> 여주가 창가에 앉아 책을 넘기고 있고, 뒷자리에서 남주가 턱을 괸 채 여주를 넋을 잃고 바라본다.</li>



<li><strong>남주 내레이션(VO):</strong> &#8220;처음 본 순간 알았다. 내 세상의 중심이 저 애로 바뀌어버렸다는 걸.&#8221;</li>
</ul>
</li>



<li><strong>[0:08 &#8211; 0:15]</strong> 장소: 캠퍼스 벤치.
<ul class="wp-block-list">
<li><strong>화면:</strong> 남주가 여주 앞을 가로막고 핸드폰을 내밀지만, 여주는 차갑게 무시하고 지나간다. 남주가 머리를 긁적이며 허탈하게 웃는다.</li>
</ul>
</li>



<li><strong>[0:15 &#8211; 0:25]</strong> 장소: 캠퍼스 광장의 높은 조형물.
<ul class="wp-block-list">
<li><strong>화면:</strong> 남주가 조형물 위에서 위험하게 허우적거리다 아래로 툭 떨어진다. 놀란 여주가 눈을 크게 뜨고 입을 틀어막는다.</li>
</ul>
</li>



<li><strong>[0:25 &#8211; 0:35]</strong> 장소: 캠퍼스 벤치 (다시).
<ul class="wp-block-list">
<li><strong>화면:</strong> 팔에 촌스러운 붕대를 감은 남주가 뻔뻔한 표정으로 씩 웃으며 핸드폰을 내민다. 여주가 어이없다는 듯 작게 웃으며 번호를 찍어준다.</li>



<li><strong>여주 대사(오디오):</strong> &#8220;진짜 미련해. 알지?&#8221;</li>



<li><strong>남주 대사(오디오):</strong> &#8220;번호 줬으니까, 이번 주말에 데이트하는 거다?&#8221;</li>
</ul>
</li>



<li><strong>[0:35 &#8211; 1:00]</strong> 장소: 다양한 데이트 장소 (오락실, 벚꽃길, 한강 야경).
<ul class="wp-block-list">
<li><strong>화면:</strong> 공부만 하던 샌님 같은 여주가 남주의 손에 이끌려 활짝 웃으며 달린다. 두 사람이 아이스크림을 먹으며 서로를 사랑스럽게 바라본다. (행복한 몽타주)</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading"><strong>[2막 &#8211; 1:00 ~ 2:10] 현실의 벽, 그리고 엇갈림 (장르 전환: 멜로/드라마)</strong></h4>



<p><em>음악: 경쾌한 음악이 뚝 끊기고, 무겁고 차가운 피아노 단조 곡으로 전환</em></p>



<ul class="wp-block-list">
<li><strong>[1:00 &#8211; 1:10]</strong> 장소: 고급스럽고 숨막히는 분위기의 레스토랑 (여주 부모님과의 식사).
<ul class="wp-block-list">
<li><strong>화면:</strong> 위압적인 표정의 여주 부모님. 긴장한 채 억지웃음을 짓고 있는 남주. 고개를 푹 숙인 여주.</li>
</ul>
</li>



<li><strong>[1:10 &#8211; 1:20]</strong> 장소: 여주의 방 안 (밤).
<ul class="wp-block-list">
<li><strong>화면:</strong> 부모님 앞에서 무릎을 꿇고 울며 매달리는 여주.</li>
</ul>
</li>



<li><strong>[1:20 &#8211; 1:30]</strong> 장소: 텅 빈 버스 정류장.
<ul class="wp-block-list">
<li><strong>화면:</strong> 비가 내리는 밤. 남주가 홀로 앉아 여주에게 전화를 걸지만 연결되지 않는다. 남주의 핸드폰이 바닥으로 떨어진다.</li>
</ul>
</li>



<li><strong>[1:30 &#8211; 1:40]</strong> 장소: 군 훈련소 연병장.
<ul class="wp-block-list">
<li><strong>화면:</strong> 짧은 머리의 남주가 비를 맞으며 훈련을 받고 있다. 눈빛이 공허하고 차갑게 변해있다.</li>
</ul>
</li>



<li><strong>[1:40 &#8211; 1:55]</strong> 장소: 몇 년 후, 대학 복도.
<ul class="wp-block-list">
<li><strong>화면:</strong> 세련된 옷을 입은 여주가 지나가다 멈칫한다. 맞은편에서 작업복(아르바이트 복장)을 입은 남주가 걸어온다.</li>



<li><strong>여주 내레이션(VO):</strong> &#8220;다시 만나면, 단 한 번만이라도 안아보고 싶었는데&#8230;&#8221;</li>
</ul>
</li>



<li><strong>[1:55 &#8211; 2:10]</strong> 장소: 대학 복도 교차.
<ul class="wp-block-list">
<li><strong>화면:</strong> 남주가 여주를 본 체 만 체, 마치 투명인간처럼 차갑게 지나쳐버린다. 여주의 눈동자가 심하게 흔들린다. 화면 뒤로 새 남자친구가 나타나 여주의 어깨를 거칠게 쥔다.</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading"><strong>[3막 &#8211; 2:10 ~ 3:30] 폭발하는 진실과 목숨 건 도피 (절정부 1)</strong></h4>



<p><em>음악: 오케스트라 현악기가 합류하며 웅장하고 긴박하게 고조됨</em></p>



<ul class="wp-block-list">
<li><strong>[2:10 &#8211; 2:20]</strong> 장소: 동문 파티장.
<ul class="wp-block-list">
<li><strong>화면:</strong> 오만한 표정의 새 남자친구가 남주의 가슴팍을 툭툭 치며 비웃는다. 참다못한 여주가 새 남자친구를 밀친다. 새 남자친구가 여주의 뺨을 때리려(혹은 거칠게 끌고 가려) 하는 찰나, 남주의 주먹이 날아간다.</li>
</ul>
</li>



<li><strong>[2:20 &#8211; 2:35]</strong> 장소: 병원 혹은 낡은 식당 앞.
<ul class="wp-block-list">
<li><strong>화면:</strong> 남주가 누군가(여주의 친구)로부터 진실을 듣고 망연자실한 표정을 짓는다. 동공이 흔들리며 숨을 헐떡인다.</li>



<li><strong>남주 내레이션(VO):</strong> &#8220;왜 말 안 했어&#8230; 나 하나 살리겠다고, 너 혼자 무슨 지옥을 버틴 거야.&#8221;</li>
</ul>
</li>



<li><strong>[2:35 &#8211; 2:50]</strong> 장소: 여주의 집 앞 (폭우가 쏟아지는 밤).
<ul class="wp-block-list">
<li><strong>화면:</strong> 우산 없이 비를 맞고 서 있는 남주. 대문을 열고 나온 여주가 우산을 떨어뜨린다. 남주가 짐승처럼 울부짖으며 무너져 내리고, 여주가 달려가 그를 꽉 끌어안는다. (슬로우 모션)</li>
</ul>
</li>



<li><strong>[2:50 &#8211; 3:05]</strong> 장소: 인적 없는 바닷가 마을의 허름한 단칸방.
<ul class="wp-block-list">
<li><strong>화면:</strong> 두 사람이 손을 꼭 잡고 달린다. 비록 방은 좁고 초라하지만, 남주가 여주의 손가락에 싸구려 은반지를 끼워주며 세상을 다 가진 듯 웃는다.</li>
</ul>
</li>



<li><strong>[3:05 &#8211; 3:30]</strong>
<ul class="wp-block-list">
<li><strong>자막 등장:</strong> [우리의 사랑은] / [세상에서 가장 완벽한] / [죄였다]</li>



<li><strong>화면:</strong> 남주가 공사장에서 땀 흘리며 막노동을 하면서도 미소 짓는 모습 교차.</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading"><strong>[4막 &#8211; 3:30 ~ 4:30] 짓밟힌 세상, 그리고 가혹한 선택 (절정부 2)</strong></h4>



<p><em>음악: 거대한 북소리(쿵- 쿵-)와 함께 비극적인 사운드로 전환</em></p>



<ul class="wp-block-list">
<li><strong>[3:30 &#8211; 3:45]</strong> 장소: 어두운 사무실.
<ul class="wp-block-list">
<li><strong>화면:</strong> 새 남자친구가 분노에 차서 책상의 물건을 다 쓸어버린다. 서류(남주 아버지 식당 압류장 등)가 바닥에 흩뿌려진다.</li>
</ul>
</li>



<li><strong>[3:45 &#8211; 4:00]</strong> 장소: 바닷가 시장통 안 낡은 TV 앞.
<ul class="wp-block-list">
<li><strong>화면:</strong> 장바구니를 들고 있던 여주가 TV 뉴스를 보고 굳어버린다. 장바구니가 바닥에 떨어지며 토마토가 으깨진다.</li>



<li><strong>여주 내레이션(VO):</strong> &#8220;내가 네 곁에 있으면&#8230; 네 세상은 무너질 거야.&#8221;</li>
</ul>
</li>



<li><strong>[4:00 &#8211; 4:15]</strong> 장소: 밤, 단칸방 안.
<ul class="wp-block-list">
<li><strong>화면:</strong> 굳은살이 박인 남주의 거친 손. 여주가 소리 없이 오열하며, 남주의 손에 그가 사준 &#8216;싸구려 반지&#8217;를 쥐여준다.</li>
</ul>
</li>



<li><strong>[4:15 &#8211; 4:30]</strong> 장소: 새벽 안개 낀 터미널.
<ul class="wp-block-list">
<li><strong>화면:</strong> 홀로 첫차를 타고 떠나는 여주의 창밖을 보는 텅 빈 눈동자.</li>



<li><strong>여주 내레이션(VO):</strong> &#8220;그러니까 우리&#8230; 이번 생에서는 여기서 끝내자.&#8221;</li>
</ul>
</li>
</ul>



<h4 class="wp-block-heading"><strong>[5막 &#8211; 4:30 ~ 5:00] 에필로그: 영원히 내려오지 못할 곳</strong></h4>



<p><em>음악: 모든 악기가 멈추고, 아주 조용한 피아노 단일 음(딩- 딩-)과 빗소리만 남음</em></p>



<ul class="wp-block-list">
<li><strong>[4:30 &#8211; 4:40]</strong> 장소: 7년 후, 화려하고 넓은 갤러리 중앙.
<ul class="wp-block-list">
<li><strong>화면:</strong> 과거 캠퍼스의 &#8216;조형물&#8217;을 그대로 본뜬 거대한 조각상이 조명을 받고 있다. 슈트를 입은 남주(성공한 모습)가 그 앞에 서 있다.</li>
</ul>
</li>



<li><strong>[4:40 &#8211; 4:50]</strong> 장소: 갤러리 입구.
<ul class="wp-block-list">
<li><strong>화면:</strong> 화려하지만 생기 없는 표정의 여주가 들어선다. 조형물 앞에 선 남주와 멀리서 시선이 얽힌다. (서로 다가가지 못함)</li>
</ul>
</li>



<li><strong>[4:50 &#8211; 4:55]</strong>
<ul class="wp-block-list">
<li><strong>화면:</strong> 조형물 구석에 새겨진 글귀가 클로즈업된다.</li>



<li><strong>[나의 첫 세상이자 마지막 숨이었던, 영원히 내려오지 못할 나의 그곳에게.]</strong></li>
</ul>
</li>



<li><strong>[4:55 &#8211; 5:00]</strong>
<ul class="wp-block-list">
<li><strong>화면:</strong> 여주의 뺨 위로 소리 없이 떨어지는 굵은 눈물. 그리고 멀리서 이를 보며 억지로 입꼬리를 올려 희미하게 웃어 보이는 남주의 얼굴에서 화면 암전(Fade Out).</li>



<li><strong>타이틀 로고 등장</strong> (예: &#8220;너의 세상에서 숨을 쉬다&#8221; 혹은 정해두신 영화 제목)</li>



<li><strong>자막:</strong> 2025년 가을, 개봉.</li>
</ul>
</li>
</ul>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<p><strong><img src="https://s.w.org/images/core/emoji/17.0.2/72x72/1f4a1.png" alt="💡" class="wp-smiley" style="height: 1em; max-height: 1em;" /> 영상 제작 팁 (Veo 3.1 활용 시):</strong></p>



<ol class="wp-block-list">
<li>감정 씬(눈물, 오열, 재회)에서는 프롬프트에 cinematic lighting, ultra detailed eyes, slow motion, hyper-realistic, shallow depth of field 등을 넣으면 훨씬 극적인 연출이 가능합니다.</li>



<li>예고편 편집 시 장면 사이사이에 블랙 화면(Fade in/out)을 짧게 넣고, 거기에 숨소리나 심장 박동 소리를 넣으면 몰입감이 엄청나게 올라갑니다.</li>
</ol>



<h2 class="wp-block-heading">3. 등장인물 (캐릭터 생성)</h2>



<p>개인적으로 몇가지 AI를 사용해보니 <strong>Nano Banana 2</strong>가 가장 마음에 들더군요. <strong>Nano Banana Pro</strong>가 이미지 자체 디테일은 더 좋았지만 드라마틱한 차이는 아니었고, <strong>Banana 2</strong>가 <strong>한글깨짐</strong>없이 이미지가 잘 생성되는것 같았어요 (2026년 4월 기준)</p>



<p>ChatGPT에게 Nano Banana용 프롬프트를 사용해 대학생 새내기  남주 여주 프롬프트를 작성해달라고 요청. <br><br>아래 예시처럼 작성하는게 국룰인가봅니다. 시행착오를 줄이기위해 무작정 따라해줍니다.</p>



<pre class="wp-block-code"><code>&#91;고정 캐릭터 정의]
+
&#91;현재 상황/행동]
+
&#91;촬영 스타일]</code></pre>



<h3 class="wp-block-heading">3-1. 남주 프롬프트</h3>



<pre class="wp-block-code"><code>same person, a 19-year-old Korean male, sharp jawline, monolid eyes, short black hair with side part, slightly tanned skin, calm expression, 

standing in a campus of an University photorealistic,

50mm lens, natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="408" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-a-19-year-old-kor_499106318704984072/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;1b789bf206476a69b9041fe3493f09a8\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;1bf7718e7d5f7a7986f70b442cc6e043f7347f600845b0c6bdd7a70b01cbc2ea11445d9491dd35239ce303a46bd6224dd6bc32e071133c9065c33b1ec24e3729\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;173f2c515fa8de56b85eea62161032cd452c402c01cfc248c27d813057184ce8a1ac0106e405e421face604173f27fb90a800fd067eb85268b1be6f313448410\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;813ffb3eff9fb750f367a3cfd24194f49d319852ca68ad5d0303318871c5d911\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;1b789bf206476a69b9041fe3493f09a8\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;ea4094e4fd59e662f0c09f77d5652f5b44db26591ae9441f1944bc1ea25381bcbb603f5a840b6e943729653f350bada1c848a7eb5a7b9ef8128fc3e956684387\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;db19454a515da8a75e6c58ce4b3630c254e23dc963fc94fb3db3e8d1874511075dd896b43fc6ca526d9841c1ad390d6d008ef3891a30012dbf1e9a15822e0226\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;813ffb3eff9fb750f367a3cfd24194f49d319852ca68ad5d0303318871c5d911\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, a 19-year-old Kor_499106318704984072" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;1b789bf206476a69b9041fe3493f09a8&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;1bf7718e7d5f7a7986f70b442cc6e043f7347f600845b0c6bdd7a70b01cbc2ea11445d9491dd35239ce303a46bd6224dd6bc32e071133c9065c33b1ec24e3729\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;173f2c515fa8de56b85eea62161032cd452c402c01cfc248c27d813057184ce8a1ac0106e405e421face604173f27fb90a800fd067eb85268b1be6f313448410\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;813ffb3eff9fb750f367a3cfd24194f49d319852ca68ad5d0303318871c5d911\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;1b789bf206476a69b9041fe3493f09a8&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;ea4094e4fd59e662f0c09f77d5652f5b44db26591ae9441f1944bc1ea25381bcbb603f5a840b6e943729653f350bada1c848a7eb5a7b9ef8128fc3e956684387\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;db19454a515da8a75e6c58ce4b3630c254e23dc963fc94fb3db3e8d1874511075dd896b43fc6ca526d9841c1ad390d6d008ef3891a30012dbf1e9a15822e0226\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;813ffb3eff9fb750f367a3cfd24194f49d319852ca68ad5d0303318871c5d911\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072-1024x559.jpg" alt="" class="wp-image-408" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-a-19-year-old-Kor_499106318704984072.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">3-2. 여주 프롬프트</h3>



<pre class="wp-block-code"><code>same person, a 19-year-old Korean female, soft oval face, clear pale skin, long straight black hair with natural center part, gentle monolid eyes, small nose, natural lips, minimal makeup, calm and slightly warm expression, 

standing in a university campus, 

photorealistic, 50mm lens, natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="683" data-attachment-id="409" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_use-this-person-as-reference-_499111806595280903/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903.jpg" data-orig-size="1264,843" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;5c8248d596fba9baf8ce1d2dbcb425ac\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;622f65843f18d0215ae587a3e88995c82e20db6c51bf637f7a293d2932171b812747c5b3dfc62ae56acd62e6e2a6ee5506de069c77f1cc068c478e8bfecad767\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;f6b396f831b1d2c8e5a7a42aab9c9793ddacaa944d8cc4e2af8b07fcc3a9b4419826477b895d2f043898348e7f7fd4e60f67b7d82f5bc4bc1ac541ab5e895152\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;8770a7bc7b1d494db394b66b09691f035432735579634ebb705a12fa158c4fed\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;5c8248d596fba9baf8ce1d2dbcb425ac\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;43c1e56349f3638d95b2f1102b2ec507d33fedc33c66a35e7b8bed4505cc9ecb37a652de2b63ad7e5d2a4012f8498a85fae747bbd0ad35d1bdac0c85484a1755\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;563791b99b68efd1ff4a7c9b5a412e4ffe7a021f0c8e1ef805ada76d32299e490671d223558957172ebbdec39a6c6d6b8ba979bf60085e411607a4cfd7ca4590\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;8770a7bc7b1d494db394b66b09691f035432735579634ebb705a12fa158c4fed\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_use this person as reference, _499111806595280903" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;5c8248d596fba9baf8ce1d2dbcb425ac&amp;#8221;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;622f65843f18d0215ae587a3e88995c82e20db6c51bf637f7a293d2932171b812747c5b3dfc62ae56acd62e6e2a6ee5506de069c77f1cc068c478e8bfecad767\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;f6b396f831b1d2c8e5a7a42aab9c9793ddacaa944d8cc4e2af8b07fcc3a9b4419826477b895d2f043898348e7f7fd4e60f67b7d82f5bc4bc1ac541ab5e895152\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;8770a7bc7b1d494db394b66b09691f035432735579634ebb705a12fa158c4fed\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;5c8248d596fba9baf8ce1d2dbcb425ac&amp;#8221;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;43c1e56349f3638d95b2f1102b2ec507d33fedc33c66a35e7b8bed4505cc9ecb37a652de2b63ad7e5d2a4012f8498a85fae747bbd0ad35d1bdac0c85484a1755\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;563791b99b68efd1ff4a7c9b5a412e4ffe7a021f0c8e1ef805ada76d32299e490671d223558957172ebbdec39a6c6d6b8ba979bf60085e411607a4cfd7ca4590\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;8770a7bc7b1d494db394b66b09691f035432735579634ebb705a12fa158c4fed\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903-1024x683.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903-1024x683.jpg" alt="" class="wp-image-409" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903-1024x683.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903-300x200.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903-768x512.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_use-this-person-as-reference-_499111806595280903.jpg 1264w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h3 class="wp-block-heading">3-3. 기타 프롬프트</h3>



<p>첫 이미지 생성 후 이 를 재사용할때, 이미지를 레퍼런스로 업로드후 아래처럼 작성하면 동일 인물 유지 됨.</p>



<pre class="wp-block-code"><code>use this person as reference, same face, same identity, 
now walking on the street at night, neon lights, cinematic</code></pre>



<h4 class="wp-block-heading">3-3-1. 촬영 스타일까지 고정</h4>



<pre class="wp-block-code"><code>same lighting style, same camera angle, same lens</code></pre>



<h3 class="wp-block-heading">3-4. 그 외 등장인물 들</h3>



<p>한 사람 한 사람 프롬프트 작성하는것도 시간이 오래걸리겠죠? 다시 GPT에게 프롬프트를 요청합니다.</p>



<pre class="wp-block-code"><code>다른 등장인물들에대해서 묘사를 할테니 니가 Nano Banana로 만들 프롬프트 작성해줘. 인물의 생김새는 내가 적어준걸가지고 너가 알아서 만들어 줘.

친구1: 19살 남자 대학생, 진지하고 준법정신이 강한친구. 무뚝뚝하지만 고지식하고 항상 바른말을 해주는 친구. 키가 큰 편.

친구2: 19살 남자 대학생, 장난끼가 많고 재밌어서 분위기 메이커 역할을 많이함. 때론 사고도 치지만, 친구가 힘들어하면 공감하고 위로를 잘해줌.

남자 주인공 엄마: 47세, 여자 주택가 근처에있는 작은 식당 주인. 인품 인상이 모두 좋음.

여자 주인공 엄마: 50세, 여자 사업가 남편을 둔 부자 사모님. 학력이 좋고, 다른사람을 깔보는 경향이 있음. 비싼 옷을 평소에 입고다님

여자 주인공 아빠: 53세, 남자 사업가. 엄하고 딸을 위해서 뭐든지 다해주지만 딸이 아무남자나 만나는걸 극도로 싫어함.

여자 주인공의 새 남자친구: 24세, 남자 대학교 졸업반이고, 성적이 우수하며 잘생김, 부모님이 부자라 비싼 외제차를 타고다님. 가부장적이고 사람보다 돈을 우선시함.

여자 주인공의 친구: 19살 여자 대학생, 그냥 평범함.</code></pre>



<h4 class="wp-block-heading">3-4-1. 남주 친구 1</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 19-year-old Korean male, tall height, long and straight posture, sharp rectangular face, defined jawline, short neatly trimmed black hair, thick straight eyebrows, monolid eyes, serious expression, no smile, clean and simple outfit, 

standing in a university campus, 

photorealistic, 50mm lens, natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="410" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499115659247984641/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;ab4ef8960f79f20c6a450518859d4439\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;d5f7d332a78a833047bb3a672dd5f1cb227a593ac25394125f60c4095d6718d387c59c11c98ebcc7a66e2d881ba55492852595c80d398ae9c8c355b5ffa5e2ff\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;7a0025e2ee87f4b99c56139ef456456d0942044c98b8a5841f39879dc952f4eebfa6c33011bd9c45d1f30479d86abc1e5acbf8b8b8fcc0f7cbf8a65320edfd8a\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;efe807836c64a304d5b608afa7c081860d89a9c86a786c8290217fb5253b8d89\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;ab4ef8960f79f20c6a450518859d4439\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;0e2a58abdf4db8437939d86c757f248849a9e640ee9a67f4605f7c004b56a397f7b5a34c60ed0a2d96bc4f302572ea325b86d5a74285509a0c683b4ddbecf342\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;f24279c1a5bcac61db2c15662d6b3fcd79bb537192313ab46f3195cc57122095645d37a950e08fe4c8c2e4b1cca002b0d3b5c752111997119a2c75784f3b1d8b\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;efe807836c64a304d5b608afa7c081860d89a9c86a786c8290217fb5253b8d89\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499115659247984641" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;ab4ef8960f79f20c6a450518859d4439&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;d5f7d332a78a833047bb3a672dd5f1cb227a593ac25394125f60c4095d6718d387c59c11c98ebcc7a66e2d881ba55492852595c80d398ae9c8c355b5ffa5e2ff\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;7a0025e2ee87f4b99c56139ef456456d0942044c98b8a5841f39879dc952f4eebfa6c33011bd9c45d1f30479d86abc1e5acbf8b8b8fcc0f7cbf8a65320edfd8a\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;efe807836c64a304d5b608afa7c081860d89a9c86a786c8290217fb5253b8d89\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;ab4ef8960f79f20c6a450518859d4439&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;0e2a58abdf4db8437939d86c757f248849a9e640ee9a67f4605f7c004b56a397f7b5a34c60ed0a2d96bc4f302572ea325b86d5a74285509a0c683b4ddbecf342\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;f24279c1a5bcac61db2c15662d6b3fcd79bb537192313ab46f3195cc57122095645d37a950e08fe4c8c2e4b1cca002b0d3b5c752111997119a2c75784f3b1d8b\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;efe807836c64a304d5b608afa7c081860d89a9c86a786c8290217fb5253b8d89\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641-1024x559.jpg" alt="" class="wp-image-410" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115659247984641.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">3-4-2. 남주 친구 2</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 19-year-old Korean male, average height, slightly messy short black hair, soft round face, expressive monolid eyes, playful smile, lively and energetic expression, casual outfit, 

standing in a university campus, laughing or joking, 

photorealistic, 50mm lens, natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="411" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499115923526889473/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473.png" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499115923526889473" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473-1024x559.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473-1024x559.png" alt="" class="wp-image-411" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473-1024x559.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473-300x164.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473-768x419.png 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499115923526889473.png 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">3-4-3 남주 엄마 (따뜻한 식당 사장)</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 47-year-old Korean female, warm and kind face, slightly rounded features, short permed black hair, gentle eyes, soft smile, wearing simple and clean clothes, friendly and welcoming expression, 

standing inside a small local restaurant, 

photorealistic, 50mm lens, warm natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="412" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499116301333020681/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;daa61d0276807dd671da6bfb26042c22f9438c4d0c7d3f68766257ea69976461a1b48b42e57a765d49d551bab98bd60db043a462601c12c2e14c7a3d30b75659\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;8293dcb7f18ed18aca3729a3b476bd8af6f4c1c7c68565ea08e9503546968567621fc148551218e57846b0d2d4604f3711397d9104cd9cb33211e44792541ef7\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;430da84f3680b31ff0a9e4e205f5e31285094cf336f470a21b84a27b6052833f\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;8a82c7ed331f939cbae053aea919cb3b9942b461d0bd9455f83fd9d8300e513e6f457c9577c8420585ce35d4ce8febdedad041988bc85ccb82ac77d8b33d76ea\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;3d4b2810ca22546327cf50895d8c715a8f488f63f5b0b3eb0fb1b8c6e82faf343f0e719796c3c82c353bacaa8ab76f9c5009b97189688ea08627e01abc7b5ef5\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;430da84f3680b31ff0a9e4e205f5e31285094cf336f470a21b84a27b6052833f\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499116301333020681" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;daa61d0276807dd671da6bfb26042c22f9438c4d0c7d3f68766257ea69976461a1b48b42e57a765d49d551bab98bd60db043a462601c12c2e14c7a3d30b75659\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;8293dcb7f18ed18aca3729a3b476bd8af6f4c1c7c68565ea08e9503546968567621fc148551218e57846b0d2d4604f3711397d9104cd9cb33211e44792541ef7\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;430da84f3680b31ff0a9e4e205f5e31285094cf336f470a21b84a27b6052833f\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;8a82c7ed331f939cbae053aea919cb3b9942b461d0bd9455f83fd9d8300e513e6f457c9577c8420585ce35d4ce8febdedad041988bc85ccb82ac77d8b33d76ea\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;3d4b2810ca22546327cf50895d8c715a8f488f63f5b0b3eb0fb1b8c6e82faf343f0e719796c3c82c353bacaa8ab76f9c5009b97189688ea08627e01abc7b5ef5\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;430da84f3680b31ff0a9e4e205f5e31285094cf336f470a21b84a27b6052833f\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681-1024x559.jpg" alt="" class="wp-image-412" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116301333020681.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">3-4-4 여주 엄마 (부자 사모님, 차가움)</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 50-year-old Korean female, elegant and sharp facial features, pale flawless skin, styled medium-length hair, cold and confident eyes, subtle but arrogant expression, wearing luxury designer clothes and accessories, 

standing in a high-end interior, 

photorealistic, 50mm lens, soft luxury lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="413" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499116336485535752/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;01f33696a68d861a9a200ff7371e600caac131890c969ed9a4f2900c10b7a80a114f335ef7a987ce25c72daff6e6455834601a04d573097159a79661343a9ee1\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;b7163d90a232cbe2f0f675293255b1847e7a1174f24a81c0f66dc4bae8059808f22f273ade9041d1a49bb91970c788b9f9ae2780477cac9e6d8fc49772d509cb\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;94e0a0be85ea6ed0e68ea2c1e7d9028c5cf20996aa0d022d358963fc96488864\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;94cf459582a6c08d226157e9d77f2958e3f894b867c5cd940f3572dd8d66fd10377d5a299e5fcf734765f87df7ce107ca7e17ad22b65a44960d4e827e65c3c3f\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;669193e494a64668047cb79fcf59fa878f07e1924c8eba45a923f68b2c3329461e3e8b447de7e28406c9b5d4425c9408c4e537bac2b393c053cd35651f190420\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;94e0a0be85ea6ed0e68ea2c1e7d9028c5cf20996aa0d022d358963fc96488864\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499116336485535752" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;01f33696a68d861a9a200ff7371e600caac131890c969ed9a4f2900c10b7a80a114f335ef7a987ce25c72daff6e6455834601a04d573097159a79661343a9ee1\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;b7163d90a232cbe2f0f675293255b1847e7a1174f24a81c0f66dc4bae8059808f22f273ade9041d1a49bb91970c788b9f9ae2780477cac9e6d8fc49772d509cb\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;94e0a0be85ea6ed0e68ea2c1e7d9028c5cf20996aa0d022d358963fc96488864\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;94cf459582a6c08d226157e9d77f2958e3f894b867c5cd940f3572dd8d66fd10377d5a299e5fcf734765f87df7ce107ca7e17ad22b65a44960d4e827e65c3c3f\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;669193e494a64668047cb79fcf59fa878f07e1924c8eba45a923f68b2c3329461e3e8b447de7e28406c9b5d4425c9408c4e537bac2b393c053cd35651f190420\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;94e0a0be85ea6ed0e68ea2c1e7d9028c5cf20996aa0d022d358963fc96488864\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752-1024x559.jpg" alt="" class="wp-image-413" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116336485535752.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>아래 사진은 실수로 여주 엄마 아빠 프롬프트를 둘 다 넣고 생성했는데 진짜 엄마 싱크로율 완전 똑같네요.</p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="414" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499116362553069572/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;c6f3eeb4edfb3792858d70a9a10903df673cec52c7fca4c414781a7d3aba64ecee2b24831d29d65ebc38ee903d8dc489cf9bbbe303806830d06fd13dd81e48d4\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;a51d8b94f306212167ee6943257a765315bd20fb3a836a6c4aeeda4b4a5c9885f7fab7c046056104bb3d6a25effd65db343206aa54207e6434626b818f9571e0\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;826016a4257c5c509c971f7bc56d2046c05b8155075827acd7435c6b3d8b8fb5\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;2ed9bbbece06054dd70c5c721d8b7960697aae5943d1b2e9bc4aa9c3c33696afc8cee6d5f5d95db938b26efefc8ffce95214c4b8003b36d47b69c1fe7245be89\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;eee38f56ff0259a8e13717b363d015602913f0e192d3fe4a0a60962f5de06dbd0bac9ee485a87abc32d93a588bb68c46a9e984984b6bc292285c2e520180153d\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;826016a4257c5c509c971f7bc56d2046c05b8155075827acd7435c6b3d8b8fb5\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499116362553069572" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;c6f3eeb4edfb3792858d70a9a10903df673cec52c7fca4c414781a7d3aba64ecee2b24831d29d65ebc38ee903d8dc489cf9bbbe303806830d06fd13dd81e48d4\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;a51d8b94f306212167ee6943257a765315bd20fb3a836a6c4aeeda4b4a5c9885f7fab7c046056104bb3d6a25effd65db343206aa54207e6434626b818f9571e0\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;826016a4257c5c509c971f7bc56d2046c05b8155075827acd7435c6b3d8b8fb5\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;2ed9bbbece06054dd70c5c721d8b7960697aae5943d1b2e9bc4aa9c3c33696afc8cee6d5f5d95db938b26efefc8ffce95214c4b8003b36d47b69c1fe7245be89\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;eee38f56ff0259a8e13717b363d015602913f0e192d3fe4a0a60962f5de06dbd0bac9ee485a87abc32d93a588bb68c46a9e984984b6bc292285c2e520180153d\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;826016a4257c5c509c971f7bc56d2046c05b8155075827acd7435c6b3d8b8fb5\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572-1024x559.jpg" alt="" class="wp-image-414" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116362553069572.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">3-4-5 여주 아빠 (엄격한 사업가)</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 53-year-old Korean male, sharp and authoritative face, short neatly styled black hair with slight gray, strong jawline, intense eyes, serious expression, wearing a formal suit, 

standing in an office, 

photorealistic, 50mm lens, dramatic lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="417" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499118648532664323/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;f61396d0c390e4ffd7a0e65908f65f9e\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;561cf232c6183af8d43f781d6bc7337e496fcd8d252a14eda2c4ca0b0a593fd6dae0316dc0e462784310f2b4ca03101c39341706a13745b045c7c37ac6190c1b\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;5e1be7e1d063809a407d0cd20665335cff97121dc254e2c0a2aa62697f7ffdfb900a353c0ad5478b087bef6afcf4d7485af4f3cd3b623c813413e42d07b9e369\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;4924d802f8c9340cf3f7ea9379c7adbf1ae9b01d4163967fa44df163e9cccd0b\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;f61396d0c390e4ffd7a0e65908f65f9e\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;d70f9d08cfcea2882e08575f7e980a6134721c836d7985f8f5b41417661d9682c624e64b5eec1b256a4ebf43059f92c1ea92368479d90f0136fa548cf7189cc4\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;ae43b0aca64bc0908209b305939b9e4a2cd8a013450dc5d4218d75e17cf13cc59a9912578f2d860060037f4c2d44b0505a64c6f46b94250bbd4eda9f6972eded\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;4924d802f8c9340cf3f7ea9379c7adbf1ae9b01d4163967fa44df163e9cccd0b\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499118648532664323" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;f61396d0c390e4ffd7a0e65908f65f9e&amp;#8221;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;561cf232c6183af8d43f781d6bc7337e496fcd8d252a14eda2c4ca0b0a593fd6dae0316dc0e462784310f2b4ca03101c39341706a13745b045c7c37ac6190c1b\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;5e1be7e1d063809a407d0cd20665335cff97121dc254e2c0a2aa62697f7ffdfb900a353c0ad5478b087bef6afcf4d7485af4f3cd3b623c813413e42d07b9e369\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;4924d802f8c9340cf3f7ea9379c7adbf1ae9b01d4163967fa44df163e9cccd0b\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;f61396d0c390e4ffd7a0e65908f65f9e&amp;#8221;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;d70f9d08cfcea2882e08575f7e980a6134721c836d7985f8f5b41417661d9682c624e64b5eec1b256a4ebf43059f92c1ea92368479d90f0136fa548cf7189cc4\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;ae43b0aca64bc0908209b305939b9e4a2cd8a013450dc5d4218d75e17cf13cc59a9912578f2d860060037f4c2d44b0505a64c6f46b94250bbd4eda9f6972eded\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;4924d802f8c9340cf3f7ea9379c7adbf1ae9b01d4163967fa44df163e9cccd0b\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323-1024x559.jpg" alt="" class="wp-image-417" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499118648532664323.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="418" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499117486387478529/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;32bedd0ae347c6cec322684d81cbb0cbc2a0d9d7f53f0d5b85ceec957c483efa4d93e8b9ee010bcbb40984afd6914e26128162c621555bdb38a30b11da4d3bff\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;61e695b5c8d73b6c7b48d6b74e424990e023f1e885af0595611b9af9f738e54c69b8057ccab677cb8f48e3bd795620740514f7491ddc8160623c2d2a1650a036\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;2a146868756972ba75527525da9087ceb07508d18fbc32715676c9496c06be1d\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;5000ddb8c38e2ac2216f28f74e3849f081393fe23d88a96967911ca38230599ad972080c889636a5b20060bbebdedbfa11e209069736d75689fc5206093a3745\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;29f5bb6abd1d9d375b1a156608a5636c2e32b627664182e3288b5f3bae3954c3e0e2290ce766a51d01c2a1982c51c8916805d17d8ae0a66d685d428e59aa672b\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;2a146868756972ba75527525da9087ceb07508d18fbc32715676c9496c06be1d\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499117486387478529" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;32bedd0ae347c6cec322684d81cbb0cbc2a0d9d7f53f0d5b85ceec957c483efa4d93e8b9ee010bcbb40984afd6914e26128162c621555bdb38a30b11da4d3bff\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;61e695b5c8d73b6c7b48d6b74e424990e023f1e885af0595611b9af9f738e54c69b8057ccab677cb8f48e3bd795620740514f7491ddc8160623c2d2a1650a036\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;2a146868756972ba75527525da9087ceb07508d18fbc32715676c9496c06be1d\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;5000ddb8c38e2ac2216f28f74e3849f081393fe23d88a96967911ca38230599ad972080c889636a5b20060bbebdedbfa11e209069736d75689fc5206093a3745\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;29f5bb6abd1d9d375b1a156608a5636c2e32b627664182e3288b5f3bae3954c3e0e2290ce766a51d01c2a1982c51c8916805d17d8ae0a66d685d428e59aa672b\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;2a146868756972ba75527525da9087ceb07508d18fbc32715676c9496c06be1d\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529-1024x559.jpg" alt="" class="wp-image-418" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499117486387478529.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">3-4-6 여주 새 남자친구 (능력+외모+가부장)</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 24-year-old Korean male, tall and well-built, handsome face with sharp features, clean styled hair, confident and slightly cold expression, wearing expensive fashionable clothes, luxury watch, 

standing next to a high-end foreign car, 

photorealistic, 50mm lens, natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="415" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499116402193473542/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;ab832585c7f811d4393452b87bee908af5df1dc6ae0ee768ca8257dcca12a62f1319a40225e5714c18aeda6d327dca0f252021899fc581db29773bb5f39c5b43\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;201e25d16e2132f34b24f9e7cf30b2f71c8e77f9f3c54aebd0de4bfe3537cd97bc75b55fc1239be47e7b1a8fff6ab2df25a10d745c0e796a79bdd0d0110517b8\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;b0d99f7a5f79a772ecbc76c929069b5b85314774f00cc9b14a1cb95d9c59c12d\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;626e3fc79db193c693aadfbfae1f7ce3916d8d648b11b33a06b40248e4e7da31bd1e76e7ecb83d92e145374dc698c25fe82a5fd1f3d8e6e9b906e405924e9183\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;29eab461dd82d525536d17b0ddb0d7d1d8d01ca6383dc221da9e3044d64fe2a242b0314a4b420bc0c1c19515fea29936e803d5446911c49ea55be316d1eb34b9\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;b0d99f7a5f79a772ecbc76c929069b5b85314774f00cc9b14a1cb95d9c59c12d\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499116402193473542" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;ab832585c7f811d4393452b87bee908af5df1dc6ae0ee768ca8257dcca12a62f1319a40225e5714c18aeda6d327dca0f252021899fc581db29773bb5f39c5b43\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;201e25d16e2132f34b24f9e7cf30b2f71c8e77f9f3c54aebd0de4bfe3537cd97bc75b55fc1239be47e7b1a8fff6ab2df25a10d745c0e796a79bdd0d0110517b8\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;b0d99f7a5f79a772ecbc76c929069b5b85314774f00cc9b14a1cb95d9c59c12d\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;626e3fc79db193c693aadfbfae1f7ce3916d8d648b11b33a06b40248e4e7da31bd1e76e7ecb83d92e145374dc698c25fe82a5fd1f3d8e6e9b906e405924e9183\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;29eab461dd82d525536d17b0ddb0d7d1d8d01ca6383dc221da9e3044d64fe2a242b0314a4b420bc0c1c19515fea29936e803d5446911c49ea55be316d1eb34b9\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;b0d99f7a5f79a772ecbc76c929069b5b85314774f00cc9b14a1cb95d9c59c12d\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542-1024x559.jpg" alt="" class="wp-image-415" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116402193473542.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<h4 class="wp-block-heading">3-4-7 여주 친구 (평범)</h4>



<pre class="wp-block-code"><code>same person, same face, consistent identity, a 19-year-old Korean female, average appearance, soft natural face, medium-length black hair, minimal makeup, neutral and friendly expression, simple casual outfit, 

standing in a university campus, 

photorealistic, 50mm lens, natural lighting, high detail, cinematic color grading</code></pre>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="559" data-attachment-id="416" data-permalink="https://blog.kggstudio.com/making-a-movie-with-ai-1/hailuo_image_same-person-same-face-consis_499116445625524227/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227.jpg" data-orig-size="1408,768" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;{\&quot;AIGC\&quot;:{\&quot;Label\&quot;:\&quot;1\&quot;,\&quot;ContentProducer\&quot;:\&quot;MiniMax\&quot;,\&quot;ProduceID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode1\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;f1cded1237bf2dbd42f6284b172428f481a84700b2f49851c54001f7271e9fd968846eaa81af3567a23fd79ea324e7e584f0b0a320792b6c46684c8dd980883c\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;f435807809e4cd317120d79e0165b82d964ec43ba49becefb25f3e8049c4277371c6a039b77038feffd04c7e9f2653ebeab28c925b003221a72bf1c8fa01e697\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;cdb3347a84a01468fa69f46af2fefffe6ece177f0ccd046a004821570be9a187\&quot;}]}}\&quot;,\&quot;ContentPropagator\&quot;:\&quot;MiniMax\&quot;,\&quot;PropagateID\&quot;:\&quot;e274d73a8c271a4ac32067a4d954ffe9\&quot;,\&quot;ReservedCode2\&quot;:\&quot;{\&quot;SecurityData\&quot;:{\&quot;Type\&quot;:\&quot;TC260PG\&quot;,\&quot;Version\&quot;:1,\&quot;PubSD\&quot;:[{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;LabelMataData\&quot;},\&quot;Signature\&quot;:\&quot;951619369e8f3bffaa15b9e1183b991e626dba48e7846cc12287534e7b4015625b605f192a5c89150bc66b84d278258ac7eb20eb204a56b311015bacccdcf28e\&quot;},{\&quot;Type\&quot;:\&quot;DS\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;Binding\&quot;,\&quot;BType\&quot;:\&quot;0\&quot;},\&quot;Signature\&quot;:\&quot;1c696488097bb3ee9fcebbf2bd1abde236043b819ca24265b96ee0e8e4a6d38cd54ba0f7d78732e8603dcd4da61b44249298d9fabeae457a0c918b30a9f131b8\&quot;},{\&quot;Type\&quot;:\&quot;PubKey\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.501\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;KeyValue\&quot;:\&quot;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&quot;}],\&quot;Bindings\&quot;:[{\&quot;Type\&quot;:\&quot;Hash\&quot;,\&quot;AlgID\&quot;:\&quot;1.2.156.10197.1.401\&quot;,\&quot;TBSData\&quot;:{\&quot;Type\&quot;:\&quot;\&quot;},\&quot;Signature\&quot;:\&quot;cdb3347a84a01468fa69f46af2fefffe6ece177f0ccd046a004821570be9a187\&quot;}]}}\&quot;}}&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="Hailuo_Image_same person, same face, consis_499116445625524227" data-image-description="" data-image-caption="&lt;p&gt;{&amp;#8220;AIGC&amp;#8221;:{&amp;#8220;Label&amp;#8221;:&amp;#8221;1&amp;#8243;,&amp;#8221;ContentProducer&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;ProduceID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode1&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;f1cded1237bf2dbd42f6284b172428f481a84700b2f49851c54001f7271e9fd968846eaa81af3567a23fd79ea324e7e584f0b0a320792b6c46684c8dd980883c\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;f435807809e4cd317120d79e0165b82d964ec43ba49becefb25f3e8049c4277371c6a039b77038feffd04c7e9f2653ebeab28c925b003221a72bf1c8fa01e697\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;cdb3347a84a01468fa69f46af2fefffe6ece177f0ccd046a004821570be9a187\&amp;#8221;}]}}&amp;#8221;,&amp;#8221;ContentPropagator&amp;#8221;:&amp;#8221;MiniMax&amp;#8221;,&amp;#8221;PropagateID&amp;#8221;:&amp;#8221;e274d73a8c271a4ac32067a4d954ffe9&amp;#8243;,&amp;#8221;ReservedCode2&amp;#8243;:&amp;#8221;{\&amp;#8221;SecurityData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;TC260PG\&amp;#8221;,\&amp;#8221;Version\&amp;#8221;:1,\&amp;#8221;PubSD\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;LabelMataData\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;951619369e8f3bffaa15b9e1183b991e626dba48e7846cc12287534e7b4015625b605f192a5c89150bc66b84d278258ac7eb20eb204a56b311015bacccdcf28e\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;DS\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Binding\&amp;#8221;,\&amp;#8221;BType\&amp;#8221;:\&amp;#8221;0\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;1c696488097bb3ee9fcebbf2bd1abde236043b819ca24265b96ee0e8e4a6d38cd54ba0f7d78732e8603dcd4da61b44249298d9fabeae457a0c918b30a9f131b8\&amp;#8221;},{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;PubKey\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.501\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;KeyValue\&amp;#8221;:\&amp;#8221;00a0b3b0b6a0c9b0c89cab328342af4e8221ec5b40799cbe835ab4251f7b47e4fd\&amp;#8221;}],\&amp;#8221;Bindings\&amp;#8221;:[{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;Hash\&amp;#8221;,\&amp;#8221;AlgID\&amp;#8221;:\&amp;#8221;1.2.156.10197.1.401\&amp;#8221;,\&amp;#8221;TBSData\&amp;#8221;:{\&amp;#8221;Type\&amp;#8221;:\&amp;#8221;\&amp;#8221;},\&amp;#8221;Signature\&amp;#8221;:\&amp;#8221;cdb3347a84a01468fa69f46af2fefffe6ece177f0ccd046a004821570be9a187\&amp;#8221;}]}}&amp;#8221;}}&lt;/p&gt;
" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227-1024x559.jpg" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227-1024x559.jpg" alt="" class="wp-image-416" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227-1024x559.jpg 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227-300x164.jpg 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227-768x419.jpg 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/Hailuo_Image_same-person-same-face-consis_499116445625524227.jpg 1408w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/making-a-movie-with-ai-1/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">406</post-id>	</item>
		<item>
		<title>딥러닝(1) &#8211; 기초 개념</title>
		<link>https://blog.kggstudio.com/deep-learning-1-basic/</link>
					<comments>https://blog.kggstudio.com/deep-learning-1-basic/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Wed, 08 Apr 2026 06:16:37 +0000</pubDate>
				<category><![CDATA[Deep Learning]]></category>
		<category><![CDATA[Dev]]></category>
		<category><![CDATA[딥러닝]]></category>
		<category><![CDATA[딥러닝용어]]></category>
		<category><![CDATA[머신러닝용어]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=387</guid>

					<description><![CDATA[약 인공지능 / 강 인공지능 AI의 종류 딥러닝의 계층 모델 학습방법 지도학습(Supervised Learning) &#8211; 문제과 답(Label)을 알려주고, 유사성을 알아서 파악하라고(훈련) 한뒤 또 다른 문제를 주고 답을 예측하게하는것 비지도학습(Unsupervised Learning) &#8211; 문제만 주고 답을 알아서 찾으라는 형태. 준지도학습(Semi-Supervised Learning) &#8211; 학습데이터에 답이 있는것도 있고 없는것도 상당히 많이 존재할때 사용 강화학습(Reinforcement Learning) &#8211; 문제를 주고 먼저 풀게한뒤 ... <a title="딥러닝(1) &#8211; 기초 개념" class="read-more" href="https://blog.kggstudio.com/deep-learning-1-basic/" aria-label="딥러닝(1) &#8211; 기초 개념에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<p>약 인공지능 / 강 인공지능</p>



<h3 class="wp-block-heading">AI의 종류</h3>



<ul class="wp-block-list">
<li>규칙기반 AI &#8211; 미리 작성된 일련의 규칙이나 알고리즘에 의해 작동되는 AI</li>



<li>머신러닝 &#8211; <strong>데이터를 통해 모델을 학습</strong>시키고, 학습시킨 모델로 <strong>예측(Regression)</strong>이나 <strong>분류(Classification)</strong>를 수행. <strong>데이터의 양과 품질</strong>이 모델 성능에 중요한 영향을 미침. 주로 이미지 및 음성 인식, 자연어 처리, 데이터 기반 예측.</li>



<li>딥러닝 &#8211; <strong>인공 신경망</strong>을 활용하여 <strong>정보를 처리하고 전송하는 방식</strong>을 <strong>시뮬레이션</strong> 하도록 설계된 알고리즘. 주로 이미지 및 음성 인식, 자연어 처리, 자율적 의사결정 등이 있다.</li>
</ul>



<h4 class="wp-block-heading">딥러닝의 계층</h4>



<ul class="wp-block-list">
<li>입력층 (Input Layer): 현실에서 데이터 축적 &gt; 데이터 불러오기 &gt; 데이터 전처리</li>



<li>은닉층 (Hidden Layer):</li>



<li>출력층 (Output Layer): 모델이 예측한 결과를 보는순간</li>
</ul>



<h3 class="wp-block-heading">모델 학습방법</h3>



<p>지도학습(Supervised Learning) &#8211; 문제과 답(Label)을 알려주고, 유사성을 알아서 파악하라고(훈련) 한뒤 또 다른 문제를 주고 답을 예측하게하는것</p>



<ul class="wp-block-list">
<li>회귀(Regression) &#8211; 추세를 예측하는것. 그래프에있는 추세선을 Regression Line 이라고 함.</li>



<li>분류(Classification) &#8211; 말 그대로 분류하는것.</li>
</ul>



<p>비지도학습(Unsupervised Learning) &#8211; 문제만 주고 답을 알아서 찾으라는 형태. </p>



<ul class="wp-block-list">
<li>Clustering &#8211; 입력 데이터를 기준으로 비슷한 특징을 가진 데이터끼리 군집(Cluster)로 나누는 알고리즘. (=그룹화)</li>



<li>Dimension Reduction &#8211; 주요값을 분류하고 불필요한 정보 삭제</li>
</ul>



<p>준지도학습(Semi-Supervised Learning) &#8211; 학습데이터에 답이 있는것도 있고 없는것도 상당히 많이 존재할때 사용</p>



<ul class="wp-block-list">
<li><strong>예시:</strong> 수만 장의 흉부 X-ray 사진이 있을 때, 의사가 일일이 &#8220;이건 폐렴, 이건 정상&#8221;이라고 적어주는 데는 엄청난 시간과 비용이 듭니다.</li>



<li>이때 의사가 라벨링한 <strong>소량의 데이터</strong>와 라벨링되지 않은 <strong>대량의 데이터</strong>를 함께 학습시키면, 적은 비용으로도 지도학습에 가까운 성능을 낼 수 있습니다.</li>
</ul>



<p>강화학습(Reinforcement Learning) &#8211; 문제를 주고 먼저 풀게한뒤 잘했는지 못했는지 feedback 와 reward를 주면 이 feedback과 reward를 통해 학습 함.</p>



<h3 class="wp-block-heading">클러스터링(Clustering)</h3>



<ul class="wp-block-list">
<li>K-means: K개의 mean(평균, 중심) 값을 입력해서 K 갯수 만큼 분류하는 알로리즘. 어떤 중심점과 가까운지를 기준으로 클러스터링하다보니 복잡한 형태에서는 원하는 형태로 그룹화가 되지 않을수도있다.</li>



<li>DBSCAN (밀도 기반 군집화) &#8211; 데이터가 많이 몰려있는 부분을 선 고려하여 그룹화 시킴. 구체적으로 보면 임의의 점 P(Sample)을 기준으로 특정거리 (Epsilon) 내에 점이 M(Min samples) 개 이상이 있다면 하나의 군집으로 간주. 같은 클러스터내의 점P들을 e-이웃(Epsilon-neighborhood)라고 부르며 같은 cluster 안에 이웃이 M개 이상이면 <strong>핵심 샘플</strong> or <strong>핵심 지점</strong> 이라 부른다.</li>
</ul>



<div>
<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="382" data-attachment-id="388" data-permalink="https://blog.kggstudio.com/deep-learning-1-basic/image-63/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5.png" data-orig-size="1339,500" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5-1024x382.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5-1024x382.png" alt="" class="wp-image-388" style="aspect-ratio:2.680697018039023;width:1140px;height:auto" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5-1024x382.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5-300x112.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5-768x287.png 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-5.png 1339w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>
</div>



<p>Outlier Detection (이상치 탐지): 데이터가 일반적인 군집과는 너무 멀리 많이 떨어져서 고립되어있는경우 이를 이상치(outlier)라고 부른다.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" width="1024" height="732" data-attachment-id="389" data-permalink="https://blog.kggstudio.com/deep-learning-1-basic/image-64/#main" data-orig-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6.png" data-orig-size="1042,745" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6-1024x732.png" src="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6-1024x732.png" alt="" class="wp-image-389" style="aspect-ratio:1.3989156189297074;width:613px;height:auto" srcset="https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6-1024x732.png 1024w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6-300x214.png 300w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6-768x549.png 768w, https://blog.kggstudio.com/wp-content/uploads/2026/04/image-6.png 1042w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></figure>



<p>Dimensional Reduction (차원 축소): 고차원 데이터를 저차원인 새로운 데이터로 변환하는것.</p>



<p>Discrete (이산형): 하나씩 셀 수 있는 형태</p>



<h3 class="wp-block-heading">현실에서 사용되는 Transformer의 Decoder 기반 모델</h3>



<p>Transformer를 공장으로 보면 Encoder와 Decoder는 공장안에있는 기계라고 보면 됨. Transformer는 이 기계들을 잘 조합하여 만든 <strong>전체 신경망 아키텍쳐</strong>.</p>



<ul class="wp-block-list">
<li>Transformer: 데이터 간의 관계를 한꺼번에 파악하는 어텐션(Attention) 매커니즘을 핵심으로 하는 신경망 구조</li>



<li>Encoder: 입력된 문장 전체를 읽고 그 의미와 문맥을 수치화된 정보(Vector)로 응축하는 <strong>[이해 도구]</strong></li>



<li>Decoder: 인코더가 만든 정보나 이미 생성했던 단어들을 바탕으로, 다음에 올 가장 적절한 단어를 하나씩 예측해 내뱉는 <strong>[생성 도구]</strong></li>



<li>etc 도구: Transformer에는 Positional Encoding, Feed-Forward Network (FFN), Residual Connectoin, Layer Normalization 등 도구가 더 있다.</li>
</ul>



<p>Attention Macanism (어텐션 매커니즘): 문장 속 단어끼리의 연관성(가중치)를 계산하는 수학적 원리로 <strong>엔진</strong> 역할을 중심으로,<br>Positional Encoding(<strong>번호표</strong>)로 순서를 정하고, FFN(<strong>가공기</strong>)로 의미를 분석하고 Residual &amp; Layer Norm(<strong>안전장치</strong>)로 전체 공정을 안정화 하는 구조로 되어있음.</p>



<p>GPT, LLaMa, PaLM, Gemini, Mistral 등.</p>



<figure class="wp-block-image is-resized"><img decoding="async" src="https://encrypted-tbn1.gstatic.com/licensed-image?q=tbn:ANd9GcQtABSnkZF9VnXIziqmNSA2GzqUnw5T1DevqJPst7taFYUFUSCC6sdoqoVRh3sNA15xEx76AO1bfHw8aRf0dJXxt5j5qw45glR0YSBRcVwnXGCnDf8" alt="" style="aspect-ratio:1.779344101811062;width:1040px;height:auto"/></figure>



<h3 class="wp-block-heading">언어모델 학습방법</h3>



<h4 class="wp-block-heading">Pre-train (사전학습) &#8211; &#8220;세상의 상식을 배우는 의무교육&#8221;</h4>



<p>모델이 아무것도 모르는 상태에서 인터넷에 있는 방대한 데이터를 통째로 읽으면 <strong>언어의 규칙과 상식</strong>을 배우는 단계.</p>



<ul class="wp-block-list">
<li>학습데이터: 위키, 뉴스, 블로그, 소스 코드 등 초대형 단어 뭉치 (Raw Text)</li>



<li>학습방법: <strong>다음에 올 단어 맞추기</strong> 무한 반복</li>



<li>결과: 문법을 깨우치고, &#8220;지구는 둥글다&#8221; 같은 상식을 갖게 되지만, 정작 &#8220;내 질문에 친절하게 대답해&#8221; 같은 특정 목적은 아직 모르는 상태.</li>
</ul>



<h4 class="wp-block-heading">Fine-tuning (미세 조정) &#8211; &#8220;특정 업무를 배우는 전공 연수&#8221;</h4>



<p>사전 학습이 끝난 모델을 가져와서 우리가 원하는 목적을위해 추가로 학습시키는 단계.</p>



<ul class="wp-block-list">
<li>학습데이터: <strong>질문-답변 쌍</strong>이나 <strong>요약문</strong>, <strong>번역문</strong> 처럼 사람이 정성스럽게 많은 소량의 고품질 데이터.</li>



<li>학습방법: <strong>모델에게 이제부터는 질문이 들어오면 이런식으로 대답해야 해</strong> 라고 가이드라인을 준다.</li>



<li>결과: 챗봇이 되거나 (ChatGPT), 법률 상담가, 코딩 도우미 등 전문적인 도구로 변신.</li>
</ul>



<h4 class="wp-block-heading">RLHF(Reinforcement Learning from Human Feedback) &#8211; 사람의 피드백으로 강화 학습</h4>



<p>ChatGPT를 완성시킨 가장 핵심이 되는 기법</p>



<h5 class="wp-block-heading">RLHF가 필요한 이유?</h5>



<ul class="wp-block-list">
<li>사전 학습이 끝난 모델은 지식은 많지만, 유해한 답변을 내놓을 수 있음.</li>



<li>세상에 모든 질문에 정답을 만드는것을 불가능.</li>



<li>인간의 판단(Feedback)을 수식화 하여 모델에게 전달하는 방법으로 해결</li>
</ul>



<h5 class="wp-block-heading">ChatGPT의 보상 모델 활용 방법</h5>



<ul class="wp-block-list">
<li><strong>작동 원리</strong>: 모델이 질문 하나에 4~5개의 답변을 생성 후, Ranking을 정함.</li>



<li><strong>학습</strong>: 이 순서 데이터를 바탕으로 <strong>보상 모델</strong> 학습 시킴. <strong>보상 모델</strong>은 인간이라면 이 답변에 몇접을 줄것인지 예측하는 인간대역.</li>



<li><strong>효과</strong>: 사람은 상당히 적은수의 샘플에만 순위를 매기면 됩니다. 보상 모델이 완성되면, 이후에는 수억개의 데이터에 대해 <strong>인간 대신 자동으로 보상을 계산</strong>해줍니다.</li>



<li><strong>스스로 학습</strong>: 이제 역으로 모델이 보상모델을 상대로 연습게임을 하면서 고득점을 획득하기위한 방법을 연구하면서, 가중치를 개선합니다.</li>
</ul>



<h3 class="wp-block-heading">Machine Learning Architecture Process (머신러닝 아키텍쳐)</h3>



<p>머신러닝은 아래의 플로우 차트 가집니다. 설명은 차트 아래에.</p>



<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">graph LR
    %% 1단계: 데이터 준비
    subgraph Step1 ["데이터 준비"]
        direction TB
        A1[데이터 수집] --> A2[데이터 정제]
        A2 --> A3[데이터 레이블링]
        A3 --> A4[데이터 분석 및 시각화]
    end

    %% 2단계: 모델링
    subgraph Step2 ["모델링"]
        direction TB
        B1[피쳐 엔지니어링] --> B2[모델 설계]
        B2 --> B3[모델 학습]
    end

    %% 3단계: 모델 평가
    subgraph Step3 ["모델 평가"]
        direction TB
        C1[모델 검증] --> C2[성능 개선]
    end

    %% 4단계: 모델 배포
    subgraph Step4 ["모델 배포"]
        direction TB
        D1[배치 인퍼런스] --> D2[온라인 인퍼런스]
        D2 --> D3[엣지 인퍼런스]
    end

    %% 단계 간 가로 연결
    Step1 --> Step2
    Step2 --> Step3
    Step3 --> Step4</pre></div>



<ul class="wp-block-list">
<li>데이터 준비: 학습 시킬 데이터를 만들고 모으는 과정</li>



<li>데이터 정제: 데이터 수집을 통해 확보한 데이터는 일관되지 않고 규칙적이지 않을 가능성이 높아 <strong>데이터 정제(Data Cleansing) 프로세스</strong>를 통해 누락된 데이터를 채우고 불필요한 데이터를 제거함</li>



<li>데이터 레이블링: 해당 데이터가 무엇을 뜻하는시 <strong>라벨</strong>을 달아주고 <strong>태그</strong>를 달아주는 과정. 이 정보를 통해 모델이 학습하므로 잘못된 정보가 있으면 모델 성능이 크게 떨어지게 된다.</li>



<li>데이터 분석 및 시각화: 다양한 값이나 그래프를 통해 <strong>이상치 식별</strong>, <strong>상관관계</strong> 및 <strong>편향</strong> 분석, <strong>가설 수립</strong> 및 변경, <strong>데이터 패턴</strong> 확인.</li>



<li>피쳐 엔지니어링: 특징 선택, 특징 샘플링, 특징 변환(문자열orObject를 숫자로), 특징추출, 특징구성(기존 특징을 활용해 새로운 특징을 생성하는 과정 예: 지출종류가 여러가지있으면 총 지출이라는 특징을 만들어줄수있다)</li>



<li>모델 설계:</li>
</ul>



<h3 class="wp-block-heading">MLOps</h3>



<div class="wp-block-merpress-mermaidjs diagram-source-mermaid"><pre class="mermaid">flowchart TD
    %% 외부 컴포넌트 정의
    Repo[코드 저장소]
    Lake[데이터 레이크]
    Monitor[모니터링]
    Feature[피쳐 스토어]
    Analysis[데이터 분석]
    
    %% 7번 조건을 위한 투명한 중간 기착지 (Junction)
    J(( ))
    style J fill:transparent,stroke:transparent,color:transparent

    %% 중앙 ML 파이프라인 그룹 (세로 정렬)
    subgraph Pipeline [ML 파이프라인]
        direction TB
        D1[데이터 준비] --> D2[모델링] --> D3[모델 평가] --> D4[모델 배포]
    end

    %% 1. 상단: 코드 저장소 &lt;-> 그룹
    Repo &lt;--> Pipeline

    %% 2. 좌측: 데이터 레이크 -> (중간 지점) -> 그룹
    Lake --> Pipeline

    %% 3. 우측: 그룹 &lt;-> 모니터링
    Pipeline --> Monitor

    %% 4. 하단: 그룹 &lt;-> 피쳐 스토어
    Pipeline &lt;--> Feature

    %% 5. 모니터링 -> 데이터 분석
    Monitor --> Analysis

    %% 6. 피쳐 스토어 -> 데이터 분석
    Feature --> Analysis

    %% 7. 데이터 분석 아래쪽 -> 2번 화살표 중간(J)으로 연결
    Analysis --> Lake</pre></div>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/deep-learning-1-basic/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">387</post-id>	</item>
		<item>
		<title>Rust(16) &#8211; Packages, Crates, and Modules</title>
		<link>https://blog.kggstudio.com/rust16-packages-crates-and-modules/</link>
					<comments>https://blog.kggstudio.com/rust16-packages-crates-and-modules/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Sun, 29 Mar 2026 23:20:06 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[mod]]></category>
		<category><![CDATA[pub]]></category>
		<category><![CDATA[use]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=364</guid>

					<description><![CDATA[Rust가 처음이 아닌사람들은 제목의 Packages Crates and Modules 가 각각 것인지 대충은 알것입니다. 프로그램을 만들때 재사용되는 코드들을 정리해서 만들어서 재사용 및 다른사람과 공유함으로써 전체적인 생산성 향상 및 커뮤니티 전체 발전을 위한 개념이라고 보면됩니다. 거창하게 말했지만, 그냥 재사용되는 코드, 가져다 쓸수있는 코드 정도로 이해하면 됩니다. Crates &#60; Packages Crate가 이 코드들의 최소단위 입니다. Rust에서 컴파일할때 컴파일러가 ... <a title="Rust(16) &#8211; Packages, Crates, and Modules" class="read-more" href="https://blog.kggstudio.com/rust16-packages-crates-and-modules/" aria-label="Rust(16) &#8211; Packages, Crates, and Modules에 대해 더 자세히 알아보세요">더 읽기</a>]]></description>
										<content:encoded><![CDATA[
<p>Rust가 처음이 아닌사람들은 제목의 Packages Crates and Modules 가 각각 것인지 대충은 알것입니다. 프로그램을 만들때 재사용되는 코드들을 정리해서 만들어서 재사용 및 다른사람과 공유함으로써 전체적인 생산성 향상 및 커뮤니티 전체 발전을 위한 개념이라고 보면됩니다. 거창하게 말했지만, 그냥 재사용되는 코드, 가져다 쓸수있는 코드 정도로 이해하면 됩니다.</p>



<h3 class="wp-block-heading">Crates &lt; Packages</h3>



<p>Crate가 이 코드들의 최소단위 입니다. Rust에서 컴파일할때 컴파일러가 한번에 보는 범위가 Crate 단위입니다.</p>



<h4 class="wp-block-heading">binary crate and library crate</h4>



<p>Binary crate는 실행가능한 형태로 컴파일되는것이고, Library crate는 실행이 불가능하고 작성시 main 함수가 존재하지 않죠. 우리가 난수생성을위해 사용했던 rand crate가 그런 예시입니다 소스코드에서 import하여 함수를 사용할수있었죠.</p>



<p>또 다른 예시로는 우리가 cargo new project-name 으로 프로젝트를 만들면 ./src/main.rs 파일이 생기는데 이것이 실행가능한 바이너리 crate입니다 안에는 main함수가 존재하죠. 또 루트디렉토리에 ./cargo.toml파일이있는데 이것이 패키지를 관리해주는 파일 입니다. 프로젝트를 만들면 기본적으로 crate 1개와 package 1개가 생성된다고 보시면됩니다.</p>



<p>프로젝트는 기본적으로 패키지를 갖고있다는걸 이해하셨을겁니다. 기본프로젝트에 ./src/lib.rs파일을 만들면 이 패키지는 binary crate와 library crate를 둘 다 가진 패키지가 됩니다. 또 패키지는<strong> ./src/bin 경로에 파일을 둠으로써 여러 binary crates</strong>를 가질수있는것을 기억하고 넘어가겠습니다.</p>



<h3 class="wp-block-heading">Control Scope and Privacy with Modules</h3>



<ul class="wp-block-list">
<li>use: path를 scope로 가져오는 키워드</li>



<li>pub: 아이템을 public화 시키는 키워드</li>



<li>as</li>



<li>external packages</li>



<li>glob operator</li>
</ul>



<h4 class="wp-block-heading">Start from the crate loot</h4>



<p>crate를 컴파일하면, 컴파일러는 먼저 src/main.rs 와 src/lib.rs파일을 먼저 확인합니다. 이를 root files 라고합니다.</p>



<h4 class="wp-block-heading">Declaring modules</h4>



<p>root 파일에서, 새로운 모듈을 선언할수 있습니다. 만약 mod garden; 구문이 있으면, 컴파일러는 해당모듈의 코드를 이구문이 있는곳에서 처리합니다</p>



<ul class="wp-block-list">
<li>src/garden.rs</li>



<li>src/garden/mod.rs</li>
</ul>



<h4 class="wp-block-heading">Declaring submodules</h4>



<p>submodule은 루트파일이 아닌 모듈내에서 사용하면됩니다 예를들어 위에서 언급했던 garden.rs파일에서 mod vegetables 구문을 작성하면 아래 경로를 확인합니다.</p>



<ul class="wp-block-list">
<li>src/garden/vegetables.rs</li>



<li>src/garden/vegetables/mod.rs</li>
</ul>



<h4 class="wp-block-heading">Private vs Public</h4>



<p>기본적으로 module은 private이 기본상태입니다. 사용자가 사용해야하는 함수나 변수에는 pub키워드로 명시가 되어야합니다. C++의 캡슐화개념이라고 이해하면됩니다. 모듈을 사용할때 사용자가 굳이 알필요없는 함수들은 숨겨서 생산성을 올립니다. 쓸필요가 없는 함수들이 다 공개되어있으면 헷갈리기 쉽고 잘못사용할 여지도 늘어납니다.</p>



<h4 class="wp-block-heading">use 키워드</h4>



<p>use키워드는 긴 scope를 생략할때 사용합니다. 예를들어, crate::garden::vegetables::Asparagus 경로처럼 깊은곳에 Asparagus가 있다고 존재하면, use crate::garden::vegetables::Asparagus; 구문을 작성해서 이후로는 Asparagus만 써도 이게 무엇인지 알수있고 사용할수 있습니다.</p>



<pre class="wp-block-code"><code>use crate::garden::vegetables::Asparagus;

pub mod garden;

fn main() {
    let plant = Asparagus {};
    println!("I'm growing {plant:?}!");
}</code></pre>



<h4 class="wp-block-heading">파일구조를 활용한 예시</h4>



<pre class="wp-block-code"><code>backyard
├── Cargo.lock
├── Cargo.toml
└── src
    ├── garden
    │   └── vegetables.rs
    ├── garden.rs
    └── main.rs</code></pre>



<p>위와같은 파일경로가있으면 우리 프로젝트 폴더인 backyard가 메인 crate이름이 됩니다.</p>



<p>경로는 뒷마당 > 가든 > 채소 순서입니다.</p>



<p>루트 crate 즉 backyard crate의 파일인 main.rs에 아래처럼 적습니다. Asparagus를 use 키워드를 사용해 직접 쓸수있도록 해주고, garden crate는 pub으로 불러옵니다</p>



<pre class="wp-block-code"><code>use crate::garden::vegetables::Asparagus;

pub mod garden;

fn main() {
    let plant = Asparagus {};
    println!("I'm growing {plant:?}!");
}</code></pre>



<p>./src/garden.rs 파일에서는 아래 구문을 작성하여 부모 crate (backyard) 에서 vegetable을 사용할수있게 공개합니다.</p>



<pre class="wp-block-code"><code>pub mod vegetables;</code></pre>



<p>./src/garden/vegetables.rs 파일에서는 아래처럼 Asparagus 구조체를 pub으로 선언하여 상위 crates에서 사용할수있게 공개합니다.</p>



<pre class="wp-block-code"><code>#&#91;derive(Debug)]
pub struct Asparagus {}</code></pre>



<p>기본적으로 private 상태이기때문에 곡 해줘야합니다. 멤버변수나 함수도 let fn 키워드 앞에 pub을 붙여서 공개시킬수 있습니다.</p>



<h4 class="wp-block-heading">mod</h4>



<p>위에 예시코드들에서 mod키워드를 사용하고있었는데요. mod는 모듈의 줄임말이고 C++에서의 네임스페이스와 비슷한기능을합니다.</p>



<p>차이점이라면 C++은 클래스차원에서 캡슐화가 존재했는데 Rust에서는 mod, struct, fn , 그리고 let 변수들까지 각각에 공개 비공개 설정을 할수있습니다.</p>



<pre class="wp-block-code"><code>mod front_of_house {
    pub mod hosting {
        pub fn add_to_waitlist() {}
    }
}

fn main() {
    front_of_house::hosting::add_to_waitlist();
}</code></pre>



<h3 class="wp-block-heading">Module path</h3>



<p>지금까지는 하위 crate에있는걸 루트나 상위에서 접근하는 방법을 알아봤는데, 하위에서도 상위로 갈수있습니다.</p>



<ul class="wp-block-list">
<li>crate:: 을사용하면 루트 crate에 접근이가능하고</li>



<li>super:: 은 현재 루트에서 한단계 위로 올라가는겁니다.</li>



<li>self::는 현재모듈인데 평상시엔 쓰지않지만 만약 다른모듈에 같은이름의 아이템이있으면 이걸로 구분이 가능합니다.</li>
</ul>



<h4 class="wp-block-heading">pub for structs and enums</h4>



<p>enum은 pub아니면 쓰기불편하기에 기본적으로 내부 값들이 public상태 하지만 enum 키워드앞에는 pub을 붙여줘야함</p>



<p>struct는 struct자체에만 pub을쓰면안되고 내부 멤버변수나 멤버함수들 모두 기본값이 private이라 pub을 붙여줘야함.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/rust16-packages-crates-and-modules/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">364</post-id>	</item>
		<item>
		<title>Rust(15) &#8211; if let &#038; let else</title>
		<link>https://blog.kggstudio.com/rust15-if-let/</link>
					<comments>https://blog.kggstudio.com/rust15-if-let/#respond</comments>
		
		<dc:creator><![CDATA[TimTam]]></dc:creator>
		<pubDate>Sat, 28 Mar 2026 23:42:02 +0000</pubDate>
				<category><![CDATA[Dev]]></category>
		<category><![CDATA[Rust]]></category>
		<category><![CDATA[if let]]></category>
		<category><![CDATA[rust if let]]></category>
		<guid isPermaLink="false">https://blog.kggstudio.com/?p=360</guid>

					<description><![CDATA[if let match는 enum형 전체를 커버해준다면, if let은 반대로 특정 조건일때만 실행이 되도록 하는 코드입니다. 아래 예제는 config_max 변수가 None이 아니라 Some의 변형이고 그안에 값이 있다면, 그값을 max에 대입해서 블럭안의 코드를 실행시켜라 라는뜻입니다. 즉 u8타입의 정수 3이 됩니다. if let 키워드도 일반 if문처럼 마지막에 else { } 구문을 추가하여 config_max의 다른값을 처리할수있습니다. (optional)]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">if let</h3>



<p>match는 enum형 전체를 커버해준다면, if let은 반대로 특정 조건일때만 실행이 되도록 하는 코드입니다.</p>



<p>아래 예제는 config_max 변수가 None이 아니라 Some의 변형이고 그안에 값이 있다면, 그값을 max에 대입해서 블럭안의 코드를 실행시켜라 라는뜻입니다. 즉 u8타입의 정수 3이 됩니다.</p>



<pre class="wp-block-code"><code>let config_max = Some(3u8);

if let Some(max) = config_max {
    println!("The maximum is configured to be {max}");
}</code></pre>



<p>if let 키워드도 일반 if문처럼 마지막에 else { } 구문을 추가하여 config_max의 다른값을 처리할수있습니다. (optional)</p>
]]></content:encoded>
					
					<wfw:commentRss>https://blog.kggstudio.com/rust15-if-let/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">360</post-id>	</item>
	</channel>
</rss>
