[CV] Dùng ảnh vuông làm input cho training có tăng độ chính xác không?

deep-learning
computer-vision

#1

Mình thấy các mạng CNN lớn nổi tiếng đều dùng ảnh đầu vào là ảnh vuông. Nếu ảnh chữ nhật thì có các bước preprocessing liên quan đến resize như là crop, squash, pad … Câu hỏi mình đặt ra là: Giả dụ là mình có sẵn ảnh chụp hình vuông ngay từ đầu và ko cần qua các bước resize kia nữa thì độ chính xác có tăng lên không? Xin bạn nào trả lời hãy đưa kèm dẫn chứng hoặc giải thích lý thuyết tại sao. Xin cám ơn.


#2

Thuật toán convolution không bị ảnh hưởng bởi kích thước hay tỉ lệ của ảnh nên về mặt lý thuyết thì ko có vấn đề gì.

Mình đã thử train CNN với data có kích thước không đồng nhất thì thấy vẫn train bình thường, độ chính xác ổn, mỗi tội ko thể để batch_size lớn hơn 1 vì trong một batch các sample phải cùng kích cỡ mới gộp thành một tensor được, thành ra ko tận dụng tối đa được tài nguyên GPU.

Thế nên là chọn ra một kích cỡ chuẩn cho toàn bộ data là điều tất yếu. Để tiện cho data augmentation (đôi khi có rotate 90/180 độ) thì ảnh vuông là tiện nhất.

Bên cạnh đó thì kích cỡ ảnh cũng quan trọng. Phần lớn chúng ta hay dùng kích thước là bội số của 2, hoặc ít nhất cũng phải chia hết cho 16 để sau nhiều lần pooling thì nó ko bị ra số lẻ. Nhất là đối với những cấu trúc như Unet, sau khi downsample nó lại phải upsample về đúng kích thước ban đầu thì việc sử dụng ảnh có kích thước bội số của 2 là cần thiết.

Đấy nói chung là dùng ảnh vuông có ích lợi về mặt kỹ thuật. Trong nhiều trường hợp thì 224x224 là đẹp vì nó chia 2 được tới 5 lần, lại ko quá to như 256x256 hay 512x512, ko quá nhỏ như 128x128. Nhưng mình ko thấy nó ko có lý do gì để nó làm ảnh hưởng đến độ chính xác cả.