석사과정 기록/CV

PConv : Partial Convolution

dbwls-log 2026. 7. 8. 18:01

PConv란 ? 

PConv는 Chen et al., "Run, Don't Walk: Chasing Higher FLOPS for Faster Neural Networks" (CVPR 2023)에서 처음 제안된 개념이다. FasterNet라고 부르기도 한다. 

논문 링크 : https://arxiv.org/abs/2303.03667

 

Run, Don't Walk: Chasing Higher FLOPS for Faster Neural Networks

To design fast neural networks, many works have been focusing on reducing the number of floating-point operations (FLOPs). We observe that such reduction in FLOPs, however, does not necessarily lead to a similar level of reduction in latency. This mainly s

arxiv.org

 

 

FLOPs를 줄여도 실제로 빨라지지 않는 문제를 다룬다. 

기존 경량화 모델들은 Depthwise Convolution으로 연산량을 확 줄였다. 하지만 저자들은 연산량이 낮다고 해서 실제 속도(latency)가 빠른건 아니라는 점을 지적하고 있다. 

 

그 이유는 메모리 접근 비용때문이다. DWConv는 채널마다 따로따로 연산하다보니, 연산 자체는 적어도 메모리를 왔다갔다하는 오버헤드가 커서 실제 하드웨어에서는 느려지는 경우가 많았다. 

 

이를 해결하기 위해 모든 채널을 다 계산하지 않고, 일부 채널만 계산하고 나머지는 그대로 두는 방법인 PConv를 만들게 되었다. 

 

 

PConv 동작 방법  

1. 입력 채널 C개 중에서 앞쪽 $C_p$개 채널만 선택한다. (보통은 전체의 1/4정도)
2. 이 $C_p$개 채널에만 일반 Conv를 적용한다. 
3. 나머지 $C-C_p$개 채널은 아무 연산 없이 그대로 통과시킨다. 
4. 두 그룹을 concat해서 원래 채널 수로 복원한다. 

 

수식으로 보면 연산량은 아래와 같다. 

$h × w × k^2 × {c_{p}}^2$

 

이는 일반 Conv인 $h × w × k^2 × c^2$에 비해 보통 1/16 수준으로 훨씬 작아진다. 

 

단 PConv는 단독으로 사용하기에는 문제가 있다. PConv만 사용하게 되면 처리된 채널과 안된 채널이 서로 소통을 하지 못하는 문제가 생길 수 있다. 따라서 바로 뒤에 1x1 PWConv(Pointwise Conv)를 붙여 전체 채널 정보를 다시 섞어주는데, 이를 합쳐 FasterNet Block이라고 하는 것이다. 

 

DWConv는 모든 채널을 각각 따로 계산하기 때문에 연산은 적지만 메모리 접근이 채널 수만큼 흩어진다. 

반면 PConv는 일부 채널만 묶어서 Conv로 계산하기때문에 메모리 접근이 연속적이라 실제 하드웨어에서 훨씬 효율적이다. 

즉, 이론상 연산량 뿐만 아니라 실제 메모리 접근 패턴까지 고려하여 설계한 것이 핵심이다.