Tích Chập Tách Biệt Theo Chiều Sâu (Depthwise Separable Conv2D) MobileNet
Phép tích chập tiêu chuẩn tốn K2 · Cin · Cout tham số.
Tiến độ của tôi ở bài này
Điểm được lưu vào tài khoản sau khi chấm bài.
Đang tải điểm của bạn…
Kiến thức và chủ đề
Kiến thức tiên quyết: spatial-convolution-2d-from-scratch.
Nội dung đề bài
Mục tiêu kiến thức
- Trong các mô hình chạy trên thiết bị di động/edge (như MobileNet V1/V2):
Phép tích chập tiêu chuẩn tốn K2 · Cin · Cout tham số.
- Phép tích chập tách biệt theo chiều sâu (Depthwise Separable Convolution) phân rã thành 2 bước độc lập:
- Depthwise Convolution: Tích chập không gian K × K trên từng kênh riêng biệt (
groups = in_channels,out_channels = in_channels). - Pointwise Convolution: Tích chập 1 × 1 kết hợp thông tin giữa các kênh (
in_channels \rightarrow out_channels). - Tỷ lệ giảm chi phí tính toán:
K2 · Cin + Cin · CoutK2 · Cin · Cout = 1Cout + 1K2 Với kernel 3 × 3, tính toán giảm khoảng 8 đến 9 lần mà độ chính xác gần như tương đương!
Yêu cầu
Xây dựng lớp DepthwiseSeparableConv2d(torch.nn.Module):
class DepthwiseSeparableConv2d(nn.Module):
def __init__(self, in_channels: int, out_channels: int, kernel_size: int = 3, stride: int = 1, padding: int = 1):
pass
def forward(self, x: torch.Tensor) -> torch.Tensor:
pass- Module phải có 2 thành phần:
self.depthwise:nn.Conv2d(in_channels, in_channels, kernel_size, stride=stride, padding=padding, groups=in_channels, bias=False).self.pointwise:nn.Conv2d(in_channels, out_channels, kernel_size=1, stride=1, padding=0, bias=True).
Input
- Lớp
DepthwiseSeparableConv2d(in_channels,out_channels,kernel_size,stride,padding): Khởi tạo đối tượng với các tham số, trọng số hoặc cấu hình tương ứng.
Output
- Các phương thức của
DepthwiseSeparableConv2d: Trả về kết quả tính toán hoặc cập nhật trạng thái nội bộ của đối tượng.
Ràng buộc
- Thời gian chạy tối đa: 2000ms.
- Giới hạn bộ nhớ: 256MB.
- Dữ liệu đầu vào hợp lệ theo đúng kiểu dữ liệu và miền giá trị được mô tả.
Ví dụ 1
Input
in_c, out_c = (16, 32)
layer = DepthwiseSeparableConv2d(in_channels=in_c, out_channels=out_c, kernel_size=3)
total_params = sum((p.numel() for p in layer.parameters()))
x = torch.randn(2, in_c, 10, 10)
layer(x)Output
Tensor shape: (2, 32, 10, 10), dtype=torch.float32Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Ví dụ 2
Input
layer = DepthwiseSeparableConv2d(in_channels=8, out_channels=16, kernel_size=3, stride=2, padding=1)
x = torch.randn(1, 8, 14, 14)
layer(x)Output
Tensor shape: (1, 16, 7, 7), dtype=torch.float32Giải thích
Hàm/lớp được gọi với các tham số mẫu trên và trả về kết quả số học / kích thước tensor tương ứng theo đúng thiết kế.
Gợi ý và lời giải chỉ mở sau khi bạn bấm Nộp bài. Giáo viên và quản trị viên mở được ngay.
Góp ý & báo lỗi bài tập
Đề bài chưa rõ, test có vấn đề hay bạn có ý tưởng giúp bài tốt hơn? Gửi cho đội ngũ AI Empire nhé — mỗi góp ý đều được đọc.
