[OpenCV] object detection
@hautch À anh vừa đọc bài kia và anh thấy bên dưới bạn ấy có sử dụng một vòng lặp for
để verify lại các contours tìm được phải đảm bảo lớn hơn 30,... ấy.
for i, countour_img in enumerate(countours_img):
for cnt in countour_img:
....
countours_img
là 1 list 19 ô tương ứng với 19 ô đáp án, vòng lặp for chạy qua kiểm tra các ô này nhưng bạn ấy lại chỉ viết if
để kiểm tra, nếu pass thì giá trị answer
có kết quả thôi. Giờ em viết thêm đoạn kiểm tra khi hết vòng lặp for cnt in countour_img:
xem biến answer
có giá trị không, nếu không có giá trị thì tức là không có countours nào thỏa mãn điều kiện là đáp án. Em pass qua ô đấy và ghi kết quả là None thôi em,
Thiếu dữ liệu để train mô hình dịch máy
Vấn đề thiếu dữ liệu gây ảnh hưởng lớn đến hiệu suất/độ chính xác của thuật toán là vấn đề chung cho cả các thuật toán Machine learning và Deep learning(đặc biệt deep learning sẽ cần một lượng lớn dữ liệu). Vậy làm thế nào để giải quyết vấn đề thiếu dữ liệu học cho mô hình học máy, machine learning, deep learning nói chung và bài toán Machine translation nói riêng?
Tổng quát, để đối phó với trường hợp thiếu dữ liệu, chúng sẽ đưa ra được một vài giải pháp(theo quan điểm cá nhân của mình):
- Trước tiên, đặt câu hỏi "Dữ liệu huấn luyện có thể lấy ở đâu, có thể thu thập thêm được không?" Bước đầu tiên phải nghĩ đến là tăng tường dữ liệu bằng việc tìm kiếm và thu thập lượng dữ liệu thực. Ví dụ như bài toán Machine translation bạn hoàn toàn có thể crawl được lượng lớn dữ liệu từ các phim song ngữ, sách song ngữ, etc.
- Câu hỏi tiếp theo, với dạng dữ liệu này, có thể augment data theo những phương thức nào, thư viện nào hỗ trợ không? Bạn làm về ML/DL chắc data augmentation là gì bạn đã biết rõ. Ví dụ như dữ liệu anh thì bạn có thể dùng https://github.com/albumentations-team/albumentations chẳng hạn.
- Nếu dữ liệu của bạn quá ít augment không giúp được nhiều, mình cũng hay nghĩ đến việc tự sinh dữ liệu huấn luyện, câu hỏi đặt ra là có phương pháp nào có thể tổng hợp dữ liệu huấn luyện, fake dữ liệu giả mà giống như dữ liệu thực không? Cái này mình hay làm với bài toán OCR đặc biệt khi động tới dữ liệu ngân hàng thường được cung cấp rất ít và khó tìm kiếm.
- 3 cách trên là tác động về mặt dữ liệu, còn về mặt mô hình/thuật toán thì sao? Câu trả lời là áp dụng transfer learning và representation learning. Transfer learning chính là việc bạn sử dụng các mô hình đã được train sẵn(pre-trained) từ task khác, tương tự với task hiện tại để fine-tune lại mô hình của mình với dữ liệu mới. Hoặc bạn cũng có thể lấy biểu diễn ngôn ngữ từ các mô hình đã được huấn luyện sẵn để làm đầu vào cho mô hình của mình, cái này là representation learning. Ví dụ như thay vì đầu vào của bạn là một câu tiếng anh được embed bằng one-hot-encoding thì bạn có thể dùng các embedding model sẵn cho tiếng Anh như Word2vec, FastText, Elmo, BERT, etc. Vì các pre-trained model cũng đã được học từ rất nhiều dữ liệu trước đó và tìm được biểu diễn ngữ nghĩa tốt hơn cho ngôn ngữ nên nó khá hiệu quả khi transfer sang các task ít dữ liệu.
Đấy là những cách cơ bản mình hay nghĩ đến và thường dùng. Còn thiếu sót gì hay còn những phương pháp nào ngầu hơn xin nhường lại cho các tay to góp ý và mình hóng (
Annotate cho bài toán OCR
Thực tế mình làm cũng ưu tiên sentence level hơn là word level vì tùy dữ liệu đôi khi word level sinh ra nhiều nhập nhằng mà model detect khó đạt được độ chính xác kì vọng hơn là sentence level. Cái này quan điểm cá nhân thôi bạn có thể thử cái mình cho là hợp lý ) )
Việc sử dụng pre-trained để giảm chi phí annotate, thay vì gán nhãn toàn bộ thì chỉ cần sửa, bổ sung, correct lại label cũng hợp lý rồi, mình không có ý kiến gì hơn. Hoặc lượng dữ liệu không quá nhiều thì bạn có thể gán nhãn toàn bộ thì chi phí bỏ ra cũng không chênh nhau mấy, mình thưởng để cho data entry làm hết luôn.
Có thể inference 1 model nhiều lần tại 1 thời điểm không? (pytorch , cpu)
Bạn có thể gộp các request vào và inference theo batch được mà nhỉ, model load 1 lần thôi.
Sử dụng pandas ghi dữ liệu
Bạn ghi dữ liệu vào thư mục nào. Mình đoán chắc kèo là đường dẫn thư mục bạn muốn ghi vào không có quyền ghi rồi. Cái đường dẫn ở trong data.to_csv('đường dẫn') ấy )
Kiểm tra lại nhé ))
ghi dữ liệu
Như bạn bên trên có bảo, bạn có thể sử dụng mode append của ExcelWriter.
writer = ExcelWriter('VFdsdoichieu.xlsx', mode='a')
Đây là tính năng mới, pandas support từ version 0.24.0 nên nếu bạn thấy báo lỗi thì bạn hãy cập nhật bản mới nhất của pandas.
pip install pandas --upgrade
Một cách khác nếu bạn không muốn cập nhật bản mới của pandas thì có thể đọc cả 2 file excel cũ và mới lên, sử dụng
pd.concat([df1, df2])
để concatenate 2 dataframe lại rồi lưu ra file mới.
Hỏi về cách note lại những kiến thức mình biết, nhận được hằng ngày
Note trên Viblo bạn ơi. Cho mình đọc với ) (quaylen)
Viblo có thể làm cái cúp cho hot authors của tháng được không ?
Mình thì không thích cúp, chỉ thích tiền =)) =)) =)) Cứ top1 tháng cho cái thẻ Viettel 100k là ấm tình quân dân rồi ) ) )
Lỗi khi lấy dữ liệu trên web bằng Scapy
Nếu nhìn vào shell cmd của bạn thì mình đoán chỉ là bạn chạy lệnh sai thôi. Để chạy 1 crawler bạn không thể chạy lệnh như 1 file python bình thường được. Kiểu như này chạy sẽ báo lỗi như của bạn:
python -u crawler_spider.py
Để chạy được, bạn phải sử dụng lệnh:
scrapy runspider <đường dẫn tới file crawler_spider.py>
Hoặc bạn mở cmd tại thư mục crawler\crawler\spiders, khi đã ở trong thư mực spiders, bạn chạy lệnh
scrapy crawl crawler -o comments.json
[Hỏi] Áp dụng Yolov3 với bài toán nhận diện ký tự viết tay
Theo mình thì vấn đề nằm ở dữ liệu thật(mặc dù mình biết mục đích của bạn chỉ là cố fit sao cho model học được đúng trên 10 ảnh kia). Thay vì object detect ra 10 class, bạn thử train 1 class để model detect vùng số xong cho qua 1 pre-trained classify xem, mình nghĩ kết quả sẽ khả thi hơn đó. )
Đọc dòng cuối cùng của file txt trong laravel
<?php
$file = "2019-07-26_insert_user_record_for_csv.txt";
$data = file($file);
$line = $data[count($data)-1];
preg_match_all("/\d+/",$line, $matches);
print_r($matches);
Xin hướng đi cho Machine Learning
Mình nghĩ là khó, rất khó )
Keyword: personal size measurement )
Journal: https://www.sciencedirect.com/science/article/pii/S1045926X17302835
App:
Mtailor https://www.mtailor.com/
Sizer https://sizer.me/retail/
3DLook https://3dlook.me/
Tuy bài toán khó nhưng lại rất tiềm năng. Chúc bạn thành công, mình sẽ làm khách hàng đầu tiên ) )
Order pizza, khi có hai người order cùng lúc chiếc bánh pizza cuối cùng tại cửa hàng.
Bài toán này thực sự là một bài toán rất hay. Mình thì không có biết về cái này nhưng mình có 1 số thông tin có vẻ sẽ hữu ích với bạn.
"Làm thế nào để bán chính xác chỉ 10 máy Mac giá chỉ 1/3 giá thị trường cho 50k người đang chờ đặt đồng thời. Đó là một challenge lớn với các hệ thống Ecom. Trong dịp sinh nhật TIKI vừa rồi có hàng trăm mặt hàng giảm giá shock tới hàng chục %, nhiều mặt hàng giảm tới từ 1tr xuống còn gần như cho không 9000 đ. Deal Service là một service mà các engineers TIKI build chỉ trong 2 tuần để đảm bảo consistency dữ liệu. Vừa giải quyết vấn đề performance, vừa đảm bảo chính xác dữ liệu. Nhờ deal service, bộ phận marketing có thể tự tin chạy các chiến dịch marketing lớn mà không lo sợ về độ ổn định của hệ thống. Deal service được based trên một framework mã nguồn mở Gidgo dùng để build các ứng dụng distributed system, high concurrency. Gridgo có được sự đóng góp của nhiều contributor TIKI. https://github.com/gridgo/gridgo "
Nguồn: https://www.facebook.com/NghiaLeMinh/posts/10212920722603818
Lỗi (name 'encoders' is not defined) trong python
Bạn chỉ cần import thêm dòng này là được )
from email import encoders
Rảnh quá mình code lại luôn:
import smtplib
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email import encoders
fromaddr = "thuylinh15kx1@gmail.com"
toaddr = "phamhuuquang196@gmail.com"
msg = MIMEMultipart()
msg["From"] = fromaddr
msg["To"] = toaddr
msg["Subject"] = "Quang Hihi"
body = "kkkkk"
try:
msg.attach(MIMEText(body, "plain"))
filename = "/home/pham.huu.quang/PycharmProjects/Text2Speech/data/train_text/label.csv"
attachment = open(filename, "rb")
part = MIMEBase("application", "octet-stream")
part.set_payload(attachment.read())
encoders.encode_base64(part)
part.add_header("Content-Disposition", "attachment; filename=%s" %filename)
msg.attach(part)
server = smtplib.SMTP("smtp.gmail.com", 587)
server.starttls()
server.login(fromaddr, "password123")
text = msg.as_string()
server.sendmail(fromaddr, toaddr, text)
server.quit()
except Exception as e:
print(e)
Xuất program từ python thanh game androi
Bạn đã dùng thử dùng thằng này chưa? https://python-for-android.readthedocs.io/en/latest/quickstart/
Tài liệu chuyên ngành Hệ thống thông tin?
Thực ra mình thấy bạn chưa cần chuẩn bị tài liệu trước hay gì cả, ở đây mình còn ít slide cũ chương trình đào tạo Hệ thống thông tin của Đại Học Bách Khoa Hà Nội(không đủ), bạn có thể tham khảo trước.
Như mình đã trả lời bạn trước đây, các công việc của HTTT bao gồm thu thập thông tin, xử lý và lưu trữ, truy xuất thông tin:
- Kiến thức cơ bản: Kỹ thuật lập trình, cấu trúc dữ liệu và giải thuật, làm quen với hệ thống Linux.
- Các mô hình phân tích và thiết kế HTTT
- Kiến thức về CSDL, CSDL nâng cao: Tìm hiểu về các hệ quản trị CSDL quan hệ cơ bản(postgresql, mySQL, SQL server,...), cách thiết kế và quản trị CSDL(tối ưu hóa lưu trữ, tối ưu hóa truy vấn, tối ưu hóa index,...), các hệ quản trị CSDL noSQL(mongodb,...), CSDL đa phương tiện,...
- Các hệ phân tán, tính toán phân tán, xử lý dữ liệu phân tán, cân bằng tải(load balancing),...
- Tìm kiếm và trình diễn thông tin, tìm hiểu về các máy tìm kiếm như Elastic search, Solr,...
- Trí tuệ nhân tạo, hệ cơ sở tri thức, hệ trợ giúp quyết định, Machine learning, Data mining, Natural language processing
- etc
Bạn sẽ cần tìm hiểu một cách khái quát hết tất cả những điều trên sau đó sẽ định hướng bản thân đi chuyên sâu theo một mảng nhỏ nào đó.
Mình nghĩ khi bắt đầu 1 lĩnh vực mới(chuyên ngành mới so với bạn) mà bạn chưa rõ về nó, cái bạn cần chưa phải là kiến thức mà là sự định hướng, cái có thể giúp bạn là một mentor tốt chứ không phải 1 đống tại liệu mà bạn có thể bị ngộp trong đấy ngay từ giây phút đầu tiên. Sự định hướng sẽ giúp bạn từ từ đến với chuyên ngành một cách bài bản, từng bước. Việc ngộp kiến thức(cái gì cũng thấy chưa biết, cái gì cũng muốn học) là cực kì nguy hiểm và tốn thời gian trong giai đoạn bắt đầu.
Mà bạn không biết có thể tìm mentor tốt ở đâu, bạn có thể đến với Sun* với vị trí intern ) hoặc liên hệ trực tiếp tới mình =)) =)) =))
Facebook dùng thuật toán gì để xây Feed có thông tin liên quan đến người dùng?
Mấy thuật toán bí mật miếng cơm kiểu này mình nghĩ dev của facebook cũng ít người biết. Tuy nhiên, mình có thể đưa ra 1 phỏng đoán khá base như sau: các bài viết trên newfeed được ranking theo 1 score. Score này chắc chắn lại dựa vào score tương tác của từng cá nhân với người đăng bài, score về mức độ yêu thích của chủ đề bài viết với độ quan tâm của từng cá nhân, thời gian đăng bài, score về mức độ tương tác của những người khác với bài đấy, score về tính chất của bài viết(link chia sẻ youtube, chia sẻ lại bài viết, status,... )
Tóm lại ranking 1 cái score mà cái score đó lại là 1 hàm phức tạp của các score khác mà các ông đấy nghĩ ra. Mình nghĩ thế, nghĩ thì có vẻ đơn giản nhưng rối phết đó.
Covert 1 list to set , Insert DB Mongodb - Python
Mình đoán list data của bạn là thế này đi, thế này mới chuẩn list:
data_list = (12456,"Axxxxjc",25)
keys = ["id", "name", "age"]
data_set = dict(zip(keys, data_list))
Kết quả:
>>> data_set
{'name': 'Axxxxjc', 'age': 25, 'id': 12456}
Lưu ý giá trị của name không để trụi như vậy được, string phải đặt trong dấu ngoặc kép.
CAI DAT PIP SRCAPY
pip install --upgrade setuptools
Bạn upgrade cái setuptools lên thôi
Cách cookpad xử lý tag, bài viết liên quan
Thứ nhất, đầu tiên string của họ ban đầu là "Spaghettis beef (mỳ Ý bò)" tách ra thành "Spaghettis beef mỳ_Ý bò". Đây là bài toán tách từ.
Tham khảo: Pyvi. Dĩ nhiên, muốn tách tốt trong domain này bạn phải train lại với dữ liệu của bạn trong domain đấy. Pyvi được training trên dữ liệu báo chí. Bước này chính là sử dụng AI nhưng đơn giản thôi, không hầm hố gì
Thứ 2, trích xuất các đơn vị đo lường nguyên liệu thì họ dùng regex để tách những cái đó ra. Tham khảo: https://docs.python.org/2/library/re.html