# Phân tích số liệu - 20202
## Phân cụm ảnh
Bài toán: phân cụm ảnh bằng cách đo độ similarity của 2 ảnh (độ do tự chọn sau, tùy thuộc dataset) + tối ưu hyper
## Bài toán
* Những bài toán có thể áp :
* pseudo-label: (Thuật toán bán giám sát - xử lý dữ liệu để tăng độ chính xác: https://datawhatnow.com/pseudo-labeling-semi-supervised-learning/) - bỏ ứng dụng này :)
* https://openaccess.thecvf.com/content_ICCV_2017/papers/Chang_Deep_Adaptive_Image_ICCV_2017_paper.pdf
* https://arxiv.org/pdf/2103.09382v1.pdf
* content-based image retrieval:
* https://medwelljournals.com/abstract/?doi=jeasci.2017.8021.8024
* https://pdfs.semanticscholar.org/d849/54a9acc5066476655739eaba2d9f566f3497.pdf
* content-based image annotation:
* https://link.springer.com/chapter/10.1007/978-3-642-05036-7_61
* https://dl.acm.org/doi/10.1145/1180639.1180764
## Flow model:

## Data
* Các bộ dataset có thể chọn:
* OBJ
* CIFAR-100
* Noname of TUAN cx phân loại obj
* Phân cụm mặt người:
* LFW
## Các thuật toán
* **Kmeans**
* **K-Medoids**
* **DBSCAN**
* Graph based
* Deep Clutering
## Lý thuyết evaluate
* Metric đánh giá của model
* Jaccard dùng để validate giữa kết quả phân cụm và label
* Cụ thể Jaccard index là so sánh giữa 2 set và do Kmeans thông thường đã clear giữa các clusters là mỗi điểm chỉ thuộc 1 cluster duy nhất $\rightarrow$ chỉ so sánh giữa labels và clusters.
* Thì ở đây sẽ tạo ra một matrix $M_{rl\times c}$ với $rl, c$ lần lượt là số lượng real_labels và clusters: $M_{ij}=Jaccard(i,j)$ thì nếu thuật toán tốt thì tương ứng với mỗi cluster sẽ là 1 real_label.
* Elbow
* AIC, BIC
* Silhouette
## Experiment
### Mô tả dataset
### Setting
### Result
#### Three study cases
* Dữ liệu:
1. raw data: flatten 1x32x32 to a vector (uncomment GrayScale trong dataloader)
2. Xử lý basic, normalization, 1 vài filter,....
* Dùng qua một vài bộ lọc: sobel, hough, hog
* Qua bộ lọc có thể qua vài thuật toán RCNN,
* Có thể concat với raw image
3. Model to extract feature map
* mỗi bộ data đều có pretrain model public
* Deep Polynomial Neural Network
* Pi Net
* Mỗi loại dữ liệu được sử dụng so sánh với các thuật toán cluster đã được implement
* Trong từng thuật toán cluster, có thể xem xét nhiều metric (có thể tự định nghĩa)
## Những công việc cần xem xét
### Cải thiện độ hiệu quả mô hình
* Đoạn xử lý data - cụ thể là model pretrain
### Cần phần code thể hiện kết quả đối với input là 1 image:
* Bài pseudo-label: cho vô 1 image và đầu ra là label tương ứng
* Bài content-based image retrival: input 1 image và output là N image giống
> Dĩ nhiên phần thể hiện trên chỉ là cách show output khác nhau của 1 quá trình - chỉ ở phần output
### Chuẩn bị thêm 1 vài task cơ bản (phòng trh chưa xử lý kịp để ra kết quả tốt cho image clustering):
* dimension reduction
* https://medium.com/analytics-vidhya/image-compression-using-k-means-clustering-and-principal-component-analysis-in-python-893fd37e8e15
* reduction colors
# DA_20202: 19/8/2021
## Tuấn
- [x] Chạy kết quả với pretrained là Autoencoder
- [x] Ra cái hình Elbow
- [x] Hình N images gần nhất với centroid của mỗi cụm
- [x] Viết ở trong overleaf phần Autoencoder
## Thành
- [x] Chuyển báo cáo sang template của Thành
- [ ] Quy trình
* Kéo dài phần quy trình
## Đạt
- [ ] Quy trình
* Vẽ lại hình
- [x] Mô tả kết quả Jaccard - trực quan hơn
- [x] Sihouette
- [x] DBSCAN
## Tối 19/08/2021 - 11h59 trưa 20/08/2021
#### Dũng
- [ ] Bổ sung Kmeans
- [ ] Viết GMM
- [ ] Silhouette (báo cáo + pull request) (clusters,embedding_each_points)
- [ ] Visualization GMM
- [ ] Note cái experiment
- [ ] GMM so sánh Kmeans dựa trên visulization
#### Tuấn
- [x] Autoencoder trong báo cáo + giải thích tại sao AE có thể tốt hơn raw data
- [x] Visualization mỗi cụm : 5x5 images gần nhất (để dễ nhìn)
- [x] Elbow
- [x] Chốt cái embedding.npy
- [ ] Note cái experiment
- [ ] Input 1 ảnh và load ra các ảnh similar
- [x] Up file embedding of raw data
#### Đạt
- [x] Resnet tại sao tốt hơn (10')
- [x] Ghi phần két quả Jacccard - ĐÃ XONG KẾT QUẢ NHƯNG CHƯA BÌNH LUẬN (1H)
- Do Jaccard là giữa 2 tập mà Kmeans thì clear giữa các cụm nên đoạn này chỉ cần nói khi đặt vô bài toán pseudo-label
- [x] Nhận file npy của Dũng r chạy trên Elbow + Jaccard + Silhouette
- [x] Quy trình
- [x] Kéo dài phần quy trình (20')
- [x] Vẽ lại hình (10')
- [x] Note cái experiment
- [ ] Input 1 ảnh và load ra các ảnh similar
- [ ] Thêm cái hình cho Jaccard matrix
#### Thành
- [ ]
##### Experiment list : so sánh dựa trên bảng và Visulization (lấy code Tuấn)
| STT | Data preprocessing | Thuật toán | Số cụm | Jaccard | Phân công tính các metric |
| ---- | --------------------------- | ---------- | ------------------------------------------------------------ | ------- | ------------------------- |
| 1 | Dữ liệu gốc | Kmeans | a | | Dũng gửi Đạt tính Jaccard |
| 2 | | GMM | | | Dũng gửi Đạt tính Jaccard |
| 3 | Dữ liệu qua pretrained : AE | Kmeans | nếu cụm ở phần dữ liệu gốc chưa được tối ưu thì sử dụng đúng với a | | Tuấn |
| 4 | | GMM | | | Dũng gửi Đạt tính Jaccard |
| 5 | Dữ liệu qua ResNet | Kmeans | | | Đạt |
| 6 | | GMM | | | Dũng gửi Đạt tính Jaccard |